aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib/white_rabbit
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2020-01-23 16:10:22 -0800
committerMartin Braun <martin.braun@ettus.com>2020-01-28 09:35:36 -0800
commitbafa9d95453387814ef25e6b6256ba8db2df612f (patch)
tree39ba24b5b67072d354775272e687796bb511848d /fpga/usrp3/lib/white_rabbit
parent3075b981503002df3115d5f1d0b97d2619ba30f2 (diff)
downloaduhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.gz
uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.bz2
uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.zip
Merge FPGA repository back into UHD repository
The FPGA codebase was removed from the UHD repository in 2014 to reduce the size of the repository. However, over the last half-decade, the split between the repositories has proven more burdensome than it has been helpful. By merging the FPGA code back, it will be possible to create atomic commits that touch both FPGA and UHD codebases. Continuous integration testing is also simplified by merging the repositories, because it was previously difficult to automatically derive the correct UHD branch when testing a feature branch on the FPGA repository. This commit also updates the license files and paths therein. We are therefore merging the repositories again. Future development for FPGA code will happen in the same repository as the UHD host code and MPM code. == Original Codebase and Rebasing == The original FPGA repository will be hosted for the foreseeable future at its original local location: https://github.com/EttusResearch/fpga/ It can be used for bisecting, reference, and a more detailed history. The final commit from said repository to be merged here is 05003794e2da61cabf64dd278c45685a7abad7ec. This commit is tagged as v4.0.0.0-pre-uhd-merge. If you have changes in the FPGA repository that you want to rebase onto the UHD repository, simply run the following commands: - Create a directory to store patches (this should be an empty directory): mkdir ~/patches - Now make sure that your FPGA codebase is based on the same state as the code that was merged: cd src/fpga # Or wherever your FPGA code is stored git rebase v4.0.0.0-pre-uhd-merge Note: The rebase command may look slightly different depending on what exactly you're trying to rebase. - Create a patch set for your changes versus v4.0.0.0-pre-uhd-merge: git format-patch v4.0.0.0-pre-uhd-merge -o ~/patches Note: Make sure that only patches are stored in your output directory. It should otherwise be empty. Make sure that you picked the correct range of commits, and only commits you wanted to rebase were exported as patch files. - Go to the UHD repository and apply the patches: cd src/uhd # Or wherever your UHD repository is stored git am --directory fpga ~/patches/* rm -rf ~/patches # This is for cleanup == Contributors == The following people have contributed mainly to these files (this list is not complete): Co-authored-by: Alex Williams <alex.williams@ni.com> Co-authored-by: Andrej Rode <andrej.rode@ettus.com> Co-authored-by: Ashish Chaudhari <ashish@ettus.com> Co-authored-by: Ben Hilburn <ben.hilburn@ettus.com> Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com> Co-authored-by: Daniel Jepson <daniel.jepson@ni.com> Co-authored-by: Derek Kozel <derek.kozel@ettus.com> Co-authored-by: EJ Kreinar <ej@he360.com> Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com> Co-authored-by: Ian Buckley <ian.buckley@gmail.com> Co-authored-by: Jörg Hofrichter <joerg.hofrichter@ni.com> Co-authored-by: Jon Kiser <jon.kiser@ni.com> Co-authored-by: Josh Blum <josh@joshknows.com> Co-authored-by: Jonathon Pendlum <jonathan.pendlum@ettus.com> Co-authored-by: Martin Braun <martin.braun@ettus.com> Co-authored-by: Matt Ettus <matt@ettus.com> Co-authored-by: Michael West <michael.west@ettus.com> Co-authored-by: Moritz Fischer <moritz.fischer@ettus.com> Co-authored-by: Nick Foster <nick@ettus.com> Co-authored-by: Nicolas Cuervo <nicolas.cuervo@ettus.com> Co-authored-by: Paul Butler <paul.butler@ni.com> Co-authored-by: Paul David <paul.david@ettus.com> Co-authored-by: Ryan Marlow <ryan.marlow@ettus.com> Co-authored-by: Sugandha Gupta <sugandha.gupta@ettus.com> Co-authored-by: Sylvain Munaut <tnt@246tNt.com> Co-authored-by: Trung Tran <trung.tran@ettus.com> Co-authored-by: Vidush Vishwanath <vidush.vishwanath@ettus.com> Co-authored-by: Wade Fife <wade.fife@ettus.com>
Diffstat (limited to 'fpga/usrp3/lib/white_rabbit')
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs176
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.binbin0 -> 320 bytes
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.binbin0 -> 6291904 bytes
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram32768
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram32768
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif32775
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram32768
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif32775
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd359
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd552
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd161
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd96
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd198
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd599
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd623
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd177
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd101
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd123
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd183
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd332
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd164
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd112
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd271
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd418
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd61
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd353
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd205
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd150
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd145
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd61
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd170
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd171
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd168
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd280
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd93
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd130
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd134
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd132
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd87
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd125
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd88
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd674
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd168
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd326
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd261
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd162
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd130
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd262
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd251
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd68
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd235
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd268
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd304
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd233
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd100
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd253
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd131
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd196
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd160
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd427
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd232
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd185
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v102181
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd825
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v20
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v119
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v66
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v115
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v74
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd46
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v320
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v76
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd66
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v138
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v432
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd184
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd105
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd232
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v167
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v2
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd99
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd315
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd229
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd190
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd89
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd323
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd129
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd241
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd144
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd154
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd2130
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd220
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd265
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd229
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd307
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd290
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd353
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd161
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd209
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd187
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd469
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd930
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd635
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd281
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd127
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd128
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd129
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd371
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd627
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd261
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd205
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd321
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd404
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd271
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd171
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd515
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd765
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd858
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd153
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd449
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd226
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd280
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd193
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd424
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd152
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd267
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd723
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd235
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd251
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd352
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd546
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd514
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd305
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd861
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd1001
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd533
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd602
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd145
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd817
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd186
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd820
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd518
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd162
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd31
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd180
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd939
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd207
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd809
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd244
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd142
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd106
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd141
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd332
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd201
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd706
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd191
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd362
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd677
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd231
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd597
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd125
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd467
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd90
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd1157
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd134
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd376
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd520
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd253
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd975
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd769
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd448
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd132
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd491
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd1013
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd342
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd521
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd803
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd505
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd230
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd137
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd712
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd816
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd192
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd1095
-rw-r--r--fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt2
185 files changed, 324094 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs
new file mode 100644
index 000000000..fce6adefa
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/Makefile.srcs
@@ -0,0 +1,176 @@
+#
+# Copyright 2018 Ettus Research LLC
+#
+
+##################################################
+# White Rabbit Sources
+##################################################
+WHITE_RABBIT_SRCS = $(abspath $(addprefix $(BASE_DIR)/../lib/white_rabbit/wr_cores_v4_2/, \
+platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd \
+platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd \
+platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd \
+platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd \
+ip_cores/general-cores/modules/common/gc_reset.vhd \
+ip_cores/general-cores/modules/genrams/genram_pkg.vhd \
+ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd \
+modules/fabric/wr_fabric_pkg.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd \
+modules/wr_streamers/escape_detector.vhd \
+modules/wr_streamers/dropping_buffer.vhd \
+modules/wr_streamers/escape_inserter.vhd \
+modules/wr_softpll_ng/softpll_pkg.vhd \
+modules/wrc_core/wrc_diags_pkg.vhd \
+modules/wrc_core/wrc_syscon_pkg.vhd \
+modules/wr_endpoint/endpoint_pkg.vhd \
+modules/wrc_core/wrcore_pkg.vhd \
+modules/wr_streamers/streamers_pkg.vhd \
+modules/wr_streamers/xrx_streamers_stats.vhd \
+modules/wr_streamers/xtx_streamers_stats.vhd \
+modules/timing/pulse_stamper.vhd \
+modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd \
+modules/wr_streamers/streamers_priv_pkg.vhd \
+modules/wr_streamers/xrtx_streamers_stats.vhd \
+modules/wr_streamers/wr_streamers_wb.vhd \
+modules/wr_pps_gen/pps_gen_wb.vhd \
+ip_cores/general-cores/modules/common/gencores_pkg.vhd \
+ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd \
+modules/wr_softpll_ng/spll_aligner.vhd \
+modules/wr_endpoint/ep_registers_pkg.vhd \
+modules/wr_endpoint/endpoint_private_pkg.vhd \
+modules/wr_endpoint/ep_leds_controller.vhd \
+modules/wr_endpoint/ep_sync_detect.vhd \
+modules/wr_endpoint/ep_sync_detect_16bit.vhd \
+ip_cores/general-cores/modules/common/gc_extend_pulse.vhd \
+modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd \
+modules/wr_endpoint/ep_autonegotiation.vhd \
+modules/wr_endpoint/ep_tx_packet_injection.vhd \
+modules/wr_endpoint/ep_tx_inject_ctrl.vhd \
+modules/wr_endpoint/ep_tx_header_processor.vhd \
+modules/wr_endpoint/ep_rx_vlan_unit.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd \
+ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd \
+ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd \
+ip_cores/general-cores/modules/common/gc_sync_register.vhd \
+modules/wr_endpoint/ep_rx_oob_insert.vhd \
+ip_cores/general-cores/modules/common/gc_crc_gen.vhd \
+modules/wr_endpoint/ep_crc32_pkg.vhd \
+modules/wr_endpoint/ep_rx_crc_size_check.vhd \
+modules/wr_endpoint/ep_rtu_header_extract.vhd \
+modules/wr_endpoint/ep_rx_status_reg_insert.vhd \
+modules/wr_endpoint/ep_rx_wb_master.vhd \
+modules/wr_endpoint/ep_ts_counter.vhd \
+modules/wr_endpoint/ep_wishbone_controller.vhd \
+ip_cores/general-cores/modules/common/gc_sync_ffs.vhd \
+ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd \
+ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd \
+modules/wr_mini_nic/minic_wbgen2_pkg.vhd \
+modules/wr_mini_nic/minic_wb_slave.vhd \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v \
+ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd \
+ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd \
+ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd \
+ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v \
+modules/wrc_core/wrc_syscon_wb.vhd \
+ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd \
+ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd \
+ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v \
+modules/wrc_core/wrc_diags_wb.vhd \
+ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd \
+ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd \
+ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd \
+ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd \
+modules/fabric/xwrf_mux.vhd \
+ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd \
+ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd \
+ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd \
+board/eeprom/sfp_eeprom.vhd \
+platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd \
+platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd \
+platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd \
+modules/wr_tbi_phy/disparity_gen_pkg.vhd \
+platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd \
+platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd \
+platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd \
+platform/xilinx/wr_xilinx_pkg.vhd \
+platform/xilinx/xwrc_platform_xilinx.vhd \
+modules/fabric/xwb_fabric_sink.vhd \
+modules/wr_streamers/xrx_streamer.vhd \
+modules/fabric/xwb_fabric_source.vhd \
+modules/wr_streamers/xtx_streamer.vhd \
+modules/wr_streamers/xwr_streamers.vhd \
+modules/wr_pps_gen/wr_pps_gen.vhd \
+modules/wr_pps_gen/xwr_pps_gen.vhd \
+ip_cores/general-cores/modules/common/gc_frequency_meter.vhd \
+ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd \
+modules/wr_softpll_ng/spll_wbgen2_pkg.vhd \
+modules/wr_softpll_ng/spll_wb_slave.vhd \
+modules/timing/dmtd_with_deglitcher.vhd \
+modules/timing/dmtd_phase_meas.vhd \
+modules/wr_endpoint/ep_rx_pcs_8bit.vhd \
+modules/wr_endpoint/ep_rx_pcs_16bit.vhd \
+modules/wr_endpoint/ep_tx_vlan_unit.vhd \
+modules/wr_endpoint/ep_tx_crc_inserter.vhd \
+modules/wr_endpoint/ep_tx_path.vhd \
+modules/wr_endpoint/ep_rx_buffer.vhd \
+modules/wr_endpoint/ep_packet_filter.vhd \
+modules/wr_endpoint/ep_rx_early_address_match.vhd \
+ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd \
+ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd \
+modules/wr_endpoint/ep_clock_alignment_fifo.vhd \
+modules/wr_endpoint/ep_rx_path.vhd \
+modules/wr_endpoint/ep_timestamping_unit.vhd \
+modules/wr_mini_nic/wr_mini_nic.vhd \
+modules/wr_mini_nic/xwr_mini_nic.vhd \
+ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd \
+ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd \
+ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd \
+ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd \
+modules/wrc_core/xwrc_diags_wb.vhd \
+modules/wrc_core/wrc_periph.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd \
+modules/wr_softpll_ng/wr_softpll_ng.vhd \
+modules/wr_softpll_ng/xwr_softpll_ng.vhd \
+modules/wr_endpoint/ep_tx_pcs_8bit.vhd \
+modules/wr_endpoint/ep_tx_pcs_16bit.vhd \
+modules/wr_endpoint/ep_1000basex_pcs.vhd \
+modules/wr_endpoint/wr_endpoint.vhd \
+modules/wr_endpoint/xwr_endpoint.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd \
+ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd \
+ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd \
+modules/wrc_core/wr_core.vhd \
+modules/wrc_core/xwr_core.vhd \
+board/common/wr_board_pkg.vhd \
+board/common/xwrc_board_common.vhd \
+))
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin
new file mode 100644
index 000000000..825733426
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-empty-i2c-eeprom.bin
Binary files differ
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin
new file mode 100644
index 000000000..0da8a2b8e
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/sdbfs/sdbfs-svec-flash.bin
Binary files differ
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram
new file mode 100644
index 000000000..05fabcd35
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy16.bram
@@ -0,0 +1,32768 @@
+10011000000000000000000000000000
+11010000000000000000000000000000
+11010000001000000000000000000000
+01111000000000010000000000000000
+00111000001000010000000000000000
+11010000111000010000000000000000
+11111000000000000000000000111010
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01010111010100100101000001000011
+00101101001011010010110100101101
+00000001001000110100010101100111
+10001001101010111100110111101111
+00000000000000011011111111001000
+00000000000000000000000000000000
+00000000000000011001100000011000
+00000000000000011010110101110100
+00000000000000000000000000000000
+00000010000101000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01011011100111010000000000000000
+11111000000000000000000000011110
+00110100000000010000000000000010
+11111000000000000101000110011011
+11100000000000000000000000101110
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+10011000000000000000000000000000
+01111000000111000000000000000001
+00111011100111001111111111111100
+01111000000000010000000000000001
+00111000001000011011000010100000
+00110100000000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001010111000
+11001000011000010001100000000000
+11111000000000000101100000000111
+00110100000000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+11111000000000000000000100001001
+11100000000000000000000000000000
+00110111100111001111111111000100
+01011011100000010000000000000100
+01011011100000100000000000001000
+01011011100000110000000000001100
+01011011100001000000000000010000
+01011011100001010000000000010100
+01011011100001100000000000011000
+01011011100001110000000000011100
+01011011100010000000000000100000
+01011011100010010000000000100100
+01011011100010100000000000101000
+01011011100111100000000000110100
+01011011100111110000000000111000
+00101011100000010000000000111100
+01011011100000010000000000110000
+10111011100000000000100000000000
+00110100001000010000000000111100
+01011011100000010000000000101100
+11000011101000000000000000000000
+00101011100000010000000000000100
+00101011100000100000000000001000
+00101011100000110000000000001100
+00101011100001000000000000010000
+00101011100001010000000000010100
+00101011100001100000000000011000
+00101011100001110000000000011100
+00101011100010000000000000100000
+00101011100010010000000000100100
+00101011100010100000000000101000
+00101011100111010000000000110000
+00101011100111100000000000110100
+00101011100111110000000000111000
+00101011100111000000000000101100
+00110100000000000000000000000000
+11000011110000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000001000010000000000000000
+11000011101000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00111000010000100000000000000001
+11010000001000100000000000000000
+00111000001000010000000000000001
+11010000000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011110110000011
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000011000111011000010110100
+00111000010000101011000010111000
+00101000011001000000000000000000
+00101000010001010000000000000000
+01011000011000010000000000000000
+00110100000000110000001111101000
+11001000101001000010000000000000
+10110100100000010010000000000000
+01011000010001000000000000000000
+00110100000000010000000000000000
+01010000011001000000000000001001
+01111000000000010000000000000000
+00111000001000010000000010100000
+00110100100001001111110000011000
+01011000010001000000000000000000
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011110101101000
+01111000000000100000000000000001
+00111000010000101011000010110100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000000100
+11111000000000000011111011011111
+11111000000000000011100001001101
+01111000000000010000000000000001
+00111000001000010110011100010000
+11111000000000000011011101101111
+00110100000000010000000000000001
+11111000000000000011110101000111
+01111000000000010000000000000001
+00111000001000011100001001110100
+11111000000000000011110100101001
+11111000000000000100100000001000
+11111000000000000100101000101101
+01111000000000010000000000000001
+00111000001000011100000111100000
+01011000001000000000000000000000
+11111000000000000100100101010011
+11111000000000000100000001010100
+00110100000000010000000000000000
+11111000000000000011101101101100
+00110100000000010000000000000000
+00110100000000100000000001010000
+11111000000000000100010000000011
+00110111100000100000000000001000
+00110100000000010000000000000000
+11111000000000000100010011001100
+00110100000000101111111111111111
+01011100001000100000000000000110
+01111000000000010000000000000001
+00111000001000010110011100101100
+11111000000000000011011101010110
+00110100000000010000000000100010
+00110011100000010000000000001000
+01000011100001000000000000001010
+01000011100001010000000000001011
+01000011100001100000000000001100
+01000011100001110000000000001101
+01000011100000110000000000001001
+01000011100000100000000000001000
+01111000000000010000000000000001
+00111000001000010110011101010000
+11111000000000000011011101001011
+11111000000000000011110110110101
+00110111100000010000000000001000
+11111000000000000011100101010000
+00110100000000010000000011001000
+11111000000000000011110100110111
+00110100000000100000000000000001
+00110100000000010000000000000001
+11111000000000000011100010011101
+11111000000000000011101110000000
+11111000000000000100000111100011
+11111000000000000000010000101110
+01111000000000100000000000000001
+00111000010000101001011011110000
+00110100000000010000000000000010
+11111000000000000011111110111001
+11111000000000000101000110110001
+11111000000000000010101101010001
+11111000000000000010001100100010
+01111000000000110000000000000001
+00111000011000111000111010110100
+01111000000000010000000000000001
+00101000011000100000000000000000
+00111000001000011011000010100000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011111100000000000
+01011000001000100000000000000000
+00110100000000010000000000000011
+11111000000000000000010001111101
+11111000000000000000010000110000
+01111000000000100000000000000001
+00111000010000101011000010101000
+00110100000000010000000000000000
+11111000000000000100001000011010
+11111000000000000011110100010100
+01111000000000100000000000000001
+00111000010000101011000010101100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000010000000000000000
+11111000000000000011100010101001
+10111000001000000101100000000000
+01111000000000010000000000000001
+00111000001000011011000010110000
+00101000001001000000000000000000
+01111101011000100000000000000000
+01100100100000110000000000000000
+10100000010000110001100000000000
+01000100011000000000000000001101
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00110100000000100000000000000010
+01011000001000100000000000000100
+11111000000000000011110111011100
+11111000000000000000010000010001
+01111000000000010000000000000001
+00111000001000011100001010010100
+00110100000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000010100
+01100101011000010000000000000000
+01111100100001000000000000000000
+10100000001001000000100000000000
+01000100001000110000000000010010
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00110100000000100000000000000010
+01011000001000100000000000001000
+01111000000000010000000000000001
+00111000001000011100001010010100
+01011000001000100000000000000000
+11111000000000000000010000100101
+00110100000000010000000000000010
+00110100000000100000000000000000
+00110100000000110000000000000001
+11111000000000000101000101111001
+00110100000000010000000000000000
+11111000000000000100001000010111
+00110100000000010000000000000001
+11100000000000000000000000001000
+11111100010000010001000000000000
+01111000000000010000000000000001
+11001000000000100001000000000000
+00111000001000011100001010010100
+00100000010000100000000000000011
+01011000001000100000000000000000
+00110100000000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000010110000
+01011000010010110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011000010100000
+00101000001000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000001111
+11111000000000000001111111111100
+10111000001000000101100000000000
+11111000000000000011011111100100
+00110100000000100000000000011011
+01000100001000100000000000000101
+01111000000000100000000000000001
+00111000010000101001011011101000
+00101000010000010000000000000000
+01011100001000000000000000001000
+11111000000000000010001010111101
+01111000000000100000000000000001
+00111000010000101011000010100000
+01011000010000000000000000000000
+11100000000000000000000000000011
+11111000000000000010001011000010
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+11111000000000000101001111100110
+00111001011010111010111011011100
+00111001100011001011000010011100
+11100000000000000000000000000101
+00101001011000010000000000001000
+01000100001000000000000000000010
+11011000001000000000000000000000
+00110101011010110000000000100000
+01010101100010111111111111111100
+01111000000010110000000000000001
+01111000000000010000000000000001
+00111001011010111010111011011100
+01111000000101000000000000000001
+01111000000100000000000000000001
+00111000001000011000111010111000
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000100100000000000000001
+01111000000100010000000000000001
+00111010100101001011000010011100
+00111010000100001011000010101000
+00101000001100110000000000000000
+00111001111011111011000010101100
+00111001110011101011000010100100
+00111010010100100110011110111000
+00111010001100010110011110000100
+10111001011000001010100000000000
+11100000000000000000000000111100
+00101001011000010000000000001100
+01011100001000000000000000000101
+00101001011000010000000000010000
+00110100001000010000000000000001
+01011001011000010000000000010000
+11100000000000000000000000001011
+00101001011000100000000000000100
+01000100010000000000000000000011
+00101000010000100000000000000000
+01000100010000000000000000000111
+11011000001000000000000000000000
+00101001011000100000000000010000
+10111001011000000110000000000000
+10110100010000010001000000000000
+01011001011000100000000000010000
+01011100001000000000000000000010
+10111010101000000110000000000000
+00110111100000100000000000111000
+00110100000000010000000000000000
+11111000000000000100000101111010
+11111000000000000011110001110100
+10111000001000001011000000000000
+00101010000000100000000000000000
+00101011100000010000000000111000
+11001000001000100001000000000000
+01001100010000000000000000000010
+10110100010100110001000000000000
+00101001100000110000000000011000
+10110100010000110001000000000000
+01011001100000100000000000011000
+01010010011000100000000000000110
+11001000010100110001000000000000
+01011001100000100000000000011000
+00101001100000100000000000010100
+00110100010000100000000000000001
+01011001100000100000000000010100
+00101001111011010000000000000000
+01011010000000010000000000000000
+11001010110011010110100000000000
+01001101101000000000000000000010
+00110101101011010000001111101000
+00101001100000110000000000011100
+01010000011011010000000000001000
+00101001110000010000000000000000
+01000100001000000000000000000101
+00101001100000100000000000000000
+10111010001000000000100000000000
+10111001101000000010000000000000
+11111000000000000011011001101100
+01011001100011010000000000011100
+00101001110000010000000000000000
+01000100001000000000000000000110
+01010000001011010000000000000101
+00101001100000100000000000000000
+10111010010000000000100000000000
+10111001101000000001100000000000
+11111000000000000011011001100100
+01011001111101100000000000000000
+00110101011010110000000000100000
+01010110100010111111111111000101
+11111000000000000101001110001101
+10111010101000000101100000000000
+11100011111111111111111111111101
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01011011100000110000000000101100
+01111000000000110000000000000001
+00111000011000111011000010111100
+01011011100000100000000000101000
+01011011100001000000000000110000
+01011011100001010000000000110100
+01011011100001100000000000111000
+01011011100001110000000000111100
+01011011100010000000000001000000
+00101000011011010000000000000000
+10111000001000000101100000000000
+10111000010000000111000000000000
+00110100000000110000000000000000
+01000100001000000000000000000010
+00101000001000110000000000011100
+10111000011011010001100000000000
+00000000011000110000000000011100
+01000100011000000000000000011110
+01111000000011000000000000000001
+00111001100011001011000010111100
+00111001101000010000000000000001
+01011001100000010000000000000000
+00101001011000010000000000111000
+00110111100000100000000000011000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+01011001100011010000000000000000
+00101011100001000000000000100000
+00101111100000110000000000100100
+00101001011010110000001111010100
+00111100100001000000000000010000
+01111000000011000000000000000001
+10111000100000110000100000000000
+01111000000000110000000000000001
+00111000011000111000111010111100
+00101000011000100000000000000000
+00111001100011000110100000000100
+11111000000000000101010100110111
+00101011100000110000000000011100
+10111000001000000010000000000000
+10111001011000000001000000000000
+10111001100000000000100000000000
+11111000000000000011011000101100
+10111001110000000000100000000000
+00110111100000100000000000101100
+11111000000000000011011000000111
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000010100000000000
+01011100011000000000000000000101
+01111000000000100000000000000001
+00111000010000100110100000100000
+10111000101000000001100000000000
+11100000000000000000000000001100
+00110100000000100000000000000001
+01011100011000100000000000000110
+01111000000000100000000000000001
+00111000010000100110100000111100
+10111000101000000001100000000000
+00101000001001000000000000001000
+11100000000000000000000000000101
+00101000001001000000000000000100
+01111000000000100000000000000001
+00111000010000100110100001010100
+10111000101000000001100000000000
+11111011111111111111111110110001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100111010000000000001100
+10111000001000000101100000000000
+10111000010000000111000000000000
+10111000011000000110100000000000
+01001100000000110000000010110110
+01000000010000110000000000000000
+00101000001010000000000100001100
+00101000001010010000000100001000
+00100000011000110000000000001111
+00101000001001100000000100000100
+01011011100000110000000000000100
+00001000011000110000000000001100
+01111000000000100000000000000001
+00000001000001110000000000010000
+00111000010000101001011101011000
+00100001000010001111111111111111
+10110100010000110001000000000000
+00001001000010000000001111101000
+00101000010000100000000000000000
+00111101001010010000000000010000
+01111000000001000000000000000001
+00000001000010000000000000010000
+01011011100000100000000000001000
+00110100000000110000000000000001
+00110100000000100000000000000101
+00111000100001000110100001101100
+10111001101000000010100000000000
+10111001001001110011100000000000
+11111000000000000000000010100010
+00110100000000010000000000100001
+01001100001011010000000010011100
+01000001110000010000000000000000
+00110100000000100000000000001101
+00100000001000010000000000001111
+01001000001000100000000000010000
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101000111110010000
+10110100010000010001000000000000
+00101000010000010000000000000000
+01001000001011010000000000001010
+01000001110000100000000000000001
+00110100000000010000000000000010
+00100000010000100000000000001111
+01011100010000010000000000000110
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11111000000000000001011111010010
+01000100001000000000000000000011
+00110100000011010000000000000000
+00110100000011100000000000000000
+00101001011011000000000000010000
+01011001011000000000000000001100
+00101001011000010000000000000000
+01000101100000000000000000000011
+00101001100000100000000000000000
+01000100010000010000000000010011
+00110100000000100000000000000001
+01111000000011000000000000000001
+01011001011000100000000000001100
+00111001100011001001110110011000
+11100000000000000000000000000110
+01011100010000010000000000000100
+01011001011011000000000000010000
+01011101100000000000000000001011
+11100000000000000000000000000100
+00110101100011000000000000001100
+00101001100000100000000000000000
+01011100010000001111111111111010
+00101001011000100000001111010100
+01111000000000010000000000000001
+00111000001000010110100010011100
+11111000000000000011010110111010
+00110100000000010010011100010000
+11100000000000000000000001100110
+01011001011000010000000000000100
+00101001011000010000000000001100
+01011001011000000000000000001000
+01000100001000000000000000000110
+00101001100000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000000
+10111001101000000010000000000000
+11111011111111111111111110001110
+01000101110000000000000000110011
+00101001011000010000000000110000
+01000001011001010000001110100110
+00101000001000010000000000001100
+01000000001000010000000000011110
+01000100001001010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100010111100
+11111000000000000000000001011110
+11100000000000000000000000100101
+01000001011100000000001110100111
+00100010000100000000000000000001
+01000110000000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100011011000
+11100000000000000000000000001100
+00101001011000100000001101011000
+00110101011011110000001111000000
+10111001111000000000100000000000
+00110100000000110000000000001010
+11111000000000000101010100100111
+01011100001100000000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100011110100
+11111000000000000000000001001000
+11100000000000000000000000001111
+01000001011000100000001110100001
+00110100000000010000000000001011
+01011100010000010000000000001110
+00101001011000100000001101011000
+10111001111000000000100000000000
+00110100000000110000000000001000
+11111000000000000101010100011000
+01011100001000000000000000001001
+00101001011000010000001101011000
+00101101011000100000001111001000
+00101100001000010000000000001000
+01010000010000010000000000000011
+00110100000000010000000000000111
+01011001011000010000000000000100
+00110100000011010000000000000000
+00110100000011100000000000000000
+00101001011000010000000000000100
+00101001011000100000000000000000
+01011100010000010000000000010011
+01011101101000000000000000000011
+00110100000000010000000000001111
+00110001011000010000001110100001
+00101001100001000000000000001000
+10111001101000000001100000000000
+10111001011000000000100000000000
+10111001110000000001000000000000
+11011000100000000000000000000000
+10111000001000000001100000000000
+01000100001000000000000000000110
+00101001011000100000001111010100
+00101001100001000000000000000100
+01111000000000010000000000000001
+00111000001000010110100100001100
+11111000000000000011010101101010
+00101001011000010000000000000100
+00101001011000100000000000000000
+01000100010000010000000000001111
+01011001011000010000000000000000
+10111001011000000000100000000000
+11111000000000000000000011100110
+01000001011000010000000000100000
+00101001011000100000000000010000
+00110100000000110000000000000010
+00100000001000010000000011111001
+00110001011000010000000000100000
+00101000010000100000000000000100
+10111001011000000000100000000000
+00110100000001000000000000000000
+11111011111111111111111100111010
+00110100000000010000000000000000
+11100000000000000000000000000111
+00101001100000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111011111111111111111100110011
+00101001011000010000000000001000
+00101011100111010000000000001100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110100000000010000000000000000
+00110100000011010000000000000000
+00110100000011100000000000000000
+11100011111111111111111101100110
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100001000000000000001100
+01011011100001010000000000010000
+10111000100000000101100000000000
+01011011100001100000000000010100
+01111000000001000000000000000001
+01011011100001110000000000011000
+01011011100010000000000000011100
+00111000100001000110100100101000
+00110100000001010000000000000000
+01000100001000000000000000000011
+00101000001001000000001111010100
+00101000001001010000000000011100
+01111000000001100000000000000001
+00111000110001101011000010111100
+00101000110000010000000000000000
+00111100010000100000000000000010
+10111000101000010010100000000000
+10000000101000100010100000000000
+00100000101001010000000000001111
+01010100011001010000000000001100
+01111000000001010000000000000001
+00111000101001011000111111011000
+10110100101000100010100000000000
+01111000000001100000000000000001
+00101000101000100000000000000000
+10111000110000000000100000000000
+00111000001000010110100100110000
+11111000000000000011010100100111
+10111001011000000000100000000000
+00110111100000100000000000010000
+11111000000000000011010100000010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000011100
+10111000001000000001100000000000
+00110100000010110000000000000000
+00110100000001011111111111111100
+00110100000001000000000000000011
+11100000000000000000000000001001
+00110100001000011111111111010000
+00100000001001100000000011111111
+01010000100001100000000000000010
+11100000000000000000000000001000
+10111100001000100000100000000000
+00110100011000110000000000000001
+10111001011000010101100000000000
+00110100010000101111111111111100
+01000000011000010000000000000000
+01000100001000000000000000000111
+01011100010001011111111111110110
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000010110100100111100
+00111000010000101000111111001000
+11111000000000000011010100000111
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101000001001000000001101011000
+01111000000000100000000000000001
+00111000010000101001011011111000
+00010000100000110000000000001010
+00110100000001010000000000000001
+00101000001000010000000000110000
+01011000010000110000000000001000
+00110100011000110000000000001100
+10111100101000110001100000000000
+00101000001000010000000000010000
+01011000010000110000000000111000
+00010000100000110000000000001101
+00101100001000010000000000000000
+01011000010000110000000000010100
+00010000100000110000000000001011
+01000000100001000000000000001100
+00110100001000010000000000000001
+01011000010000110000000000101100
+10111100100000110010000000000000
+00001000100001000000001111101000
+01011000010001000000000000100000
+00110100000001000000001111101000
+10111100100000110001100000000000
+10001000001000110001100000000000
+01011000010000110000000001000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000000000111000
+10111000011000000110000000000000
+10111000001000000101100000000000
+00101000010000110000000000011000
+10111001100000000001000000000000
+11011000011000000000000000000000
+00110101101000100000000011010110
+00111100010000100000000000000010
+00001001101011010000000000001100
+10110101011000100001000000000000
+01011000010000010000000000000100
+01111000000000010000000000000001
+00111000001000011001011011111000
+10110100001011010110100000000000
+00101001101001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000011
+00111000100001000110100110101100
+10111001100000000011000000000000
+11111011111111111111111110000111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+10111000001000000110100000000000
+00001001100000010000000000001100
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101001011011111000
+00111000011000111011000011000000
+10110100010000010001000000000000
+00101000011000010000000000000000
+00101000010001000000000000001000
+01011100001000000000000000000101
+00101001101000010000000000110000
+00101000001000010000000000001100
+00101000001000010000000000001000
+01011000011000010000000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000011000111011000011000000
+00111000001000011000111011000000
+00101000011000100000000000000000
+00101000001001010000000000000000
+00110100000010110000000000011001
+10001000010001010001000000000000
+00110100010000100011000000111001
+00000000010000010000000000010000
+10001000010001010001000000000000
+00100000001000010000011111111111
+00110100010000100011000000111001
+01011000011000100000000000000000
+00111100001000110000000000001010
+00000000010000010000000000010000
+00110100100000100000000000000100
+00100000001000010000001111111111
+10011000001000110000100000000000
+00001001100000110000000000001100
+10111101011000100101100000000000
+01111000000000100000000000000001
+00111000010000101001011011111000
+10110100010000110001000000000000
+00101000010000100000000000000100
+00110100000000110000000000000001
+01000100010000110000000000000101
+00110100000000110000000000000010
+01000100010000110000000000001000
+01011100010000000000000000001100
+11100000000000000000000000001010
+10111001011000000001000000000000
+00111101011010110000000000000001
+11111000000000000101001111110011
+10110100001010110101100000000000
+11100000000000000000000000000110
+00001001011000100000000000000101
+11111000000000000101001111101111
+10111000001000000101100000000000
+11100000000000000000000000000010
+10111000100000000101100000000000
+10111001101000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+11111011111111111111111110011110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000001000000110000000000000
+00110100000011010000000000001000
+10111001011000000001000000000000
+10111001100000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111110101110
+01011101011011011111111111111100
+10111001100000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000010100
+11111011111111111111111110000111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000011000
+00110100000000100000000000000000
+11011000011000000000000000000000
+00110101100000100000000011010110
+00111100010000100000000000000010
+10110101011000100001000000000000
+00101000010000100000000000000100
+11001000001000100001000000000000
+00110100000000010000000000000000
+01001000000000100000000000001101
+00001001100011000000000000001100
+01111000000000010000000000000001
+00111000001000011001011011111000
+10110100001011000110000000000000
+00101001100001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110100111000100
+11111011111111111111111100000111
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000011000
+00110100000000100000000000000000
+11011000011000000000000000000000
+00110101100000100000000011010110
+00111100010000100000000000000010
+10110101011000100101100000000000
+00101001011000100000000000000100
+11001000010000010000100000000000
+10100100001000000001000000000000
+00010100010000100000000000011111
+10100000001000100000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+10111000011000000110000000000000
+00101000010001000000000000011000
+00110100000000100000000000000000
+11011000100000000000000000000000
+00110101101000100000000011010110
+00110101100000110000000011010110
+00111100011000110000000000000010
+00111100010000100000000000000010
+10110101011000100001000000000000
+10110101011000110101100000000000
+00101000010000100000000000000100
+00101001011000110000000000000100
+11001000010000010001000000000000
+11001000011000010000100000000000
+01001100010000010000000000000010
+10111000010000000000100000000000
+10100100001000000001000000000000
+00010100010000100000000000011111
+10100000001000100000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+10111000011000000110100000000000
+00101000010001010000000000011000
+00110100000000100000000000000000
+10111000100000000110000000000000
+11011000101000000000000000000000
+00110101110000100000000011010110
+00110101101000110000000011010110
+00111100010000100000000000000010
+00111100011000110000000000000010
+10110101011000100001000000000000
+10110101011000110001100000000000
+00101000010001010000000000000100
+00101000011000100000000000000100
+11001000101000010010100000000000
+11001000010000010001000000000000
+01001100101000100000000000000010
+10111000101000000001000000000000
+00110101100001000000000011010110
+00111100100001000000000000000010
+10110101011001000101100000000000
+00101001011000110000000000000100
+11001000011000010000100000000000
+01001100001000100000000000000010
+10111000001000000001000000000000
+10100100010000000000100000000000
+00010100001000010000000000011111
+10100000010000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000000001
+00110100000000010000000000000011
+00110100000000100000000000000000
+11111000000000000100111001011110
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000100111111111001
+11111000000000000011101110000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000010000000000000000
+10111000010000000110000000000000
+11111000000000000100111100011001
+01000101100000000000000000000101
+01100100001000100000000000000000
+11001000000000100001000000000000
+00111000010000100000000000000001
+11100000000000000000000000010011
+01111000000010110000000000000001
+00111001011010111011000011000100
+01011100001011000000000000000100
+01011001011000000000000000000000
+00110100000000101111111111111111
+11100000000000000000000000001101
+00101001011011000000000000000000
+00110100000000100000000000000001
+01011101100000000000000000001010
+01111000000000100000000000000001
+00111000010000101001011011110000
+00110100000000010000000000000011
+11111000000000000011110000111001
+00110100000000100000000000000010
+01001001100000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000000
+00110100000000100000000000000001
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000100111111001001
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000001101011000
+00101000001000010000000000010000
+00101000001000110000000000001100
+01000100010000110000000000000100
+01011000001000100000000000001100
+10111000010000000000100000000000
+11111000000000000011111010111110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011111010110000
+00110100000000100000000000000001
+01011100001000000000000000000011
+11111000000000000100111110100010
+01111100001000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000010100000000000
+10111000001000100000100000000000
+10111000010000000010000000000000
+10111000011000000101100000000000
+01000100001000000000000000000101
+00110100000000010000000000000001
+10111000101000000001000000000000
+10111000100000000001100000000000
+11111000000000000011111000110101
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000011111000110000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00110100000000011111111111111111
+11111000000000000100111011001111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000001111010000
+10111000100000000111000000000000
+00110111100000010000000000011000
+10111000011000000101100000000000
+10111000101000000110100000000000
+11111000000000000001111001100101
+01000101110000000000000000000101
+01111000000000010000000000000001
+00111000001000011010011111111000
+00101000001000010000000000000000
+01011001110000010000000000000000
+01000101101000000000000000000011
+00101011100000010000000011001100
+01011001101000010000000000000000
+00101011100000100000000001101100
+00110100000000011111111111111101
+01000100010000000000000000010011
+01000101100000000000000000000111
+00101011100000100000000001100000
+00101011100000010000000001011000
+10110100010000010000100000000000
+00101011100000100000000010100000
+10110100001000100000100000000000
+01011001100000010000000000000000
+00101011100000100000000001101000
+00110100000000011111111111111101
+01000100010000000000000000001001
+00110100000000010000000000000000
+01000101011000000000000000000111
+00101011100000110000000001100100
+00101011100000100000000001011100
+10110100011000100001000000000000
+00101011100000110000000010100100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000001000000000000000000
+10111000010000000110000000000000
+10111000011000000101100000000000
+00110111100000100000000000010000
+00110111100000110000000000010100
+00110100000001010000000000000000
+01011011100000000000000000010100
+01011011100000000000000000010000
+11111011111111111111111110111111
+00110100000000010000000000000001
+01011101100000010000000000000011
+00101011100000010000000000010000
+11100000000000000000000000000010
+00101011100000010000000000010100
+01011001011000010000000000000000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011010011101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011010011101111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011101001111100
+11111000000000000011001111101010
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000100110101010111100
+00111000001000010110101010001100
+11111000000000000011001100001010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000010000000000000000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001100000011000
+00101000001000010000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000010110101011011000
+11111000000000000011001011111000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001111100110100
+00111000001000011001110000110000
+01111000000010110000000000000001
+11111000000000000001100111111111
+00111001011010111001100000011000
+00110100000000110000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111111110011100011
+01111000000000100000000000000001
+00111000010000101001110001110100
+01011000010000010000000000000000
+11111000000000000011100011010101
+01111000000000100000000000000001
+00111000010000101011000011010000
+01011000010000010000000000000000
+00101001011000010000001101011000
+00101000001000010000000000010000
+01011000001000000000000001101000
+10111001011000000000100000000000
+11111000000000000000101100110001
+01111000000000010000000000000001
+00111000001000011011000011001100
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001100000011000
+00101001011000010000001101011000
+00101000001011000000000000010000
+01111000000000010000000000000001
+00111000001000010110101011100100
+11111000000000000011001011001101
+00101001100000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001011000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000001000110000
+01011001100000000000000001000000
+00110001100000000000000000110101
+00111000001000011001100101000000
+11111000000000000101001011110011
+01111000000000010000000000000001
+00111000001000011011000011001100
+01011000001000000000000000000000
+10111001011000000000100000000000
+00001101011000000000000100100000
+11111000000000000000101100001011
+01111000000000010000000000000001
+00111000001000011001110000110000
+11111000000000000001101000010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001100000011000
+10111000001000000110000000000000
+00101001011000010000001101011000
+00101000001011010000000000010000
+01111000000000010000000000000001
+00111000001000011011000011001000
+01011000001000000000000000000000
+11111011111111111111111111001100
+00110100000000010000000000000010
+01000101100000010000000000011111
+01001001100000010000000000000011
+00110100000000010000000000000001
+11100000000000000000000000000100
+00110100000000100000000000000011
+01000101100000100000000000101111
+00110100000000010000000000000100
+01011101100000010000000000111001
+00110100000000010000000000000001
+01111000000010110000000000000001
+00111001011010111001100000011000
+00110001101000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111100110100
+00110100000011100000000000000110
+00110100000000100000000000000000
+00110100000000110000000000000001
+01011000001011100000000000000000
+00110100000000010000000000000001
+11111000000000000100110100001101
+00110100000000010000000000000001
+11111000000000000011110110110111
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011100000000000010000
+10111001011000000000100000000000
+11111000000000000001001011101101
+00111000000010111110101001100000
+11100000000000000000000000100011
+00110100000000010000000000000001
+00110001101000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111100110100
+00110100000011100000000010111011
+00110100000000100000000000000000
+00110100000000110000000000000001
+01011000001011100000000000000000
+00110100000000010000000000000010
+11111000000000000100110011111000
+00110100000000010000000000000001
+11111000000000000011110110100010
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011100000000000010000
+10111001011000000000100000000000
+11111000000000000001001011011000
+00110100000010110000111110100000
+11100000000000000000000000001110
+00110001101000010000000000000100
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111100110100
+00110100000000100000000011111111
+01011000001000100000000000000000
+00110100000000110000000000000001
+00110100000000010000000000000011
+00110100000000100000000000000000
+11111000000000000100110011100101
+00110100000000010000000000000000
+11111000000000000011110110001111
+00110100000010110000000000000000
+11111000000000000011100001001100
+01111000000000100000000000000001
+10111000001000000111000000000000
+10111000010000000000100000000000
+00111000001000010110101011110000
+11111000000000000011001001011011
+00101001101000100000000000000000
+01111000000011010000000000000001
+00111001101011010110101100001100
+00101000010000110000000000110100
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011001100000011000
+00110100000000100000000000000000
+11011000011000000000000000000000
+11100000000000000000000000001110
+11111000000000000100111011001000
+00110100000000010000001111101000
+11111000000000000011100000111111
+11111000000000000011100000111001
+11001000001011100001000000000000
+01010001011000100000000000000110
+01111000000000010000000000000001
+00111000001000010110101011111100
+11111000000000000011001001001000
+00110100000010111111111110001100
+11100000000000000000000000001000
+10111001101000000000100000000000
+11111000000000000011001001000100
+00110100000000010000000000000000
+11111000000000000100110110001101
+01011100001000000000000000000010
+01011101011000011111111111110000
+00110100000010110000000000000000
+01111000000000010000000000000001
+00111000001000011000011110001000
+11111000000000000011001000111100
+01111101011000100000000000000000
+01100101100000010000000000000001
+10100000010000010000100000000000
+01000100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011001111100110100
+00110100000000100000000000110100
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011000011001000
+01011000001011000000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100001000000000000000000100
+00110100000000100000000000000001
+01011100001000100000000000000110
+11100000000000000000000000000011
+11111011111111111111111101001011
+11100000000000000000000000000110
+11111011111111111111111100100011
+11100000000000000000000000000100
+01111000000000010000000000000001
+00111000001000011011000011001100
+00101000001000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011001100
+00101000001000010000000000000000
+00110100000011100000000000000000
+01000100001000000000000000100100
+01111000000010110000000000000001
+00111001011010111001100000011000
+00101001011000010000000000110100
+00101001011000100000000001001000
+01111000000001000000000000000001
+00101000001001010000000000001000
+00110100000000110000000001111100
+10111001011000000000100000000000
+00111000100001001001100100011000
+11011000101000000000000000000000
+10111000001000000001100000000000
+01001100000000010000000000000101
+00101001011000010000010000010100
+00110100001000010000000000000001
+01011001011000010000010000010100
+11100000000000000000000000001100
+01011100001000000000000000001011
+01111000000011010000000000000001
+11111000000000000011011111100111
+00111001101011011011000011010000
+00101001101000100000000000000000
+01111000000011000000000000000001
+00111001100011001001110001110100
+11001000001000100000100000000000
+00101001100000100000000000000000
+01010100010000010000000000001010
+11100000000000000000000000010001
+01111000000000010000000000000001
+00111000001000011001100000011000
+00101000001000100000000001010000
+11111011111111111111101111100101
+01111000000000100000000000000001
+00111000010000101001110001110100
+01011000010000010000000000000000
+00110100000011100000000000000001
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+11111000000000000011011111001110
+01011001101000010000000000000000
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110100000000110000000000000000
+11111011111111111111101111010011
+01011001100000010000000000000000
+11100011111111111111111111110000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010001010000000000001000
+00101100010001000000000000001100
+00101000010011010000000000000000
+00111100101001010000000000010000
+10111000001000000110000000000000
+00101000010010110000000000000100
+10111000101001000000100000000000
+00110100000000100000001111101000
+11111000000000000101000011010011
+00010101101000100000000000011000
+10111000001000000011000000000000
+01111000000001110000000000000001
+00100000010000100000000011000000
+00110100000000010000000010000000
+00111000111001111000000011010000
+01011100010000010000000000000011
+01111000000001110000000000000001
+00111000111001110110101100010100
+01111000000001000000000000000001
+10111000100000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+10111001011000000010000000000000
+10111001011000000010100000000000
+00111000001000010110101100100000
+11111000000000000011000110111100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100111010000000000011000
+10111000001000000101000000000000
+01000000011000010000000000000101
+01000000011001000000000000000000
+01000000011001010000000000000001
+01000000011001100000000000000010
+01000000011001110000000000000011
+01000000011010000000000000000100
+01011011100000010000000000000100
+01000000011000010000000000000110
+10111000010000000100100000000000
+10111001010000000001000000000000
+01011011100000010000000000001000
+01000000011000010000000000000111
+01011011100000010000000000001100
+01000000011000010000000000001000
+01011011100000010000000000010000
+01000000011000010000000000001001
+10111001001000000001100000000000
+01011011100000010000000000010100
+01111000000000010000000000000001
+00111000001000010110101101000100
+11111000000000000011000110011110
+00101011100111010000000000011000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100101010000000000001000
+01011011100111010000000000000100
+10111000011000000011000000000000
+10111000001000001001100000000000
+10111000010000001001000000000000
+01111000000000010000000000000001
+10111000100000001010100000000000
+00111000001000010110101101111100
+10111010011000000001000000000000
+10111010010000000001100000000000
+10111000110000000010000000000000
+10111000101000001010000000000000
+01111000000100010000000000000001
+11111000000000000011000110000010
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+10111000001000000101100000000000
+00110100000011000000000000000000
+00111010001100010110101110010000
+00111010000100000110101110011000
+00111001111011110111110001001000
+00111001110011101000011110001000
+00111001101011010111111100010000
+11100000000000000000000000010111
+01011100110000000000000000000110
+10111010001000000000100000000000
+10111010011000000001000000000000
+10111010010000000001100000000000
+11111000000000000011000101110001
+10110101011000010101100000000000
+10110110101011000001000000000000
+01000000010000100000000000000000
+10111010000000000000100000000000
+00110101100011000000000000000001
+11111000000000000011000101101011
+00100001100000100000000000000011
+10110100001010110101100000000000
+10111001111000000011000000000000
+01011100010000000000000000000101
+00100001100000010000000000001111
+10111001110000000011000000000000
+01000100001000100000000000000010
+10111001101000000011000000000000
+10111000110000000000100000000000
+11111000000000000011000101100001
+10110101011000010101100000000000
+00100001100001100000000000001111
+01001010100011001111111111101001
+01000100110000000000000000000101
+01111000000000010000000000000001
+00111000001000011000011110001000
+11111000000000000011000101011010
+10110100001010110101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00101011100101010000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111110111000
+01011011100010110000000001001000
+01011011100011000000000001000100
+01011011100011010000000001000000
+01011011100011100000000000111100
+01011011100011110000000000111000
+01011011100100000000000000110100
+01011011100100010000000000110000
+01011011100100100000000000101100
+01011011100100110000000000101000
+01011011100101000000000000100100
+01011011100101010000000000100000
+01011011100101100000000000011100
+01011011100101110000000000011000
+01011011100110000000000000010100
+01011011100111010000000000010000
+10111000011000001000000000000000
+01000000010000110000000000000001
+10111000001000000110000000000000
+00110100000000010000000000000010
+00100000011000110000000000001111
+10111000010000000110100000000000
+01000000010011100000000000000000
+01000100011000010000000000000110
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110101110100000
+11111000000000000011000100101110
+11100000000000000000000101010000
+01000000010001010000000000000010
+01000000010001100000000000000011
+00100001110011100000000000001111
+00111100101001010000000000001000
+01111000000000010000000000000001
+10111000110001010010100000000000
+01000001101001100000000000000100
+00110100000000110000000000000010
+10111001110000000010000000000000
+00110100010010110000000000100010
+00111000001000010110101111000000
+10111001100000000001000000000000
+11111000000000000011000100100000
+01000001101000110000000000000110
+01000001101001000000000000000111
+00101001101001010000000000001100
+00111100011000110000000000001000
+01111000000000010000000000000001
+10111000100000110001100000000000
+00101001101001000000000000001000
+10111000101000000011000000000000
+10111001100000000001000000000000
+00111000001000010110101111101100
+11111000000000000011000100010101
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100110110000011100
+00110101101000110000000000010100
+11111011111111111111111101011011
+01000001101000110000000000011110
+01000001101001000000000000011111
+01000001101001010000000000100001
+00111100011000110000000000001000
+01111000000000010000000000000001
+10111000100000110001100000000000
+01000001101001000000000000100000
+00111000001000010110110000100100
+10111001100000000001000000000000
+11111000000000000011000100000110
+00110100000000010000000000001100
+01010101110000010000000011101001
+01111000000000010000000000000001
+00111101110011100000000000000010
+00111000001000011000111111111000
+10110100001011100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110001010000
+11111000000000000011000011111010
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110110001101000
+10111001100000000001000000000000
+00111000011000110110110001111000
+11100000000000000000000000011100
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110010000100
+11111000000000000011000011011110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+01000001011001110000000000000101
+01000001011001100000000000001001
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000001000010110110001101000
+10111001100000000001000000000000
+00111000011000110110110010100000
+10111000111001000010000000000000
+10111000110001010010100000000000
+11111000000000000011000011000100
+11100000000000000000000010100110
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110010110000
+11111000000000000011000010111111
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110110001101000
+10111001100000000001000000000000
+00111000011000110110110011001100
+11100011111111111111111111100001
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110011011100
+11111000000000000011000010100011
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+01111000000011100000000000000001
+00111001110011100110110011111000
+10111000101000010010100000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+10111001110000000001100000000000
+10111000111001000010000000000000
+10111000110001010010100000000000
+00111000001000010110110001101000
+11111000000000000011000010001000
+00110101011000110000000000001010
+10111001100000000000100000000000
+10111001110000000001000000000000
+11111011111111111111111011001111
+00110100000010110000000000110110
+11100000000000000000000010011000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110100001100
+11111000000000000011000001111110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+10111000111001000010000000000000
+10111000110001010010100000000000
+10111001100000000001000000000000
+00111000011000110110110100101000
+00111000001000010110110001101000
+11111000000000000011000001100100
+01000001011000100000000000001110
+01000001011000010000000000001111
+01000001011001000000000000010000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000010010
+01000001011000010000000000010011
+01000001011001010000000000010100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01000001011000100000000000010110
+01000001011000010000000000010111
+01000001011001100000000000011000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011010010000000000010001
+01000001011010000000000000010101
+01000001011001110000000000011001
+00111100110001100000000000001000
+10111000001000100000100000000000
+10111000110000010011000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+10111001001001000010000000000000
+10111001000001010010100000000000
+10111000111001100011000000000000
+10111001100000000001000000000000
+00111000011000110110110101010100
+00111000001000010110110101000000
+11111000000000000011000001000000
+01000001011000110000000000001101
+01000001011001000000000000011010
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110101111000
+11111000000000000011000000111010
+01000001011000010000000000100000
+01000001011001000000000000011011
+01000001011001010000000000011100
+01000001011001100000000000011101
+01000001011001110000000000011110
+01000001011010000000000000011111
+01011011100000010000000000000100
+01000001011000010000000000100001
+01111000000000110000000000000001
+10111001100000000001000000000000
+01011011100000010000000000001000
+01000001011000010000000000100010
+00111000011000110110110111010000
+00110100000010110000000001000000
+01011011100000010000000000001100
+01111000000000010000000000000001
+00111000001000010110110110100000
+11111000000000000011000000101000
+11100000000000000000000000111101
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110111110000
+11111000000000000011000000100011
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100110111000001100
+10111001011000000001100000000000
+11111011111111111111111001101001
+00110100000010110000000000101100
+11100000000000000000000000110010
+00110100000010110000000000100010
+11100000000000000000000000110000
+01010101111101110000000000001001
+01111000000000010000000000000001
+10111001100000000001000000000000
+10111010000000000001100000000000
+10111001011000000010000000000000
+10111001111000000010100000000000
+00111000001000010110111000101000
+11111000000000000011000000010010
+11100000000000000000000000110100
+10110101101010110111000000000000
+01000001110101100000000000000010
+01000001110000010000000000000011
+01000001110000110000000000000000
+00111110110101100000000000001000
+01000001110001000000000000000001
+10111000001101101011000000000000
+01000001110000010000000000001000
+01000001110001010000000000000100
+01000001110001100000000000000101
+01000001110001110000000000000110
+01000001110010000000000000000111
+01011011100000010000000000000100
+01000001110000010000000000001001
+00111100011000110000000000001000
+00110110110100010000000000000100
+01011011100000010000000000001000
+10111000100000110001100000000000
+10111010101000000000100000000000
+10111001100000000001000000000000
+10111010001000000010000000000000
+11111000000000000010111111111011
+01001101111100010000000000000111
+10111010010000000000100000000000
+10111001100000000001000000000000
+10111010001000000001100000000000
+10111001111000000010000000000000
+11111000000000000010111111110101
+11100000000000000000000000001000
+10111001100000000000100000000000
+10111010100000000001000000000000
+10111010011000000001100000000000
+00110101110001000000000000001010
+00110110110001011111111111111010
+11111011111111111111111001010100
+10111010001000000111100000000000
+10110101011011110101100000000000
+11100000000000000000000000001011
+01111000000101010000000000000001
+01111000000101000000000000000001
+01111000000100110000000000000001
+01111000000100100000000000000001
+00110100000110000000000000000010
+00110100000101110000000000001001
+00111010101101010110111001001100
+00111010100101000110111010111000
+00111010011100110110111011000000
+00111010010100100110111010001100
+01001101011100000000000000000011
+11001010000010110111100000000000
+01001001111110001111111111000101
+01111000000000100000000000000001
+01111000000000110000000000000001
+10111001100000000000100000000000
+00111000010000100110111011001100
+00111000011000110110111011010100
+10111001101000000010000000000000
+10111010000000000010100000000000
+11111011111111111111111000111100
+00101011100111010000000000010000
+00101011100010110000000001001000
+00101011100011000000000001000100
+00101011100011010000000001000000
+00101011100011100000000000111100
+00101011100011110000000000111000
+00101011100100000000000000110100
+00101011100100010000000000110000
+00101011100100100000000000101100
+00101011100100110000000000101000
+00101011100101000000000000100100
+00101011100101010000000000100000
+00101011100101100000000000011100
+00101011100101110000000000011000
+00101011100110000000000000010100
+00110111100111000000000001001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+01000100100000000000000000000101
+10111000100000000001000000000000
+01011011100000110000000000010000
+11111011111111111111110111100001
+00101011100000110000000000010000
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111001101110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001011010000000000000000
+10111000001000000111100000000000
+00101000001011100000000000000100
+10111000010000000110000000000000
+00110100000010110000000000000000
+00110100000000010000000000000000
+00110100000001000000000000000000
+01010100010011010000000000000110
+10111001101000000000100000000000
+11111000000000000100111011110011
+10001000001011000001000000000000
+10111001011000000010000000000000
+11001001101000100110100000000000
+00110100000000110000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001011
+00111101100001010000000000000001
+00111101011010110000000000000001
+11110101100001010110000000000000
+00111100011000110000000000000001
+10110101100010110101100000000000
+10111000101000000110000000000000
+00111100010001010000000000000001
+11110100010001010001000000000000
+10110100010000110001100000000000
+10111000101000000001000000000000
+00010101011001010000000000011111
+11001000101011000011000000000000
+11110100110001010011000000000000
+11001000101010110010100000000000
+11001000101001100010100000000000
+00000000101001010000000000011111
+00110100000001100000000000000001
+01010101101010110000000000000100
+01011101101010110000000000000010
+01010101110011000000000000000010
+00110100000001100000000000000000
+10100000101001100011000000000000
+01011100110000001111111111101010
+01010101011011010000000000001101
+01011101011011010000000000000010
+01010101100011100000000000001011
+11001001110011000010100000000000
+11110100101011100111000000000000
+11001001101010110110100000000000
+11001001101011100110100000000000
+10111000101000000111000000000000
+10110100100000100010100000000000
+11110100100001010010000000000000
+10110100001000110000100000000000
+10110100100000010000100000000000
+10111000101000000010000000000000
+00111100011001010000000000011111
+00000000010000100000000000000001
+00000000011000110000000000000001
+10111000101000100001000000000000
+10111000011000100010100000000000
+01000100101000000000000000000110
+00111101011001010000000000011111
+00000001100011000000000000000001
+00000001011010110000000000000001
+10111000101011000110000000000000
+11100011111111111111111111101001
+01011001111000010000000000000000
+10111001110000000000100000000000
+01011001111001000000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+11111000000000000011010101000111
+10110100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+10111000010000000101100000000000
+01111000000001010000000000000001
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111110000100
+00111000101001011001000000101100
+10111001011000000011000000000000
+11111011111111111111101000000101
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000011100111111000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+10111000011000000011000000000000
+01000100011000000000000000001000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111110010000
+00111000101001011001000001001100
+11111011111111111111100111101100
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111111011001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+01000100010000000000000000010101
+00101000010000010000000000001000
+00101100010010110000000000001100
+00101000010011000000000000000100
+00111100001000010000000000010000
+00110100000001000000000000000011
+10111000001010110101100000000000
+00101000010000010000000000000000
+10111001011000000001100000000000
+10111001100000000001000000000000
+11111000000000000011100111101001
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001101000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111110111100
+00111000101001011001000001100000
+10111001100000000011000000000000
+10111001011000000011100000000000
+11111011111111111111100111001001
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+00110111100000100000000000011000
+00110111100000010000000000010000
+11111000000000000011100111101111
+00101011100001110000000000011000
+00101011100000010000000000010000
+00101011100001100000000000010100
+00000000111000100000000000010000
+01011001011000010000000000000000
+01011001011000100000000000001000
+00111100111000010000000000010000
+01111000000000100000000000000001
+00111000010000101011000010111100
+01011001011000010000000000001100
+00101000010000010000000000000000
+01011001011001100000000000000100
+00100000001000010000000000000001
+01011100001000000000000000001001
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000010
+00111000100001000110111110111100
+00111000101001011001000001110000
+11111011111111111111100110100011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00001000100001000000000000001100
+10111000001000000101100000000000
+00110100001011010000000100010000
+01111000000000010000000000000001
+00111000001000011001011101011000
+10110100001001000000100000000000
+10111000010000000111100000000000
+01000000001000100000000000000111
+01111000000001010000000000000001
+00110111100011000000000001000000
+00001000010000100000000000000110
+00111000101001011001000010010000
+00101001011100000000000001101000
+00110100000000011000100011110111
+10110100010001010001000000000000
+10111000011000000111000000000000
+00001111100000010000000001001100
+00110100000000110000000000000110
+10111001100000000000100000000000
+11111000000000000100111001111010
+10111001100000000001000000000000
+10111010000000000000100000000000
+10111001111000000001100000000000
+10111001110000000010000000000000
+00110111100001010000000000100000
+11111000000000000010010011110000
+10111000001000000110000000000000
+01000101101000000000000000011111
+00101011100000010000000000101000
+00101011100000100000000000100100
+00101011100000110000000000100000
+00010100001001010000000000011111
+00000000001001000000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10111000100001010010100000000000
+00101011100001000000000000111100
+01011001011000110000000100010000
+01011001011000100000000100010100
+01011001011001010000000100011000
+01011001011000010000000100011100
+01011100100000000000000000000100
+01111000000001001000111100000000
+10111000011001000001100000000000
+01011001011000110000000100010000
+00111100101010010000000000010000
+00000000001010000000000000010000
+00101001011001110000000100010100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000010
+00111000100001000110111111001100
+00111000101001011001000010000000
+10111001100000000011000000000000
+10111001001010000100000000000000
+11111011111111111111100101011011
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000001101
+00101001011001000000000100011100
+00101001011001010000000100011000
+00101001011000100000000100010100
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000001
+00000000100001000000000000010000
+00111000001000010110111111101100
+10111000101000110001100000000000
+11111000000000000010111010001111
+01001100000011000000000000010000
+01111000000000010000000000000001
+00111000001000011011000010111100
+00101000001000100000000000000000
+00101001011000010000000000011100
+10111000010000010000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000001
+00111000001000010110111111111100
+10111001111000000001000000000000
+10111001110000000001100000000000
+10111001101000000010000000000000
+11111011111111111111111010111011
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+00110111100111001111111110010000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000000001101000
+10111000011000000010100000000000
+10111000010000000111000000000000
+10111000100000000101100000000000
+00110111100000100000000001000000
+10111000101000000010000000000000
+10111001110000000001100000000000
+00110111100001010000000000100000
+11111000000000000010010000100000
+10111000001000000110100000000000
+01001100000000010000000001100101
+01000101011000000000000000100001
+00101011100000010000000000101100
+00101011100011110000000000100100
+00101011100100000000000000100000
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011001011100000000000000000000
+01011001011011110000000000000100
+11111000000000000100110101011110
+00101011100001010000000000101000
+10111000001000000010000000000000
+00010100001000100000000000011111
+00010100101000010000000000011111
+00000000101000110000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10110100100001010010100000000000
+10111000011000010000100000000000
+11110100100001010010000000000000
+10110100010000010000100000000000
+10110100100000010000100000000000
+01011001011000010000000000001000
+00101011100000010000000000111100
+01011001011001010000000000001100
+01011100001000000000000000001001
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01000100010000010000000000000100
+01111000000000011000111100000000
+10111010000000011000000000000000
+01011001011100000000000000000000
+01111000000000010000000000000001
+00111000001000011011000010111100
+00101001100000100000000000011100
+00101000001000010000000000000000
+10111000001000100000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000001
+00111000001000010111000000000100
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001011000000010000000000000
+11111011111111111111111001101101
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000110000
+00101001011001000000000000000000
+00101001011000110000000000000100
+00101001011000100000000000001000
+00101001011000010000000000001100
+01011011100001000000000001100100
+01011011100000110000000001101000
+01011011100000100000000001101100
+01011011100000010000000001110000
+11111000000000000010111111001101
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011011100000000000000001011000
+01011011100000000000000001010100
+11111000000000000100110100100100
+00010100001000100000000000011111
+00110111100010110000000001100100
+01011011100000010000000001100000
+01011011100000100000000001011100
+10111001011000000000100000000000
+00110111100000100000000001010100
+11111000000000000001001001010101
+00101011100001000000000001110000
+00101011100001010000000001101100
+00101011100000100000000001101000
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000001
+00000000100001000000000000010000
+10111000101000110001100000000000
+00111000001000010111000000001100
+11111000000000000010111000001011
+10111001011000000000100000000000
+00110101100000100000000100010000
+11111000000000000001001001000110
+00101011100000110000000001110000
+00101011100001000000000001101100
+01111000000000010000000000000001
+00000000011000100000000000010000
+00100000011000111111111111111111
+00001000011000110000001111101000
+00111100100001000000000000010000
+00111000001000010111000000011100
+00000000011000110000000000010000
+10111000100000100001000000000000
+11111000000000000010110111111101
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001110000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000001101000
+11111000000000000010001101010010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000001101000
+01000100001000000000000000000010
+11111000000000000010001101000101
+10111001011000000000100000000000
+11111000000000000000110010101111
+00110111100011000000000000010100
+00110100000000011000100011110111
+01111000000000100000000000000001
+00001111100000010000000000100000
+00111000010000101000111101111000
+10111001100000000000100000000000
+00110100000000110000000000000110
+11111000000000000100110110001100
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011001110101100100
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111000000000000010001011101100
+10111000001000000110000000000000
+01000100001000000000000000001110
+00110111100011010000000000101000
+10111001101000000001000000000000
+11111000000000000010001011010110
+10111001101000000001000000000000
+00110100000000110000000000000110
+00110101011000010000000001110000
+11111000000000000100110101111101
+00110101011000010000000001011100
+01011001011011000000000001101000
+10111001101000000001000000000000
+00110100000000110000000000000110
+11111000000000000100110101111000
+01011001011011000000000001010100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111000011000000110000000000000
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000001000100
+10111000001000000101100000000000
+11111011111111111111100001101010
+00101001100000100000000000101100
+00101001011000010000001101011000
+00100000010000110000000000000011
+00101000001000010000000000010000
+01111100011001000000000000000000
+01011000001001000000000000111000
+00100000010001000000000000001000
+00100000010000100000000000000100
+01111100100001000000000000000000
+01111100010000100000000000000000
+00110000001000110000000000110101
+01011000001000100000000001000100
+01011000001001000000000001000000
+00101001011000010000000000110000
+00101000001000100000000000010000
+00101001011000010000001101011000
+00101100001000010000000000001000
+00001100010000010000000000101000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010010110000000000010000
+00110100000000110000000000000010
+00110100000000100000000000000010
+00111000100001000111000100111000
+00111000101001011001000101000100
+11111011111111111111100001000111
+00110100000000010000000000000000
+00110001011000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111000001000000101100000000000
+00110100000000100000000000000010
+00110100000000010000000000000000
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000101010100
+11111011111111111111100000110101
+00101001011000010000000000100100
+01000100001000000000000000000110
+00110100000000100000000000000000
+00110100000000110000000000000001
+00110100000001000000000000000010
+00110100000001100000000000000011
+11100000000000000000000000011111
+00101001011000010000000000000000
+00101001011000100000000001000000
+01011000001000100000000000011000
+11100000000000000000000000011101
+00101001011001010000000000000000
+00001000010000010000010000011000
+10110100101000010000100000000000
+00101001011001010000000001000000
+01011000001001010000000000011000
+00101000001001010000010000001000
+01011100101000110000000000010000
+00101000001001010000000000100100
+01000100101000110000000000000100
+00101000001000010000001101011000
+01011100101001000000000000001001
+11100000000000000000000000000101
+00101000001000010000001101011000
+00101000001000010000000000010000
+00110000001000110000000000000100
+11100000000000000000000000001010
+00101000001000010000000000010000
+00110000001001000000000000000100
+11100000000000000000000000000111
+00101000001000010000000000010000
+00110000001001100000000000000100
+11100000000000000000000000000100
+00101000001000010000001101011000
+00101000001000010000000000010000
+00110000001000000000000000000100
+00110100010000100000000000000001
+00101001011000010000000000100100
+01001000001000101111111111100101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010010110000000000010000
+00110100000000110000000000000010
+00110100000000100000000000000010
+00111000100001000111000100111000
+00111000101001011001000101011100
+10111000001000000110000000000000
+11111011111111111111011111111011
+01000001011000110000000000000100
+00110100000000010000000100101100
+01011001011000010000000000101000
+00110100000000100000000000000001
+00110100000000010000101110111000
+01011001011000010000000000110000
+01011001011000000000000000001000
+00110001011000000000000000110101
+01011001011000000000000001000000
+01011001011000100000000000010100
+00100000011000110000000000000011
+00101001011000010000000000000000
+01011100011000100000000000000100
+00101000001000110000000000110100
+10111001100000000000100000000000
+11100000000000000000000000000100
+00101000001000110000000000110100
+00110100000000100000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101100001011010000000000000010
+10111000001000000101100000000000
+10111000010000000110000000000000
+00110100000000010000000000000000
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000010011100
+11111011111111111111011111010001
+00110100000000010000000001000000
+01001100001011010000000000000100
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111000000000000000001111101101
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000010110000
+10111000001000000101100000000000
+11111011111111111111011110111011
+00101001011000010000001101011000
+00110100000000100000000001000000
+00101000001000010000000000010000
+01000000001000010000000000000100
+01000100001000000000000000000110
+00110100000000110000000000000010
+01000100001000110000000000000100
+10111001011000000000100000000000
+11111000000000000000001110010001
+00110100000000100000000001001110
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000110000000000000010
+10111000010000000110000000000000
+00111000100001000111000100111000
+00110100000000100000000000000010
+00111000101001011001000011011000
+10111000001000000101100000000000
+11111011111111111111011110011111
+00101001011000010000001101011000
+00110100000000110000000000000000
+00101000001000010000000000010000
+00101000001000010000000000001000
+01000100001000000000000000000110
+00110101011000110000000010101000
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111000000000000000010110110001
+00110100000000110000000000000001
+10111000011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000011101100
+10111000001000000101100000000000
+11111011111111111111011110000100
+00101001011000010000001101011000
+00101000001000100000000000010000
+01000000010000010000000000000100
+00100000001000010000000000000010
+01000100001000000000000000001011
+01000000010000010000000000110101
+00100000001000010000000000000001
+01000100001000000000000000001000
+00101000010000010000000000001000
+01000100001000000000000000000011
+00101000010000010000000001000000
+01011100001000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000001001
+11111000000000000000000010100101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000100000000
+10111000001000000101100000000000
+11111011111111111111011101100101
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111111100001000000
+01000100001000000000000000000011
+10111001011000000000100000000000
+11111000000000000000010011110100
+00101001011000010000001101011000
+00101000001000100000000000010000
+00110100000000010000000000000000
+00101000010000110000000001100100
+01000100011000000000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000100
+01011000010000000000000001100100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010011010000000000010000
+00101000001000100000001101011000
+00110100000000110000000000000010
+00111000100001000111000100111000
+00101000010011000000000000010000
+00111000101001011001000100010100
+00110100000000100000000000000010
+10111000001000000101100000000000
+11111011111111111111011101000010
+00101001100000010000000000001000
+01011100001000000000000000011110
+00010001011000100000000010101000
+00110100000000010000000010000000
+00100000010000100000000011000000
+01000100010000010000000000000100
+00010001011000100000000010111000
+00100000010000100000000011000000
+01011100010000010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111000101000100
+11111011111111111111011100110011
+11100000000000000000000000010100
+10111001011000000000100000000000
+11111000000000000001001011011000
+00101001101000100000000000001100
+00101001101000010000000000001000
+10111000001000100000100000000000
+00101001100000100000000000000000
+01000100001000000000000000000101
+00101000010000110000000000110100
+10111001011000000000100000000000
+00110100000000100000000000000000
+11100000000000000000000000000100
+00101000010000110000000000110100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11011000011000000000000000000000
+10111001011000000000100000000000
+11111000000000000000010101010011
+10111001011000000000100000000000
+11111000000000000000011010011101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000100100100
+10111000001000000101100000000000
+11111011111111111111011100001101
+10111001011000000000100000000000
+11111000000000000000010011000101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00110100000000100000000000001111
+10111000001000000101100000000000
+10111000100000000110000000000000
+01000100100000100000000000100101
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000100111000
+00111000101001011001000100110100
+11111011111111111111011011110101
+00110100000000010000000000000001
+01000101100000010000000000000100
+00110100000000010000000000001100
+01011101100000010000000000011010
+11100000000000000000000000000110
+10111001011000000000100000000000
+00110101011000100000000100000000
+11111000000000000000111111000001
+00110100000011000000000000001111
+11100000000000000000000000010100
+00101001011000010000001101011000
+10111001101000000001000000000000
+00110111100000110000000000010100
+00101000001001000000000000010000
+10111001011000000000100000000000
+00110100000011000000000000001111
+00110100100001000000000000111100
+11111000000000000000001110011010
+00101001011000010000001101011000
+00110100000000100001000000000000
+00101000001000010000000000010000
+00101100001000110000000000111100
+01011100011000100000000000000111
+01000000001000010000000000000100
+00100000001000010000000000000001
+01000100001000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111000000000000000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00101000001000110000001101011000
+00110100000001000000000000000110
+00101000011000110000000000010000
+01000100010001000000000000000100
+00110100000001000000000000001001
+01011100010001000000000000001000
+11100000000000000000000000000100
+00110100000000100000000000000001
+00110000011000100000000000000101
+11100000000000000000000000000111
+00110100000000100000000000000010
+00110000011000100000000000000101
+11100000000000000000000000000110
+01000000011000110000000000000101
+00110100000000100000000000000001
+01011100011000100000000000000011
+00110100000000100000000001100110
+11100000000000000000000000000010
+00110100000000100000000001100100
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000001101011000
+01111000000001010000000000000001
+00111000101001010111000001111100
+00101000001011000000000000010000
+00110100000000010000000000000001
+01000001100000100000000000000101
+01011100010000010000000000000011
+01111000000001010000000000000001
+00111000101001010111000001011100
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111000110010100
+11111011111111111111011010101000
+01000001100000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000000011
+00110100000000010000000000000110
+11100000000000000000000000000010
+00110100000000010000000000001001
+01011001011000010000000000000100
+00110001100000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000010000100000000000010000
+01000000010000110000000000101100
+01000100011000000000000000001010
+00110100011000111111111111111111
+01111000000001000000000000000001
+00110000010000110000000000101100
+00111000100001000111000110111000
+00110100000000100000000000000010
+00110100000000110000000000000001
+11111011111111111111011010001110
+00110100000000010000000000000001
+11100000000000000000000000000011
+11111011111111111111111111010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011010000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001101000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011101010100
+00110100000011000000000000000000
+01000100001011000000000000001100
+10111001011000000000100000000000
+11111011111111111111111111011000
+01000100001000000000000000011101
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000001111101000
+11111011111111111111011011001011
+10111001011000000000100000000000
+00110100000000100001000000000000
+11111000000000000000001110010001
+10111000001000000110000000000000
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101101001000000000000111100
+11111000000000000000001100011000
+00101101101000100000000000111100
+00110100000000010001000000000001
+01011100010000010000000000000011
+00110100000000010000000001100101
+01011001011000010000000000000100
+01011101100000000000000000000011
+10111001011000000000100000000000
+11111000000000000000101010010100
+00101001011000010000001101011000
+00101000001000010000000000010000
+00101000001000010000000000101000
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011100011010
+00110100000011010000000000000000
+01000100001011010000000000001100
+10111001011000000000100000000000
+11111011111111111111111110011110
+01000100001000000000000000011000
+00110100000000100001000000000001
+10111001011000000000100000000000
+11111000000000000000001101011011
+10111000001000000110100000000000
+00110100000000100000000000000110
+10111001011000000000100000000000
+00110100000000110011101010011000
+11111011111111111111011010001101
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101100001000000000000111100
+11111000000000000000001011011110
+00101101100000100000000000111100
+00110100000000010001000000000010
+01011100010000010000000000000011
+00110100000000010000000001101000
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000001011010000000000001100
+10111000001000000101100000000000
+00101000010011000000000000010000
+01000101101000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001011
+00110100000000100000000000000110
+11111011111111111111011011100111
+01000100001011010000000000010000
+00101001100000010000000000000000
+00101000001000100000000000001000
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111001011000000000100000000000
+11111011111111111111111101101000
+01000100001000000000000000011100
+00101001100000010000000000000000
+00101000001000100000000000000000
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110011101010011000
+11111011111111111111011001010111
+00101001100000010000000000101000
+00110100000000100000000000000000
+01011001011000010000000000001000
+00101001100000010000000000000000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000000001000
+00110100000000010000000001100111
+01011001011000010000000000000100
+00101001100000010000000000000000
+00101000001000100000000000001000
+10111001011000000000100000000000
+11011000010000000000000000000000
+11100000000000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000000010
+01011001011000000000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011010101100
+00110100000011010000000000000000
+01000100001011010000000000001100
+10111001011000000000100000000000
+11111011111111111111111100110000
+01000100001000000000000000011000
+00101001100000110000000000101000
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111011111111111111011000100011
+10111001011000000000100000000000
+00110100000000100001000000000010
+11111000000000000000001011101001
+10111000001000000110100000000000
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101100001000000000000111100
+11111000000000000000001001110000
+00101101100000100000000000111100
+00110100000000010001000000000011
+01011100010000010000000000000011
+00110100000000010000000001101010
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000001011010000000000001100
+10111000001000000110000000000000
+00101000010010110000000000010000
+01000101101000000000000000000100
+00110100000000010000000000000011
+00110001011000010000000000101100
+11100000000000000000000000000111
+00110100000000100000000000000110
+11111011111111111111011001111001
+01000100001011010000000000010001
+10111001100000000000100000000000
+11111011111111111111111011111110
+01000100001000000000000010011100
+00101001011000110000000000110000
+10111001100000000000100000000000
+00110100000000100000000000000110
+11111011111111111111010111110001
+10111001100000000000100000000000
+00110100000000100001000000000011
+11111000000000000000001010110111
+00110100000000010000000001101100
+00110001011000010000000000010000
+00101001011000010000000000010100
+01000100001000000000000000000011
+00110100000000010000000001101110
+00110001011000010000000000010000
+01000001011001100000000000010000
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111000111001100
+00111000101001011001000110001000
+00110100110001101111111110010100
+11111011111111111111010110000000
+01000001011000100000000000010000
+00110100000000010000000000001000
+00110100010000101111111110010100
+00100000010000100000000011111111
+01010100010000010000000001111110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001000101100100
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001010000000000101100
+00110100000001000000000000000000
+10111001100000000000100000000000
+11011000101000000000000000000000
+01011100001000000000000001110000
+00110100000000010000000001101101
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000100100
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000001101000
+00110100000000010000000001101110
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00110111100000110000000000010100
+00101000001001000000000000101000
+10111001100000000000100000000000
+11011000100000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000001011110
+00101011100000010000000000010100
+01111000000001000000000000000001
+00110100000000100000000000000010
+00000000001001010000000000010000
+00111100001000010000000000010000
+01011001011001010000000000011100
+01011001011000010000000000011000
+00110100000000110000000000000001
+10111001100000000000100000000000
+00111000100001000111000111100000
+11111011111111111111010101010000
+00101001011001010000000000011000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001000000100
+11111011111111111111010101001001
+00110100000000010000000001101111
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000100000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000001000100
+00110100000000010000000001110000
+00110001011000010000000000010000
+00101001011000010000000000000000
+00101000001000100000000000110000
+10111001100000000000100000000000
+11011000010000000000000000000000
+01011100001000000000000000111101
+00110100000000010000000001110001
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00101000001000110000000000100100
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000000110101
+00110100000000010000000001110010
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00110111100000110000000000010100
+00101000001001000000000000101000
+10111001100000000000100000000000
+11011000100000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000000101011
+00101011100001010000000000010100
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001000101000
+11111011111111111111010100100001
+00101011100000010000000000010100
+01111000000001000000000000000001
+00110100000000100000000000000010
+00000000001001010000000000010000
+00111100001000010000000000010000
+01011001011001010000000000100100
+01011001011000010000000000100000
+00110100000000110000000000000001
+10111001100000000000100000000000
+00111000100001000111001001000000
+11111011111111111111010100010110
+00101001011001010000000000100000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001001100100
+11111011111111111111010100001111
+00110100000000010000000001110011
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00101000001000110000000000100000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000000001010
+00110100000000010000000001110100
+00110001011000010000000000010000
+10111001100000000000100000000000
+00110100000000100001000000000100
+11111000000000000000001000101001
+00110100000000010000000001101001
+01011001100000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000010100
+00101001011000010000000000101000
+01011001100000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00101001100000110000000000101000
+00110100000000100000000000000110
+11111011111111111111010101000101
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111011111111111111010111000010
+01000100001000000000000000000100
+10111001011000000000100000000000
+11111011111111111111111000100110
+11100000000000000000000000011010
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000010101
+10111001011000000000100000000000
+10111001101000000001000000000000
+00110111100000110000000000010100
+00110101100001000000000000111100
+11111000000000000000000110001111
+00101101100000010000000000111100
+00110100000000100001000000000011
+01011100001000100000000000000110
+01000001100000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000001010
+00110100000000010000000001101010
+11100000000000000000000000000111
+00110100000000100001000000000101
+01011100001000100000000000000110
+01000001100000100000000000000101
+00110100000000010000000000000010
+01011100010000010000000000000011
+00110100000000010000000001101011
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000010000000111100000000000
+00101000001000100000001101011000
+00101000001011100000000000001100
+10111000001000000110000000000000
+00101000010010110000000000010000
+00101101011011010000000001001000
+01111101101011010000000000000000
+01000101110000000000000000000100
+00110100000000010000000000000011
+00110001011000010000000000101100
+11100000000000000000000000001100
+00110100000000100000000000000110
+11111011111111111111010110001010
+01000100001011100000000000011000
+01000101101000000000000000000101
+00101001011000010000000000000000
+00101000001000110000000000110000
+10111001100000000000100000000000
+11011000011000000000000000000000
+10111001100000000000100000000000
+11111011111111111111111000001010
+01000100001000000000000000101001
+01000101101000000000000000001000
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001010000000000101100
+00110100000001000000000000000000
+10111001100000000000100000000000
+11011000101000000000000000000000
+00101001011000010000000001001100
+00110100000000100000001111101000
+11111000000000000100100100110000
+10111000001000000001100000000000
+00110100000000100000000000000110
+10111001100000000000100000000000
+11111011111111111111010011110010
+01000001100000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000010101
+10111001100000000000100000000000
+10111001111000000001000000000000
+00110111100000110000000000011100
+00110101011001000000000000111100
+11111000000000000000000101000011
+00101101011000100000000000111100
+00110100000000010001000000000100
+01011100010000010000000000001101
+01000101101000000000000000000101
+00101001011000010000000000000000
+00101000001000100000000000110000
+10111001100000000000100000000000
+11011000010000000000000000000000
+01000001011000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000000011
+00110100000000010000000001101011
+11100000000000000000000000000010
+00110100000000010000000001101000
+01011001100000010000000000000100
+00101001011000010000000000101000
+01011001100000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00110100000011010000000000000001
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101001100000100000000000000000
+01011001100011010000000000001000
+00101000010000100000000000001100
+11011000010000000000000000000000
+01000001100000100000000000000101
+00110100000000010000000000000000
+01011100010011010000000000000100
+10111001011000000000100000000000
+00110100000000100001000000000101
+11111000000000000000000110000110
+00110100000000100000000000000001
+01011001100000100000000001000000
+00110100000011011111111111111111
+01011100001000000000000000011011
+01000001100000100000000000000101
+00110100000000010000000000000010
+01011100010000010000000000000011
+00110100000000010000000000001001
+11100000000000000000000000000010
+00110100000000010000000000000110
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000100
+00110100000011010000000000000000
+01011100010000010000000000001110
+00110100000000010000000001110101
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000010111001010001000
+11111000000000000010100110001110
+11111000000000000010101100110111
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111001010111000
+11111000000000000010100110001001
+01111000000000010000000000000001
+00111000001000010111001011110100
+11111000000000000010100110000110
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00000000010000110000000000011000
+00110000001000100000000000000011
+00110000001000110000000000000000
+00000000010000110000000000010000
+00110000001000110000000000000001
+00000000010000110000000000001000
+00110000001000110000000000000010
+11000011101000000000000000000000
+01000000001000100000000000000000
+01000000001000110000000000000011
+00111100010000100000000000011000
+10111000011000100001000000000000
+01000000001000110000000000000001
+01000000001000010000000000000010
+00111100011000110000000000010000
+00111100001000010000000000001000
+10111000010000110001000000000000
+10111000010000010000100000000000
+11000011101000000000000000000000
+01000000001000100000000000000000
+01000000001000010000000000000001
+00111100010000100000000000001000
+10111000010000010000100000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000110000000000110000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000011000110000000000001100
+00101000010000100000000000010000
+00101000001011000000000001001100
+00101000011001000000000000010000
+00110100000000110000000010111010
+01001000100000110000000000010111
+00101000010000100000000000000000
+00101000010000110000000000000100
+00110100000000100000000000000001
+11011000011000000000000000000000
+01111100001000010000000000000001
+11001000000000010110100000000000
+10111001011000000000100000000000
+11111000000000000000100110111001
+00101001011000010000000000110000
+00100001101011010000000000101110
+00110101101011010000000000000110
+00101000001000010000000000001100
+00101000001000010000000000010000
+01000101101000010000000000001001
+01111000000000010000000000000001
+00111000001000010111001100101000
+10111001101000000001000000000000
+11111000000000000010100101000111
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011010000000000010000
+00110001100011010000000000110000
+00110100000000010000000001001110
+00001101100000010000000000000010
+00110100000000010000000000000011
+00001101100000010000000001000000
+00110100000000010000000000001010
+00001101100000010000000001000010
+00110100000000010000100000000000
+00001101100000010000000001000100
+00110100000000010011000011011110
+00001101100000010000000001000110
+00110100000000011010110100000001
+00001101100000010000000001001000
+00110100000000010010000000000000
+00001101100000010000000001001010
+00101001011000010000001101011000
+00101000001000100000000000010000
+00101000010000110000000000010100
+01000000010000010000000000000100
+01000100011000000000000000000010
+00111000001000010000000000000100
+00101000010000100000000000001000
+01000100010000000000000000000010
+00111000001000010000000000001000
+00001101100000010000000001001100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100001000010000000001000000
+10111000010000000110000000000000
+11111011111111111111111110110010
+00101101011001010000000001000100
+00101101011001000000000001000110
+01111000000001110000000000000001
+00111100101001010000000000001000
+00000000100001100000000000001000
+00111000111001111000111011001000
+10111000101001100010100000000000
+00101000111001100000000000000000
+01100100001000010000000000000011
+00101101011000110000000001001000
+11100100101001100010100000000000
+00101101011000100000000001001010
+10100000001001010000100000000000
+01000100001000000000000000010000
+00111100100001000000000000001000
+00000000011000010000000000001000
+00100000100001001111111111111111
+10111000100000010010000000000000
+00100000011000110000000011111111
+00111000000000011101111010101101
+11100100100000010010000000000000
+01100100011000110000000000000001
+10100000100000110001100000000000
+01000100011000000000000000000110
+00110100000000010010000000000000
+01011100010000010000000000000100
+00110101011000010000000001001100
+11111011111111111111111110010110
+01011001100000010000000000101100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000001101011000
+00100000010011011111111111111111
+00101000001000010000000000010000
+01000000001001010000000000000101
+01000100101000000000000000000011
+00110100000000010010000000000000
+01011101101000010000000000001010
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001101000000
+10111001101000000011000000000000
+11111011111111111111001110100010
+00110100000000010000000000000000
+11100000000000000000000001010001
+00101001100010110000000001001100
+00110100000000110000000000001000
+01000001011000010000000000000000
+00100000001000010000000011110000
+00111000001000010000000000001100
+00110001011000010000000000000000
+00110100000000010000000000000101
+00110001011000010000000000100000
+00101001100000100000000000110000
+00110101011000010000000000100010
+00101000010000100000000000010100
+11111000000000000100100010001101
+00101001100000010000000000110000
+00101000001000010000000000010100
+00101100001000010000000000001000
+00001101011011010000000000110110
+00000000001000100000000000001000
+00110001011000010000000000101011
+00110100000000010000000000000011
+00001101011000010000000000101100
+00110100000000010000100000000000
+00001101011000010000000000110000
+00110100000000010011000011011110
+00001101011000010000000000110010
+00110100000000011010110100000001
+00001101011000010000000000110100
+00110001011000100000000000101010
+00110100000000010001000000000011
+01000101101000010000000000000101
+00110100000000010001000000000100
+00110100000000100000000000001000
+01011101101000010000000000101101
+11100000000000000000000000010111
+00101001100000010000001101011000
+00110101011000100000000000111000
+00101000001000010000000000010000
+00101000001000110000000000010100
+01000100011000000000000000000101
+01000000001000010000000000110100
+00110001011000010000000000111000
+00110000010000000000000000000001
+11100000000000000000000000000111
+01000000001000010000000000110100
+00111100001000010000000000001000
+00111000001000010000000000000001
+00000000001000110000000000001000
+00110001011000110000000000111000
+00110000010000010000000000000001
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111010
+00101000010000100000000000110000
+11111011111111111111111100110010
+00110100000000100000000000010100
+11100000000000000000000000010110
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111000
+00101000010000100000000000011100
+11111011111111111111111100101011
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111100
+00101000010000100000000000011000
+11111011111111111111111100100110
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000001000000
+00101000010000100000000000100100
+11111011111111111111111100100001
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000001000100
+00101000010000100000000000100000
+11111011111111111111111100011100
+00110100000000100000000000011000
+00110100010000010000000000110000
+00110001011000000000000000000010
+00110001011000010000000000000011
+00001101011000100000000000101110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000011000000111000000000000
+00110100010000100000000000100010
+10111000001000000110000000000000
+10111000011000000000100000000000
+00110100000000110000000000001000
+10111000100000000110100000000000
+11111000000000000100100000110101
+00110101011000010000000000101010
+11111011111111111111111100010100
+00001101110000010000000000001000
+00110101011000010000000000101100
+11111011111111111111111100010001
+10111000001000000010100000000000
+00110100000001000000000000000011
+00101101011000110000000000110000
+00101101011000100000000000110010
+00101101011000010000000000110100
+01000100101001000000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001101110100
+11100000000000000000000000100010
+00111100011001010000000000001000
+01111000000001000000000000000001
+00000000010000110000000000001000
+00111000100001001000111011001000
+10111000101000110010100000000000
+00101000100000110000000000000000
+01000100101000110000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001111000100
+11100000000000000000000000010101
+00111100010001010000000000001000
+00000000001000110000000000001000
+00100000101001011111111111111111
+10111000101000110010100000000000
+00111000000000101101111010101101
+01000100101000100000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001111111100
+11100000000000000000000000001001
+00100000001001010000000011111111
+00110100000000010000000000000001
+01000100101000010000000000001000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111010001000000
+11111011111111111111001100001001
+11100000000000000000000000101000
+00101101011000010000000000110110
+01000101101000000000000000000010
+00001101101000010000000000000000
+00110100000000100001000000000011
+01000100001000100000000000000100
+00110100000000100001000000000100
+01011100001000100000000000100001
+11100000000000000000000000010010
+00101001100000010000001101011000
+00110101011011100000000000111000
+00101000001011010000000000010000
+10111001110000000000100000000000
+11111011111111111111111011010101
+00100000001000010000000011111111
+00001101101000010000000001001000
+10111001110000000000100000000000
+11111011111111111111111011010001
+00000000001000010000000000001000
+00110001101000010000000001010000
+00110101011000010000000000111010
+11111011111111111111111011000010
+00101001100000100000001101011000
+00101000010000100000000000010000
+01011000010000010000000001001100
+11100000000000000000000000001111
+00101001100000010000001101011000
+00101000001011000000000000010000
+00110101011000010000000000111000
+11111011111111111111111010111010
+01011001100000010000000001011000
+00110101011000010000000000111100
+11111011111111111111111010110111
+01011001100000010000000001010100
+00110101011000010000000001000000
+11111011111111111111111010110100
+01011001100000010000000001100000
+00110101011000010000000001000100
+11111011111111111111111010110001
+01011001100000010000000001011100
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000010000101111111111111111
+10111000001000000101100000000000
+11111011111111111111111100011111
+10111000001000000001000000000000
+00110100000000110000000000000000
+10111001011000000000100000000000
+11111000000000000000011110110101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000110010001111111111111111
+00001001000010000000001111101000
+10111000010000000101000000000000
+00111000000000101000000000000000
+00111100101010110000000000010000
+00000000110001110000000000010000
+10110101000000100100000000000000
+10111000100000000100100000000000
+01011011100001000000000000010000
+00000001000010000000000000010000
+01111000000001000000000000000001
+01011011100000110000000000001100
+01011011100001010000000000010100
+01011011100001100000000000011000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010010000100
+10111001010000000010100000000000
+10111001001000000011000000000000
+10111001011001110011100000000000
+11111011111111111111001010110100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00010100001010110000000000011111
+10111000001000000010100000000000
+00111001011010110000000000000001
+00010101011011010000000000011111
+10111000010000000010000000000000
+10111000011000000110000000000000
+10111001101000000000100000000000
+10111000101000000001100000000000
+10111001011000000001000000000000
+11111000000000000100011010100101
+01011011100000010000000000011100
+01011011100000100000000000100000
+00110111100000010000000000011100
+00110100000000100000001111101000
+11111011111111111111100000101111
+10111000001000000111100000000000
+00101011100000010000000000011100
+01111000000000110000000000000001
+00111000011000111000111010111000
+01011011100000010000000000100100
+00101011100000010000000000100000
+00101000011000100000000000000000
+01011011100000010000000000101000
+00110111100000010000000000100100
+11111011111111111111100000100101
+10111000001000000111000000000000
+00111101111000010000000000010000
+00110100000000100000001111101000
+11111000000000000100011011010111
+00111101110000100000000000010000
+10111000001000000010000000000000
+00010100001000110000000000011111
+10110100100000100001000000000000
+00000001110000010000000000010000
+11110100100000100010000000000000
+10110100011000010000100000000000
+10110100100000010000100000000000
+10111001101000000001100000000000
+10111001011000000010000000000000
+11111000000000000100011010000111
+00101011100000110000000000100100
+00101011100001000000000000101000
+01011001100000010000000000001000
+01011001100000100000000000001100
+10111001101000000000100000000000
+10111001011000000001000000000000
+11111000000000000100011010000000
+01011001100000010000000000000000
+01011001100000100000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101001111100110000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001010110000000000011000
+10111000001000000110100000000000
+01000101011000000000000000010100
+01111000000011000000000000000001
+00111001100011001100001010011000
+00101001100000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001011011011
+00110100000000100000000000000000
+00110001101000000000000000100000
+10111001011000000000100000000000
+00110100000000110000000100100000
+00101001011011110000000010010000
+00101001011011100000000010010100
+00101001011011010000000010011000
+11111000000000000100011111001100
+00101001100000010000000000000000
+01011001011011110000000010010000
+01011001011011100000000010010100
+01011001011011010000000010011000
+00110100000000100000000000000000
+11111000000000000001001011001101
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001000010000001101011000
+00110100000000100000000000000001
+00101001101010110000000000011000
+00101000001011000000000000010000
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+11111000000000000001001010110111
+00101001100000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001100000000000011100
+00110101011001000000000000101000
+10111001101000000000100000000000
+00110101011001010000000000101100
+11011000110000000000000000000000
+00110100000000101111111111111111
+01011100001000000000000001000011
+00101001100000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001101000000000100000000000
+11011000011000000000000000000000
+00110101101000100000001111111000
+10111001011000000000100000000000
+00110100000000110000000000010000
+11111000000000000100100011001111
+00101001011000010000000001001000
+00101001011000100000000000101100
+01001100010000010000000000000011
+11111000000000000100011010011010
+01011001011000010000000001001000
+00101001100000010000000000000000
+00101000001000100000000000011000
+00101001011000010000000001001000
+11011000010000000000000000000000
+00101001100000010000000001011000
+00101101100000100000000001010100
+01011001011000000000000100011000
+00111100001000010000000000010000
+01011001011000000000000000010100
+10111000001000100000100000000000
+01011001011000010000000000011000
+00101001100000010000000001100000
+00101101100000100000000001011100
+00111100001000010000000000010000
+10111000001000100000100000000000
+01011001011000010000000000011100
+00101001100000010000000000011100
+00101101100000100000000000011000
+00111100001000010000000000010000
+10111000001000100000100000000000
+01011001011000010000000000100000
+00101001100000010000000000100100
+00101101100000100000000000100000
+00111100001000010000000000010000
+10111000001000100000100000000000
+01111000000000100000000000000001
+01011001011000010000000000100100
+00111000010000100111010010011100
+00110101011000010000000001100000
+11111000000000000100100000001100
+00101001011000010000000000010000
+00110101011000100000000010100000
+01011001011000000000000001011000
+00111000001000010000000000000001
+01011001011000010000000000010000
+00101001101000010000000000111000
+00101000001000110000000000000000
+10111001101000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111100110000
+00101000001000010000000000000000
+00110100000000100000000000000000
+01011001011000010000000001011100
+01111000000000010000000000000001
+00111000001000011011010111011000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+11111000000000000001001001101100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000010001010000000000000100
+00101000010001000000000000001000
+00101000010001100000000000000000
+00101000001000010000000000011000
+00101000010000100000000000001100
+01011000001001100000000010110000
+01011000001001010000000010110100
+01011000001001000000000010111000
+01011000001000100000000010111100
+00101000011000100000000000001000
+00101000011001010000000000000000
+00101000011001000000000000000100
+00101000011000110000000000001100
+01011000001000100000000011001000
+01011000001001010000000011000000
+01011000001001000000000011000100
+01011000001000110000000011001100
+01111000000000010000000000000001
+00111000001000011011010111011000
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+00111001101011011100001010011000
+00101000001011000000000000011000
+10111000001000000101100000000000
+00101001101000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001001000001
+00101001011000010000000011000100
+00101001011001000000000010111000
+00101001011000110000000010111100
+00101001011000100000000011000000
+01011001100000010000000011011100
+00101001011000010000000011010100
+01011001100001000000000011010000
+01011001100000110000000011010100
+00101001011001000000000011001000
+00101001011000110000000011001100
+01011001100000100000000011011000
+00101001011000100000000011010000
+01011001100000010000000011101100
+00101001101000010000000000000000
+01011001100000100000000011101000
+01011001100001000000000011100000
+01011001100000110000000011100100
+00110100000000100000000000000000
+11111000000000000001001000101110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+10111000011000000110100000000000
+00101000001000010000001101011000
+00010001011000110000000010110000
+00101000001000100000000000010000
+00100000011000110000000011000000
+00110100000000010000000010000000
+01000100011000010000000000001010
+00010001011001000000000011000000
+00100000100001000000000011000000
+01000100100000010000000000000111
+00010001011001000000000011010000
+00100000100001000000000011000000
+01000100100000010000000000000100
+00010001011001000000000011100000
+00100000100001000000000011000000
+01011100100000010000000000011001
+01111000000000010000000000000001
+00111000001000011011010111011100
+00101000001000100000000000000000
+00110100000011000000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000101
+01001100001000100000000011111001
+00010001011001000000000011000000
+00010001011001010000000011010000
+00010001011001100000000011100000
+00100000100001000000000011000000
+00100000101001010000000011000000
+00100000110001100000000011000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+01111100011000110000000010000000
+01111100100001000000000010000000
+01111100101001010000000010000000
+01111100110001100000000010000000
+00111000010000101001000111000100
+00111000001000010111010010101100
+11111000000000000010011010111100
+11100000000000000000000011101001
+00101000010000010000000000000000
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011011010111011100
+01011000001000000000000000000000
+00101001011000010000000001011000
+00110101011000100000000010100000
+00110111100011100000000000110100
+00110100001000010000000000000001
+01011001011000010000000001011000
+00101001100000010000000000111000
+00110101011100010000000011000000
+00101000001000110000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011011010111011000
+00101001011000100000000011101000
+01011000001000000000000000000000
+00101001011000010000000011101100
+00101001011001000000000011100000
+00101001011000110000000011100100
+01011011100000100000000000101100
+01011011100000010000000000110000
+00110101011000100000000010110000
+00110111100000010000000000100100
+01011011100001000000000000100100
+01011011100000110000000000101000
+11111000000000000000101011011000
+00101001011000100000000011011000
+00101001011000010000000011011100
+00101001011001000000000011010000
+00101001011000110000000011010100
+01011011100000100000000000111100
+01011011100000010000000001000000
+10111010001000000001000000000000
+10111001110000000000100000000000
+01011011100001000000000000110100
+01011011100000110000000000111000
+11111000000000000000101011001101
+00101011100000010000000000100100
+10111001110000000001000000000000
+01011001011000010000000000110000
+00101011100000010000000000101000
+01011001011000010000000000110100
+00101011100000010000000000101100
+01011001011000010000000000111000
+00101011100000010000000000110000
+01011001011000010000000000111100
+00110101011000010000000000110000
+11111000000000000000101011000010
+01111000000000010000000000000001
+00111000001000011011000010111100
+00101000001000010000000000000000
+00101001100000100000000000011100
+10111000001000100000100000000000
+00000000001000010000000000010000
+00100000001000010000000000001111
+01000100001000000000000000101001
+00101001011000110000000010110000
+00101001011001000000000010110100
+00101001011001010000000010111000
+00101001011001100000000010111100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010011011100
+11111011111111111111111001100100
+00101001011000110000000011000000
+00101001011001000000000011000100
+00101001011001010000000011001000
+00101001011001100000000011001100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010011101000
+11111011111111111111111001011100
+00101001011000110000000011010000
+00101001011001000000000011010100
+00101001011001010000000011011000
+00101001011001100000000011011100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010011110100
+11111011111111111111111001010100
+00101001011000110000000011100000
+00101001011001000000000011100100
+00101001011001010000000011101000
+00101001011001100000000011101100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010100000000
+11111011111111111111111001001100
+00101001011000110000000000110000
+00101001011001000000000000110100
+00101001011001010000000000111000
+00101001011001100000000000111100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010100100100
+11111011111111111111111001000100
+00101001011000010000000000111000
+00101001011000100000000000111100
+00110100000000110000000000000000
+00110100000001000000001111101000
+11111000000000000100010100010000
+00111000000011001000000000000000
+10110100010011000110000000000000
+11110100010011000001100000000000
+01111000000001010000000000000001
+10110100011000010000100000000000
+00111100001000100000000000010000
+00000001100011000000000000010000
+00111000101001011000111010111000
+10111000010011000110000000000000
+00101000101001000000000000000000
+00010100001011100000000000010000
+00101001011000100000000000110100
+00101001011000010000000000110000
+00110100000000110000000000000000
+11111000000000000100010100000001
+10110101100000100011000000000000
+11110101100001100110000000000000
+10110101110000010000100000000000
+00101001011001110000000000011000
+00101001011000110000000000100000
+10110101100000010110000000000000
+00101001011000010000000000011100
+00101001011001000000000000100100
+10110100111000110001100000000000
+10110100011000010001100000000000
+10110100011001000001100000000000
+00010100011001010000000000011111
+01011001011011000000000001000000
+01011001011001100000000001000100
+01001000101011000000000000000100
+01011100101011000000000000000101
+01010100011001100000000000000010
+11100000000000000000000000000011
+01011001011001010000000001000000
+01011001011000110000000001000100
+00101001011000100000000001000100
+00101001011000010000000001000000
+00010100100011110000000000011111
+11001000010000110001100000000000
+11110100011000100001000000000000
+11001000001001010000100000000000
+11001000001000100000100000000000
+10110100100001110010100000000000
+00010100111000100000000000011111
+11110100100001010010000000000000
+10110101111000100111100000000000
+00000000011011000000000000000001
+00111100001000100000000000011111
+10110100100011110111100000000000
+00101001011001000000000000101000
+10111000010011000110000000000000
+00000000001000100000000000000001
+10110100101011000110000000000000
+11110100101011000010100000000000
+10110101111000100111100000000000
+10111000011000000001000000000000
+00010100100000110000000000011111
+10110100101011110111100000000000
+11111000000000000100010011010101
+00010100001011100000000000001000
+00010100001000010000000000011111
+10110101100011100111000000000000
+11110101100011100110000000000000
+10110101111000010000100000000000
+10110101100000010111100000000000
+00101001011000100000000010111000
+00101001011000010000000010111100
+00101001011001000000000010110000
+00101001011000110000000010110100
+00110111100100000000000000110100
+01011011100000100000000000111100
+01011011100000010000000001000000
+10111010001000000001000000000000
+10111010000000000000100000000000
+01011011100001000000000000110100
+00110111100011000000000000100100
+01011011100000110000000000111000
+11111000000000000000101000111111
+10111001100000000001100000000000
+10111001111000000000100000000000
+10111001110000000001000000000000
+11111011111111111111111000001001
+10111010000000000000100000000000
+10111001100000000001000000000000
+11111000000000000000101000011110
+00101011100000010000000000111100
+00101011100100010000000000110100
+00101011100100000000000000111000
+00101011100000100000000001000000
+00110100000000110000000000000000
+01011001101100010000000000000000
+01011001101100000000000000000100
+01011001101000010000000000001000
+01011001101000100000000000001100
+00110100000001000000001111101000
+11111000000000000100010010110000
+00111000000011001000000000000000
+10110100010011000110000000000000
+11110100010011000001000000000000
+01111000000001010000000000000001
+10110100010000010001100000000000
+00111000101001011000111010111000
+00111100011000010000000000010000
+00000001100011000000000000010000
+00101000101001000000000000000000
+10111000001011000110000000000000
+00010100011011010000000000010000
+10111010001000000000100000000000
+00110100000000110000000000000000
+10111010000000000001000000000000
+11111000000000000100010010100001
+10110101100000100001000000000000
+11110101100000100110000000000000
+10110101101000010000100000000000
+01111000000000110000000000000001
+10110101100000010000100000000000
+00111000011000111001111100110000
+01011001011000010000000010001000
+00101000011000010000000000000000
+01011001011000100000000010001100
+01011001011011110000000001010000
+01011001011000010000000001011100
+01011001011011100000000001010100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000111000000000000
+00101000001000010000001101011000
+00101001110010110000000000011000
+00101000001011010000000000010000
+01111000000000010000000000000001
+00111000001000011011010111011000
+00101000001000010000000000000000
+01000100001000000000000100111100
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+00110100000000100000000000000001
+11111000000000000001000011101001
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110111100000110000000000101100
+00101001011100100000000001000000
+00101001011100000000000001000100
+11111011111111111111111010111101
+01000100001000000000000100100101
+00101001011000010000000000101100
+00110100000000100000001111101000
+11111000000000000100010010101100
+10111000001000001001100000000000
+00101011100000010000000000111000
+00101011100011000000000000110100
+00101011100100010000000000110000
+00100000001011111111111111111111
+00001001111011110000001111101000
+00111101100011000000000000010000
+00000000001000010000000000010000
+00010101111011110000000000010000
+10111001100000010110000000000000
+01001100000011000000000000001000
+10111001100000000000100000000000
+10111010011000000001000000000000
+11111000000000000100010011001011
+10111000001000000001100000000000
+00001000001000010000001111101000
+11001001100000110110000000000000
+10110101111000010111100000000000
+10111010001000000001100000000000
+01001101100000000000000000000110
+01111000000000100000000000000001
+00111000010000101000111010111000
+00101000010000010000000000000000
+00110110001000111111111111111111
+10110101100000010110000000000000
+01101001100000100000000000000000
+01100100011000011111111111111111
+10100000010000010000100000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00111000010000101000111011001100
+00101000010000010000000000000000
+00110100000000110000000000000000
+10110101100000010110000000000000
+01100100011000110000000000000000
+00000001100000010000000000011111
+10100000011000010001100000000000
+01000100011000000000000000000110
+11001000000100111001100000000000
+01001010011011000000000000000100
+00001001100011000000001111101000
+10110101111011000111100000000000
+00110100000011000000000000000000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010101101000
+10111010001000000010100000000000
+10111001100000000011000000000000
+10111001111000000011100000000000
+11111011111111111111000000101101
+00101001101000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000000100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00110100001000011111111111111111
+00110100000000100000000000000001
+01010000010000010000000000001100
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010110001000
+11111011111111111111000000011111
+00101001101000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00101001101000010000000000000000
+00101000001000010000000000010000
+11011000001000000000000000000000
+01011100001000000000000000001010
+00101001011000110000000000010000
+00110100000000101111111111111101
+10100000010000110001000000000000
+01011001011000100000000000010000
+00101011100000100000000000110000
+00101011100000110000000000101100
+10111000011000100001000000000000
+01011100010000010000000000001001
+11100000000000000000000000001010
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010110101100
+11111011111111111111000000000111
+11100000000000000000000011000111
+00110100000000010000000000000010
+11100000000000000000000000000110
+00110100000000010000000000000001
+01011101100000100000000000000100
+00101001011000010000000000010100
+01011100001011000000000000000011
+00110100000000010000000000000011
+01011001011000010000000000010100
+00101001011000100000000000010100
+01111000000000010000000000000001
+00111000001000011001000110101100
+00111100010000100000000000000010
+01111000000001100000000000000001
+10110100001000100000100000000000
+00101000001001010000000000000000
+01111000000001000000000000000001
+00111000110001101000000011010000
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010110111000
+11111011111111111110111111110000
+00101001011000100000000000010100
+01111000000000010000000000000001
+00111000001000011001000110101100
+00111100010000100000000000000010
+10110100001000100001000000000000
+00101000010000100000000000000000
+00110101011000010000000001100000
+11111000000000000100010111110001
+00101001011000100000000000010100
+00110100000000010000000000000100
+00110100010000101111111111111111
+01010100010000010000000001101110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001000110011000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001101000010000000000000000
+00101011100000100000000000110000
+00110100000000110000000000000000
+00101000001001000000000000010100
+00101011100000010000000000101100
+11100000000000000000000000000110
+00101001101000010000000000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+00101000001001000000000000010100
+00110100000000010000000000000000
+11011000100000000000000000000000
+00101001011000010000000000010000
+00111000001000010000000000000010
+01011001011000010000000000010000
+11100000000000000000000001000010
+00101001011001010000000001001000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010111010000
+10111001100000000011000000000000
+10111001111000000011100000000000
+11111011111111111110111111000101
+00101001101000100000000000000000
+00101001011000010000000001001000
+00101000010000100000000000011000
+10110101111000010000100000000000
+01011001011000010000000001001000
+11011000010000000000000000000000
+00101001011000010000000000010000
+00111000001000010000000000000010
+01011001011000010000000000010000
+00110100000000010000000000000101
+01011001011000010000000000010100
+11100000000000000000000001000011
+00010101111000010000000000011111
+00110100000000100000000000111011
+10011000001011110111100000000000
+11001001111000010000100000000000
+01001000001000100000000000001101
+00101001101000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000110100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00101001011000010000000001010000
+01011001011000010000000100010000
+00101001011000010000000001010100
+01011001011000010000000100010100
+00110100000000010000000000000100
+01011001011000010000000000010100
+11100000000000000000000000000100
+00101001011000010000000100011000
+00110100001000010000000000000001
+01011001011000010000000100011000
+00101001011000100000000100011000
+00110100000000010000000000001001
+01001100001000100000000000101100
+01011001011000000000000100011000
+11100000000000000000000000010100
+00101001011000110000000001010100
+00101001011000010000000100010100
+00101001011001000000000001010000
+00101001011000100000000100010000
+11001000011000010000100000000000
+11110100001000110001100000000000
+01011001011000010000000010000100
+01111000000000010000000000000001
+00111000001000011001111100110000
+11001000100000100001000000000000
+00101000001000010000000000000000
+11001000010000110001000000000000
+01011001011000100000000010000000
+01000100001000000000000000011100
+00010101111000010000000000011111
+00110100000000110000000001111000
+10011000001011110001000000000000
+11001000010000010001000000000000
+01001100011000100000000000000011
+00110100000000010000000000000011
+11100011111111111111111111010001
+00000000001000010000000000011110
+00101001101000100000000000000000
+10110100001011110111100000000000
+00101001011000010000000001001000
+00010101111011110000000000000010
+00101000010000100000000000011000
+10110101111000010000100000000000
+01011001011000010000000001001000
+11011000010000000000000000000000
+00101001011001010000000001001000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000111010111101100
+11111011111111111110111101111011
+00101001011000010000000001010000
+01011001011000010000000100010000
+00101001011000010000000001010100
+01011001011000010000000100010100
+00101001011000100000000000010100
+00110100000000010000000000000100
+01000100010000010000000000000100
+00101001011000010000000010010000
+00110100001000010000000000000001
+01011001011000010000000010010000
+00101001011001000000000010001000
+00101001011000110000000010001100
+00010100100000010000000000011111
+10011000011000010001100000000000
+11001000011000010001000000000000
+10011000100000010010000000000000
+11110100010000110001100000000000
+11001000100000010000100000000000
+11001000001000110000100000000000
+01001000001000000000000000000101
+01011100001000000000000000000111
+00110100000000010000000111110100
+01010100010000010000000000000010
+11100000000000000000000000000100
+00101001011000010000000010010100
+00110100001000010000000000000001
+01011001011000010000000010010100
+00101001011001010000000001000100
+00101001011001000000000001000000
+11001010000001010001100000000000
+11110100011100000000100000000000
+11001010010001000001000000000000
+11001000010000010001000000000000
+01001000000000100000000000000111
+00110100000000010000000000000001
+01001000010000000000000000010011
+01011100010000000000000000010001
+00110100000000100000001111101000
+01010100011000100000000000010000
+11100000000000000000000000001110
+11001000000100000000100000000000
+01111100001000100000000000000000
+11001000000100100001100000000000
+11001000011000100001100000000000
+11001000001001010001000000000000
+11110100010000010000100000000000
+11001000011001000001100000000000
+11001000011000010001100000000000
+00110100000000010000000000000001
+01001000011000000000000000000101
+01011100011000000000000000000011
+00110100000000110000001111101000
+01010100010000110000000000000010
+00110100000000010000000000000000
+00100000001000010000000011111111
+01000100001000000000000000000100
+00101001011000010000000010011000
+00110100001000010000000000000001
+01011001011000010000000010011000
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+00110100000000100000000000000000
+11111000000000000000111110111001
+00101001101000010000000000000000
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11011000011000000000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000110000000000111000
+10111000010000000101100000000000
+00101000011000110000000000000000
+11011000011000000000000000000000
+00101001011000100000000000001000
+00101101011000010000000000001100
+01111000000000110000000000000001
+00111100010000100000000000010000
+00111000011000111000111011010000
+10111000010000010000100000000000
+00101000011000100000000000000000
+11111000000000000100001101100100
+00110100001000010000001111101000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000001011010000000000001100
+10111000001000000101100000000000
+00110111100011000000000000011000
+01000101101000000000000000001000
+10111001100000000001000000000000
+11111011111111111111111111100001
+00110100001000110000001111011110
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111101100010
+11100000000000000000000000110010
+10111001100000000001000000000000
+11111011111111111111111111011010
+10111000001000000111000000000000
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111111011011
+01000100001011010000000000100110
+00101011100011100000000000011100
+00101011100011010000000000011000
+00101001011000010000000000111000
+10111001100000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+00101011100000100000000000011000
+00101011100000010000000000011100
+01011100010011010000000000000010
+01000100001011101111111111111000
+00101001011000010000000000111000
+00110111100011000000000000011000
+10111001100000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111000000000000000011010001100
+10111000001000000001000000000000
+00110100000000110000000000000001
+10111001011000000000100000000000
+11111000000000000000001111001001
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111011111111111111111110111010
+00110100001000111111111111110110
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111100111011
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111011111111111111111110110011
+00110100001000011111111111110110
+01011001011000010000000000001000
+11100000000000000000000000000110
+00110101110000101111111111110110
+11101100010000010000100000000000
+11001000000000010000100000000000
+10100000010000010001000000000000
+01011001011000100000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000001
+10111000001000000101100000000000
+11111011111111111110111110100001
+00110100000011000000000000000000
+01000100001000000000000000010100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11111011111111111110111100111110
+00101001011000110000001111100100
+00110100000000100000000000000001
+00110100000000010000000000000000
+01011100011000100000000000000010
+00101001011000010000001111100000
+00001101011000010000000010010010
+10111001011000000000100000000000
+11111000000000000000011100111001
+10111000001000000110000000000000
+01000100001000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011001000100
+11111011111111111110111010101110
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000011
+10111000001000000101100000000000
+11111011111111111110111101111111
+00110100000011000000000000000000
+01000100001000000000000000010100
+10111001011000000000100000000000
+00110100000000100000000000000011
+11111011111111111110111100011100
+00101001011000110000001111100100
+00110100000000100000000000000001
+00110100000000010000000000000000
+01011100011000100000000000000010
+00101001011000010000001111100000
+00001101011000010000000010010010
+10111001011000000000100000000000
+11111000000000000000011010110010
+10111000001000000110000000000000
+01000100001000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011001011100
+11111011111111111110111010001100
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000101100000000000
+11111011111111111110111101011101
+00110100000011000000000000000000
+01000100001000000000000000011001
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111011111111111110111011111010
+10111001011000000000100000000000
+11111000000000000000011100101000
+10111000001000000110000000000000
+00101001011001000000000100010000
+00101001011000010000000100011100
+00101001011000110000000100010100
+00101001011000100000000100011000
+01011001011000010000000011000100
+01011001011001000000000010111000
+01011001011000110000000010111100
+01011001011000100000000011000000
+00110100000000011111111111111111
+01011101100000010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011001111000
+11111011111111111110111001100111
+11100000000000000000000000000010
+00110100000011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000001000000101100000000000
+10111000010000000111000000000000
+00110100001011110000001110100000
+00110100001100000000001111000000
+11100000000000000000000000010010
+00001001100011010000000001110000
+10111010000000000000100000000000
+00110100000000110000000000001010
+00110101101000100000000100101000
+10110101011000100001000000000000
+11111000000000000100001100100011
+01011100001000000000000000001010
+00110101101000010000000101101000
+10111001111000000001000000000000
+10110101011000010000100000000000
+11111000000000000000001001010011
+10110101011011010001000000000000
+10111001110000000000100000000000
+00110100010000100000000100110100
+11111000000000000000011000010000
+11100000000000000000000000011111
+00110101100011000000000000000001
+00101101011000110000000100100000
+01001000011011001111111111101110
+00110100000000010000000000000100
+01010100011000010000000000000011
+00110100011000110000000000000001
+00001101011000110000000100100000
+00101101011011010000000100100000
+00110100000000110000000000001010
+00110101011000100000001111000000
+00110101101011011111111111111111
+00001001101011000000000001110000
+00110101100000010000000100101000
+10110101011000010000100000000000
+11111000000000000100001100101011
+00110101100000010000000101101000
+10111001111000000001000000000000
+10110101011000010000100000000000
+11111000000000000000001000111011
+10110101011011000001000000000000
+10111001110000000000100000000000
+00110100010000100000000100110100
+11111000000000000000010111111000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111011010010000
+10111001101000000010100000000000
+11111011111111111110111000100011
+10111001011000000000100000000000
+11111000000000000000010000000010
+01011001011000010000000000000100
+00110100000000100000000000000010
+10111001011000000000100000000000
+11111011111111111110111010011101
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001000100000000000100100
+00110100000000010000000000000000
+01000100010000000000000000000011
+10111001011000000000100000000000
+11011000010000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00101000001000100000000000000000
+01111000000001010000000000000001
+00111000101001011000111011000100
+00101000010000110000000000010100
+00101000010000100000000000001100
+00101000010001000000000000000100
+01011000011001000000000000000000
+00101000010000100000000000001000
+00110100000001001111111111111111
+01011000011000100000000000000100
+00101000001000110000000000000000
+00101000011000100000000000010100
+00101000011000110000000000001100
+00001100010001000000000000001010
+00101000101001000000000000000000
+01011000010001000000000000001100
+00101000011001000000000000000100
+01011000010001000000000000010000
+00101000011000110000000000001000
+01011000010000110000000000010100
+00101000001000100000000000000000
+00101000010000110000000000010100
+00101000010000100000000000001100
+00101000010001100000000000010000
+00101000010001010000000000010100
+00101000010001000000000000011000
+01011000011001100000000000011000
+01011000011001010000000000011100
+01011000011001000000000000100000
+01000000010000100000000000011100
+00110000011000100000000000100100
+00101000001000010000000000000000
+00101000001000100000000000010100
+00101000001000010000000000001100
+01000000001000010000000000011101
+00110000010000010000000000100101
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000010000001000000000000000
+00101000001000100000000000110000
+10111000001000000101100000000000
+10111000011000000111100000000000
+00101000010011010000000000001000
+00101000001000100000000000110100
+00101000001011000000001101011000
+00101000010001000000000000000000
+11011000100000000000000000000000
+01001000000000010000000001100110
+00110101011011100000000000110000
+10111001110000000000100000000000
+11111011111111111111111111000111
+00101001011000010000000000110000
+00101000001001000000000000001100
+01000001011000010000000001011100
+00110000100000010000000000000100
+01000001011000010000000001011101
+00110000100000010000000000000101
+01000001011000010000000001011110
+00110000100000010000000000000110
+00110100000000011111111111111111
+00110000100000010000000000000111
+00110100000000011111111111111110
+00110000100000010000000000001000
+01000001011000010000000001011111
+00110000100000010000000000001001
+01000001011000010000000001100000
+00110000100000010000000000001010
+01000001011000010000000001100001
+00110000100000010000000000001011
+10111001110000000000100000000000
+11111011111111111111111110110011
+00101001011000010000000000110000
+00110100000000110000000000001000
+00101000001001000000000000001100
+10111001100000000000100000000000
+00110100100000100000000000000100
+11111000000000000100001010110010
+00101001011000010000000000110000
+00110101011000100000010000011000
+00101000001000010000000000000000
+00110001100000000000000000001010
+11001000010000010000100000000000
+00010100001000010000000000000011
+00001000001000010100111000101011
+00001101100000010000000000001000
+01000001101000010000000000011010
+00110001100000010000000000001011
+00110100000000010000000000010100
+00110001100000010000000000001100
+00101001101000010000000000011100
+00110001100000010000000000001101
+00110100000000010000000000000010
+00110001100000010000000000001110
+10111001011000000000100000000000
+11111011111111111110110111101011
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001001000000000000000000
+01000100100000000000000000001111
+10111001011000000000100000000000
+10111010000000000001000000000000
+10111001111000000001100000000000
+11011000100000000000000000000000
+01000100001000000000000000001010
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111011010110000
+00111000101001011001000111010100
+11111011111111111110110110010110
+11100000000000000000000000100101
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000011
+00101000001001010000000000001100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000101001010000000000010000
+00111000100001000111011011001100
+11111011111111111110110110001100
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000011
+00101000001001010000000000001100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000101001010000000000010100
+00111000100001000111011011100000
+11111011111111111110110110000011
+00101001011000100000000001001100
+10111001011000000000100000000000
+11111000000000000000010100000111
+00101001011000100000000000100100
+00110100000000010000000000000001
+01000100010000010000000000000011
+00110100000000010000000000000100
+11100000000000000000000000000010
+00110100000000010000000000000110
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000000110
+00110100000000010000000001101011
+01011001011000010000000000000100
+11100000000000000000000000000011
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000100
+10111000001000000101100000000000
+11111011111111111110111000111101
+01000100001000000000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000100
+11100000000000000000000000000101
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110111001011000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000100000001111101000
+01011000001000100000000000001000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00110100000000100000000000000100
+10111000001000000101100000000000
+10111000011000000110000000000000
+11111011111111111110110111000100
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001001000000000000001100
+01000100100000000000000000000110
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11011000100000000000000000000000
+01011100001000000000000000010010
+01000001011000010000001110100001
+01000100001000000000000000001000
+00110100000000100000000000001011
+01011100001000100000000000001011
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11111011111111111111111011010101
+11100000000000000000000000000101
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11111000000000000000001000010001
+01011100001000000000000000000100
+10111001011000000000100000000000
+11111000000000000000000101100110
+01000100001000000000000000000011
+00110100000000010000000000000010
+01011001011000010000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000010
+11111011111111111110111000100101
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001001000000000000000000
+00110100000000110000000000000110
+01011100100000110000000000000011
+00110100001000100000000100000000
+11111000000000000000010111101010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000011000000110000000000000
+00101000001000110000000000000000
+10111000010000000110100000000000
+00110100000000100000000000000101
+10111000001000000101100000000000
+01011100011000100000000000000111
+11111011111111111110110111100100
+01000100001000000000000000001000
+00110100000000010000000000000110
+01011001011000010000000000000100
+00110100000011000000000000000000
+11100000000000000000000001000100
+11111011111111111111111000110111
+10111001011000000000100000000000
+11111011111111111111111001010111
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111110110101111011
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001001100000000000010000
+01000001011001010000001110100001
+01000100110000000000000000001000
+10111000101000000010000000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11011000110000000000000000000000
+10111000001000000010100000000000
+01001000000000010000000000101011
+00110100000000010000000000001011
+01010100101000010000000000001110
+01111000000000010000000000000001
+00111100101000100000000000000010
+00111000001000011001000111100100
+10110100001000100000100000000000
+00101000001001000000000000000000
+01000100100000000000000000001000
+10111001100000000001100000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+11011000100000000000000000000000
+10111000001000000110000000000000
+01011100001000000000000000001101
+11100000000000000000000000010001
+01111100101000010000000000001111
+01111101100011000000000000000000
+10100000001011000110000000000000
+01000101100000000000000000001101
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011011111000
+11111011111111111110110011010110
+11100000000000000000000000000110
+00110100000000010000000000000001
+01000101100000010000000000001111
+00110100000000011111111111111111
+01011101100000010000000000001110
+11100000000000000000000000001100
+00101001011000010000000000110000
+00101000001000010000000000001100
+00101000001000100000000000010000
+00110100000000010000000011111111
+01000100010000010000000000000101
+00101001011000100000000000100100
+00110100000000010000000000000010
+00110100000011000000000000000000
+01011100010000010000000000000100
+00110100000000010000000000000100
+01011001011000010000000000000100
+00110100000011000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111011111111111110110111110111
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001001000000001110100001
+10111000001000000101100000000000
+01000100100000000000000000000101
+00110100000001010000000000001011
+01011100100001010000000000000101
+11111011111111111111111001010000
+11100000000000000000000000000010
+11111000000000000000000110001111
+01011100001000000000000000000011
+10111001011000000000100000000000
+11111000000000000000000011100100
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001001000000001110100001
+10111000001000000101100000000000
+01000100100000000000000000000111
+00110100000001010000000000001000
+01000100100001010000000000000111
+00110100000001010000000000001011
+01011100100001010000000000000111
+11111011111111111111111000111001
+11100000000000000000000000000100
+11111000000000000000000011111101
+11100000000000000000000000000010
+11111000000000000000000100110100
+01011100001000000000000000000100
+10111001011000000000100000000000
+11111000000000000000000011001011
+01000100001000000000000000000011
+00110100000000010000000000000010
+01011001011000010000000000000100
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+00110111100000100000000000010000
+11111000000000000000010010000010
+00101001011000010000001101011000
+00110111100000100000000000100000
+00110100000000110000000000001000
+11111000000000000100000101010010
+01011100001000000000000000001011
+00101101011000100000001110000000
+00101101011000010000001111001010
+01011100010000010000000000001000
+00101001011000010000001101011000
+00101100001000100000000000001000
+00101111100000010000000000101000
+01011100010000010000000000000100
+01000001011000010000000000100000
+00100000001000010000000000000001
+01011100001000000000000000001010
+01000001011001010000000000100000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011100001100
+11111011111111111110110001101000
+00110100000011000000000000000000
+11100000000000000000000000100010
+00101011100000010000000000010000
+00110101011000100000001110110000
+01011001011000010000000011001000
+00101011100000010000000000010100
+01011001011000010000000011001100
+00101011100000010000000000011000
+01011001011000010000000011010000
+00101011100000010000000000011100
+01011001011000010000000011010100
+00110101011000010000000011001000
+11111000000000000000010111000100
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110110011011000
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001000100000000000011000
+01000100010000000000000000000110
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111000001000000110000000000000
+01000100001000000000000000000100
+11100000000000000000000000001011
+10111001011000000000100000000000
+11111000000000000000011111110101
+00101001011000010000001101011000
+00010001011000100000001111001100
+00110100000011000000000000000000
+00010000001000110000000000001010
+01000100011000100000000000000100
+00110000001000100000000000001010
+10111001011000000000100000000000
+11111011111111111110110010001001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000001100
+10111000010000000111000000000000
+10111000011000000110100000000000
+01000100001000000000000000010001
+00110100000000100000000000000000
+00110100000000110000000000010000
+00110101011000010000000010011000
+11111000000000000100000110100111
+10111001011000000000100000000000
+11111000000000000000011101001100
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001001000000000000010100
+01000100100000000000000000000111
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+10111000001000000110000000000000
+01011100001000000000000000011011
+10111001011000000000100000000000
+11111011111111111111110110011101
+01000001011001010000001110100001
+00110100000000010000000000001011
+01010100101000010000000000001100
+01111000000000010000000000000001
+00111100101000100000000000000010
+00111000001000011001001000010100
+10110100001000100000100000000000
+00101000001001000000000000000000
+01000100100000000000000000000110
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+11100000000000000000000000001000
+01000101101000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011011111000
+11111011111111111110110000001101
+10111001011000000000100000000000
+11111000000000000000000001000110
+10111000001000000110000000000000
+01111101100000010000000000000001
+00101001011000100000000000000100
+11001000000000010000100000000000
+10100001100000010110000000000000
+00101001011000010000000000000000
+01000100010000010000000000000100
+10111001011000000000100000000000
+11111000000000000000011100100000
+11100000000000000000000000000110
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000000
+11111011111111111110110100010100
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000110000
+11111000000000000100000011101001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00101000001000100000000000101000
+00110100000000110000000000000001
+01000100010000110000000000001010
+00110100000000110000000000000010
+01000100010000110000000000000011
+01011100010000000000000000001001
+11100000000000000000000000000110
+00110100000000100000000000010010
+01011000001000100000000010000100
+00110100000000100000000000001110
+01011000001000100000000010001000
+11100000000000000000000000000011
+01011000001000000000000010000100
+01011000001000000000000010001000
+00101000001001000000000010000100
+00101000001001010000000000111100
+00110100000000100000000000000000
+10110100101001000010100000000000
+00100000101000110000000000000011
+01000100011000000000000000000011
+00110100000000100000000000000100
+11001000010000110001000000000000
+10110100101000100010100000000000
+00101000001001100000000001000000
+00101000001000100000000010001000
+01011000001001010000000001001100
+00110100000000110000000000000000
+10110100110000100011000000000000
+00100000110001110000000000000011
+01000100111000000000000000000011
+00110100000000110000000000000100
+11001000011001110001100000000000
+10110100110000110001100000000000
+11001000101001000010000000000000
+11001000011000100001000000000000
+01011000001000110000000001010000
+01011000001001000000000001000100
+01011000001000100000000001001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101001111011110100
+00101000010000100000000000100000
+10111000001000000101100000000000
+01000100010000000000000000000110
+11011000010000000000000000000000
+10111000001000000001000000000000
+00110100000000010000000000000001
+01000100010000010000000000011100
+01001000000000100000000000011100
+10111001011000000000100000000000
+00110100000000100000000000000010
+11111011111111111110110010010100
+01011100001000000000000000000110
+00110100000000100000000000000100
+10111001011000000000100000000000
+11111011111111111110110010010000
+00110100000000100000000000000000
+01000100001000100000000000010011
+00101001011000010000000000110000
+00001101011000000000000100100000
+00101000001000010000000000001100
+00101000001000100000000000010000
+00110100000000010000000011111111
+01000100010000010000000000000111
+00101001011000100000000000100100
+00110100000000010000000000000010
+01000100010000010000000000000100
+00110100000000010000000000000110
+01011001011000010000000000000100
+11100000000000000000000000000110
+00110100000000010000000000000100
+01011001011000010000000000000100
+00110100000000100000000000000010
+10111001011000000000100000000000
+11111011111111111110110000011111
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+01000001011000100000000000100000
+00100000010000100000000000000001
+01000100010000000000000000101101
+00101001011000100000000100001100
+00101001011001010000000100000000
+00101001011001000000000100000100
+00101001011000110000000100001000
+01011001011000100000000010110100
+01011001011001010000000010101000
+00110111100000100000000000001100
+01011001011001000000000010101100
+01011001011000110000000010110000
+11111000000000000000001101001011
+01000001011000100000001110100111
+01000001011000010000000000100000
+00100000010000100000000000000010
+01000100010000000000000000001110
+00111000001000010000000000000010
+00110001011000010000000000100000
+00101101011000010000001111001010
+00101001011001000000001110110000
+00101001011000110000001110110100
+00001101011000010000001101111100
+00101001011000100000001110111000
+00101001011000010000001110111100
+01011001011001000000000010011000
+01011001011000110000000010011100
+01011001011000100000000010100000
+01011001011000010000000010100100
+11100000000000000000000000010010
+00100000001000010000000011111101
+00110001011000010000000000100000
+00101011100000010000000000001100
+00110101011000100000001110110000
+01011001011000010000000010011000
+00101011100000010000000000010000
+01011001011000010000000010011100
+00101011100000010000000000010100
+01011001011000010000000010100000
+00101011100000010000000000011000
+01011001011000010000000010100100
+00110101011000010000000010011000
+11111000000000000000010011010010
+10111001011000000000100000000000
+01011001011000000000000011111000
+01011001011000000000000011111100
+11111000000000000000011011111011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+01000001011000100000000000100000
+00100000010000110000000000000001
+01011100011000000000000000000100
+01111000000000010000000000000001
+00111000001000010111011110101000
+11100000000000000000000000000101
+00100000010000100000000000000010
+01011100010000000000000000000111
+01111000000000010000000000000001
+00111000001000010111011111100100
+01111000000000100000000000000001
+00111000010000101001001001000100
+11111000000000000010000010010001
+11100000000000000000000000100111
+00101101011001000000001101111100
+00101101011000110000001111001010
+01000100100000110000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001001001000100
+00111000001000010111100000011100
+11111000000000000010000010001000
+11100000000000000000000000011110
+00110111100011010000000000010100
+10111001101000000001000000000000
+11111000000000000000001100111001
+01000001011000010000000000100000
+00110101011011000000000010011000
+10111001101000000001000000000000
+00100000001000010000000011111101
+00110001011000010000000000100000
+10111001100000000000100000000000
+11111000000000000000010010100001
+10111001100000000000100000000000
+00110101011000100000001110110000
+11111000000000000000010010011110
+00101001011000010000001110111000
+01011001011000010000000011111000
+00101001011000010000001110111100
+01011001011000010000000011111100
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001000110000000000101000
+01000100011000000000000000000111
+10111001100000000001000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+00110100000000100000000000000001
+01000100001000100000000000000100
+01001000000000010000000000000100
+10111001011000000000100000000000
+11111000000000000000011010111011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100111010000000000001000
+10111000010000000110000000000000
+00101000001000100000000001001100
+10111000011000000111000000000000
+00101000001000110000000010000100
+01000000010011010000000000000000
+00101000001000100000000000110100
+10110101100000110001100000000000
+00100001101011010000000000001111
+00101000010001010000000000001100
+00101000001000100000000001000100
+10111001101000000010000000000000
+10111000001000000101100000000000
+11011000101000000000000000000000
+10111000001000000001000000000000
+00110100000000111111111111111110
+00110100000000010000000000000000
+01000100010000110000000000101111
+01111000000010010000000000000001
+00111001001010011001011101011000
+00001001101000010000000000001100
+01001100010011000000000000001100
+10110101001000010100100000000000
+00101001001001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111100001011100
+10111001101000000011000000000000
+11111011111111111110101011111000
+00110100000000011111111111111111
+11100000000000000000000000100000
+00101001011010000000000100011100
+00101001011010100000000100011000
+10110101001000010100100000000000
+00000001000001110000000000010000
+00100001000010001111111111111111
+00001001000010000000001111101000
+00101001001000010000000000000000
+00111101010010100000000000010000
+00101001011001100000000100010100
+01111000000001000000000000000001
+00000001000010000000000000010000
+01011011100000010000000000000100
+00110100000000100000000000000101
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111100001111100
+10111001100000000010100000000000
+10111001010001110011100000000000
+11111011111111111110101011100011
+00110100000000010000000000000001
+01011101110000010000000000000101
+00010001011000100000000100010000
+00110100000000010000000010000000
+00100000010000100000000011000000
+01000100010000010000000000000110
+00101001011000010000010000010000
+00110100001000010000000000000001
+01011001011000010000010000010000
+00110100000000010000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000001
+00101011100111010000000000001000
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000001000
+11111000000000000011111110100100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000011100000000000000001
+00111001110011101001001001100100
+01111000000001000000000000000001
+10111000010000000110100000000000
+10111000011000000110000000000000
+00110100000000100000000000000011
+00110100000000110000000000000010
+00111000100001000111100111011000
+10111001110000000010100000000000
+10111000001000000111100000000000
+00110101101100010000000000101001
+11111011111111111110101010110100
+00110101100100000000000000101001
+10111010001000000000100000000000
+10111010000000000001000000000000
+11111011111111111111111111100001
+01011100001000000000000000110011
+00101101100000010000000000110010
+00101101101010110000000000110010
+11001001011000010101100000000000
+00110101011000100000000000000001
+00110100000000010000000000000010
+01010100010000010000000001000011
+00101001111000100000000000110000
+00110100000000110000000000000001
+00110101101000010000000001100000
+00101000010000100000000000010100
+01011101011000110000000000001011
+11111011111111111111111111010100
+01011100001000000000000000111100
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100010100100
+10111001110000000010100000000000
+00110100000001100000000010010000
+11100000000000000000000000001110
+00110100000000111111111111111111
+00110101100011000000000001100000
+01011101011000110000000000001110
+10111001100000000000100000000000
+11111011111111111111111111000110
+01011100001000000000000000101110
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100010100100
+10111001110000000010100000000000
+00110100000001100000000010011001
+11111011111111111110101010001100
+00110100000010110000000000000000
+11100000000000000000000000100100
+10111001100000000001000000000000
+11111011111111111111111110111001
+10111000001000000101100000000000
+01011100001000000000000000100000
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100010110100
+10111001110000000010100000000000
+00110100000001100000000010100001
+11111011111111111110101001111110
+11100000000000000000000000010111
+01000001101010110000000000011010
+01000001100000010000000000011010
+01011101011000010000000000001110
+00101001101010110000000000011100
+00101001100000010000000000011100
+01011101011000010000000000001011
+00101001101010110000000000100000
+00101001100000010000000000100000
+01011101011000010000000000001000
+00101001101000100000000000100100
+00101001100000010000000000100100
+00110100000010110000000000000000
+01011100010000010000000000001010
+01000001101010110000000000101000
+01000001100000010000000000101000
+01000101011000010000000000000011
+11001001011000010101100000000000
+11100000000000000000000000000101
+10111010001000000000100000000000
+10111010000000000001000000000000
+11111011111111111111111110011001
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000100000000000000000
+00110100000000110000000000010000
+11111000000000000011111111001110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001000010000000000110000
+00101000001011000000000000010100
+00101000001010110000000000001100
+00101000001000010000000000010000
+00001100001000000000000000000000
+00110100001000010000000000001000
+11111011111111111111111111101100
+00101001101000010000000000110000
+00101000001000010000000000010000
+00110100001000010000000000011000
+11111011111111111111111111101000
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000101000
+11111000000000000011111110110110
+00101001011000010000000000000100
+01011001100000010000000000000000
+00101001011000010000000000001000
+00001101100000000000000000001000
+01011001100000010000000000000100
+00101001011000010000000000000100
+01011001100000010000000000010000
+00101001011000010000000000001000
+01011001100000010000000000010100
+00101001011000100000000000010100
+00101001011000010000000000011000
+00101001011000110000000000010000
+01011001100000100000000000011100
+01011001100000010000000000100000
+01011001100000110000000000011000
+01000001011000010000000000011100
+00110100000000100000000000000001
+00110001100000010000000000100100
+01000001011000010000000000011101
+00110001100000010000000000100101
+00101001101000010000000000110000
+00101000001000010000000000011000
+01011000001000100000000000011000
+00110100000000101111111110100000
+00110000001000100000000000011100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111101110100
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101100001000100000000100100000
+10111000001000000101100000000000
+00110100000011010000000000000000
+00110100000011000000000000000001
+01011100010000000000000000010100
+00101000001000110000000000000000
+10111000010000000110100000000000
+00110100000000100000000000000110
+01011100011000100000000000010000
+11111011111111111111111110111100
+00101001011011000000000000000000
+11100000000000000000000100010011
+00001001100000100000000001110000
+00001001101000110000000001110000
+10111001011000000000100000000000
+00110100010000100000000100101000
+00110100011000110000000100101000
+10110101011000100001000000000000
+10110101011000110001100000000000
+11111011111111111111111100111101
+01001000000000010000000000000010
+11100000000000000000000000000010
+10111001100000000110100000000000
+00110101100011000000000000000001
+00101101011001100000000100100000
+01001000110011001111111111110011
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011001100
+10111001101000000010100000000000
+11111011111111111110100111111000
+00011101011000010000000100100010
+01000100001011010000000000100010
+00001101011011010000000100100010
+00101001011011000000000000110000
+00110100000011110000000000000000
+00110100000011100000000000000001
+11100000000000000000000000010101
+00101001100000100000000000000000
+00001001110000010000010000011000
+10110100010000010000100000000000
+00101100001000110000000100100000
+01000100011000000000000000001111
+00001001111001000000010000011000
+00011100001000110000000100100010
+10110100010001000010000000000000
+00011100100000100000000100100010
+00001000011000110000000001110000
+00001000010000100000000001110000
+00110100011000110000000100101000
+10110100001000110001100000000000
+00110100010000100000000100101000
+10110100100000100001000000000000
+11111011111111111111111100011001
+01001000000000010000000000000010
+11100000000000000000000000000010
+10111001110000000111100000000000
+00110101110011100000000000000001
+00101001100000010000000000001100
+00101100001000010000000000001100
+01001000001011101111111111101010
+00101001100000010000000000011100
+01000100001011110000000000000100
+00110100000000010000000000000001
+01011001100011110000000000011100
+01011001100000010000000000100000
+00101001011000100000000000100100
+00110100000000010000000000000010
+01000100010000010000000001101100
+00101101011000010000000100100000
+01011100001000000000000000000100
+00101001011000010000000000000000
+00110100000011000000000000000100
+01000100001011000000000011010011
+00101001011000010000000000110000
+00001001101011000000000001110000
+00101000001000010000000000001100
+01000000001001000000000000001001
+01000000001000110000000000001010
+01000000001000100000000000001011
+01000000001010010000000000000100
+01000000001010000000000000000101
+01000000001001110000000000000110
+01000000001001100000000000000111
+01000000001001010000000000001000
+00110011100010010000000001001001
+00110011100010000000000001001010
+00110011100001110000000001001011
+00110011100001100000000001001100
+00110011100001010000000001001101
+00110011100001000000000001001110
+00110011100000110000000001001111
+00110011100000100000000001010000
+00101000001000100000000000011000
+00101000001001000000000000010000
+00101000001000110000000000010100
+01011011100000100000000001000100
+01000000001000100000000000011100
+01011011100000110000000001000000
+00110101100000110000000100101000
+00110011100000100000000000111010
+01000000001000100000000000011101
+10110101011000110001100000000000
+01011011100001000000000000111100
+00110011100000100000000001001000
+00101000001000100000000000000100
+00001111100000000000000001010010
+01011011100000100000000010000000
+00101000001000010000000000001000
+00110111100000100000000000100000
+01011011100000010000000010000100
+10111001011000000000100000000000
+11111011111111111111111011011110
+00101001011000100000000000100100
+00110100000001000000000000000001
+01000100010001000000000000101010
+00101001011000100000000000110000
+01111000000001010000000000000001
+00110100000001100000000001111111
+00101000010000110000000000001100
+00111000101001011001001001110100
+00101000011001110000000000010000
+01001000111001100000000000000100
+01001000000000010000000000100011
+01011100001000000000000000011001
+11100000000000000000000000000110
+01001000000000010000000000100000
+01000100001000000000000000000100
+00101100011000010000000000001100
+01011100001001000000000000001010
+11100000000000000000000000101110
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011101100
+11111011111111111110100110001110
+00110100000011000000000000000010
+11100000000000000000000010010010
+00101001011000110000001111011000
+00101000010000010000000000011100
+01000100011000010000000000100011
+10110101011011000001000000000000
+00110111100000010000000001001001
+00110100010000100000000101010001
+01011011100001010000000000011100
+11111011111111111111111010110101
+00101011100001010000000000011100
+01011100001000000000000000010000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011111000
+11111011111111111110100101111100
+00110100000011000000000000000111
+11100000000000000000000010000000
+01001100001000000000000000000111
+10111001011000000000100000000000
+11111011111111111111111100100100
+01111000000001100000000000000001
+00110100000011000000000000000110
+00111000110001101000000011010000
+11100000000000000000000000000100
+01111000000001100000000000000001
+00110100000011000000000000000101
+00111000110001100111100011000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100001000
+00111000101001011001001001110100
+11111011111111111110100101101000
+11100000000000000000000001101101
+00001001101000110000000001110000
+00101001011000100000000000110000
+10110101011000110001100000000000
+00101100011001000000000101011010
+00101000010000010000000000010100
+00101000010011000000000000011000
+00101000010000100000000000010000
+00110100100001000000000000000001
+00001100010001000000000000000000
+00110100011000100000000110001000
+00101000010001000000000000000100
+00101000011001010000000110001000
+01011000001001000000000000000100
+01011000001001010000000000000000
+00101100010000100000000000001000
+00001100001000100000000000001000
+00110100011000100000000101001000
+01000000010011100000000000001001
+01000000010001100000000000001110
+01000000010001010000000000001111
+01000000010001000000000000010000
+01000000010010100000000000001010
+01000000010010010000000000001011
+01000000010010000000000000001100
+01000000010001110000000000001101
+00110000001011100000000000010000
+00110000001001000000000000010111
+00110000001010100000000000010001
+00110000001010010000000000010010
+00110000001010000000000000010011
+00110000001001110000000000010100
+00110000001001100000000000010101
+00110000001001010000000000010110
+00110100011001000000000101000000
+00101000100001010000000000001000
+00101000100001100000000000000100
+00101000100001000000000000001100
+00110100011011100000000100111000
+01011000001001010000000000011100
+01011000001001100000000000011000
+01011000001001000000000000100000
+01000001110001000000000000001010
+00110000001001000000000000100100
+01000000010000100000000000001000
+00110000001000100000000000100101
+01000000011000010000000101011100
+00110001100000010000000000011100
+00011101110001010000000000001000
+00011101100000010000000000000000
+01000100001001010000000000001110
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100011000
+11111011111111111110100100101111
+00101101110000010000000000001000
+00110100000000100000000000000000
+00001101100000010000000000000000
+00101001011000010000000000111000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00001001101011010000000001110000
+10110101011011010000100000000000
+00110100001000010000000101101001
+01000000001000100000000000000111
+00100000010000100000000000000100
+01111100010000100000000000000000
+01011001100000100000000000000100
+01000000001000100000000000000111
+00100000010000100000000000000010
+01111100010000100000000000000000
+01011001100000100000000000001000
+01000000001000100000000000000111
+00100000010000100000000000000001
+01011001100000100000000000001100
+01000000001000100000000000000111
+00100000010000100000000000010000
+01111100010000100000000000000000
+01011001100000100000000000010000
+01000000001000100000000000000111
+00100000010000100000000000100000
+01111100010000100000000000000000
+01011001100000100000000000010100
+01000000001000010000000000000111
+00100000001000010000000000001000
+01111100001000010000000000000000
+01011001100000010000000000011000
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001001000000000000011100
+01000100100000000000000000000111
+00110101101000100000000101101000
+10110101011011010110100000000000
+10111001011000000000100000000000
+10110101011000100001000000000000
+00110101101000110000000100110100
+11011000100000000000000000000000
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100101100
+00111000101001011001001001110100
+11111011111111111110100011111100
+00110100000011000000000000001001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000010001100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001010110000000001001100
+00110100000000010000000000001111
+00110100000011110000000000000000
+01010100010000010000000000100001
+00001000010011100000000000001100
+01111000000000010000000000000001
+00111000001000011001011101011000
+10110100001011100111000000000000
+00101101110011110000000000000100
+01000001110011000000000000001001
+00110101011000010000000000001000
+00110001011000100000000000000000
+00001101011011110000000000000010
+00110100000000100000000000000000
+00110100000000110000000000001000
+11111000000000000011111001010001
+00001101011000000000000000000110
+01000001110000010000000000001000
+00110001011000010000000000100000
+00110100000000010000000000000001
+01000101100000010000000000001000
+01000101100000000000000000000100
+00110100000000010000000000000010
+01011101100000010000000000001100
+11100000000000000000000000001000
+00101001101000010000001101011000
+01000000001000010000000000001011
+11100000000000000000000000000011
+00101001101000010000001101011000
+01000000001000010000000000001101
+00110001011000010000000000100001
+11100000000000000000000000000101
+00101001101000010000001101011000
+01000000001000010000000000001010
+11100011111111111111111111111100
+00110001011011000000000000100001
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01000000010000010000000000000000
+10111000010000000110000000000000
+00110100000000110000000000000010
+00000000001000010000000000000100
+00110101011011010000001111000000
+00110001011000010000001110100000
+01000000010000010000000000000000
+00100000001000010000000000001111
+00110001011000010000001110100001
+01000000010000010000000000000001
+00100000001000010000000000001111
+00110001011000010000001110100010
+00101100010000010000000000000010
+00001101011000010000001110100100
+01000000010000010000000000000100
+00110100010000100000000000000110
+00110001011000010000001110100110
+00110101011000010000001110100111
+11111000000000000011110110011101
+00101001100000100000000000001000
+00101001100000010000000000001100
+00110100000000110000000000001000
+01011001011000100000001110111000
+01011001011000010000001110111100
+00110101100000100000000000010100
+01011001011000000000001110110000
+01011001011000000000001110110100
+10111001101000000000100000000000
+11111000000000000011110110010011
+00101101100000010000000000011100
+00001101011000010000001111001000
+00101101100000010000000000011110
+00001101011000010000001111001010
+01000001100000010000000000100001
+00110001011000010000001111001100
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101100001000100000000000001000
+01000100010000000000000000001010
+10111001101000000001000000000000
+00110100000000110000000000001000
+11111000000000000011110101100101
+01011100001000000000000000001001
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101100001000100000000000001000
+00101101011000010000001111001000
+01011100010000010000000000000100
+01000001011000010000000000100000
+00111000001000010000000000000001
+11100000000000000000000000000011
+01000001011000010000000000100000
+00100000001000010000000011111110
+00110001011000010000000000100000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000110000000000100010
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000010000000000100000000000
+00110100000000100000000000000000
+11111000000000000011110111100111
+00101001011000010000001101011000
+00110100000000110000000000001000
+01000000001000010000000000001110
+00110001100000010000000000000001
+00101001011000010000000000110000
+00101000001000010000000000001100
+01000000001000010000000000011110
+00110001100000010000000000000100
+00101001011000100000001101011000
+00110101100000010000000000010100
+11111000000000000011110101011110
+00101001011000010000001101011000
+00101100001000010000000000001000
+00001101100000010000000000011100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110100000000100000000000000000
+00101000001011010000000001001100
+10111000001000000110000000000000
+11111011111111111111111101100010
+00101101100000100000001101111110
+00110100010000100000000000000001
+00001101100000100000001101111110
+00110100000000100000000000000010
+00110001101000100000000000000110
+00101101100000100000001101111110
+00001101101000100000000000011110
+00101001011000110000000000000000
+00101001011000100000000000000100
+00001101101000110000000000100010
+01011001101000100000000000100100
+00101001011000110000000000001000
+00101101011000100000000000001100
+00111100011000110000000000010000
+10111000011000100001000000000000
+01011001101000100000000000101000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000110000000000101000
+00101100001001000000000000100010
+00101000001000010000000000100100
+01011000010001000000000000000000
+01011000010000010000000000000100
+00000000011000010000000000010000
+00111100011000110000000000010000
+01011000010000010000000000001000
+01011000010000110000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101100001000010000000000100010
+10111000010000000110000000000000
+00110100000000110000000000001000
+00001100010000010000000000000100
+00101001011000010000000000100100
+01011000010000010000000000000000
+00101001011000010000000000101000
+01011000010000010000000000001000
+00101101011000010000000000101100
+00001100010000010000000000001100
+01000001011000010000000000101111
+00110000010000010000000000001110
+01000001011000010000000000110000
+01011000010000010000000000010000
+01000001011000010000000000110001
+01011000010000010000000000010100
+00101101011000010000000000110010
+01011000010000010000000000011000
+01000001011000010000000000110100
+00110000010000010000000000011100
+00110100010000010000000000011101
+00110101011000100000000000110101
+11111000000000000011110100010000
+00101101011000010000000000111101
+00001101100000010000000000100110
+01000001011000010000000000111111
+00110001100000010000000000101000
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+10111001100000000001000000000000
+11011000011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001000110000000000101000
+00101100001001000000000000100010
+00101000001000010000000000100100
+01011000010001000000000000000000
+01011000010000010000000000000100
+00000000011000010000000000010000
+00111100011000110000000000010000
+01011000010000010000000000001000
+01011000010000110000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+10111000001000000101100000000000
+00101100001000100000000000100010
+00101000001000010000000000101000
+00101001011000110000000000100100
+01011001100000100000000000000000
+00000000001000100000000000010000
+00111100001000010000000000010000
+01011001100000110000000000000100
+01011001100000100000000000001000
+01011001100000010000000000001100
+00110101011000100000000000101100
+00110101100000010000000000010000
+00110100000000110000000000001000
+11111000000000000011110011100011
+00101101011000010000000000110100
+00001101100000010000000000011000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000000100000000000001011
+10111000001000000101100000000000
+00101000001011000000000001001100
+11111011111111111111111011101001
+10111000001000000110100000000000
+00101101011000010000001110010100
+00110101100001010000000000000111
+00110111100001000000000000010100
+00110100001000010000000000000001
+00001101011000010000001110010100
+00101001011000010000000000110000
+00110100000000100000000000000001
+00101000001000110000000000011000
+00110100011000010000000000001100
+01011011100000010000000000010100
+00110100011000010000000000001000
+01011011100000010000000000011000
+00110100011000010000000000000100
+01011011100000010000000000011100
+00110100011000010000000000011000
+01011011100000010000000000100000
+00110100011000010000000000010000
+00110100011000110000000000010100
+01011011100000010000000000100100
+01011011100000110000000000101000
+00110001100000000000000000000110
+00110001100000000000000000000111
+00110100000000110000000000000000
+00110100000000010000000000000110
+00101000100001100000000000000000
+00101000110001100000000000000000
+01000100110000000000000000000101
+01000000101001110000000000000000
+10111100010000110011000000000000
+10111000110001110011000000000000
+00110000101001100000000000000000
+00110100011000110000000000000001
+00110100100001000000000000000100
+01011100011000011111111111110111
+00101101011000010000001110010100
+00110100000000100000000000000000
+00110100000000110000000000001010
+00001101100000010000000000011110
+00110101100000010000000000100010
+11111000000000000011110100101000
+00101001011000010000000000110000
+00101000001000100000000000011000
+00101000001000010000000000010100
+00101100010000100000000000000000
+00001101100000100000000000101100
+01000000001000010000000000100100
+00110001100000010000000000101111
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101000001000010000000000011000
+00110001100000010000000000110000
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101000001000010000000000011100
+00110001100000010000000000110001
+00101001011000010000000000110000
+00101000001000110000000000010100
+00101000011000010000000000100000
+00001101100000010000000000110010
+01000000011000010000000000100101
+00110100000000110000000000001000
+00110001100000010000000000110100
+00101001011000010000000000110000
+00101000001000100000000000010100
+00110101100000010000000000110101
+00110100010000100000000000010000
+11111000000000000011110010001111
+00101001011000010000000000110000
+01111000000000110000000000000001
+00111000011000111001111011110100
+00101000001000100000000000010000
+00101000001000010000000000011000
+00101100010000100000000000000000
+00001101100000100000000000111101
+01000000001000010000000000011100
+00110001100000010000000000111111
+00101000011000110000000000110100
+01000100011000000000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111000001000000110100000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110001101001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000111000
+00110111100011000000000000010000
+10111000001000000101100000000000
+00101000010000110000000000000000
+10111001100000000001000000000000
+11011000011000000000000000000000
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111011111111111111111100010101
+10111000001000000001000000000000
+00110100000000110000000000000001
+10111001011000000000100000000000
+11111011111111111111110001010010
+01011100001000000000000000010111
+00110100000000100000000000001000
+10111001011000000000100000000000
+00101001011011000000000001001100
+11111011111111111111111001110111
+10111000001000000001000000000000
+00101101011000010000001101111110
+00001101100000010000000000011110
+00101001011000110000000100010000
+00101001011000010000000100010100
+00001101100000110000000000100010
+01011001100000010000000000100100
+00101001011000010000000100011100
+00101001011001000000000100011000
+00000000001000110000000000010000
+00111100100001000000000000010000
+00100000001000011111111111111111
+10111000100000110001100000000000
+01011001100000110000000000101000
+01011001100000010000000000001100
+00110100000000110000000000000000
+10111001011000000000100000000000
+11111011111111111111110000111011
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000000000
+00110111100000100000000000010000
+11011000011000000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000001
+00101001011011000000000001001100
+11111011111111111111111001010011
+10111000001000000001000000000000
+00101101011000010000001110000000
+00110100001000010000000000000001
+00100000001000011111111111111111
+00001101011000010000001110000000
+00001101100000010000000000011110
+00101011100000010000000000010100
+00101011100000110000000000010000
+01011001100000010000000000100100
+00001101100000110000000000100010
+00101011100000010000000000011000
+00101111100000110000000000011100
+00111100001000010000000000010000
+10111000001000110001100000000000
+01011001100000110000000000101000
+10111001011000000000100000000000
+00110100000000110000000000000001
+11111011111111111111110000010111
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000001010110000000001001100
+10111000010000000110100000000000
+00110100000000100000000000001001
+10111000001000000110000000000000
+11111011111111111111111000110001
+01011001011000000000000000001000
+00101001101000110000000000001100
+10111000001000000111000000000000
+00101001101000010000000000001000
+00100000011000101111111111111111
+01011001011000100000000000001100
+00101101100000100000001111001010
+00111100001000010000000000010000
+00000000011000110000000000010000
+00001101011000100000000000011110
+00101001101000100000000000000000
+00101001101001000000000000000100
+10111000001000110001100000000000
+00001101011000100000000000100010
+01011001011001000000000000100100
+01011001011000110000000000101000
+00110101100000100000001111000000
+00110101011000010000000000101100
+00110100000000110000000000001000
+11111000000000000011110000000111
+00101101100000010000001111001000
+10111001110000000001000000000000
+00110100000000110000000000000000
+00001101011000010000000000110100
+10111001100000000000100000000000
+11111011111111111111101111101101
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001000110000000000000000
+10111000001000000101100000000000
+00101000001001000000000000000100
+01001000000000110000000000000110
+10111000011001000000100000000000
+00110100000011010000000000000000
+00110100000011000000000000000001
+01000100001000000000000000001001
+11100000000000000000000000001110
+00010100011000100000000000011000
+00110100000000010000000010000000
+00100000010000100000000011000000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01011100010000010000000000001000
+11100000000000000000000000000101
+00101001011000100000000000001000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01001000001000100000000000000011
+00110100000011010000000000000000
+00110100000011000000000000000001
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101011100111
+00101001011001000000000000001100
+00101001011000110000000000001000
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101011100000
+01011001011000010000000000001000
+01011001011000100000000000001100
+01111000000001001100101000000000
+11100000000000000000000000001111
+00101001011001100000000000000100
+00101001011001010000000000000000
+00110100001000010011101110011010
+00110100110000111111111111111111
+11110100110000110011000000000000
+01011001011000110000000000000100
+10110100010001000001100000000000
+11110100010000110001000000000000
+00110100101001011111111111111111
+10110100110001010010100000000000
+10110100010000010000100000000000
+01011001011001010000000000000000
+01011001011000010000000000001000
+01011001011000110000000000001100
+00101001011000010000000000001000
+00101001011000100000000000001100
+01001000000000011111111111110000
+11100000000000000000000000001111
+00101001011001010000000000000100
+00101001011001100000000000000000
+00110101111011111100010001100101
+00110100101000100000000000000001
+11110100101000100010100000000000
+01011001011000100000000000000100
+10110101110000110001000000000000
+11110101110000100111000000000000
+10110100101001100010100000000000
+10110101110011110111000000000000
+01011001011001010000000000000000
+01011001011011100000000000001000
+01011001011000100000000000001100
+11100000000000000000000000000100
+00110100000000010011101110011010
+01111000000001001100101000000000
+01111000000000110011011000000000
+00101001011011110000000000001000
+00101001011011100000000000001100
+01001001111000011111111111101101
+01011101111000010000000000000010
+01010101110001001111111111101011
+00101001011000110000000000000000
+00101001011001000000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101010101111
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001111000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001100000000010000000000000
+11111000000000000011101010101000
+01011001011000010000000000001000
+01011001011000100000000000001100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001100000000000000100
+00101000001001000000000000000100
+00101000010001110000000000000000
+00101000001001010000000000000000
+10110100110001000010000000000000
+11110100110001000011000000000000
+10110100111001010010100000000000
+10110100110001010010100000000000
+01011000001001010000000000000000
+01011000001001000000000000000100
+00101000010001000000000000001100
+00101000010001010000000000001000
+00101000001000100000000000001100
+00101000001001100000000000001000
+10110100100000100001000000000000
+11110100100000100010000000000000
+10110100101001100010100000000000
+10110100100001010010000000000000
+01011000001001000000000000001000
+01011000001000100000000000001100
+11111011111111111111111110000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000000100
+00101000001001100000000000000100
+00101000010001010000000000000000
+00101000001001110000000000000000
+11001000110001000010000000000000
+11110100100001100011000000000000
+11001000111001010010100000000000
+11001000101001100010100000000000
+01011000001001010000000000000000
+01011000001001000000000000000100
+00101000010001100000000000001000
+00101000001001010000000000001100
+00101000010000100000000000001100
+00101000001001000000000000001000
+11001000101000100001000000000000
+11110100010001010010100000000000
+11001000100001100010000000000000
+11001000100001010010000000000000
+01011000001001000000000000001000
+01011000001000100000000000001100
+11111011111111111111111101100111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001011110000000000001000
+00101001011011000000000000001100
+00101000001011010000000000000000
+00101000001011100000000000000100
+00000001100011000000000000000001
+00111101111000010000000000011111
+00010101111011110000000000000001
+10111000001011000110000000000000
+00010101101000100000000000011111
+01011001011011110000000000001000
+01011001011011000000000000001100
+00100001110000010000000000000001
+00111000010000100000000000000001
+01000100001000000000000000001011
+00010100010000010000000000011111
+00110100000000110001110111001101
+01111000000001000110010100000000
+11111000000000000011101001010000
+10110100010011000110000000000000
+11110100010011000001000000000000
+10110100001011110000100000000000
+10110100010000010000100000000000
+01011001011000010000000000001000
+01011001011011000000000000001100
+00111101101000100000000000011111
+00000001110000010000000000000001
+00010101101011010000000000000001
+10111000010000010000100000000000
+01011001011011010000000000000000
+01011001011000010000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000000100
+00101000001001010000000000000000
+01111000000000110000000000000001
+11001000000000100010000000000000
+00111000011000110111100100111000
+01001000000001010000000000001100
+01111000000000110000000000000001
+10111000101000100010000000000000
+00111000011000110111110001001000
+01011100100000000000000000000111
+00101000001001010000000000001000
+01111000000000110000000000000001
+00111000011000110111100100111000
+01001000100001010000000000000011
+01111000000000110000000000000001
+00111000011000110111110001001000
+10111000010000000010000000000000
+00101000001000100000000000001000
+00101000001000010000000000001100
+00111100010001100000000000010000
+00000000001001010000000000010000
+10111000110001010010100000000000
+00010100010001100000000000010000
+01001000000001100000000000000010
+11100000000000000000000000001000
+11001000000000010000100000000000
+01111100001001010000000000000000
+11001000000000100001000000000000
+11001000010001010010100000000000
+00111100101001010000000000010000
+00000000001000010000000000010000
+10111000101000010010100000000000
+01111000000010110000000000000001
+00111001011010111011010111100000
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000100111100100111100
+11111000000000000001101101000100
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000101100
+01011011100011000000000000101000
+01011011100011010000000000100100
+01011011100011100000000000100000
+01011011100011110000000000011100
+01011011100100000000000000011000
+01011011100100010000000000010100
+01011011100100100000000000010000
+01011011100100110000000000001100
+01011011100101000000000000001000
+01011011100111010000000000000100
+00101000010011010000000000010000
+10111000001000000111000000000000
+10111000010000000101100000000000
+10111000011000000110000000000000
+00101000010100110000000000010100
+01001001101000000000000000001100
+01011101101000000000000000000010
+01011110011011010000000000001010
+00101001100000010000000000000000
+01011001011000010000000000001000
+00101001100000010000000000000100
+01011001011000010000000000001100
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001011000000000000000001000
+01011001011000000000000000001100
+00101001110000010000000000110000
+00101001011100100000000000001000
+00101001011100010000000000001100
+00101000001000010000000000001000
+00110100000011110000000000111111
+00011100001000010000000000011000
+00110100001100001111111111111111
+11001001111000010111100000000000
+10111001111000000001100000000000
+10111010010000000000100000000000
+10111010001000000001000000000000
+11111000000000000011101000011011
+10111000001000100000100000000000
+00110110000101000000000000000001
+00110101111011110000000000000001
+00110110000100001111111111111111
+01011100001000001111111111111000
+10111010100000000001100000000000
+00110100000000100000000000000001
+11111000000000000011101000000100
+10111000001000000001100000000000
+01001001101000110000000000000100
+01011101101000110000000000000101
+01010110011000100000000000000010
+11100000000000000000000000000011
+01011001011000110000000000010000
+01011001011000100000000000010100
+00101001011001000000000000010000
+00101001011001010000000000010100
+01001000011001000000000000000100
+01011100011001000000000000001000
+01010100010001010000000000000010
+11100000000000000000000000000110
+00110100101000010000000000000001
+11110100101000010010100000000000
+01011001011000010000000000010100
+10110100101001000010000000000000
+01011001011001000000000000010000
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001100100100000000000000000
+01011001100100010000000000000100
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001100000000000000000000000
+01011001100000000000000000000100
+00101001011000110000000000001100
+00101001011001100000000000001000
+00101001100000010000000000000000
+00111100011000100000000000000001
+00111100110001010000000000000001
+11110100011000100011100000000000
+10110100010000110001100000000000
+10110100111001010010100000000000
+11110100010000110001000000000000
+10110100101001100010100000000000
+10110100010001010001000000000000
+00101001100001000000000000000100
+01001000001000100000000000000100
+01011100001000100000000000011101
+01010100100000110000000000000010
+11100000000000000000000000011011
+00111100001001100000000000010000
+00000000100001010000000000010000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100101001000
+10111000110001010010100000000000
+11111011111111111110010110100010
+00101001011001000000000000010100
+00101001011000110000000000010000
+00101001011001010000000000001100
+00110100100000010000000000000001
+11110100100000010010000000000000
+00111100101000100000000000000001
+10110100100000110010000000000000
+00101001011000110000000000001000
+11110100101000100010100000000000
+10110100001000100001000000000000
+00111100011000110000000000000001
+11110100001000100000100000000000
+10110100101000110001100000000000
+10110100100000110001100000000000
+10110100001000110000100000000000
+01011001100000010000000000000000
+01011001100000100000000000000100
+00101001011011010000000000010100
+00101001011000010000000000010000
+00101001011001000000000000001100
+00110101101000101111111111111111
+11110101101000100001100000000000
+00110100001000011111111111111111
+10110100011000010000100000000000
+00101001011000110000000000001000
+11111000000000000011100110001110
+00101001100000110000000000000100
+00101001100001000000000000000000
+10110100011000100001000000000000
+11110100011000100001100000000000
+10110100100000010000100000000000
+10110100011000010000100000000000
+01011011100000010000000000110000
+01011011100000100000000000110100
+00110111100000010000000000110000
+10111001101000000001000000000000
+11111011111111111110101100010010
+00101011100000010000000000110100
+00101011100001100000000000110000
+01111000000001000000000000000001
+01011001011000010000000000001100
+01011001011001100000000000001000
+01011001100001100000000000000000
+01011001100000010000000000000100
+00000000001001110000000000010000
+00101001011001010000000000010100
+00111100110001100000000000010000
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100101100000
+10111000110001110011000000000000
+11111011111111111110010101101101
+00101011100111010000000000000100
+00101011100010110000000000101100
+00101011100011000000000000101000
+00101011100011010000000000100100
+00101011100011100000000000100000
+00101011100011110000000000011100
+00101011100100000000000000011000
+00101011100100010000000000010100
+00101011100100100000000000010000
+00101011100100110000000000001100
+00101011100101000000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00101000001011100000000000000000
+10111000001000001000000000000000
+00101000010000010000000000000100
+00101001110010110000000000000100
+00101000010011010000000000000000
+10111000010000000110000000000000
+00101001011011110000000000100100
+00101001011000100000000000100000
+01111000000001010000000000000001
+10110100001011110111100000000000
+11110100001011110000100000000000
+10110101101000100110100000000000
+10110100001011010110100000000000
+00101001110000010000000000001000
+00111000101001011000111011010100
+00101000101001000000000000000000
+00011100001000100000000000010110
+00110100000000110000000000000000
+01011001011011010000000000100000
+00010100010000010000000000011111
+01011001011011110000000000100100
+11111000000000000011100101001000
+00000000010001000000000000010000
+00111100001000110000000000010000
+00111100010000100000000000010000
+10111000100000110001100000000000
+01001001101000110000000000001011
+01011101101000110000000000000010
+01010101111000100000000000001001
+11001000000000100001000000000000
+01111100010000010000000000000000
+11001000000000110001100000000000
+11001000011000010001100000000000
+01001000011011010000000000000100
+01011100011011010000000000000101
+01010100010011110000000000000010
+11100000000000000000000000000011
+01011001011000110000000000100000
+01011001011000100000000000100100
+00101001011000100000000000100000
+00101001011000110000000000100100
+01001000010000000000000000000011
+01011100010000000000000000000100
+01000100011000100000000000000011
+00110100000010110000000000000000
+11100000000000000000000000000010
+00110100000010111111111111111111
+01011011100000100000000000101000
+01011011100000110000000000101100
+01000101011000000000000000000111
+11001000000000110001100000000000
+01111100011000010000000000000000
+11001000000000100001000000000000
+11001000010000010001000000000000
+01011011100000100000000000101000
+01011011100000110000000000101100
+00101001110000100000000000001000
+00110111100000010000000000101000
+00011100010000100000000000010110
+11111011111111111110101010110001
+01000101011000000000000000001001
+00101011100000010000000000101100
+00101011100000100000000000101000
+11001000000000010000100000000000
+01111100001000110000000000000000
+11001000000000100001000000000000
+11001000010000110001000000000000
+01011011100000100000000000101000
+01011011100000010000000000101100
+00101001100000100000000000000000
+00101001100000110000000000000100
+01001000010000000000000000000011
+01011100010000000000000000000100
+01000100011000100000000000000011
+00110100000010110000000000000000
+11100000000000000000000000000010
+00110100000010111111111111111111
+01011011100000100000000000100000
+01011011100000110000000000100100
+01000101011000000000000000000111
+11001000000000110001100000000000
+01111100011000010000000000000000
+11001000000000100001000000000000
+11001000010000010001000000000000
+01011011100000100000000000100000
+01011011100000110000000000100100
+00101010000000010000000000000000
+00101000001000100000000000001000
+00110111100000010000000000100000
+00011100010000100000000000010100
+11111011111111111110101010010010
+01000101011000000000000000001001
+00101011100000010000000000100100
+00101011100000100000000000100000
+11001000000000010000100000000000
+01111100001000110000000000000000
+11001000000000100001000000000000
+11001000010000110001000000000000
+01011011100000100000000000100000
+01011011100000010000000000100100
+00101011100000110000000000101100
+00101011100000100000000000100100
+00101011100000010000000000100000
+00101011100001000000000000101000
+10110100011000100001000000000000
+11110100011000100001100000000000
+10110100100000010000100000000000
+10110100011000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+00101000001001000000000000111000
+10111000001000000101100000000000
+00101000010000110000000000000100
+01011000011000000000000000111000
+01011000011000000000000000111100
+00101000010000110000000000010100
+00001100001000000000000100100000
+00001100011000000000000000001000
+00101000100000110000000000010100
+01000100011000000000000000010011
+11011000011000000000000000000000
+00110100000000101111111111111111
+01011100001000100000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100110000100
+11111011111111111110010011001100
+00110100000000010000000000000000
+00101001011000100000000000110000
+11001000000000010000100000000000
+00111100001000010000000000001010
+00101000010000100000000000000100
+00010100001000110000000000011111
+01011000010000010000000000100100
+01011000010000110000000000100000
+11100000000000000000000000001101
+00101000010000100000000000001000
+00101000010000100000000000010000
+00100000010000100000000000000001
+01011100010000110000000000000101
+00101000100001000000000000001000
+00110100000000100000000000000000
+00110100000000110000000000000000
+11011000100000000000000000000000
+00101001011000010000000000110000
+00101000001000010000000000000100
+01011000001000000000000000100000
+01011000001000000000000000100100
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110010100110100
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000100
+00101000001001100000000000000100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000110001010000000000100000
+00101000110001100000000000100100
+00111000100001000111100110100000
+11111011111111111110010010101010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000011000000110000000000000
+00101000100001010000000000000000
+00101000100000110000000000000100
+10111000001000000101100000000000
+00101000100000010000000000001000
+00101000100001000000000000001100
+01011001100001010000000000000000
+01011001100000110000000000000100
+01011001100001000000000000001100
+01011001100000010000000000001000
+10111001100000000000100000000000
+11111011111111111111111000011000
+10111001100000000000100000000000
+11111011111111111111111001011110
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111100111000000
+11111011111111111110010010001100
+00101001100000010000000000000100
+00101001100000100000000000000000
+10111000010000010001000000000000
+00110100000000010000000000000000
+01000100010000000000000000010111
+00101001011000100000000000110000
+00101000010000100000000000001000
+00101000010000100000000000010000
+00100000010000100000000000000001
+01011100010000000000000000010010
+00101001011000010000000000111000
+00110111100011010000000000010100
+10111001101000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111011111111111111110111111100
+00101001011000010000000000111000
+10111001101000000001000000000000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001011000000000100000000000
+11111011111111111111111110010000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00101000001000010000000000110000
+00101000010001100000000010101000
+00101000010001010000000010101100
+00101000010001000000000010110000
+00101000010000110000000010110100
+00101000001000010000000000000100
+00110100010000100000000010011000
+01011000001001100000000000000000
+01011000001001010000000000000100
+01011000001001000000000000001000
+01011000001000110000000000001100
+11111011111111111111110111011111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+00101000001000110000000010011100
+10111000001000000101100000000000
+00101000010011010000000000000100
+00101000010011000000000000010000
+00101000001000100000000010011000
+10111000010000110001000000000000
+01011100010000000000000000001011
+00101000001000110000000010100000
+00101000001001000000000010100100
+10111000011001000001100000000000
+01011100011000100000000000000111
+01111000000001000000000000000001
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000000100
+11111011111111111110010001000000
+11100000000000000000000010001000
+00101001011001000000000011001000
+00101001011000110000000011001100
+00101001011000100000000011010000
+00101001011000010000000011010100
+00110101101011100000000000010000
+00110101011100000000000010111000
+01011001101001000000000000010000
+01011001101000110000000000010100
+01011001101000100000000000011000
+01011001101000010000000000011100
+10111010000000000001000000000000
+10111001110000000000100000000000
+11111011111111111111110110110101
+00110101011000010000000010011000
+11111011111111111111110111111011
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111100111011100
+10111001011000000000100000000000
+11111011111111111110010000101001
+00110101011000010000000010101000
+11111011111111111111110111110010
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111100111100100
+10111001011000000000100000000000
+11111011111111111110010000100000
+10111010000000000000100000000000
+11111011111111111111110111101001
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000100100
+10111001011000000000100000000000
+11111011111111111110010000010111
+00110101011000010000000011001000
+11111011111111111111110111100000
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000101100
+10111001011000000000100000000000
+11111011111111111110010000001110
+10111001101000000000100000000000
+11111011111111111111110111010111
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111101000110100
+10111001011000000000100000000000
+11111011111111111110010000000101
+10111001110000000000100000000000
+11111011111111111111110111001110
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111101001001100
+11111011111111111110001111111100
+00101001011000010000000000110000
+00110101100011110000000000011000
+00101000001000110000000000000100
+00101000011001010000000000000000
+00101000011001000000000000000100
+00101000011000100000000000001000
+00101000011000010000000000001100
+01011001100001010000000000011000
+01011001100001000000000000011100
+01011001100000100000000000100000
+01011001100000010000000000100100
+00110100011000100000000000010000
+10111001111000000000100000000000
+11111011111111111111110101010111
+10111001111000000000100000000000
+11111011111111111111110110001001
+10111001111000000000100000000000
+11111011111111111111110110110101
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111101001100100
+11111011111111111110001111100011
+00101001100000010000000000011100
+00101001100011100000000000011000
+10111001110000010111000000000000
+01011101110000000000000000101000
+00110101101000100000000000101000
+10111001011000000000100000000000
+00110101100000110000000000100000
+11111011111111111111110111010100
+10111001101000000010000000000000
+10111001011000000000100000000000
+10111001111000000001000000000000
+00110101100000110000000000001000
+11111011111111111111111100110001
+10111000001000000110100000000000
+01011100001011100000000000011101
+00110101011000010000000000110000
+00110101100000100000000000010000
+11111011111111111111111001110010
+00101001011000110000000000110000
+00101000011000110000000000001000
+00101000011001000000000000010000
+00100000100001000000000000000001
+01011100100011010000000000001011
+00111100001000010000000000010000
+00000000010000100000000000010000
+10111000001000100001000000000000
+00101001011000010000000000111000
+11001000000000100001000000000000
+00101000001000110000000000010000
+01011100011001000000000000000010
+00101000001000110000000000001100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000100
+00101000001000010000000000000100
+00110100000000110000000000000010
+00111000100001000111100111101100
+00101000001001010000000000100100
+10111001011000000000100000000000
+00010100101001010000000000001010
+11111011111111111110001110111000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001010110000000000001100
+10111000001000000110000000000000
+00110100000000010000000000000001
+01011001011000010000000000000000
+00101001100000010000000000100100
+01001000001000000000000000000010
+00110100000000010000000000000001
+00001101011000010000000000001100
+00101001100000010000000000001000
+01011100001000000000000000000010
+01011001100000100000000000001000
+00101001100011010000000000001000
+00110101011000010000000000010000
+00110100000000110000000000001100
+10111001101000000001000000000000
+11111000000000000011100010010011
+00101101011000100000000000001100
+00110100000000010000000000000001
+01011100010000010000000000000100
+00101001100000010000000000000000
+00101000001000010000000000100100
+01100100001000010000000000000010
+01011001011000010000000000100000
+00101001101000010000000000100000
+00101101011001110000000000001100
+00110100000000100000000000000000
+00110001011000010000000000011100
+00101001101000010000000000100100
+00110100000001100000000000000010
+00110100000001010000000000000001
+00110001011000010000000000011101
+00101001101000010000000000101000
+00110100000001001111111111111111
+00110001011000010000000000011110
+11100000000000000000000000001101
+00001000010000010000010000011000
+00101001100010000000000000000000
+10110101000000010000100000000000
+01000100011000000000000000000100
+00101000001000110000000000100100
+01000100011001100000000000000010
+01011001011000000000000000100000
+01011000001000100000001111011000
+01011000001001010000000000000000
+01011000001000000000000000010000
+00001100001001000000000100100010
+00110100010000100000000000000001
+00101001011000110000000000100000
+01001000111000101111111111110011
+01000100011000000000000000000111
+00110100000000010000000011111111
+01011001011000010000000000010000
+01111000000000010000000000000001
+00111000001000010111101010001000
+00110100000000100000000011111111
+11111000000000000001100010110111
+01111000000000010000000000000001
+00111000001000011001111011110100
+00101000001000110000000000000100
+00110100000000010000000000000000
+01000100011000000000000000000100
+10111001100000000000100000000000
+10111001101000000001000000000000
+11011000011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101001111011110100
+00101000010000110000000000001000
+00110100000000100000000000000000
+01000100011000000000000000000011
+11011000011000000000000000000000
+10111000001000000001000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111101100100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011001110110011000
+11100000000000000000000000000100
+00101000010001000000000000000000
+01000100011001000000000000000100
+00110100001000010000000000001100
+00101000001000110000000000000000
+01011100011000001111111111111100
+00101000001000010000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100000010000000000001100
+01011011100000100000000000010000
+10111000011000000101100000000000
+10111000010000000001100000000000
+01011100001000000000000000001110
+01111000000000100000000000000001
+00111000010000101000111011011000
+00101000010000010000000000000000
+01010100011000010000000000001010
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011010111111100
+00111000010000100111101010101100
+01011101011000000000000000000011
+01111000000000100000000000000001
+00111000010000100111101010110100
+11111000000000000001100001101101
+11100000000000000000000000010000
+01111000000000110000000000000001
+00111000011000111000111010111000
+00101000011000100000000000000000
+00110111100000010000000000001100
+11111011111111111110100011000101
+10111000001000000010000000000000
+01111000000000100000000000000001
+01111000000000010000000000000001
+00101011100000110000000000010000
+00111000001000011011010111111100
+00111000010000100111101010111000
+01011101011000000000000000000011
+01111000000000100000000000000001
+00111000010000100111101011000100
+11111000000000000001100001011101
+01111000000000010000000000000001
+00111000001000011011010111111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111100010000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001111101100100
+00101000001000010000000000000000
+00101000001010110000000000011000
+01111000000000010000000000000001
+00111000001000011100001010000100
+00101000001000100000000000000000
+00110100000000010000000000000000
+01000100010000000000000011011011
+01111000000011000000000000000001
+00111001100011001011010111111000
+00101001100000010000000000000000
+01011100001000000000000000001000
+11111000000000000001111000111110
+01111000000000100000000000000001
+00111000010000101001011011101000
+00101000010000100000000000000000
+10100100010000000001000000000000
+10110100010000010000100000000000
+01011001100000010000000000000000
+01111000000000010000000000000001
+00111000001000011011111110100100
+00101000001000010000000000000000
+00101001011000100000000001011000
+01011100001000100000000000000111
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000110000000000000000
+00110100000000100000000000000011
+00110100000000010000000000000000
+01000100011000100000000011000101
+11111000000000000001111000101100
+01111000000000110000000000000001
+01111000000000100000000000000001
+00111000011000111001011011101000
+00111000010000101011010111111000
+00101000011000110000000000000000
+00101000010000100000000000000000
+10110100011000100001000000000000
+11001000001000100000100000000000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000110000000000000000
+00110100000000100000000000000011
+00110100000000010000000000000000
+01011100011000100000000010110101
+11111000000000000001111000011100
+01111000000000100000000000000001
+00111000010000101011010111111000
+01011000010000010000000000000000
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000011011111110100100
+01011000001000100000000000000000
+00110111100000010000000011011100
+00110111100000100000000011101000
+11111000000000000010001100010111
+00110100000000100000000000000000
+00110111100000010000000000010100
+11111000000000000000001100100110
+00110111100000010000000011110000
+00110111100000100000000011101100
+11111000000000000001110111011000
+00101011100000110000000011101100
+00101011100001000000000011110000
+00101011100000100000000001000000
+01111000000000010000000000000001
+00111000001000010111101011001100
+11111000000000000001100000011010
+00101011100000100000000001001000
+01111000000000010000000000000001
+00111000001000010111101011100000
+01111100010000100000000000000000
+11111000000000000001100000010101
+11111011111111111111111101111001
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101011101100
+11111000000000000001100000010000
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000000001010
+00101001011000100000000000010000
+01111000000000010000000000000001
+00111000001000010111101011110100
+00100000010000100000000000000001
+11111000000000000001100000000110
+01111000000000010000000000000001
+00111000001000010111101011111100
+00110101011000100000000001100000
+11111000000000000001100000000010
+00110100000000010000000000000000
+00110111100000100000000011100100
+01111000000011010000000000000001
+11111000000000000011001111011110
+00110100000011000000000000000000
+00111001101011010111101100001000
+11100000000000000000000000001000
+10111001100000000000100000000000
+11111000000000000011010000111110
+10111000001000000001100000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000001011111110101
+00110101100011000000000000000001
+00101011100000010000000011100100
+01001000001011001111111111111000
+00101011100000100000000011100000
+00101011100000110000000011101000
+01111000000000010000000000000001
+00111000001000010111101100010100
+11111000000000000001011111101101
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000001001110
+00101001011000100000000001000100
+00101001011000010000000001000000
+00110100000000110000000000000000
+11111011111111111111111101010110
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101100100100
+11111000000000000001011111100000
+00101001011000100000000001010100
+00101001011000010000000001010000
+00110100000000110000000000000000
+11111011111111111111111101001110
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101100101100
+11111000000000000001011111011000
+00101001011000100000000000011000
+00101001011000110000000000011100
+01111000000000010000000000000001
+00111000001000010111101100110100
+11111000000000000001011111010011
+00101001011000100000000000100000
+00101001011000110000000000100100
+01111000000000010000000000000001
+00111000001000010111101101001000
+11111000000000000001011111001110
+00101001011000100000000001010100
+00101001011000110000000001000100
+01111000000000010000000000000001
+00111100010000100000000000000001
+00111000001000010111101101011100
+11001000011000100001000000000000
+11111000000000000001011111000111
+00101001011000100000000000011000
+00101001011000010000000001000100
+00101001011000110000000001000000
+00010100010001000000000000011111
+11001000001000100001000000000000
+11110100010000010000100000000000
+11001000011001000001100000000000
+11001000011000010001100000000000
+00101001011000010000000000011100
+00010100001001000000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001000011001000001100000000000
+11001000011000100001000000000000
+00101001011000110000000000100000
+00010100011001000000000000011111
+11001000001000110001100000000000
+11110100011000010000100000000000
+11001000010001000001000000000000
+11001000010000010000100000000000
+00101001011000100000000000100100
+00010100010001000000000000011111
+11001000011000100001000000000000
+11110100010000110001100000000000
+11001000001001000000100000000000
+11001000001000110000100000000000
+00110100000000110000000000000000
+11111011111111111111111100011101
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101101101000
+11111000000000000001011110100111
+00101001011000100000000010001100
+01111000000000010000000000000001
+00111000001000010111101101110100
+11111000000000000001011110100011
+00101001011000100000000001001000
+01111000000000010000000000000001
+00111000001000010111101101111100
+11111000000000000001011110011111
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000010111101110001000
+11111000000000000001011110011011
+00110100000000011111111111111111
+11111000000000000011001111101001
+10111000001000000110000000000000
+00110100000000010000000000000000
+11111000000000000011001111100110
+10111000001000000101100000000000
+00110100000000010000000000000001
+11111000000000000011001111100011
+01111000000001010000000000000001
+10111000001000000010000000000000
+10111000101000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+00111000001000010111101110010100
+11111000000000000001011110001100
+01111000000000010000000000000001
+00111000001000010111101110101000
+11111000000000000010000101110101
+00100000001000111111111111111111
+00001000011000110010011100010000
+10111000001000000001000000000000
+00010100010000100000000000010000
+00010100011000110000000000010000
+01111000000000010000000000000001
+00111000001000010111101110101100
+11111000000000000001011110000001
+01111000000000010000000000000001
+00111000001000011000011110001000
+11111000000000000001011101111110
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000011110000
+11000011101000000000000000000000
+00110111100111001111111100001100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100111010000000000001100
+11111000000000000001110111110110
+10111000001000000101100000000000
+11111000000000000001110111111010
+10100000001010110001000000000000
+00110100000000010000000000000000
+01011100010000000000000001011111
+01111000000010110000000000000001
+00111001011010111011011000010100
+00101001011000010000000000000000
+01011100001000100000000000000100
+11111000000000000001110101010100
+00110100001000011111110000010111
+01011001011000010000000000000000
+01111000000010110000000000000001
+11111000000000000001110101010000
+00111001011010111011011000010100
+00101001011000100000000000000000
+11001000001000100000100000000000
+00110100001000101111110000011000
+00110100000000010000000000000000
+01001000000000100000000001010000
+11111000000000000001110101001001
+01011001011000010000000000000000
+00110100000000010000000000000000
+11111000000000000001110111001100
+00110111100000010000000011110100
+00110111100000100000000011110000
+11111000000000000001110100001111
+00101011100000010000000011110100
+00101011100000100000000011110000
+01111000000010110000000000000001
+00111001011010111001111101100100
+11111000000000000001111000001101
+00110111100000010000000011100000
+00110111100000100000000011101100
+11111000000000000010001001000000
+00101011100000110000000011101100
+00101011100000010000000011100000
+00101011100000100000000011100100
+11111000000000000001111000001100
+00110100000000100000000000000000
+00110111100000010000000000011000
+11111000000000000000001001001011
+00101011100000010000000001000100
+00101011100000100000000001001100
+01111100001000010000000000000000
+01111100010000100000000000000000
+11111000000000000001110111101001
+00101001011000010000000000000000
+01000000001000010000000000000011
+11111000000000000001110111101111
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000000010010
+00101001011000010000000000000000
+00101000001010010000000000011000
+00101001001010100000000001001000
+00101001001001100000000001010100
+00101001001001000000000001000100
+00101001001000010000000000010000
+00101001001000110000000001000000
+00101001001001010000000001010000
+01000001001000100000000000010111
+00101001001010000000000010001100
+01011011100010100000000000000100
+00111100110001110000000000000001
+00101001001010010000000001011000
+00100000001000010000000000000001
+11001000100001110011100000000000
+01011011100010010000000000001000
+11111000000000000001110110111011
+00110100000000010000000000000000
+00110111100000100000000011101000
+11111000000000000011001100000111
+00101011100000100000000011101000
+00110100000000010000000000001000
+01001100001000100000000000000010
+01011011100000010000000011101000
+00110100000010110000000000000000
+00110100000011000000000000000000
+11100000000000000000000000000111
+10111001011000000000100000000000
+11111000000000000011001101100011
+00100000001000010000000000000001
+10111100001010110000100000000000
+00110101011010110000000000000001
+10111001100000010110000000000000
+00101011100000010000000011101000
+01001000001010111111111111111001
+10111001100000000000100000000000
+11111000000000000001110111001011
+01111000000000010000000000000001
+00111000001000010111101110101000
+11111000000000000010000011111111
+11111000000000000001110111011010
+00110100000000010000000000000001
+11111000000000000001110110000010
+00110100000000010000000000000001
+00101011100111010000000000001100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00110111100111000000000011110100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001111101100100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000100111101110111100
+00101000001011000000000000011000
+00110100000000010000000000000100
+11111000000000000000101011001000
+11111011111111111111111001100010
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000100111101111001100
+00110100000000010000000000000111
+11111000000000000000101011000010
+00101001100000010000000000010000
+01000100001000000000000000000101
+00101001011000010000000000000000
+00101000001000100000000000000000
+00110100000000010000000000001001
+01000100010000010000000000000111
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111101111010000
+11111000000000000000101010111000
+00110100000000010000000000000000
+11100000000000000000000000000110
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111101111101000
+11111000000000000000101010110010
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111011100100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001111101100100
+00101000001000010000000000000000
+01111000000011000000000000000001
+00111001100011001011011000011100
+00101000001010110000000000011000
+00101001100000010000000000000000
+01011100001000000000000000001000
+11111000000000000001110010111100
+01111000000000100000000000000001
+00111000010000101001011011101000
+00101000010000100000000000000000
+10100100010000000001000000000000
+10110100010000010000100000000000
+01011001100000010000000000000000
+11111000000000000001110010110101
+01111000000000110000000000000001
+01111000000000100000000000000001
+00111000011000111001011011101000
+00111000010000101011011000011100
+00101000011000110000000000000000
+00101000010000100000000000000000
+10110100011000100001000000000000
+11001000001000100000100000000000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011011000011000
+00101000001000010000000000000000
+00101001011000100000000001011000
+00110100000011000000000000000000
+01000100001000100000000110110010
+11111000000000000001110010100101
+01111000000000100000000000000001
+00111000010000101011011000011100
+01011000010000010000000000000000
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000011011011000011000
+01011000001000100000000000000000
+11111000000000000000101010011010
+01111000000000110000000000000001
+00111000011000111001011011011000
+00101000011000110000000000000000
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110000000100
+11111000000000000000101001110100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110000100000
+11111000000000000000101001110000
+00110111100000010000000100000100
+00110111100000100000000100010100
+11111000000000000010000110010100
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110000101100
+11111000000000000000101001101001
+00101011100000100000000100001000
+00101011100000010000000100000100
+00110100000000110000000000000000
+11111000000000000000100110110100
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000100111101111001100
+00110100000000010000000000000111
+11111000000000000000101001100000
+00110100000000100000000000000000
+00110111100000010000000000101000
+11111000000000000000000110010110
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110001001100
+11111000000000000000101001011001
+01111000000000100000000000000001
+01111000000000110000000000000001
+00110100000000010000000000000111
+00111000010000100111110001011100
+00111000011000110111110001100100
+11111000000000000000101001010011
+00101011100000010000000001010100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110001101100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110001111000
+11111000000000000000101001001001
+00110111100000010000000100011100
+00110111100000100000000100011000
+11111000000000000001110000110100
+00101011100000110000000100011000
+00101011100001000000000100011100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110010000100
+11111000000000000000101001000000
+00101011100000010000000001010100
+00110100000011000000000000000001
+01000100001000000000000101101011
+01111000000000100000000000000001
+00111000010000100111110010011000
+00110100000000010000000000000111
+11111000000000000000101000111001
+00110111100011010000000100001100
+10111001101000000000100000000000
+11111000000000000000110100001110
+00110111100000110000000011110000
+10111000011000000000100000000000
+10111001101000000001000000000000
+01011011100000110000000000100100
+11111000000000000000100001010110
+01111000000000010000000000000001
+00111000001000011011100011101000
+00101000001000010000000000000000
+00101011100000110000000000100100
+01000100001011000000000000001010
+01000100001000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000001111
+11100000000000000000000000001010
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110010100000
+11111000000000000000101000100100
+11100000000000000000000000001001
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110010110000
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110011000000
+11111000000000000000101000011011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110011011000
+01111000000011010000000000000001
+11111000000000000000101000010110
+00111001101011011001111101100100
+00101001101000010000000000000000
+00101000001000010000001101011000
+00101000001000010000000000010000
+00101000001011100000000000001000
+01011101110000000000000001001011
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110011100000
+11111000000000000000101000001100
+11111011111111111111111100111000
+00110100000011000000000000000001
+01000100001011100000000100110111
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110011101000
+11111000000000000000101000000101
+00101001101000010000000000000000
+00101000001000010000000000110000
+00101000001000010000000000010000
+00101000001001010000000000001000
+00101000001000110000000000001100
+00101000001000100000000000010000
+00101000001001000000000000010100
+10111000101000110010100000000000
+01000100101000000000000000010100
+00111100010000100000000000010000
+00000000100001000000000000010000
+10111000010001000010000000000000
+01001000011000000000000000000101
+01101100100000100000000000000000
+01100100011000010000000000000000
+10100000010000010000100000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110100001000
+11111000000000000000100111110000
+11100000000000000000000100011100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110100010100
+11001000000001000010000000000000
+11111000000000000000100111101010
+11100000000000000000000100010111
+00000000100001000000000000010000
+00111100010000110000000000010000
+01111000000010110000000000000001
+00111001011010110111110100100000
+10111000011001000001100000000000
+10111001011000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100111100001
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110100101000
+11111000000000000000100111011101
+00101001101000010000000000000000
+10111001011000000001000000000000
+00101000001000010000000000110000
+00101000001000010000000000010000
+00101000001001000000000000100000
+00101100001000110000000000100100
+00110100000000010000000000000111
+00111100100001000000000000010000
+10111000100000110001100000000000
+11111000000000000000100111010011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110101001000
+11111000000000000000100111001111
+00101001101000010000000000000000
+10111001011000000001000000000000
+00101000001000010000000000110000
+00101000001001000000000000000100
+00110100000000010000000000000111
+00101000100000110000000000100000
+00101000100001000000000000100100
+11111000000000000000100111000111
+11100000000000000000000011110100
+01111000000000010000000000000001
+00111000001000011011000011001000
+00101000001000010000000000000000
+00110100000000100000000000000001
+01001000010000010000000000001110
+00110100000000100000000000000010
+01001100010000010000000000000100
+00110100000000100000000000000011
+01011100001000100000000000001010
+11100000000000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110101101000
+11100000000000000000000000001000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110101110100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110000000
+11111000000000000000100110110000
+00101011100000010000000001011100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110110001100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110010100
+11111000000000000000100110100110
+00101011100000010000000001111000
+01000100001000000000000000000111
+00101011100000010000000001111100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110110011100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110101000
+11111000000000000000100110011010
+11111011111111111111111011000110
+00110100000011000000000000000001
+01000100001000000000000011000101
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110110111000
+11111000000000000000100110010011
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111100111011000
+00110101011000110000000001100000
+11111000000000000000100110001110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110111010100
+11111000000000000000100110001010
+00101001011000010000000001011100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110111110000
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110111110100
+11111000000000000000100110000000
+00110100000000010000000000000000
+00110111100000100000000100010000
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+11111000000000000011000110001111
+00110100000011000000000000000000
+00111010000100000111110111111100
+00111001111011110111111000011100
+00111001110011100111111000100100
+00111001101011011000011110001000
+11100000000000000000000000010101
+00110100000000010000000010000111
+10111010000000000001000000000000
+10111001100000000001100000000000
+11111000000000000000100101101111
+10111001100000000000100000000000
+11111000000000000011000111101000
+10111000001000001000100000000000
+00100000001000010000000000000001
+01000100001000000000000000000100
+00110100000000010000000000000010
+10111001111000000001000000000000
+11111000000000000000100101100111
+00100010001100010000000000000010
+01000110001000000000000000000100
+00110100000000010000000000000010
+10111001110000000001000000000000
+11111000000000000000100101100010
+10111001101000000000100000000000
+11111000000000000001010110010110
+00110101100011000000000000000001
+00101011100000010000000100010000
+01001000001011001111111111101011
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111111000110000
+11111000000000000000100101011001
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111001001000
+11111000000000000000100101010101
+00101001011000100000000001000100
+00101001011000010000000001000000
+00110100000000110000000000000001
+01111000000011000000000000000001
+11111011111111111111110011111000
+00111001100011000111111001100000
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100101001011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111001101000
+11111000000000000000100101000111
+00101001011000100000000001010100
+00101001011000010000000001010000
+00110100000000110000000000000001
+01111000000011010000000000000001
+11111011111111111111110011101010
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100111110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111010000000
+11111000000000000000100100111010
+00101001011000110000000000011000
+00101001011001000000000000011100
+00111001101011010111111010100000
+10111001101000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100110100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111010111000
+11111000000000000000100100110000
+00101001011001000000000000100100
+00101001011000110000000000100000
+10111001101000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100101011
+00101001011011010000000001010100
+00101001011000010000000001000100
+01111000000000100000000000000001
+00111101101011010000000000000001
+00111000010000100111111011011000
+11001000001011010110100000000000
+00110100000000010000000010000111
+11111000000000000000100100100011
+01111000000000100000000000000001
+10111001101000000001100000000000
+00110100000000010000000000000111
+00111000010000100111111011110000
+11111000000000000000100100011110
+00101001011000010000000000011000
+00101001011000100000000001000100
+00101001011011100000000001000000
+00010100001000110000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001001110000110111000000000000
+11001001110000100111000000000000
+00101001011000100000000000011100
+00101001011011010000000000100100
+00010100010000110000000000011111
+11001000001000100001000000000000
+11110100010000010000100000000000
+11001001110000110111000000000000
+11001001110000010111000000000000
+00101001011000010000000000100000
+00010100001000110000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001001110000110111000000000000
+00010101101000110000000000011111
+11001000001011010110100000000000
+11001001110000100111000000000000
+11110101101000010000100000000000
+11001001110000110111000000000000
+01111000000000100000000000000001
+11001001110000010111000000000000
+00111000010000100111111011111100
+00110100000000010000000010000111
+11111000000000000000100100000000
+10111001101000000001000000000000
+00110100000000110000000000000001
+10111001110000000000100000000000
+11111011111111111111110010100100
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100011111000
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111100010100
+11111000000000000000100011110100
+00101001011000110000000010001100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111100100100
+11111000000000000000100011101111
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111100110000
+11111000000000000000100011101011
+00101001011000110000000001001000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111101000000
+11111000000000000000100011100110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111101001100
+11111000000000000000100011100010
+00101001011000110000000010000100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111101011000
+11111000000000000000100011011101
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111101100100
+11111000000000000000100011011001
+00101001011000110000000001011000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111101110100
+11111000000000000000100011010100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000100011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+11111011111111111110000111110100
+00110100000000100000000000000011
+01011100001000100000000000000011
+00110100000000010000000000000010
+11100000000000000000000000000010
+00110100000000010000000000000001
+01011001011000010000000000101000
+00110101011000100000000001001100
+00110101011000010000000001001000
+11111000000000000001011010100100
+00110100000000010000000000000000
+01011001011000000000000001000000
+01011001011000000000000001000100
+01011001011000000000000010001000
+01011001011000000000000010001100
+00110111100000100000000000001100
+00110100000000110000000000000000
+11111000000000000011000010010110
+01000100001000000000000000000110
+00101011100000010000000000001100
+01011001011000010000000010100000
+00110100000000010000000000000001
+01011001011000010000000010100100
+11100000000000000000000000000011
+01011001011000000000000010100000
+01011001011000000000000010100100
+00110100000000010000000000000000
+11111000000000000001011001101010
+01011001011000010000000000101100
+00110100000000010000000000000001
+01011001011000010000000001010100
+01011001011000010000000001010000
+00110100000000010000000000000000
+11111000000000000011000000100011
+01011001011000010000000000110100
+00110100000000010011111010000000
+01011001011000010000000010110100
+01111000000000010000000000000001
+00111000001000011001011011110000
+00101000001000010000000000000000
+01011001011000010000000010111000
+01011001011000010000000010111100
+00110101011000010000000000010100
+11111000000000000001011000001111
+00110100000000010000000000000000
+01011001011000000000000000011100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111111110010100
+11111000000000000001010011000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011011001110100
+00101001011001010000000000000000
+01111000000000100000000000000001
+00110100001001000000000000000001
+10111000001000000001100000000000
+00111000010000101011011000100000
+10110100001000100000100000000000
+11001000101000110001100000000000
+10110100100000100001000000000000
+11111000000000000011010010011101
+00101001011000010000000000000000
+00110100001000011111111111111111
+01011001011000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110111100010110000000000010100
+00110100000000100000000000000000
+00110100000000110000000000100100
+10111001011000000000100000000000
+11111000000000000011010011010001
+01111000000000110000000000000001
+10111001011000000000100000000000
+00110100000001000000000000000000
+00110100000000100000000000000000
+00111000011000111011011000100000
+00110100000010000000000000100000
+00110100000001110000000000001000
+11100000000000000000000000000100
+00110100100001000000000000000001
+00110100001000010000000000000100
+01000100100001110000000000010111
+10110100010000110010100000000000
+11100000000000000000000000000100
+00110000101000000000000000000000
+00110100010000100000000000000001
+00110100101001010000000000000001
+01000000101001100000000000000000
+01000100110010001111111111111100
+01000100110000000000000000001101
+10110100010000110010100000000000
+01011000001001010000000000000000
+11100000000000000000000000000010
+00110100010000100000000000000001
+10110100010000110010100000000000
+01000000101001010000000000000000
+01111100101010010000000000000000
+01111100101001100000000000100000
+10100001001001100011000000000000
+01011100110000001111111111111010
+01011100101001101111111111101011
+11100000000000000000000000000011
+00110100000011000000000000000000
+01000100100011000000000000100001
+00101011100000010000000000010100
+00110100000011000000000000000000
+01000000001000100000000000000000
+00110100000000010000000000100011
+01000100010000010000000000011100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111010111000001000
+00111001100011001010111011010000
+11100000000000000000000000010001
+00101001011000010000000000000000
+11111000000000000011010011100101
+10111000001000000110100000000000
+01011100001000000000000000001100
+00101001011000100000000000000100
+00110111100000010000000000011000
+11011000010000000000000000000000
+10111000001000000110000000000000
+01001100001011010000000000001110
+00101001011000100000000000000000
+01111000000000010000000000000001
+10111001100000000001100000000000
+00111000001000010111111110011100
+11111000000000000001010001100110
+11100000000000000000000000001000
+00110101011010110000000000001000
+00101011100000100000000000010100
+01010101100010111111111111101111
+01111000000000010000000000000001
+00111000001000010111111110110100
+11111000000000000001010001011111
+00110100000011001111111111101010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111110011100
+01111000000000100000000000000001
+00101000001001100000000000000000
+00110100000001010000000000111011
+00110100000000010000000000000000
+00111000010000101011011000100000
+00110100000001000000000001010000
+11100000000000000000000000000101
+10110100001000100011100000000000
+00110000111000110000000000000000
+00110100001000010000000000000001
+01000100001001000000000000000101
+10110100110000010001100000000000
+01000000011000110000000000000000
+01000100011000000000000000000010
+01011100011001011111111111111001
+01111000000000100000000000000001
+00111000010000101011011000100000
+10110100010000010001000000000000
+00110000010000000000000000000000
+01111000000000100000000000000001
+00111000010000101001111110011100
+00101000010000110000000000000000
+00110100000001000000000000111011
+10110100011000010001100000000000
+01011000010000110000000000000000
+01000000011001010000000000000000
+01011100101001000000000000000011
+00110100011000110000000000000001
+01011000010000110000000000000000
+01011100001000000000000000000110
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101001111110011100
+00111000011000111001111101101000
+01011000010000110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011011011000100000
+01000100010000010000000000000011
+00110100000000110000000001010000
+11111000000000000011010110001100
+01111000000000010000000000000001
+00111000001000011011011000100000
+11111000000000000011010100001101
+01111000000000100000000000000001
+00111000010000101011011001110100
+01111000000010110000000000000001
+01011000010000010000000000000000
+00111001011010111011111111000000
+00110100000000010000000000000001
+01011001011000010000000000000000
+11111011111111111111111101110101
+01011001011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011001111100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011001110100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011001111000
+01011000001000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011011001111000
+00101001011000010000000000000000
+00110100000011000000000000000001
+01000100001011000000000000010000
+00110100000000100000000000000010
+01000100001000100000000010011101
+00110100000000100000000000000000
+01011100001000000000000010100101
+01111000000000010000000000000001
+00111000001000010111111111010000
+11111000000000000001001111111110
+01111000000000010000000000000001
+00111000001000011011011001111100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011001110100
+01011000001000000000000000000000
+01011001011011000000000000000000
+11100000000000000000000010001110
+11111000000000000001010011111110
+00110100000000100000000000000000
+01001000000000010000000010010111
+00110100000000100000000000011011
+01000100001000100000000000001000
+01111000000000100000000000000001
+00111000010000101011011010000000
+00101000010000110000000000000000
+01100100001001000000000001011011
+00000000011001010000000000010000
+10100000101001000010000000000000
+01000100100000000000000000000110
+01111000000000010000000000000001
+00111000001000011011011010000000
+01111000000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000000011
+10111000001000110000100000000000
+01011000010000010000000000000000
+01111000000000010000000000000001
+00111000001000011011011010000000
+00101000001010110000000000000000
+00110100000000100000000000000001
+00100001011000010000000011111111
+01000100001000000000000010000001
+00110100000000010000000001111110
+01000101011000010000000000101110
+01001001011000010000000000000110
+00110100000000010000000000001001
+01000101011000010000000001101101
+00110100000000010000000000001101
+01011101011000010000000001000010
+11100000000000000000000000100000
+01111000000000100000000000000001
+00111000010000101000111011011100
+00101000010000010000000000000000
+01000101011000010000000000010000
+01111000000000100000000000000001
+00111000010000101000111011100000
+00101000010000010000000000000000
+01000101011000010000000000000100
+00110100000000010000000001111111
+01011101011000010000000000110111
+11100000000000000000000000100111
+01111000000000010000000000000001
+00111000001000011011011001111100
+00101000001000100000000000000000
+01001100000000100000000001011011
+00110100010000101111111111111111
+01011000001000100000000000000000
+00110100000000010000000001000100
+11100000000000000000000000001011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011011001111100
+00111000010000101011011001110100
+00101000001000110000000000000000
+00101000010000100000000000000000
+01001100011000100000000001010000
+00110100011000110000000000000001
+01011000001000110000000000000000
+00110100000000010000000001000011
+11111011111111111111111011110001
+11100000000000000000000001001011
+01111000000000010000000000000001
+00111000001000011000011110001000
+11111000000000000001001110110011
+01111000000000010000000000000001
+00111000001000011011011001111000
+00110100000000100000000000000010
+01011000001000100000000000000000
+11100000000000000000000001000011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011011001111100
+00111000010000101011011001110100
+00101000001000010000000000000000
+00101000010000100000000000000000
+01000100001000100000000000111100
+11111011111111111111111011101001
+00110100000000010000000001010000
+11100011111111111111111111101101
+01111000000010110000000000000001
+00111001011010111011011001111100
+00101001011000010000000000000000
+01001100000000010000000000110101
+00110100000000010000000001000100
+11111011111111111111111011011000
+00110100000000010000000001010000
+11111011111111111111111011010110
+00101001011000010000000000000000
+00110100001000011111111111111111
+11111011111111111111111011011100
+00101001011000010000000000000000
+00110100001000011111111111111111
+01011001011000010000000000000000
+11100000000000000000000000101010
+01111000000000010000000000000001
+10100001011000010000100000000000
+01011100001000000000000000100111
+01111000000000010000000000000001
+00111000001000011011011001110100
+00101000001001000000000000000000
+00110100000000010000000001001111
+01001000100000010000000000100010
+01111000000000010000000000000001
+00111000001000011011011001111100
+00101000001000110000000000000000
+01000100011001000000000000001000
+01111000000000100000000000000001
+00110100011000010000000000000001
+00111000010000101011011000100000
+10110100001000100000100000000000
+10110100011000100001000000000000
+11001000100000110001100000000000
+11111000000000000011001101101111
+01111000000000010000000000000001
+00111000001000011011011001111100
+00101000001000110000000000000000
+01111000000000100000000000000001
+00111000010000101011011000100000
+10110100010000110001000000000000
+00110000010010110000000000000000
+00110100011000100000000000000001
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011011001110100
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000001000000
+11111011111111111111111010101100
+01111000000000100000000000000001
+00111000010000101011011010000000
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000010111111111011000
+11111000000000000001001101101100
+01111000000000010000000000000001
+00111000001000011011011010000000
+01011000001000000000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001011
+01111000000000100000000000000001
+00111000010000101011011001110100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011011011000100000
+10110100001000100000100000000000
+00110000001000000000000000000000
+11111011111111111111111010110111
+01011001011000000000000000000000
+11100011111111111111111111110101
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000001000000000000000001
+10111000001000000101100000000000
+10111000010000000110000000000000
+01000100001000000000000000000110
+01000000001000100000000000000000
+00110100000000010000000000101101
+01011100010000010000000000000011
+00110101011010110000000000000001
+00110100000001001111111111111111
+00110100000000010000000000000000
+00110100000000100000000000000000
+00110100000010000000000000001001
+00110100000001110000000000000101
+11100000000000000000000000101000
+00110100011001011111111111010000
+00100000101001100000000011111111
+01010100110010000000000000001011
+00000000010001100000000000011100
+00111100001000110000000000000100
+00010100101000010000000000011111
+10111000110000110001100000000000
+00111100010001100000000000000100
+10110100011000010001100000000000
+10110100110001010001000000000000
+11110100110000100011000000000000
+10110100110000110000100000000000
+11100000000000000000000000011010
+00110100011001101111111110111111
+00100000110001010000000011111111
+01010100101001110000000000001000
+00000000010010010000000000011100
+00111100001001010000000000000100
+00111100010000100000000000000100
+10111001001001010010100000000000
+00010100110000010000000000011111
+00110100011000111111111111001001
+11100000000000000000000000001010
+00110100011001101111111110011111
+00100000110001010000000011111111
+01010100101001110000000000010001
+00000000010010010000000000011100
+00111100001001010000000000000100
+00111100010000100000000000000100
+00010100110000010000000000011111
+10111001001001010010100000000000
+00110100011000111111111110101001
+11110100110000110011000000000000
+10110100011000100001000000000000
+10110100110000010011000000000000
+11110100011000100001100000000000
+10110100110001010010100000000000
+10110100011001010000100000000000
+00110101011010110000000000000001
+01000101011000000000000000000011
+01000001011000110000000000000000
+01011100011000001111111111010111
+00010100100000110000000000011111
+11111000000000000011000111011010
+01011001100000010000000000000000
+10111001011000000000100000000000
+01011001100000100000000000000100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110111100000100000000000001100
+11111011111111111111111110110101
+00101011100000100000000000010000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110100000001000000000000000001
+01000100001000000000000000000110
+01000000001001010000000000000000
+00110100000000110000000000101101
+01011100101000110000000000000011
+00110100001000010000000000000001
+00110100000001001111111111111111
+00110100000000110000000000000000
+00110100000001100000000000001001
+11100000000000000000000000000111
+00110100101001011111111111010000
+00100000101001110000000011111111
+01010100111001100000000000000111
+00001000011000110000000000001010
+00110100001000010000000000000001
+10110100101000110001100000000000
+01000100001000000000000000000011
+01000000001001010000000000000000
+01011100101000001111111111111000
+10001000011001000001100000000000
+01011000010000110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111101100100
+01000000001000010000000000000000
+01000100001000000000000000101100
+01111000000011010000000000000001
+01111000000011000000000000000001
+01111000000010110000000000000001
+00111001101011011011011001110100
+00111001100011000111111111011100
+00111001011010111011011000100000
+11111011111111111111111010001000
+01011001101000010000000000000000
+01011100001000000000000000001001
+01111000000010110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001011010111011011000100000
+00111001110011101011011001110100
+00111001101011010111111111011100
+11100000000000000000000000000111
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111000000000000001001011010001
+10111001011000000000100000000000
+11111011111111111111111010011111
+11100011111111111111111111110000
+10111001011000000000100000000000
+00110100000000100000000001010000
+10111001100000000001100000000000
+11111000000000000010001100100010
+01011001110000010000000000000000
+01001000001000000000000000000110
+01011101100000000000000000001110
+01111000000000010000000000000001
+00111000001000010111111111101100
+11111000000000000001001011000100
+11100000000000000000000000001010
+10110101011000010000100000000000
+00110000001000001111111111111111
+10111001011000000001000000000000
+10111001101000000000100000000000
+11111000000000000001001010111110
+10111001011000000000100000000000
+11111011111111111111111010001100
+00110100000011000000000000000001
+11100011111111111111111111101101
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000000000000100
+01111000000011100000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001001010100111
+00110100000010110000000000000000
+00111001110011101011011001110100
+00111001101011010111100111011000
+00111001100011001011011000100000
+11111011111111111111111001001100
+01011001110000010000000000000000
+01000100001000000000000000000111
+10111001101000000000100000000000
+10111001100000000001000000000000
+00110101011010110000000000000001
+11111000000000000001001010011100
+00100001011010110000000011111111
+11100011111111111111111111111000
+01011101011000010000000000000100
+01111000000000010000000000000001
+00111000001000011000000000011100
+11111000000000000001001010010110
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+01111000000000110000000000000001
+00111000011000111001011011011000
+00101000011000100000000000000000
+00101000001010110000000000001100
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000011000111000000011010000
+00111000001000011000000000101000
+11111000000000000001001010000000
+01111000000001010000000000000001
+01111000000000110000000000000001
+01111000000001000000000000000001
+00111000101001011001011011011100
+00111000011000111001011011100000
+00111000100001001001011011100100
+00101000101000100000000000000000
+00101000011000110000000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000000001000000
+11111000000000000001001001110100
+00100001011010110000000000001111
+00110101011010110000000000000001
+01111000000000010000000000000001
+00110100000000100000000010000000
+00111101011010110000000000000100
+00111000001000011000000001010100
+00110100000000110000100000000000
+11111000000000000001001001101100
+00110101011000011111111110000000
+00110100000000100000000000001111
+01010000010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000000001111100
+10111001011000000001000000000000
+00110101011000110000000000010000
+11111000000000000001001001100100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+00101000001000100000000000000000
+01000100010000000000000000000110
+01111000000011100000000000000001
+10111000001000000101100000000000
+00111001110011101001111110100000
+00110100000011110000000000001000
+11100000000000000000000000110011
+00110100000000011111111111111111
+11111011111111111110000000100101
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101001001010001000
+10110100010000010001000000000000
+00110100000000011111111111111111
+00101000010011000000000000000000
+11111011111111111101111101000101
+00111100001000010000000000000010
+01111000000000110000000000000001
+00111000011000111001001010010000
+10110100011000010001100000000000
+00101000011010110000000000000000
+11111011111111111101111100111011
+00111100001000010000000000000010
+01111000000001000000000000000001
+00111000100001001001001010011000
+10110100100000010010000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000000010101100
+10111001100000000001000000000000
+10111001011000000001100000000000
+11111000000000000001001000110110
+00110100000000010000000000000000
+11100000000000000000000000011011
+10111001110000000110000000000000
+00110100000011010000000000000000
+00101001011000010000000000000000
+00101001100000100000000000000000
+11111000000000000011001010100010
+10111000001000001000000000000000
+01011100001000000000000000000110
+00101001100000100000000000000100
+00101001100000010000000000001000
+11011000010000000000000000000000
+01001010000000010000000000010000
+11100000000000000000000000000100
+00110101101011010000000000000001
+00110101100011000000000000001100
+01011101101011111111111111110100
+00110101011010110000000000000100
+01011101101011110000000000000111
+00101010001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000000010111000
+11111000000000000001001000011111
+00110100000000011111111111101010
+11100000000000000000000000000100
+00101001011000010000000000000000
+10111001011000001000100000000000
+01011100001000001111111111100111
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000000100011000
+01111000000010110000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001001000000101
+00111001011010111010111000001000
+00111001101011011010111011010000
+00111001100011001000000100110000
+11100000000000000000000000000101
+00101001011000100000000000000000
+10111001100000000000100000000000
+00110101011010110000000000001000
+11111000000000000001000111111101
+01010101101010111111111111111100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000110
+00110111100000100000000000010100
+11111011111111111111111011011011
+00101011100000110000000000010100
+10110101101010110001000000000000
+00110101011010110000000000000001
+00110000010000110000000000000000
+01000000001000100000000000000000
+01100100010000100000000000111010
+10110100001000100000100000000000
+01011101011011001111111111110111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000100000000000000
+01000001000000110000000000000000
+01000001000001000000000000000001
+01000001000001010000000000000010
+01000001000001100000000000000011
+01000001000001110000000000000100
+01000001000010000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101000000
+10111000001000000101100000000000
+11111000000000000001000111000001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101100000
+11111000000000000011001000110100
+01011100001000000000000000000100
+00110111100000010000000000101100
+11111000000000000001001011111111
+11100000000000000000000000101011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101100100
+11111000000000000011001000101100
+01011100001000000000000000001000
+00110111100010110000000000101100
+10111001011000000000100000000000
+11111000000000000001001011110110
+10111001011000000001000000000000
+00110100000000010000000000000000
+11111000000000000001111100100011
+11100000000000000000000000011111
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101101100
+11111000000000000011001000100000
+01011100001000000000000000001011
+00101001011000110000000000000100
+01000100011000010000000000001001
+00110111100010110000000000101100
+10111000011000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111110110010
+10111001011000000000100000000000
+11111000000000000001001011010001
+11111000000000000001001111001100
+11100000000000000000000000010000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101110000
+11111000000000000011001000010001
+10111000001000000001100000000000
+00110100000000101111111111101010
+01011100001000000000000000010001
+00101001011000010000000000000100
+01000100001000110000000000001111
+00110111100010110000000000101100
+10111001011000000001000000000000
+11111011111111111111111110100010
+00110100000000010000000000000000
+10111001011000000001000000000000
+11111000000000000001111101101101
+00110111100000100000000000101100
+00110111100000010000000000001100
+11111011111111111111111110110100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000000101111000
+11111000000000000001000110001100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000100100
+01111000000000100000000000000001
+00111000010000101000000110010000
+11111000000000000011000111101100
+01011100001000000000000000001101
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011010111011011100
+00111000010000101011000010011100
+11100000000000000000000000000110
+01011000001000000000000000011100
+01011000001000000000000000011000
+01011000001000000000000000010100
+01011000001000000000000000010000
+00110100001000010000000000100000
+01010100010000011111111111111011
+11100000000000000000000000101100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000110011000
+11111000000000000011000111011011
+10111000001000000001000000000000
+01011100001000000000000000001110
+00101001011000010000000000000100
+01000100001000100000000000000101
+11111000000000000000010101010100
+01111000000000100000000000000001
+00111000010000101011000010100100
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000010100100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000000110011100
+11111000000000000001000101011010
+11100000000000000000000000011001
+01111000000000010000000000000001
+00111000001000011000000110111100
+01111000000010110000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001000101010011
+00111001011010111010111011011100
+00111001101011011011000010011100
+00111001100011001000000111101100
+11100000000000000000000000001110
+00101001011000010000000000011000
+00110100000000100000001111101000
+00101001011011110000000000010000
+11111000000000000011000010011110
+00101001011011100000000000010100
+00101001011001010000000000011100
+00101001011001100000000000000000
+10111000001000000010000000000000
+10111001111000000001000000000000
+10111001100000000000100000000000
+10111001110000000001100000000000
+11111000000000000001000101000011
+00110101011010110000000000100000
+01010101101010111111111111110011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000000
+00111000010000100000000010100000
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000001000010000
+11111000000000000001000100110000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+10111000001000000001000000000000
+00101000001000010000000000000000
+01000100001000000000000000001101
+00101000010000100000000000000100
+01011100010000000000000000001011
+00110111100000100000000000001000
+11111011111111111111111000011111
+00101011100000100000000000001000
+01111000000000010000000000000001
+00111000001000011001011011101000
+00001000010000100000001111101000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000011110001000
+11100000000000000000000000000011
+01111000000000010000000000000001
+00111000001000011000001000010100
+11111000000000000001000100011000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000010001
+01111000000000010000000000000001
+00111000001000011100001010000100
+00101000001000100000000000000000
+00110100000010110000000000000000
+01100100010000100000000000000000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111110100100
+00101000001000110000000000000000
+00110100011000111111111111111111
+01011000001000110000000000000000
+01011100010010110000000000101011
+01111000000000010000000000000001
+00111000001000011000001000111000
+11111000000000000001000011111111
+11100000000000000000000000100111
+01111000000000100000000000000001
+00111000010000101000001001001100
+11111000000000000011000101101110
+01011100001000000000000000000111
+11111000000000000001001010100011
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000101000010100
+11111000000000000001000011110101
+11100000000000000000000000011100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000100111000100011100
+11111000000000000011000101100011
+01011100001000000000000000001011
+01111000000000010000000000000001
+00111000001000011100001010000100
+00110100000000100000000000000001
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111110100100
+00101000001000100000000000000000
+00110100010000101111111111111111
+01011000001000100000000000000000
+11100000000000000000000000001101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001010000
+11111000000000000011000101010100
+00110100000010111111111111101010
+01011100001000000000000000001000
+01111000000000010000000000000001
+00111000001000011100001010000100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011000001000111000
+11111000000000000001000011011001
+00110100000010110000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111110111000
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000011001000
+01111000000000100000000000000001
+00111000010000101000001001110000
+11111000000000000011000100110101
+01011100001000000000000000001000
+11111000000000000001111011001010
+00110100000000111111111111111111
+00110100000000100000000000000000
+01011100001000110000000011000100
+01111000000000010000000000000001
+00111000001000011000001001111000
+11100000000000000000000000111100
+00101001011000010000000000010000
+01000100001000000000000001000101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001010001100
+11111000000000000011000100100111
+01011100001000000000000001000000
+00101001011000010000000000000100
+00110100000000100000000000010000
+00110101011011000000000000000100
+11111000000000000011001001000110
+00111100001000010000000000011000
+00110100000000110000000000000000
+00010100001000010000000000011000
+00110111100001000000000000101100
+11100000000000000000000000000111
+00101001100000100000000000000000
+10110100100000110010100000000000
+10110100010000110001000000000000
+01000000010000100000000000000000
+00110100011000110000000000000001
+00110000101000100000000000000000
+10110000011000000001000000000000
+01001000001000101111111111111001
+10110100100000100000100000000000
+00110100000000110000000000100000
+00110100000001000000000000001111
+11100000000000000000000000000101
+00110100010000100000000000000001
+00110000001000110000000000000000
+10110000010000000001000000000000
+00110100001000010000000000000001
+01001100100000101111111111111100
+00101001011000010000000000001000
+11111000000000000000010010001000
+01011011100000010000000001000000
+00101001011000010000000000001100
+11111000000000000000010010000101
+01011011100000010000000001000100
+00101001011000010000000000010000
+11111000000000000000010010000010
+01011011100000010000000000111100
+00110100000000100000000000000001
+00110111100000010000000000101100
+00110100000000110000000000000000
+11111000000000000001111011110110
+00111100001000100000000000011000
+00110100000000011111111111111110
+00010100010000100000000000011000
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001010010000
+11111000000000000001000010000101
+00110100000000101111111111100100
+11100000000000000000000010001010
+00110100000000011111111111111111
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001010100000
+11111000000000000001000001111110
+00110100000000101111111111111011
+11100000000000000000000010000011
+01001100010000000000000000000100
+01111000000000010000000000000001
+00111000001000011000001010101100
+11100000000000000000000000100011
+01111000000000010000000000000001
+00111000001000011000001011001000
+11111000000000000001000001110101
+11100000000000000000000001110101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001011011000
+11111000000000000011000011100011
+01011100001000000000000000110000
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+00110100000011000000000000000000
+00110100000100010000000000000000
+00110111100100100000000000101100
+00111010000100001000001011110100
+00110111100100110000000000111100
+00111001111011110111111111011000
+00111001110011101000001011111100
+10111010010000000000100000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+11111000000000000001111011001011
+00111100001010110000000000011000
+00010101011010110000000000011000
+01011101011000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001011100000
+11111000000000000001000001011011
+11100000000000000000000001011011
+01001101011000000000000000000111
+01111000000000010000000000000001
+00111000001000011000001010101100
+10111001011000000001000000000000
+11111000000000000001000001010101
+00110100000000101111111111110010
+11100000000000000000000001011010
+00110101100011000000000000000001
+10111010000000000000100000000000
+10111001100000000001000000000000
+11111000000000000001000001001111
+10111010010000000110100000000000
+01000001101000100000000000000000
+10111001111000000000100000000000
+00110101101011010000000000000001
+11111000000000000001000001001010
+01011101101100111111111111111100
+00101011100000100000000001000000
+00101011100000110000000001000100
+00101011100001000000000000111100
+00110110001100010000000000000001
+10111001110000000000100000000000
+10110010001000001000100000000000
+11111000000000000001000001000010
+01001001011100011111111111011101
+11100000000000000000000001000001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001100011100
+11111000000000000011000010101111
+01011100001000000000000000110010
+11111000000000000001011100000111
+00111100001011000000000000011000
+00110100000000011111111111101101
+00010101100011000000000000011000
+01011101100000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001100100100
+11111000000000000001000000110011
+00110100000000101111111111101101
+11100000000000000000000000111000
+01111000000010110000000000000001
+00111001011010111011111110101100
+01111000000011010000000000000001
+00110100000000011111111111111011
+00110101011011100000000000010000
+00111001101011010111111111011000
+01011101100000010000000000000100
+01111000000000010000000000000001
+00111000001000011000001100110000
+11100011111111111111111110101001
+01000001011000100000000000000000
+10111001101000000000100000000000
+00110101011010110000000000000001
+11111000000000000001000000100011
+01011101011011101111111111111100
+01111000000000010000000000000001
+00111000001000011000011110001000
+11111000000000000001000000011111
+00110100000000011111111111111010
+01011101100000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001101000000
+11111000000000000001000000011010
+00110100000000101111111111111010
+11100000000000000000000000011111
+01111000000000100000000000000001
+01111000000000110000000000000001
+01111000000001000000000000000001
+00111000010000101011111100110000
+00111000011000111011111100110100
+00111000100001001010011111111000
+00101000010000100000000000000000
+00101000011000110000000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000001101011000
+11111000000000000001000000001100
+10111001100000000001000000000000
+11100000000000000000000000010001
+00101001011000010000000000000100
+01000100001000000000000000001011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110000000
+11111000000000000011000001110111
+01011100001000000000000000000110
+00101001011000010000000000000100
+11111000000000000000001111110010
+11111000000000000001000111110111
+00110100000000100000000000000000
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001001011100
+11111000000000000000111111111011
+00110100000000101111111111101010
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000001001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110001000
+11111000000000000011000001010110
+01011100001000000000000000010001
+00101001011000110000000000001100
+00110100000000101111111111101010
+01000100011000010000000010000110
+00101001011000010000000000000100
+11111000000000000000001111001110
+10111000001000000110100000000000
+00101001011000010000000000001000
+11111000000000000000001111001011
+10111000001000000110000000000000
+00101001011000010000000000001100
+11111000000000000000001111001000
+10111000001000000001100000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000010101001010100
+11100000000000000000000001111000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110010000
+11111000000000000011000001000001
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000001110000
+11111000000000000000001110111001
+11111000000000000010101100010010
+11100000000000000000000001100000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001010100
+11111000000000000011000000110101
+01011100001000000000000000000011
+11111000000000000010101110101011
+11100000000000000000000001100101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110010100
+11111000000000000011000000101110
+01011100001000000000000000001101
+00101001011000110000000000001000
+00110100000000101111111111101010
+01000100011000010000000001011110
+00101001011000010000000000000100
+11111000000000000000001110100110
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001110100011
+10111000001000000001000000000000
+10111001100000000000100000000000
+11111000000000000010101100001011
+11100000000000000000000001010100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110011000
+11111000000000000011000000011101
+10111000001000000001100000000000
+01011100001000000000000000001110
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000001001100
+11111000000000000000001110010101
+00110111100000100000000000011000
+00110111100000110000000000010100
+11111000000000000010101100100101
+00101011100000100000000000011000
+00101011100000110000000000010100
+01111000000000010000000000000001
+00111000001000011000001110011100
+11111000000000000000111110011100
+11100000000000000000000001000001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000011010100
+11111000000000000011000000001010
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000111001
+11111000000000000000001110000010
+11111000000000000010101010111101
+11100000000000000000000000110101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000011011100
+11111000000000000010111111111110
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000101101
+11111000000000000000001101110110
+11111000000000000010101011000010
+11100000000000000000000000101001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110100100
+11111000000000000010111111110010
+01011100001000000000000000001101
+00101001011000110000000000001000
+00110100000000101111111111101010
+01000100011000010000000000100010
+00101001011000010000000000000100
+11111000000000000000001101101010
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001101100111
+10111000001000000001000000000000
+10111001100000000000100000000000
+11111000000000000010101111010010
+11100000000000000000000000011000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110101100
+11111000000000000010111111100001
+10111000001000000001100000000000
+01011100001000000000000000001011
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000010000
+11111000000000000000001101011001
+11111000000000000010101110110111
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111111110110000
+11111000000000000000111101100011
+11100000000000000000000000001000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110110100
+11111000000000000010111111010001
+00110100000000101111111111101010
+01011100001000000000000000000011
+11111000000000000010110001101001
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101000001111000100
+11111000000000000010111110111100
+10111000001000000110000000000000
+01011100001000000000000000000110
+00110111100000010000000000010000
+11111000000000000001011110010110
+00110100000010111111111111111111
+01001001100000010000000000100001
+11100000000000000000000000011100
+00101001011000010000000000000000
+00110100000010110000000000000000
+01011100001000000000000000011101
+00110111100000010000000000010000
+00110100000000100000000000000000
+11111000000000000001111001111000
+01001101011000010000000000001010
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011000001111001100
+11111000000000000000111100110111
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011001011011110000
+01011000001000100000000000000000
+11100000000000000000000000010000
+01111000000000010000000000000001
+00111000001000011000001111110100
+11111000000000000000111100101111
+00110111100000010000000000010000
+11111000000000000001011101111110
+00110100000010111111111111111111
+01001000000000010000000000001001
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011001011011110000
+01011000001000100000000000000000
+00110111100000010000000000010000
+00110100000000100000000000000001
+11111000000000000001111001100000
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110111100000100000000000011000
+00110111100000010000000000010000
+11111000000000000001101000000110
+00101001011000010000000000001000
+01000100001000000000000000010100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101101100
+11111000000000000010111110000010
+01011100001000000000000000001111
+11111011111111111101110000001000
+00110100000000110000000000000011
+00110100000000101111111111110000
+01000100001000110000000001000000
+00101001011000010000000000000100
+11111000000000000000001011111001
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001011110110
+10111000001000000001100000000000
+10111001100000000001000000000000
+00010101100000010000000000011111
+00110100000001000000000000000011
+11100000000000000000000000100000
+00101001011000010000000000000000
+01000100001000000000000000001111
+01111000000000100000000000000001
+00111000010000101000010000101000
+11111000000000000010111101101110
+01011100001000000000000000001011
+11111011111111111101101111110100
+00110100000000100000000000000011
+01000100001000100000000000100011
+00101001011000010000000000000100
+11111000000000000000001011100110
+10111000001000000001000000000000
+00110100000000110000000000000000
+00010100001000010000000000011111
+00110100000001000000000000000001
+11100000000000000000000000010000
+00101001011000010000000000000000
+01000100001000000000000000010000
+01111000000000100000000000000001
+00111000010000101000010000110000
+11111000000000000010111101011110
+01011100001000000000000000001100
+11111011111111111101101111100100
+00110100000000100000000000000011
+01000100001000100000000000010011
+00101001011000010000000000000100
+11111000000000000000001011010110
+10111000001000000001100000000000
+00110100000000100000000000000000
+00110100000000010000000000000000
+00110100000001000000000000000010
+11111000000000000001100110110001
+11100000000000000000000000010100
+00101001011000010000000000000000
+01000100001000000000000000001001
+01111000000000100000000000000001
+00111000010000101000010000111000
+11111000000000000010111101001101
+01011100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001110011100
+00101011100000100000000000010100
+11100000000000000000000000001000
+00101011100000100000000000010100
+00101011100000010000000000010000
+00110100000000110000000000000000
+11111000000000000000000111101010
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000010000111100
+00101011100000110000000000011000
+11111000000000000000111011001100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011000010100000
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000000011
+11111000000000000001010111101111
+11100000000000000000000001010111
+00101001011000010000000000000100
+00110100000011001111111111101010
+01000100001000000000000001010101
+00101001011000100000000000001100
+01000100010000000000000000001000
+11111000000000000000001010011111
+01011100001000000000000000000110
+00101001011000010000000000001100
+00110100000011010000000001010000
+11111000000000000000001010011011
+00111100001011100000000000001010
+11100000000000000000000000000111
+00101001011000010000000000001100
+00110100000011100000000000000001
+00110100000011010000000001010000
+01000100001000000000000000000011
+11111000000000000000001010010100
+00100000001011010000000011111111
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001100000
+11111000000000000010111100010001
+01011100001000000000000000001101
+00101001011000100000000000001000
+01000100010000010000000000001011
+00101001011000010000000000000100
+11111000000000000000001010001010
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001010000111
+10111000001000000001000000000000
+10111001110000000001100000000000
+10111001100000000000100000000000
+10111001101000000010000000000000
+11100000000000000000000000010000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001100000
+11111000000000000010111100000000
+01011100001000000000000000001101
+01111000000011000000000000000001
+00111001100011001011111110010100
+00101001100000100000000000000100
+01000100010000010000000000001001
+00101001011000010000000000000100
+11111000000000000000001001110111
+01011100001000000000000000000110
+00101001100000100000000000001100
+00101001100000110000000000001000
+00110100000001000000000000000000
+11111000000000000001111101111100
+11100000000000000000000000100011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001100100
+11111000000000000010111011101111
+01011100001000000000000000001101
+00101001011000100000000000001000
+01000100010000010000000000001011
+00101001011000010000000000000100
+11111000000000000000001001101000
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001001100101
+10111000001000000001000000000000
+10111001110000000001100000000000
+10111001100000000000100000000000
+10111001101000000010000000000000
+11100000000000000000000000010001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001100100
+11111000000000000010111011011110
+00110100000011001111111111101010
+01011100001000000000000000001101
+01111000000011010000000000000001
+00111001101011011011111110010100
+00101001101000100000000000000100
+01000100010000010000000000001001
+00101001011000010000000000000100
+11111000000000000000001001010100
+01011100001000000000000000000110
+00101001101000100000000000001100
+00101001101000110000000000001000
+00110100000001000000000000000000
+11111000000000000001111100011001
+00110100000011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001100
+01111000000000100000000000000001
+00111000010000101000010001110100
+11111000000000000010111010111111
+01011100001000000000000000001000
+00110100000000010000000000000001
+11111011111111111110011010010101
+01111000000000010000000000000001
+00111000001000011001011011101100
+00110100000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000001011
+00101001011000010000000000000000
+01000100001000000000000000001001
+01111000000000100000000000000001
+00111000010000101000010001111100
+11111000000000000010111010110010
+01011100001000000000000000000101
+11111011111111111110011010001001
+01111000000000010000000000000001
+00111000001000011001011011101100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011001011011101100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001110000
+01000100001000000000000000000011
+01111000000000100000000000000001
+00111000010000101000010001101100
+01111000000000010000000000000001
+00111000001000011000010010000100
+11111000000000000000111000101111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000100
+00110111100000100000000000010100
+11111011111111111111101100011100
+00101011100000110000000000010100
+10110101101010110001000000000000
+00110101011010110000000000000001
+00110000010000110000000000000000
+01000000001000100000000000000000
+01100100010000100000000000101110
+10110100001000100000100000000000
+01011101011011001111111111110111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000011000000000000
+01000000110000110000000000000000
+01000000110001000000000000000001
+01000000110001010000000000000010
+01000000110001100000000000000011
+01111000000000100000000000000001
+00111000010000101000010010100000
+10111000001000000101100000000000
+11111000000000000000110111111000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101100000
+11111000000000000010111001101011
+01011100001000000000000000000100
+00110111100000010000000000100000
+11111000000000000000010010010111
+11100000000000000000000000010010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101101100
+11111000000000000010111001100011
+10111000001000000001100000000000
+00110100000000101111111111101010
+01011100001000000000000000100100
+00101001011000010000000000000100
+01000100001000110000000000100010
+01111000000000100000000000000001
+00111000010000101011100011101000
+00110100000000110000000000000010
+01011000010000110000000000000000
+00110111100000100000000000100000
+11111011111111111111111110111100
+00110111100000010000000000100000
+11111000000000000000010010001110
+00110111100010110000000000001100
+00110111100000100000000000100000
+10111001011000000000100000000000
+11111011111111111111111111001110
+01111000000000010000000000000001
+00111000001000011011100011101000
+00101000001000010000000000000000
+00110100000000100000000000000001
+01000100001000100000000000001001
+01000100001000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000001101
+11100000000000000000000000001000
+01111000000000010000000000000001
+00111000001000011000010010101100
+11111000000000000000110111010011
+11100000000000000000000000001000
+01111000000000010000000000000001
+00111000001000011000010011001000
+11100000000000000000000000000011
+01111000000000010000000000000001
+00111000001000011000010011101000
+10111001011000000001000000000000
+11111000000000000000110111001011
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000000
+01000100001000000000000000000101
+11111011111111111101100010100001
+01111000000000100000000000000001
+00111000010000101011000010111100
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000010111100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000010100010000
+11111000000000000000110110110111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101000001001110000
+11111000000000000010111000011100
+10111000001000000110000000000000
+01011100001000000000000000000110
+11111000000000000001110100100100
+01001100001011000000000000100110
+01111000000000010000000000000001
+00111000001000011000010100110000
+11100000000000000000000000001110
+00101001011000010000000000000100
+01000100001000000000000000010001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001010001100
+11111000000000000010111000001111
+10111000001000000110000000000000
+01011100001000000000000000001011
+10111001011000000000100000000000
+11111000000000000001110100111100
+01001100001011000000000000000101
+01111000000000010000000000000001
+00111000001000011000010101010000
+11111000000000000000110110010100
+11100000000000000000000000010100
+01111000000000010000000000000001
+00111000001000011000010101101100
+11100011111111111111111111111100
+00101001011000010000000000000000
+01000100001000000000000000001000
+01111000000000100000000000000001
+00111000010000101000001011011000
+11111000000000000010110111111110
+01011100001000000000000000000100
+11111011111111111111101011010111
+11111000000000000001110110100000
+11100000000000000000000000001000
+00101001011000010000000000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00111000010000101000010101110100
+11111000000000000010110111110101
+01011100001000000000000000000010
+11111011111111111111101010010010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000100111
+01111000000000100000000000000001
+00111000010000101000000101100000
+11111000000000000010110111100100
+01000100001000000000000000100011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101101100
+11111000000000000010110111011111
+10111000001000000001000000000000
+01011100001000000000000000010011
+00101001011000010000000000000100
+01000100001000100000000000010001
+00110111100000100000000000001100
+11111011111111111111101001100010
+00101011100000100000000000001100
+00110100000000110000111111111110
+00110100010000011111111111111111
+01010000011000010000000000000111
+00101001011000110000000000000100
+01111000000000010000000000000001
+00111000001000011000010101111100
+11111000000000000000110101011110
+00110100000000101111111111101010
+11100000000000000000000000010111
+01111000000000010000000000000001
+00111000001000011001011011110100
+01011000001000100000000000000000
+11100000000000000000000000001010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001010000
+11111000000000000010110111000111
+00110100000000101111111111101010
+01011100001000000000000000001101
+01111000000000010000000000000001
+00111000001000011001011011110100
+01011000001000000000000000000000
+11111000000000000000111101110111
+01111000000000010000000000000001
+00111000001000011001011011110100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000010110010100
+10111000010000000001100000000000
+11111000000000000000110101000111
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000010010
+00110111100000100000000000100000
+00110111100000110000000000011100
+00110111100001000000000000011000
+00110111100000010000000000100100
+11111000000000000001001100101110
+01111000000000010000000000000001
+00111000001000011000010110111000
+11111000000000000000110100110001
+00101011100000100000000000100100
+00101011100000110000000000100000
+00101011100001000000000000011100
+00101011100001010000000000011000
+01111000000000010000000000000001
+00111000001000011000010111010000
+11111000000000000000110100101010
+00110100000011000000000000000000
+11100000000000000000000000111010
+01111000000000100000000000000001
+00111000010000101000010111111100
+11111000000000000010110110011000
+10111000001000000001000000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+01000100001000100000000000000101
+11111000000000000000000100010001
+10111000001000000101100000000000
+00110100000000100000000000000001
+11100000000000000000000000001100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000011000010100
+11111000000000000010110110001100
+10111000001000000001000000000000
+01011100001000000000000000001111
+00101001011000010000000000000100
+01000100001000100000000000001101
+11111000000000000000000100000101
+10111000001000000101100000000000
+00110100000000100000000000000000
+00110111100000110000000000010100
+11111000000000000001001100100100
+10111000001000000110000000000000
+01011100001000000000000000100000
+01111000000000010000000000000001
+00111000001000011000011000000000
+10111001011000000001000000000000
+00101011100000110000000000010100
+11100000000000000000000000011010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000011000011000
+11111000000000000010110101111000
+10111000001000000001000000000000
+00110100000011001111111111101010
+01011100001000000000000000010100
+00101001011000010000000000000100
+01000100001000100000000000010010
+00101001011000100000000000001000
+01000100010000000000000000010000
+11111000000000000000000011101110
+10111000001000000110100000000000
+00101001011000010000000000001000
+11111000000000000000000011101011
+10111000001000000001000000000000
+01011011100000010000000000010100
+10111001101000000000100000000000
+11111000000000000001001101010001
+10111000001000000110000000000000
+01011100001000000000000000000110
+00101011100000100000000000010100
+01111000000000010000000000000001
+00111000001000011000011000011100
+10111001101000000001100000000000
+11111000000000000000110011101111
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100111010000000000001000
+10111000011000001001000000000000
+01111000000000110000000000000001
+00111000011000111000111011100100
+10111000010000000110000000000000
+10111000010000000000100000000000
+00101000011000100000000000000000
+11111000000000000010110000111000
+01111000000000110000000000000001
+00111000011000111000111011100100
+00101000011000100000000000000000
+10111000001000000101100000000000
+10111001100000000000100000000000
+11111000000000000010110000100010
+10111000001000001010000000000000
+00110100000000100000000000111100
+10111001011000000000100000000000
+11111000000000000010110000101110
+00110100000000100000111000010000
+10111000001000000111100000000000
+10111001011000000000100000000000
+11111000000000000010110000101010
+00110100000000100000000000111100
+11111000000000000010110000011000
+10111000001000001000000000000000
+00110100000000100000111000010000
+10111001011000000000100000000000
+11111000000000000010110000010100
+10111000001000001000100000000000
+10111010100000000111000000000000
+00110100000010110000011110110010
+11100000000000000000000000001111
+00110100000000100000000101101101
+01011101100000000000000000001011
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111101011
+00110100000000100000000101101110
+01011100001011000000000000000110
+00110100000000100000000110010000
+10111001011000000000100000000000
+11111000000000000010101111100110
+01100100001000100000000000000000
+00110100010000100000000101101101
+11001001110000100111000000000000
+00110101011010110000000000000001
+00100001011011000000000000000011
+00110100000000100000000101101101
+01011101100000000000000000001011
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111011100
+00110100000000100000000101101110
+01011100001011000000000000000110
+00110100000000100000000110010000
+10111001011000000000100000000000
+11111000000000000010101111010111
+01100100001000100000000000000000
+00110100010000100000000101101101
+01010001110000101111111111100101
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111010001
+00110100000000100000000110010000
+10111000001000001001100000000000
+10111001011000000000100000000000
+11111000000000000010101111001101
+01111000000000100000000000000001
+00110100000011010000000000000000
+01100100001001010000000000000000
+00111000010000101001001010101100
+11100000000000000000000000001101
+00110100000001000000000000000000
+01011101100000000000000000000100
+00110100000001000000000000000001
+01011110011011000000000000000010
+10111000101000000010000000000000
+00001000100001000000000000001100
+10110100100011010010000000000000
+00111100100001000000000000000010
+00110101101011010000000000000001
+10110100010001000010000000000000
+00101000100000010000000000000000
+11001001110000010111000000000000
+00110100000001000000000000000000
+01011101100000000000000000000100
+00110100000001000000000000000001
+01011110011011000000000000000010
+10111000101000000010000000000000
+00001000100001000000000000001100
+10110100100011010010000000000000
+00111100100001000000000000000010
+10110100010001000010000000000000
+00101000100000010000000000000000
+01010001110000011111111111101010
+00110100000000010000000000000001
+00110101110011100000000000000001
+01000110010000010000000000011101
+01111000000011000000000000000001
+00110100000000010000000000000010
+00111001100011001011011010000100
+01000110010000010000000000101000
+00110110100000010000000000000100
+00110100000000100000000000000111
+11111000000000000010101111010111
+00111100001000010000000000000010
+01111000000100110000000000000001
+01111000000000100000000000000001
+00111101101011010000000000000010
+00111000010000101001001100101000
+00111010011100111001001100001100
+10110110011000011001100000000000
+10110100010011010110100000000000
+01111000000100100000000000000001
+00101010011000110000000000000000
+00101001101001000000000000000000
+00111010010100101000011001001100
+10111001100000000000100000000000
+10111010010000000001000000000000
+10111001110000000010100000000000
+10111001011000000011000000000000
+10111010001000000011100000000000
+10111010000000000100000000000000
+01011011100011110000000000000100
+11111000000000000000110001010010
+11100000000000000000000000011010
+01111000000000010000000000000001
+00111101101011010000000000000010
+00111000001000011001001100101000
+10110100001011010110100000000000
+00101001101000110000000000000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101000011001101100
+10111001110000000010000000000000
+10111010001000000010100000000000
+10111010000000000011000000000000
+10111001111000000011100000000000
+00111000001000011011011010000100
+11111000000000000000110001000011
+11100000000000000000000000001011
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000101000011010000100
+10111001011000000001100000000000
+00110101101001000000000000000001
+10111001110000000010100000000000
+10111010001000000011000000000000
+10111010000000000011100000000000
+10111001111000000100000000000000
+11111000000000000000110000111000
+01111000000000010000000000000001
+00111000001000011011011010000100
+00101011100111010000000000001000
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100001000000000000010100
+00100000001001000000000010000000
+01100100100001000000000000000000
+01011011100000110000000000010000
+01111000000000110000000000000001
+10111000001000000100100000000000
+10111000011000000000100000000000
+00110100000000110000000000000010
+01011011100000100000000000001100
+10111000010000000101100000000000
+00111000001000011000011010100100
+11001000011001000001000000000000
+00100001001000110000000001111111
+01011011100001010000000000011000
+01011011100001100000000000011100
+01011011100001110000000000100000
+01011011100010000000000000100100
+11111000000000000000110000100010
+00110111100000100000000000010000
+10111001011000000000100000000000
+11111000000000000000101111111101
+01111000000000010000000000000001
+00111000001000011000011010110000
+11111000000000000000110000011100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000011011000000
+11111000000000000000110000010011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01000000001001000000000000000000
+00110100000000100000000000101101
+00110100000000110000000000000001
+01011100100000100000000000000011
+00110100001000010000000000000001
+00110100000000111111111111111111
+00110100000000100000000000000000
+00110100000001010000000000001001
+11100000000000000000000000000100
+00001000010000100000000000001010
+00110100001000010000000000000001
+10110100100000100001000000000000
+01000000001001000000000000000000
+00110100100001001111111111010000
+00100000100001100000000011111111
+01010000101001101111111111111010
+10001000010000110000100000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+11111000000000000001000111100100
+00110100001010110000000000000001
+11111000000000000001000111100010
+01011100001010111111111111111111
+10111001100000000000100000000000
+11100000000000000000000000000010
+00110100001000011111111111111111
+01001000001000001111111111111111
+11111000000000000001000111011100
+11001000001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000010000000000
+00110100000011000000010000000000
+11100000000000000000000000000011
+10110101100010110110000000000000
+00111101011010110000000000000001
+10111001100000000000100000000000
+11111011111111111111111111100001
+01000100001000001111111111111100
+00010101100011000000000000000001
+00010101011010110000000000000010
+11100000000000000000000000001001
+10110101011011000110100000000000
+10111001101000000000100000000000
+11111011111111111111111111011010
+01011100001000000000000000000010
+10111001101000000110000000000000
+00000001011000010000000000011111
+10110100001010110101100000000000
+00010101011010110000000000000001
+01011101011000001111111111111000
+01111000000000010000000000000001
+00111000001000011011011011000100
+01011000001011000000000000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011000011100011000
+11111000000000000000101111001010
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011011011000100
+00101000010000110000000000000000
+00110100000001000010011100010000
+00001000011001010000000000001010
+11100000000000000000000000000100
+00110100010000101111111111111111
+01001000010000001111111111111111
+00110100001000011101100011110000
+01010000100000010000000000000011
+10111000101000000001000000000000
+11100011111111111111111111111100
+10001000001000110000100000000000
+00110100000000100000001111101000
+11111000000000000010101100000110
+11100000000000000000000000000010
+00110100001000011111111111111111
+01001000001000001111111111111111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10111000001000000010100000000000
+01011100100000000000000000000010
+10111000011000000010000000000000
+10111000100000000011000000000000
+01010000011001000000000000000010
+10111000011000000011000000000000
+10110100001001100000100000000000
+11100000000000000000000000001110
+00101100010001100000000000000010
+00101000010001110000000000001100
+10110100111001100011100000000000
+01000000111001100000000000000000
+00110000101001100000000000000000
+00101100010001110000000000000010
+00101100010001100000000000000110
+00110100101001010000000000000001
+00110100111001110000000000000001
+00100000111001111111111111111111
+00001100010001110000000000000010
+01011100110001110000000000000010
+00001100010000000000000000000010
+01011100101000011111111111110011
+01010000100000110000000000001011
+00101100010000010000000000000010
+10110100011000010000100000000000
+11001000001001000010000000000000
+00001100010001000000000000000010
+00101100010000010000000000000110
+11100000000000000000000000000011
+11001000100000010010000000000000
+00001100010001000000000000000010
+00101100010001000000000000000010
+01010100100000011111111111111101
+10111000011000000000100000000000
+11000011101000000000000000000000
+10110100010000110010100000000000
+11100000000000000000000000001101
+00101100001001000000000000000000
+00101000001001100000000000001100
+01000000010001110000000000000000
+00110100010000100000000000000001
+10110100110001000011000000000000
+00110000110001110000000000000000
+00110100100001000000000000000001
+00101100001001100000000000000110
+00100000100001001111111111111111
+00001100001001000000000000000000
+01011100110001000000000000000010
+00001100001000000000000000000000
+01011100010001011111111111110100
+10111000011000000000100000000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111011100011011000
+00111001100011001011011011111000
+10111001011000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000111100000
+00110111100001000000000000100000
+11111000000000000000111111000000
+10111000001000000110100000000000
+00110100000011110000000000000000
+01001100000000010000000001100001
+00101101011000100000000000001100
+00001111100000000000000000111000
+00111000000000011000000100000000
+01011100010000010000000000001110
+10111001100000000001000000000000
+00110100000000110000000000000010
+00110111100000010000000000111000
+11111000000000000010101100010000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011100011100100
+00111000010000101011011011111010
+00110100000000110000000000000010
+01111000000011000000000000000001
+11111000000000000010101100001001
+00110101101011011111111111111100
+00111001100011001011011011111100
+01111000000000010000000000000001
+00101111100000100000000000111000
+00111000001000011001011011110100
+00101000001000010000000000000000
+00100000010000100000111111111111
+00110100000011110000000000000000
+01011100010000010000000001001001
+01000001100000100000000000000000
+00110100000000010000000001000101
+00110100000000110000000000000000
+01011100010000010000000000001000
+01000001100000100000000000001001
+00110100000000010000000000010001
+01011100010000010000000000000101
+01000001100000110000000000010110
+01000001100000010000000000010111
+00111100011000110000000000001000
+10111000011000010001100000000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011100011011000
+00111000010000101011011011001000
+00101100001001110000000000001100
+00110100010001100000000000110000
+00110100000001000000000000000000
+00110100000010110000000000000000
+11100000000000000000000000001100
+00101000010000010000000000000000
+01000100001000000000000000001001
+00101100001001010000000000001100
+01011100101001110000000000000111
+00101100001001010000000000001110
+01011100011000000000000000000011
+01000100101000110000000000111000
+11100000000000000000000000000011
+01011100101000110000000000000010
+10111000001000000010000000000000
+00110100010000100000000000000100
+01011100010001101111111111110101
+01000100100000000000000000000010
+10111000100000000101100000000000
+00110100000011110000000000000001
+01000101011000000000000000100101
+00101101011100000000000000101000
+00110101101000010000000000101000
+01001000001100000000000000100010
+00110101011011100000000000100100
+00110111100000100000000000111010
+00110100000000110000000000000010
+10111001110000000000100000000000
+00001111100011010000000000111010
+11111011111111111111111110010111
+11001010000000010110100000000000
+00100001101011011111111111111111
+00001101011011010000000000101000
+00110111100000100000000000100000
+00110100000000110000000000011000
+10111001110000000000100000000000
+11111011111111111111111110010000
+11001001101000010110100000000000
+00100001101011011111111111111111
+01111000000000100000000000000001
+00001101011011010000000000101000
+00111000010000101011100011011000
+00110100000000110000000000001110
+10111001110000000000100000000000
+11111011111111111111111110001000
+11001001101000010110100000000000
+00101111100000110000000000111010
+00100001101011011111111111111111
+00001101011011010000000000101000
+10111001110000000000100000000000
+10111001100000000001000000000000
+11111011111111111111111110000001
+11001001101000010000100000000000
+00001101011000010000000000101000
+00101101011000010000000000101100
+00110100001000010000000000000001
+00001101011000010000000000101100
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+10111000001000000101100000000000
+11100011111111111111111111001011
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+11111000000000000000110000110101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011011011001000
+00110100010000110000000000110000
+11100000000000000000000000000100
+00101000010001000000000000000000
+00110100010000100000000000000100
+01011000100000010000000000011100
+01011100010000111111111111111101
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000001010000000000000001
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+00111000101001011011011011001000
+00110100000000010000000000000000
+00110100000000100000000000001100
+00101000101000110000000000000000
+00110100101001010000000000000100
+01011100011000000000000000001001
+00111100001000100000000000000010
+01111000000001010000000000000001
+00111000101001011011011011001000
+10110100101000100010100000000000
+01011000101010110000000000000000
+00110100000000100000000000001100
+01011100001000100000000000001010
+11100000000000000000000000000011
+00110100001000010000000000000001
+01011100001000101111111111110100
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001001101011000
+00111000001000011000011100110000
+11111000000000000000101011000111
+11100000000000000000000000100000
+01111000000000100000000000000001
+00110111100000010000000000011000
+00111000010000101000011101001100
+11111011111111111111010111000101
+01001000000000010000000000011011
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010101011101111
+01000101100000000000000000000101
+10111001011000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000000010010
+11111000000000000010101001101100
+00001101011000000000000000001110
+01011101110000000000000000000100
+00110100000000010000100000000000
+00001101011000010000000000001100
+00001101011011010000000000001110
+00110101011000010000000000010010
+11111000000000000000101111110010
+00101011100000010000000011010000
+00001101011000000000000000100110
+00001101011000000000000000100100
+01011001011000010000000000011100
+00101011100000010000000010111000
+00001101011000000000000000101100
+01011001011000010000000000100000
+00101101011000010000000000101010
+00001101011000010000000000101000
+11100000000000000000000000000010
+00110100000010110000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011011011001000
+00110100010000110000000000110000
+11100000000000000000000000000101
+00101000010001000000000000000000
+01011100100000010000000000000010
+01011000010000000000000000000000
+00110100010000100000000000000100
+01011100010000111111111111111100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011001011000100000000000010000
+10111000010000000111000000000000
+10111000100000000111100000000000
+10111000101000000110000000000000
+00101000001011010000000000001000
+01000100011000000000000000000101
+10111000101000000000100000000000
+00110100000000101111110000011000
+11111000000000000010100110001000
+10110100001011010110100000000000
+11001001110011110010000000000000
+10111000100000000001100000000000
+01001100100000000000000000000010
+10110100100011000001100000000000
+00000001100000010000000000011111
+10110100001011000000100000000000
+00010100001000010000000000000001
+10110100001001000010000000000000
+01001100100000000000000000000010
+10110100100011000010000000000000
+01001001100001000000000000000010
+11001000100011000010000000000000
+00001001100000100000000000000011
+00010100010001010000000000011111
+00000000101001010000000000011110
+10110100101000100001000000000000
+00010100010000100000000000000010
+01001000011000100000000000000110
+00010101100000100000000000011111
+00000000010000100000000000011110
+10110100010011000001000000000000
+00010100010000100000000000000010
+01001100011000100000000000001101
+10110100100000010010000000000000
+01011001011011010000000000001000
+01011001011001000000000000001100
+01001001100001000000000000001010
+11001000100011000010000000000000
+01011001011001000000000000001100
+10111001100000000000100000000000
+00110100000000100000001111101000
+11111000000000000010100101100111
+10110101101000010000100000000000
+01011001011000010000000000001000
+11100000000000000000000000000010
+01011001011000110000000000001100
+01111000000000110000000000000001
+00111000011000111000111011011000
+00101001011000010000000000001000
+00101000011000100000000000000000
+01001100010000010000000000001101
+01111000000000110000000000000001
+00111000011000111000111011001100
+00101000011000100000000000000000
+00101001011000110000000000000000
+10110100001000100000100000000000
+00101001011000100000000000000100
+01011001011000010000000000001000
+00110100010000010000000000000001
+11110100010000010001000000000000
+01011001011000010000000000000100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101100001000100000000000101100
+10111000101000000101100000000000
+10111000001000000110000000000000
+10111000011000001001000000000000
+10111000100000000111100000000000
+00110100000001010000000000000000
+01000100010000000000000001010110
+00110100001011100000000000100100
+00101100001100010000000000101000
+00110100010000101111111111111111
+00001100001000100000000000101100
+00110100000000110000000000000010
+10111001110000000001000000000000
+00110100000001000000000000000000
+00110111100000010000000001001110
+11111011111111111111111001111110
+10110110001000011000100000000000
+00100010001100011111111111111111
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000011000
+00110100000001000000000000000000
+00110111100000010000000000101000
+11111011111111111111111001110110
+10110110001000011000100000000000
+00100010001100011111111111111111
+00110111100100000000000001000000
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000001110
+00110100000001000000000000000000
+10111010000000000000100000000000
+11111011111111111111111001101101
+10110110001000011000100000000000
+00101111100000110000000001001110
+00100010001100011111111111111111
+10111001110000000001000000000000
+10111001111000000010000000000000
+00001101100100010000000000101000
+10111010010000000000100000000000
+11111011111111111111111001100101
+10110110001000010000100000000000
+00001101100000010000000000101000
+00101111100000010000000001001100
+01111000000000110000000000000001
+00111000011000111001011011110100
+00001101101000010000000000001100
+00101000011000010000000000000000
+00110111100000100000000001000110
+00110100000000110000000000000110
+00001101101000010000000000010000
+10111001101000000000100000000000
+11111000000000000010100110111000
+00110101101000010000000000000110
+10111010000000000001000000000000
+00110100000000110000000000000110
+11111000000000000010100110110100
+01000101011000000000000000011111
+00101011100000010000000000111000
+01011001011000010000000000010100
+00101011100000010000000000101100
+01011001011000010000000000011000
+00110100000000010000000000000000
+11111000000000000010011000001000
+10111000001000000110100000000000
+00110101011000100000000000010000
+00110100000000110000000000000000
+00110100000000010000000000000000
+11111000000000000010010110100010
+00101011100000010000000000110000
+01000011100000100000000000101000
+00101011100000110000000000101100
+01011001011000010000000000000000
+00101011100000010000000000110100
+01111100010000100000000000000000
+00101001100001000000000000011100
+01011001011000010000000000000100
+00101011100000010000000000111000
+01011001011000000000000000001100
+00110100000001010011111010000000
+01011001011000010000000000001000
+00100001101000010000000011111111
+01100100001000010000000000000000
+10100000001000100000100000000000
+00101001011000100000000000010000
+01011001011000010000000000011100
+10111001011000000000100000000000
+11111011111111111111111101001111
+00101111100000010000000001001110
+10111001111000000010100000000000
+01010000001011110000000000000010
+10111000001000000010100000000000
+10111000101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000001001100
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000011000000111000000000000
+00110111100000010000000000110000
+00110100000000110000000000000110
+10111000101000000101100000000000
+10111000100000000110100000000000
+11111000000000000010100101111000
+00110111100000010000000000110110
+00110101100000100000000000010010
+00110100000000110000000000000110
+11111000000000000010100101110100
+01111000000000010000000000000001
+00111000001000011001011011110100
+00101000001001010000000000000000
+00101101100000010000000000001100
+01000100101000000000000000001001
+00110100000000101000000100000000
+00001111100000100000000000111100
+00101101100000100000000000011000
+00001111100000010000000001000000
+00111100010000100000000000001101
+10111000010001010010100000000000
+00001111100001010000000000111110
+11100000000000000000000000000010
+00001111100000010000000000111100
+00110111100000010000000000110000
+10111001110000000001000000000000
+10111001101000000001100000000000
+00110111100001000000000000011000
+11111000000000000000111011000000
+01000101011000000000000000001010
+00101011100000100000000000100000
+01011001011000000000000000001100
+01011001011000100000000000000000
+00101011100000100000000000100100
+01011001011000100000000000000100
+00101011100000100000000000101000
+01011001011000100000000000001000
+01000011100000100000000000011000
+01011001011000100000000000011100
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000000000000
+00110100000001000000000001000100
+00111000001000011010000000000000
+11111011111111111111111010101100
+01111000000000100000000000000001
+00111000010000101011100011101100
+01011000010000010000000000000000
+01111000000000010000000000000001
+00110100000001000000000000100101
+00110100000000100000000000000000
+00110100000000110000000000000000
+00111000001000011010000000110100
+11111011111111111111111010100011
+01111000000000100000000000000001
+00110111100010110000000000001100
+00111000010000101011100011111100
+01011000010000010000000000000000
+00110100000000110000000000010010
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000010100110110011
+00110100000000010000100000000000
+00001111100000010000000000011000
+01111000000000010000000000000001
+10111001011000000001000000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+00111000001000011010000001101000
+11111011111111111111111010010011
+01111000000000100000000000000001
+00111000010000101011100011111000
+01011000010000010000000000000000
+11111011111111111111111111011010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110100000000110000000000000000
+00110100000001000000000000000000
+11100000000000000000000000000101
+00101100001001010000000000000000
+00110100100001000000000000000001
+00110100001000010000000000000010
+10110100011001010001100000000000
+01001000010001001111111111111100
+00000000011000010000000000010000
+00100000011000111111111111111111
+10110100011000010001100000000000
+00000000011000010000000000010000
+10110100001000110001100000000000
+10100100011000000000100000000000
+00100000001000011111111111111111
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011100100000000
+00110100000000110000000000000100
+11111000000000000010100100001101
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000010110000000000000001
+00111001011010111011100100000000
+00111000011000111100001010101000
+10111000001000000001000000000000
+00101000011011000000000000000000
+10111001011000000000100000000000
+00110100000000110000000000000100
+11111000000000000010100011111101
+01000001011000100000000000000000
+01000001011000010000000000000001
+00110101100011000000000000011000
+00111100010000100000000000011000
+00111100001000010000000000010000
+10111000010000010000100000000000
+01000001011000100000000000000011
+10111000001000100000100000000000
+01000001011000100000000000000010
+00111100010000100000000000001000
+10111000001000100000100000000000
+11100000000000000000000000000010
+01011001100000010000000000000000
+00101001100000100000000000000000
+01011100010000011111111111111110
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011011100011101000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011100011110100
+01011000001000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00110100000000011111111111111111
+01000100010000000000000000000110
+00110100010000010000000000010000
+01111000000000100000000000000001
+00111000010000101011100100000000
+00110100000000110000000000000100
+11111000000000000010100010110111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111000110000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010010100
+00101000001000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011011100011101000
+00101000001000110000000000000000
+01011100011000100000000000000010
+01011000001000000000000000000000
+01111000000000100000000000000001
+00111000010000101011100011101100
+00101000010000010000000000000000
+00110111100011000000000000100100
+00110111100000100000000110110100
+00110100000001000000000110010000
+10111001100000000001100000000000
+00110100000001010000000000000000
+11111011111111111111111011000010
+01111000000001000000000000000001
+00111000100001001011100011101000
+10111000001000000001000000000000
+00101000100000010000000000000000
+00110100000010110000000000000000
+01011100001000000000000000100011
+01001101011000100000000000000100
+10111001100000000000100000000000
+11111000000000000000001000110101
+10111000001000000101100000000000
+11111000000000000000111011100110
+01111000000000100000000000000001
+00111000010000101011100011110000
+00101000010000110000000000000000
+01011100011000000000000000000011
+01011000010000010000000000000000
+11100000000000000000000000000101
+00110100011000110000001111101000
+11001000001000110000100000000000
+01001000000000010000000000010101
+01011000010000110000000000000000
+01111000000000010000000000000001
+00111000001000011011100011110100
+00101000001000110000000000000000
+00110111100010110000000000100100
+00110111100011000000000110110100
+00110100011000110000000000000001
+01011000001000110000000000000000
+10111001011000000001000000000000
+10111001100000000000100000000000
+11111000000000000000000110111011
+01111000000001010000000000000001
+00111000101001011011100011101100
+10111000001000000010000000000000
+00101000101000010000000000000000
+10111001011000000001100000000000
+10111001100000000001000000000000
+00110100000001010000000000000000
+11111011111111111111111100001110
+00110100000010110000000000000001
+01111000000011010000000000000001
+00111001101011011011100011111000
+00101001101000010000000000000000
+00110111100011100000000110110100
+00110111100011000000000000100100
+10111001110000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000010000000
+00110100000001010000000000000000
+11111011111111111111111010010000
+10111000001000001000100000000000
+00110100000011110000000000000000
+01001100000000010000000000010100
+01111000000000110000000000000001
+00111000011000111011100011101000
+00101000011000010000000000000000
+01000100001000000000000000010000
+10111001100000000000100000000000
+11111011111111111111111110011101
+10111000001000001000000000000000
+01011100001000000000000000001100
+10111001100000000000100000000000
+10111010001000000001000000000000
+11111000000000000000000010111101
+10111000001000000010000000000000
+00110100000011110000000000000001
+01001110000000010000000000000110
+00101001101000010000000000000000
+10111001110000000001000000000000
+10111001100000000001100000000000
+00110100000001010000000000000000
+11111011111111111111111011101101
+01111000000011010000000000000001
+00111001101011011011100011111100
+00101001101000010000000000000000
+00110111100100000000000110110100
+00110111100011000000000000100100
+10111010000000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000000100000
+00110100000001010000000000000000
+11111011111111111111111001110000
+00110100000011100000000000000000
+01001100000000010000000000011100
+10111001100000000000100000000000
+11111011111111111111111110000010
+01011100001000000000000000011001
+00110111100000010000000111001000
+00110100000000100000000000000000
+11111000000000000001001110011100
+01111000000000100000000000000001
+00111000010000101000111011101000
+00101000010000010000000000000000
+00101011100000100000000111001100
+00110100000000110000000000000100
+00110100000011100000000000000001
+10110100010000010000100000000000
+01011011100000010000000111010000
+00110111100000100000000111010000
+00110111100000010000000001000000
+11111000000000000010100001010100
+10111001100000000000100000000000
+00110100000000100000000000100000
+00110100000000110000000000000000
+11111000000000000000000011110101
+00101001101000010000000000000000
+10111010000000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000000100000
+00110100000001010000000000000000
+11111011111111111111111011000110
+11111011111111111111111100100101
+10110101111010110101100000000000
+10110101011000010000100000000000
+10110100001011100111000000000000
+01111101110000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000111010000
+11000011101000000000000000000000
+00110111100111001111111100110100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011100011101000
+00101000001000010000000000000000
+00110100000010110000000000000000
+01000100001000000000000001000111
+01111000000011000000000000000001
+00111001100011001011101111100100
+00101001100000010000000000000000
+00110111100011110000000010101100
+00110111100011100000000000101100
+10111001111000000001000000000000
+10111001110000000001100000000000
+00110100000001000000000010000000
+00110100000001010000000000000000
+11111011111111111111111000101010
+01001100000000010000000000111100
+00110100000000100000000000011011
+00110100000010110000000000000001
+01001100010000010000000000111001
+00110111100011010000000011001000
+10111001101000000000100000000000
+11111011111111111111111100001000
+01000011100000010000000000110010
+01011100001000000000000000110100
+01000011100000010000000000110011
+01011100001010110000000000110010
+00110111100100000000000001000100
+10111010000000000000100000000000
+10111001101000000001000000000000
+00110100000000110000000000000100
+11111000000000000010011111110000
+01011100001000000000000000101100
+00110111100100010000000011000000
+00110111100100110000000000110100
+10111010011000000001000000000000
+00110100000000110000000000000110
+10111010001000000000100000000000
+11111000000000000010100000001010
+00110111100100100000000000111010
+10111010010000000001000000000000
+00110100000000110000000000000100
+00110111100000010000000011001100
+11111000000000000010100000000101
+00110100000000010000000000001000
+00110011100000010000000000101110
+00110100000000010000000000000110
+00110011100000010000000000110000
+00110100000000010000000000000100
+00110011100000010000000000110001
+00110100000000010000000000000010
+00110011100000010000000000110011
+10111010011000000000100000000000
+00110011100000000000000000101100
+00110011100010110000000000101101
+00110011100000000000000000101111
+00110011100000000000000000110010
+11111000000000000000100110000100
+10111001101000000001000000000000
+00110100000000110000000000000100
+10111010010000000000100000000000
+11111000000000000010011111110011
+10111010001000000001000000000000
+00110100000000110000000000000110
+00110111100000010000000000111110
+11111000000000000010011111101111
+00110111100000100000000011001100
+00110100000000110000000000000100
+10111010000000000000100000000000
+11111000000000000010011111101011
+00101001100000010000000000000000
+10111001111000000001000000000000
+10111001110000000001100000000000
+00110100000001000000000000011100
+00110100000001010000000000000000
+11111011111111111111111001100001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000011001100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010100001001110
+10111001011000000000100000000000
+00110100000000100000000011111111
+00110100000000110000000000000110
+11111000000000000010100001001010
+00110100000000010000100000000110
+00001111100000010000000000011000
+01111000000000010000000000000001
+10111001011000000001000000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+00111000001000011010000010011100
+11111011111111111111110100101010
+01111000000000100000000000000001
+00111000010000101011101111100100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110111100011010000000000011100
+10111000001000000101100000000000
+10111001101000000000100000000000
+11111011111111111111111010100000
+01000001011000100000000000000000
+00110100000000010000000001000101
+00110100000011000000000000000000
+01011100010000010000000001001010
+00110101011011100000000000010000
+10111001101000000001000000000000
+10111001110000000000100000000000
+00110100000000110000000000000100
+11111000000000000010011110001000
+10111000001000000001000000000000
+01011100001000000000000001000011
+01000001011001000000000000001001
+00110100000000110000000000000001
+01000001011011010000000000000010
+01000001011000010000000000000011
+10111000010000000110000000000000
+01011100100000110000000000111101
+01000001011000110000000000010100
+00110100000000100000000000001000
+01011100011000100000000000111010
+00111101101011010000000000001000
+10111001101000010110100000000000
+00110101101011011111111111101000
+00110100000000010000000001000000
+01001100001011010000000000000010
+00110100000011010000000001000000
+00110101011011110000000000001100
+10111001111000000001000000000000
+00110100000000110000000000000100
+00110111100000010000000000100000
+11111000000000000010011110010011
+00110101101011000000000000011000
+00110100000000010000000001000101
+00110001011000010000000000000000
+00010101100000010000000000001000
+00110111100000100000000000011100
+00110001011000010000000000000010
+00110100000000010000000000111111
+00110001011000010000000000001000
+00110100000000010000000000000001
+00110001011000010000000000001001
+00110100000000110000000000000100
+00110001011000000000000000000001
+00110001011011000000000000000011
+00110001011000000000000000000100
+00110001011000000000000000000101
+00110001011000000000000000000110
+00110001011000000000000000000111
+00110001011000000000000000001010
+00110001011000000000000000001011
+10111001111000000000100000000000
+11111000000000000010011101111110
+00110100000000110000000000000100
+00110111100000100000000000100000
+10111001110000000000100000000000
+11111000000000000010011101111010
+00110101101011010000000000000101
+00000001101000010000000000011111
+00110001011000000000000000010100
+10110100001011010110100000000000
+00010101101000100000000000000001
+00110001011000000000000000010101
+00110001011000000000000000010110
+00110001011000000000000000010111
+00110101011000010000000000010100
+11111011111111111111111001001110
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000010111
+00110001011000100000000000010110
+10111001011000000000100000000000
+00110100000000100000000000001010
+11111011111111111111111001000111
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000001011
+00110001011000100000000000001010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+10111000011000000110000000000000
+01011100011000000000000000010010
+00110101011000100000000000001100
+00110100000000110000000000000100
+00110111100000010000000000110000
+11111000000000000010011101001001
+00110111100011000000000000101100
+00110101011000100000000000010000
+00110100000000110000000000000100
+10111001100000000000100000000000
+11111000000000000010011101000100
+00110101011000100000000000010100
+00110100000000110000000000000010
+00110111100000010000000000110110
+11111000000000000010011101000000
+00110111100000010000000000110100
+00110101011000100000000000010110
+00110100000000110000000000000010
+11111000000000000010011100111100
+00110101011100010000000000001000
+10111001100000000001000000000000
+00110100000000110000000000000100
+10111010001000000000100000000000
+11111000000000000010011100110111
+00110101101011101111111111101100
+00110101011100000000000000001100
+00110101100011110000000000000100
+10111001111000000001000000000000
+00110100000000110000000000000100
+00010101110100100000000000001000
+10111010000000000000100000000000
+11111000000000000010011100101111
+00100010010100100000000011111111
+00100001110011100000000011111111
+00110100000000010000000000010001
+00110001011000010000000000010001
+00110001011100100000000000010010
+00110001011011100000000000010011
+00110101100000100000000000001000
+00110100000000110000000000000010
+00110001011000000000000000010000
+00110101011000010000000000010100
+11111000000000000010011100100100
+00110100000000110000000000000010
+00110101100000100000000000001010
+00110101011000010000000000010110
+11111000000000000010011100100000
+00110101101000101111111111111001
+00000000010000010000000000011111
+00110001011011100000000000011001
+00110001011100100000000000011000
+00110001011000000000000000011010
+00110001011000000000000000011011
+10110101011011010111000000000000
+10110100001000100001000000000000
+01000001110100100000000000000000
+00010100010000100000000000000001
+00110001110000000000000000000000
+10111010001000000000100000000000
+11111011111111111111110111110001
+00100000001000111111111111111111
+00110001110100100000000000000000
+00110101011100110000000000010000
+01011100011000000000000000000010
+00111000000000111111111111111111
+00000000011000010000000000001000
+00110001011000110000000000011011
+00110001011000010000000000011010
+00110100000000010000000001000101
+00110001011000010000000000000000
+00010101101000010000000000001000
+10111001100000000001000000000000
+00110001011000010000000000000010
+00110100000000010000000000111111
+00110001011000010000000000001000
+00110100000000010000000000010001
+00110001011000010000000000001001
+00110001011000000000000000000001
+00110001011011010000000000000011
+00110001011000000000000000000100
+00110001011000000000000000000101
+00110001011000000000000000000110
+00110001011000000000000000000111
+00110001011000000000000000001010
+00110001011000000000000000001011
+10111010000000000000100000000000
+00110100000000110000000000000100
+11111000000000000010011011110111
+10111001111000000001000000000000
+00110100000000110000000000000100
+10111010011000000000100000000000
+11111000000000000010011011110011
+10111001011000000000100000000000
+00110100000000100000000000001010
+11111011111111111111110111001110
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000001011
+00110001011000100000000000001010
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110100000000000
+00110100000000100000000000000001
+00110100000000010000000000000110
+00110001011000100000000000011100
+00110001011000100000000000011101
+00110001011000010000000000011110
+00110001011000000000000000011111
+00110101011000010000000000100000
+10111000011000000110000000000000
+11111000000000000000100001011101
+01000001011000100000000000100100
+01000001011000010000000000100000
+00110100000000110000000000000010
+10011000010000010000100000000000
+00110001011000010000000000100000
+01000001011000100000000000100101
+01000001011000010000000000100001
+00110001011011000000000000100101
+10011000010000010000100000000000
+00110001011000010000000000100001
+01000001011000010000000000100010
+00010101100000100000000000001000
+10011000010000010000100000000000
+00110001011000010000000000100010
+01000001011000010000000000100011
+00110001011000100000000000100100
+00110100000000100000000000000000
+10011000001011000000100000000000
+00110001011000010000000000100011
+00110101011000010000000000100110
+11111000000000000010011100111001
+00110101011000010000000000101000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100110101
+00110101011000010000000000101100
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100110001
+00110101011000010000000000110000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100101101
+00110101011000010000000000110100
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100101001
+00110101011011000000000000111000
+00110100000000100000000000000000
+00110100000000110000000000010000
+10111001100000000000100000000000
+11111000000000000010011100100100
+10111001100000000000100000000000
+11111000000000000000100000110001
+00110101011000010000000001001000
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000010011100011110
+00110101011000010000000010001000
+00110100000000100000000000000000
+00110100000000110000000010000000
+11111000000000000010011100011010
+00110101011000010000000100001000
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000010011100010110
+00110111100011000000000000010100
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100010001
+00110111100000010000000000011000
+00110100000000100000000011111111
+00110100000000110000000000000100
+11111000000000000010011100001101
+00110100000000010000000001000100
+00001111100000010000000000011100
+00110100000000010000000001000011
+00001111100000010000000000011110
+10111001100000000001100000000000
+10111001011000000000100000000000
+00110100000000100000000101001000
+11111011111111111111111100101100
+10111001101000000000100000000000
+00110100000000100000000011111111
+00110100000000110000000000000110
+11111000000000000010011100000001
+00110100000000010000000101001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110111100011010000000000011000
+10111000001000000101100000000000
+10111001101000000000100000000000
+10111000010000000111000000000000
+11111000000000000000011111111110
+00110100000000010000000101001000
+00110100000011000000000000000000
+01011101110000010000000000011011
+01000001011000010000000000010100
+01011100001000000000000000011001
+01000001011000100000000000010101
+00110100000000010000000001000011
+01011100010000010000000000010110
+00110101011000010000000000111000
+10111001101000000001000000000000
+00110100000000110000000000000110
+11111000000000000010011001000100
+01011100001000000000000000010001
+01111000000000010000000000000001
+00110100000000100000000000000001
+00111000001000011011100011101000
+01011000001000100000000000000000
+00110101011000010000000000101100
+11111011111111111111110101010101
+00110111100000010000000000100000
+11111011111111111111110101001010
+01000011100000100000000000100000
+01000011100000110000000000100001
+01000011100001000000000000100010
+01000011100001010000000000100011
+01111000000000010000000000000001
+00111000001000011000011101100100
+11111000000000000000011010100001
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00100000100001000000000011111111
+00100000100100000000000000001000
+00100000010000100000000011111111
+01111110000100000000000000000000
+10111000001000000111100000000000
+00110100010010110000000000000001
+00100000100011010000000000000100
+10111000011000000110000000000000
+01000000001000010000000000000000
+10110101111010110101100000000000
+01111101101011010000000000000000
+01011110000000000000000000000111
+11001000001000100001000000000000
+00110100000000010000000000000001
+11101100001000100000100000000000
+10111001101000000111000000000000
+10100001101000010000100000000000
+01000100001100000000000000000111
+00110100000000010000000000000010
+00110001011000010000000000000000
+00110100000000010000000000000001
+00110001011000010000000000000001
+00110100000011100000000000000000
+00110100000000100000000000000010
+01100101101000010000000000000000
+01111100010000110000000000000010
+10100000011000010001100000000000
+00110100000000010000000000000000
+01011100011000000000000000110101
+01101000010000100000000000000010
+10100000010011010001000000000000
+01000100010000110000000000000010
+00110100000011100000000000000001
+00110100000000010000000000000010
+00110011100000010000000000110000
+01000001100000010000000000010001
+01011011100010110000000000100000
+00110011100000010000000000110001
+00101001100000010000000000001100
+01011011100000010000000000101100
+01000101110000000000000000000100
+01000001011000010000000000000001
+00110100001000010000000000000001
+00110001011000010000000000000001
+00100000100001000000000000000001
+01000100100000000000000000001001
+00101001100000110000000000001000
+00110100000000011111111111111100
+01000100011000000000000000100001
+00110101011000010000000000000010
+00110111100000100000000000100000
+11011000011000000000000000000000
+01001000000000010000000000011101
+11100000000000000000000000000101
+00101001100000110000000000000100
+00110101011000010000000000000010
+00110111100000100000000000100000
+11011000011000000000000000000000
+01100100001000100000000000000000
+10100000010011100111000000000000
+01000101110000000000000000001100
+01000001011000010000000000000000
+00110111100000100000000000100000
+00110100001000010000000000000001
+00110001011000010000000000000000
+00110100000000010000000000000001
+00110001011000010000000000000001
+00101001100000110000000000000100
+00110101011000010000000000000010
+11011000011000000000000000000000
+01011100001000000000000000000011
+11100000000000000000000000001010
+01011100010011100000000000001000
+01001000000000010000000000001000
+10111010000011010110100000000000
+00110100001000010000000000000010
+01000101101000000000000000000101
+00110100000000100000000000000010
+00110001111000100000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100010110000000000000100
+01111000000001000000000000000001
+00111000100001001001001110010000
+00110100010000101111111111111111
+00110100100010100000000000011100
+00110100000000110000000000000000
+00110100000010010000000011111101
+00110100000010000000000011111001
+00110100000001110000000011111111
+00110100000001101111111110100010
+11100000000000000000000000010001
+01000000100001010000000000000000
+01011100101010010000000000000100
+10110100001000110010100000000000
+00110000101001100000000000000000
+11100000000000000000000000001010
+01011100101010000000000000000101
+10110100001000110010100000000000
+01000000101001010000000000000000
+10110100011001010001100000000000
+11100000000000000000000000000101
+01011100101001110000000000000100
+10110100001000110010100000000000
+11001000010000110101100000000000
+00110000101010110000000000000000
+00110100011000110000000000000001
+00110100100001000000000000000001
+01011100100010101111111111110000
+00101011100010110000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001000110000000000000110
+00110100000001000000000000100000
+01001100100000110000000000000010
+00110100000000110000000000100000
+00100000011010110000000011111111
+10110100001010110001100000000000
+00110100000001001111111110100010
+00110000011001000000000000000111
+01000000011000110000000000001010
+00110100000001000000000000000100
+01001100100000110000000000000010
+00110100000000110000000000000100
+10110101011000110101100000000000
+00100001011010110000000011111111
+10110100001010110001100000000000
+00110000011000100000000000001101
+00110100000000100000000000000001
+00110000011000100000000000010000
+01000000011000100000000000010110
+00110100000000110000000000101000
+01001100011000100000000000000010
+00110100000000100000000000101000
+10110101011000100001000000000000
+00100000010000100000000011111111
+10110100001000100001100000000000
+00110100010000100000000000011001
+00110100000001000000000000000101
+00100000010010110000000011111111
+00110000011001000000000000010111
+00110000011000000000000000011000
+10111001011000000001000000000000
+11111011111111111111111110111110
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111011111100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011110001101000
+00101000001000010000000000000000
+00110111100010110000000000101100
+00110111100000100000000011110100
+10111001011000000001100000000000
+00110100000001000000000011001000
+00110100000001010000000000000000
+11111011111111111111101110010111
+00110100000000100000000000111000
+00110100000011000000000000000000
+01010000010000010000000010100110
+10111001011000000000100000000000
+11111011111111111111110010101000
+01011100001000000000000010100011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011100001010001100
+00111000010000101001001110010000
+01111000000000110000000000000001
+01000000001001010000000000000000
+00110100010011100000000000011100
+10111001011000000000100000000000
+00110100000001000000000000000000
+00110100000011010000000000000110
+00111000011000111001001101110100
+00110100000010110000000010100000
+00110100000010100000000010100001
+00110100000010010000000010100011
+00110100000010000000000000000001
+11100000000000000000000000101000
+01000000010001100000000000000000
+00110100110001110000000000000111
+00100000111001110000000011111111
+01010100111011010000000000010100
+00111100111001110000000000000010
+10110100011001110011100000000000
+00101000111001100000000000000000
+11000000110000000000000000000000
+10110100100000010011000000000000
+01000000110001100000000000011100
+10110100100001100010000000000000
+11100000000000000000000000011010
+10110100100000010010100000000000
+01000000101001010000000000011100
+01010001000001010000000000010111
+11100000000000000000000000001011
+10110100100000010011000000000000
+01000000110001100000000000011100
+01000100110010110000000000001110
+01000100110010100000000000001111
+01000100110010010000000000010000
+01011101100000000000000000010000
+11100000000000000000000000000100
+10110100100000010011100000000000
+01000000111001110000000000011100
+01000100111001100000000000001100
+01111000000000010000000000000001
+00111000001000011100001010001100
+00110000001001010000000000000000
+00110100000000100000000000000101
+00110111100000010000000001001000
+11100000000000000000000001011011
+00110100000011000000000000000010
+11100000000000000000000000000100
+00110100000011000000000000000100
+11100000000000000000000000000010
+00110100000011000000000000000001
+00110100100001000000000000000001
+00110100010000100000000000000001
+01011100010011101111111111011001
+01111000000000010000000000000001
+00111000001000011100001010001100
+00110000001001010000000000000000
+00110111100000010000000001001000
+10110100001001000110100000000000
+01111000000010110000000000000001
+00110100100001000000000000000001
+10110100001001000111100000000000
+00111001011010111010000011010000
+00100001100100110000000000000011
+00100001100100000000000000000100
+00111001100100100000000000001000
+11100000000000000000000000111111
+01000001101100010000000000000000
+01000110011000000000000000000010
+01010100001100010000000000111011
+00100010001000100000000011111111
+01010000001000100000000000000010
+10111000001000001000100000000000
+00101001011000010000000000000000
+00100010001100010000000011111111
+10111001111000000001000000000000
+10111010001000000001100000000000
+11111000000000000010010100010111
+00111100001001010000000000011000
+10111001100000000111000000000000
+00010100101001010000000000011000
+01000110000000000000000000001010
+01001000101000000000000000000111
+01000001011000110000000000001100
+01000001101000010000000000000000
+01100100101000100000000000000000
+11110000011000010000100000000000
+10100000010000010000100000000000
+01000100001000000000000000000011
+01000001011100010000000000001100
+10111010010000000111000000000000
+01000001011000110000000000001100
+01100100101000010000000000000000
+11100100011100010001000000000000
+10100000010000010001000000000000
+01011100010000000000000000000011
+00100001110000010000000000001000
+01000100001000100000000000011110
+01011110000000000000000000000011
+00100001110000010000000000001000
+01000100001100000000000000000100
+00101001011000100000000000000000
+10111001111000000000100000000000
+11111000000000000010010100011110
+00101001011001010000000000000100
+00101001011000110000000000001000
+10111001101000000000100000000000
+10111010001000000001000000000000
+10111001110000000010000000000000
+11011000101000000000000000000000
+01001100000000010000000000001100
+01011110000000000000000000000011
+00100001110011100000000000001000
+01000101110100000000000000000101
+01000001101000110000000000000000
+01000001011000100000000000001100
+10110100011000100001000000000000
+00110001101000100000000000000000
+01000001011001000000000000001100
+10110101111001000111100000000000
+10110101111000010111100000000000
+11100000000000000000000000001010
+01000100001000000000000000000110
+11001000000000010001000000000000
+00100000010000100000000011111111
+00110111100000010000000001001000
+11100000000000000000000000001010
+01001000101000010000000000000111
+00110101011010110000000000010000
+01000001011000010000000000001100
+01011100001000001111111111000001
+01000101011000000000000000000011
+01000001011000010000000000001100
+01011100001000000000000000000110
+00110111100000010000000001001000
+00110100000000100000000000000010
+11111011111111111111111100110100
+10111000001000000101100000000000
+11100000000000000000000000000111
+00110111100000010000000001001000
+11001001111000010101100000000000
+10111001011000000001000000000000
+11111011111111111111111100001110
+00110100000011000000000000000000
+01001000000010110000000000010000
+00110111100011000000000000101100
+00110101011010110000000000011100
+10111001100000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110110010100
+01111000000001010000000000000001
+00111000101001011011110001101000
+00101000101000010000000000000000
+10111001100000000001100000000000
+00110111100000100000000011110100
+10111001011000000010000000000000
+00110100000001010000000000000000
+11111011111111111111101101100011
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000100000100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000011000000000000
+01000000110001010000000000010001
+01000000001000100000000000000000
+10111000011000000110000000000000
+01000000001010110000000000000001
+00110100000001001111111111111101
+01011100101000100000000000011110
+00110100001000100000000000000010
+00110100000000010000000000000100
+01000100101000010000000000010011
+00110100000000010000000001000010
+01000100101000010000000000000100
+00110100000000010000000000000010
+00110100000001000000000000000000
+01011100101000010000000000010110
+00110100000011010000000000000100
+00110100000001001111111111111101
+01010101011011010000000000010011
+00110111100000010000000000010100
+10111001011000000001100000000000
+01011011100000000000000000010100
+11111000000000000010010010111110
+00101011100000010000000000010100
+11001001101010110110100000000000
+00111101101011010000000000000011
+10000000001011010110100000000000
+01011001100011010000000000000000
+11100000000000000000000000001000
+01000000110000010000000000010011
+01010101011000010000000000000111
+10111000011000000000100000000000
+10110101100010110110000000000000
+10111001011000000001100000000000
+11111000000000000010010010110010
+00110001100000000000000000000000
+00110101011001000000000000000010
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000000010000110000000000010010
+00101000010001000000000000001100
+10110100100000110001100000000000
+11111011111111111111111111001011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01000000001011100000000000000000
+00100000010000100000000011111111
+00100000100001000000000011111111
+00110100010011000000000000000001
+11001001110000100111000000000000
+00100000100000100000000000000001
+10111000001000000111100000000000
+10110100001011000110000000000000
+00110100000000011111111111111100
+01011100010000000000000001101000
+00100000100011010000000000000100
+01111101101011010000000000000000
+00100000100100000000000000001000
+01111110000100000000000000000000
+10111000011000000101100000000000
+00100001101100010000000011111111
+11100000000000000000000000100011
+10111001110000000001100000000000
+01001100001011100000000000000010
+10111000001000000001100000000000
+00101001011000010000000000000000
+10111001100000000001000000000000
+00100000011000110000000011111111
+11111000000000000010010001011110
+01011110000000000000000000001010
+10110000001000000000100000000000
+01100100001000100000000000000000
+10100000010100010001100000000000
+01000100011100000000000000000011
+01000001011000110000000000010000
+01001100011011100000000000000100
+01101000001000010000000000000000
+10100010001000010000100000000000
+01000100001000000000000000001011
+00101001011000100000000000000000
+01000001011000110000000000010000
+10111001100000000000100000000000
+00110100000011100000000000000000
+11111000000000000010010001110000
+01000001011000010000000000010000
+00110100000000100000000000000001
+10110101100000010000100000000000
+00110000001000100000000000000000
+11100000000000000000000000001101
+01000100010000010000000000000110
+01000001011000010000000000010000
+00110100001000010000000000000001
+01000101110000010000000000000110
+01000101101000000000000000000010
+01001001110000010000000000000110
+00110101011010110000000000010100
+01000001011000010000000000010000
+01011100001000001111111111011101
+10111001101000000111000000000000
+11100000000000000000000000000010
+00110100000011100000000000000001
+01000001011000100000000000010000
+00110100000000010000000000000000
+01000100010000000000000000110111
+01000001011000010000000000010001
+00110011100000100000000000110100
+01011011100011000000000000100100
+00110011100000010000000000110101
+00101001011000010000000000001100
+01011011100000010000000000110000
+01000101110000000000000000000100
+01000001100000010000000000000001
+00110100001000010000000000000001
+00110001100000010000000000000001
+01000001011000010000000000010000
+00101001011000110000000000000100
+00110111100100010000000000100100
+00110100001000010000000000000001
+10110101100000010000100000000000
+10111010001000000001000000000000
+11011000011000000000000000000000
+01100100001000110000000000000000
+10100000011011100111000000000000
+01000101110000000000000000011001
+00110101011010110000000000010100
+01000001011000110000000000010000
+00110100000000010000000000000000
+01000100011000000000000000011111
+00101001011000100000000000000000
+10111001100000000000100000000000
+11111000000000000010010001000001
+01000001011000010000000000010000
+00110100000000100000000000000001
+10110101100000010000100000000000
+00110000001000100000000000000000
+01000001011000100000000000010001
+01000001011000010000000000010000
+00101001011000110000000000000100
+00110011100000100000000000110101
+00101001011000100000000000001100
+00110011100000010000000000110100
+00110100001000010000000000000001
+01011011100000100000000000110000
+10110101100000010000100000000000
+10111010001000000001000000000000
+11011000011000000000000000000000
+01011100001000000000000000000011
+11100000000000000000000000001011
+01011100011011100000000000001001
+01001000000000010000000000001001
+01000001011000100000000000010000
+10111010000011010110100000000000
+00110100010000100000000000000001
+10110100001000100000100000000000
+01000101101000000000000000000100
+00110001111000100000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100101010000000000001000
+01011011100111010000000000000100
+00100000100001000000000011111111
+01000000001100010000000000000000
+00100000010000100000000011111111
+00000000100011010000000000000011
+00110100010011100000000000000001
+00100000100011110000000000000100
+10111000001000001000000000000000
+11001010001000101000100000000000
+10110100001011100111000000000000
+00100001101011010000000000000001
+10111000011000000101100000000000
+00110100000011000000000000000000
+00100000100101010000000000000011
+00100000100101000000000000000001
+01111101111100110000000000000000
+11100000000000000000000000110100
+10111000101000001001000000000000
+01011101101000000000000000000101
+10111010001000001001000000000000
+01001100101100010000000000000010
+10111000101000001001000000000000
+00100010010100100000000011111111
+01000110101000000000000000000010
+01011110001001010000000000101011
+01011101101000000000000000001100
+00101001011000010000000000000000
+10111001110000000001000000000000
+10111010010000000001100000000000
+11111000000000000010001111010001
+00111100001011000000000000011000
+00010101100011000000000000011000
+01011101100011010000000000000110
+01000101111011000000000000001001
+01000001011000010000000000010000
+01011100001100100000000000000111
+11100000000000000000000000011111
+01000101100000000000000000000101
+01101001100000010000000000000000
+10100000001100110001000000000000
+01011100010000000000000000000010
+01000101101000100000000000011001
+01000101111000000000000000000111
+00101001011000100000000000000000
+01000001011000110000000000010000
+10111001110000000000100000000000
+11111000000000000010001111100001
+01000001011000010000000000010000
+00110010000000010000000000000000
+01000110100000000000000000001000
+00101001011000110000000000001000
+01000100011000000000000000010100
+01000001011000010000000000010000
+10111001011000000001000000000000
+10110101110000010000100000000000
+11011000011000000000000000000000
+01001000000000010000000000010010
+01000001011000010000000000010000
+00101001011000110000000000000100
+10111001011000000001000000000000
+10110101110000010000100000000000
+11011000011000000000000000000000
+01000100001000000000000000000101
+01000001011000100000000000010000
+10110100001000100000100000000000
+11100000000000000000000000001001
+01011100001011010000000000000111
+00110101011010110000000000010100
+01000001011001010000000000010000
+01011100101000001111111111001100
+11100000000000000000000000000011
+00110100000000011111111111111100
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00101011100101010000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100001011010000000000000010
+00110000001000100000000000000000
+00110100000000010000000001000011
+10111000011000000101100000000000
+01010100010000010000000000001000
+00110100000000010000000001000001
+01010000010000010000000000001001
+00110100000000010000000000000010
+01000100010000010000000000000111
+00110100000000010000000000000100
+01011100010000010000000000101001
+11100000000000000000000000011100
+00110100000000010000000001000110
+01011100010000010000000000100110
+11100000000000000000000000001001
+00101001011000010000000000000000
+00110111100000100000000000011100
+00110100000000110000000000000100
+01011011100000010000000000011100
+10111001101000000000100000000000
+11111000000000000010001110011101
+00110100000000010000000000000100
+11100000000000000000000000001111
+01111000000000010000000000000001
+00111000001000011100001010001100
+01000000001000010000000000000000
+00110100000000100000000000000000
+01000100001000000000000000011001
+00101000011000010000000000000000
+00110111100000100000000000010100
+01011011100000010000000000010100
+00101000011000010000000000000100
+00110100000000110000000000001000
+01011011100000010000000000011000
+10111001101000000000100000000000
+11111000000000000010001110001110
+00110100000000010000000000001000
+00110001100000010000000000000001
+11100000000000000000000000001010
+10111000011000000000100000000000
+00110100000000100000000000011111
+11111000000000000010010101101011
+00100000001000110000000011111111
+00110001100000110000000000000001
+10111001101000000000100000000000
+10111001011000000001000000000000
+00110100011000110000000000000001
+11111000000000000010001110000010
+01000001100000100000000000000001
+00110100010000100000000000000010
+11100000000000000000000000000010
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000010011010000000000001100
+10111000001000000111000000000000
+10111000010000000101100000000000
+00110100000000010000000000000001
+01111000000000100000000000000001
+00111000010000101011110010010000
+01000101101000010000000000000101
+00110100000001001111111111111101
+01011101101000000000000000101100
+01111000000000100000000000000001
+00111000010000101011110010010100
+00101001011000010000000000000000
+00110100000001010000000000000001
+00101000010000100000000000000000
+01000000001011000000000000000000
+01000000001000010000000000000001
+00110100000001000000000000000000
+01011100001001010000000000100011
+01001100001011000000000000100010
+00110100010000010000000000000010
+01001001100000010000000000100000
+00110100000000010000000000000010
+01011101100000010000000000000110
+00110100000000010000000010100011
+00110100000001001111111111111100
+01000100011000010000000000011011
+01011011100000100000000000011000
+11100000000000000000000000010100
+00110100000000010000000010100011
+01011100011000010000000000001100
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110111100000110000000000011000
+11111011111111111111111001110111
+10111000001000000010000000000000
+01001100000000010000000000010001
+00101011100000100000000000011000
+00110101100000011111111111111101
+11111000000000000000100111110001
+00110100000001001111111111111011
+01001000000000010000000000001100
+00110101100000011111111111111101
+10111001101000000001000000000000
+00110111100000110000000000011000
+11111000000000000000100110100100
+00110100000001001111111111111011
+01001000000000010000000000000110
+01000001011000100000000000010001
+10111001110000000000100000000000
+00110111100000110000000000011000
+11111011111111111111111110000111
+10111000001000000010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000010100011
+11111011111111111111111110111011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000010100000
+11111011111111111111111110110100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000010000100000000000001100
+00110100000000110000000000000001
+10111000001000000110100000000000
+01000100010000110000000000011001
+00110100000000110000000000000010
+01011100010000110000000000110001
+01111000000000100000000000000001
+00111000010000101011110001101100
+00101000010000110000000000000000
+00101000011001010000000001010100
+00101000011001000000000001010000
+00111100101000100000000000000001
+00111100100001000000000000000001
+11110100101000100010100000000000
+11001000000000100001000000000000
+10110100101001000010000000000000
+01111100010001010000000000000000
+11001000000001000010000000000000
+11001000100001010010000000000000
+00101000011001010000000001000000
+00101000011000110000000001000100
+10110100100001010010000000000000
+10110100010000110001100000000000
+11110100010000110001000000000000
+01011011100000110000000000011100
+10110100010001000001000000000000
+01011011100000100000000000011000
+11100000000000000000000000010111
+01111000000000100000000000000001
+00111000010000101011110001101100
+00101000010000110000000000000000
+01111000000001010000000000000001
+00111000101001011000111010111000
+00101000011011100000000010101000
+00101100011010110000000010101100
+00101000011000100000000010100100
+00111101110000010000000000010000
+00101000101001000000000000000000
+10111000001010110101100000000000
+00101000011000010000000010100000
+00110100000000110000000000000000
+00010101110011100000000000010000
+11111000000000000010001000000010
+10110101011000100001000000000000
+11110101011000100101100000000000
+10110101110000010001100000000000
+10110101011000110001100000000000
+01011011100000110000000000011000
+01011011100000100000000000011100
+10111001101000000000100000000000
+01000001100000100000000000010001
+00110111100000110000000000011000
+11111011111111111111111100110100
+11100000000000000000000000000010
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+00101000010000110000000000001100
+01000000010001010000000000010001
+01000000010000100000000000010010
+00101000011000110000000000000000
+10110100011000100001000000000000
+00101000010001000000000000000000
+00101000010000110000000000000100
+01001000100000000000000000001110
+01011100100000000000000000000101
+01111000000001100000000000000001
+00111000110001101000111011101100
+00101000110000100000000000000000
+01010100011000100000000000001001
+00110100000000101111111111111111
+01001000010001000000000000001011
+01011100100000100000000000001011
+01111000000001000000000000000001
+00111000100001001000111011110000
+00101000100000100000000000000000
+01010100010000110000000000000110
+11100000000000000000000000000110
+01111000000001100000000000000001
+00111000110001101000111011000100
+00101000110000110000000000000000
+11100000000000000000000000000010
+01111000000000111000000000000000
+01011011100000110000000000001000
+10111000101000000001000000000000
+00110111100000110000000000001000
+11111011111111111111111100001011
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000001100
+01000000010000110000000000010010
+01000000010000100000000000010001
+00101000100001000000000000000000
+10110100100000110001100000000000
+11111011111111111111111100000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000001100
+01000000010000110000000000010010
+01000000010000100000000000010001
+10110100100000110001100000000000
+11111011111111111111111011110110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110011000
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+10111000001000001000000000000000
+00101000010000010000000000000000
+10111000010000000111000000000000
+00110100000011010000000000000000
+01000000001101100000000000000001
+01000000001011000000000000000000
+00110100000010110000000000000001
+00110111100011110000000000111000
+00110100000101011111111111111111
+00110100000101000000000000000010
+00110100000100110000000000000011
+00110100000100100000000000000100
+00110100000100010000000000000101
+00100001101000110000000011111111
+10111001111000000000100000000000
+00110100000000100000000000000000
+11111000000000000001000101000001
+10111000001000000001100000000000
+01000100001000000000000000011100
+01000100001101010000000000011011
+01011110110010110000000000001101
+01011101100101000000000000001001
+00110111100010110000000001011000
+00110100000000110000000000010000
+10111001011000000000100000000000
+10111001111000000001000000000000
+11111000000000000010001010000001
+10111001011000000001100000000000
+00110011100000000000000001101000
+11100000000000000000000000001101
+01000101100100110000000000000111
+01000101100100100000000000001000
+01000101100100010000000000001001
+00110101011010110000000000000001
+00110101101011010000000000000001
+01001100011010111111111111101010
+11100000000000000000000000001010
+00110111100000110000000001001100
+11100000000000000000000000000100
+00110111100000110000000001010000
+11100000000000000000000000000010
+00110111100000110000000001001000
+01000001110000100000000000010001
+10111010000000000000100000000000
+11111011111111111111111010111000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000110100
+00101011100011000000000000110000
+00101011100011010000000000101100
+00101011100011100000000000101000
+00101011100011110000000000100100
+00101011100100000000000000100000
+00101011100100010000000000011100
+00101011100100100000000000011000
+00101011100100110000000000010100
+00101011100101000000000000010000
+00101011100101010000000000001100
+00101011100101100000000000001000
+00110111100111000000000001101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00101000010000100000000000001100
+10111000001000000110000000000000
+00110100000000010000000000000001
+01011100010000010000000000001010
+00110100000000010000000000000000
+11111000000000000000010000101011
+00110100001000100000000000000001
+01011011100000100000000000010000
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000010000
+11111011111111111111111010010110
+11100000000000000000000000000010
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000010010110000000000001100
+10111001011000000001100000000000
+11111011111111111111110101100111
+10111000001000000110000000000000
+01001100000000010000000000001010
+00101001011000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000000101
+11111011111111111100111110101110
+11111011111111111100111110000111
+00110100000000010000000001100100
+11100000000000000000000000000010
+00110100000000010000000011001000
+01011001011000010000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010010110000000000001100
+10111001011000000001100000000000
+11111011111111111111110101001110
+10111000001000000110100000000000
+01001100000000010000000001010000
+00101001011000100000000000000000
+00110100000000010000000000000010
+01000100010000010000000000011110
+01001000010000010000000000000100
+00110100000000010000000000000001
+01011100010000010000000001001000
+11100000000000000000000000100000
+00110100000000010000000000000011
+01000100010000010000000000000100
+00110100000000010000000000110010
+01011100010000010000000001000011
+11100000000000000000000000111101
+01111000000000100000000000000001
+00111000010000101011110001110000
+00101000010000010000000000010100
+01111000000000110000000000000001
+00111000011000111011111100110000
+01011000011000010000000000000000
+00101000010000010000000000011000
+01111000000000110000000000000001
+00111000011000111011111100110100
+01011000011000010000000000000000
+00101000010000010000000000010000
+01111000000000110000000000000001
+00111000011000111010011111111000
+01011000011000010000000000000000
+01111000000000010000000000000001
+00111000001000011000011110001100
+11111000000000000000001001010011
+11111011111111111100111101111011
+11111011111111111100111101010100
+11100000000000000000000000101100
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011110001110000
+00111000010000101011111110101100
+00110100000000110000000000010000
+11111000000000000010000111111110
+01111000000011000000000000000001
+00111001100011001011110001110000
+01000001100000010000000000000000
+01011100001000000000000000000011
+00110100000000010000000011001011
+11100000000000000000000000100011
+00110100000000100000000000010000
+10111001100000000000100000000000
+11111000000000000010001111011000
+10111000001000000001000000000000
+00110100000000110000000000001111
+00110100000000010000000000100000
+11100000000000000000000000000100
+10110100010011000010000000000000
+00110000100000010000000000000000
+00110100010000100000000000000001
+01001100011000101111111111111101
+00110100000000100000000000000001
+10111001100000000000100000000000
+00110100000000110000000000000000
+11111000000000000001000010011111
+10111000001000000001000000000000
+00110100000000011111111111111110
+01011100010000010000000000000011
+00110100000000010000000011001010
+11100000000000000000000000001111
+00110100000000011111111111111111
+01011100010000010000000000000011
+00110100000000010000000011001001
+11100000000000000000000000001011
+11111000000000000000100011111000
+01000100001000000000000000000110
+00110100000000010000000001100101
+11100000000000000000000000000111
+11111000000000000001000000110001
+00110100000000101111111111111111
+01000100001000100000000000000011
+00110100000000010000000001100100
+11100000000000000000000000000010
+00110100000000010000000011001000
+01011001011000010000000000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+00101000010000010000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000001
+01000000001100100000000000000001
+01000000001011100000000000000000
+00110100000000010000000000000000
+11111000000000000000110000010100
+10111000001000000010000000000000
+00110100000100010000000000000010
+00110100000100000000000000000011
+11100000000000000000000000100101
+01011110010011000000000000100000
+00101000100010110000000000000100
+01011101110100010000000000000111
+00101000100000110000000000000000
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000100111101111001100
+11111000000000000000000111101110
+11100000000000000000000000011111
+01011101110100000000000000010111
+01111000000000011000000000000000
+01011101011000010000000000000110
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000101000011110111000
+11111000000000000000000111100110
+11100000000000000000000000010111
+01001101011000000000000000000110
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000100111100100111000
+11001000000010110101100000000000
+11111000000000000000000111011111
+00100001011001001111111111111111
+00001000100001000010011100010000
+01111000000000100000000000000001
+00010101011000110000000000010000
+00000000100001000000000000010000
+00110111100000010000000000101000
+00111000010000101000011111000000
+11111000000000000000000111010111
+11100000000000000000000000001000
+10111000100000000000100000000000
+11111000000000000000101111101110
+10111000001000000010000000000000
+00110101100011000000000000000001
+01011100100000001111111111011100
+00110100000000010000000000000000
+11100000000000000000000000000101
+01000001101000100000000000010001
+10111001111000000000100000000000
+00110111100000110000000000101000
+11111011111111111111110111010110
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010011010000000000001100
+10111000001000000110000000000000
+10111000010000000101100000000000
+00100001101000010000000000000010
+01000100001000000000000000001001
+11111000000000000000011110101111
+00110100000000100000000000001010
+11111000000000000010000100010100
+01011011100000010000000000011100
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000011100
+11100000000000000000000000010011
+00100001101000100000000000000100
+01000100010000010000000000000100
+00110111100000010000000000010100
+00110100000000100000000000000000
+11111000000000000000110010101000
+00100001101011010000000000000001
+01000101101000000000000000001001
+00101011100000100000000000011000
+00101011100000010000000000010100
+00110100000000110000000000000010
+11111011111111111111010011001010
+10111000001000000001100000000000
+01000001011000100000000000010001
+10111001100000000000100000000000
+11100000000000000000000000000100
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000010100
+11111011111111111111110110100110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000000000000
+00110100000001000000000010100001
+00111000001000011010000110011000
+11111011111111111111011010110101
+01111000000000100000000000000001
+00111000010000101011110001101000
+01011000010000010000000000000000
+01111000000000010000000000000001
+00111000001000011001100000011000
+00101000001000010000000000011000
+01111000000000100000000000000001
+00111000010000101011110001101100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01011000010000010000000000000000
+00111000011000111011110010010100
+00110111100000010000000000001100
+00110111100000100000000000001000
+00111000100001001011110010010000
+11111000000000000000011110000101
+01000011100000110000000000001111
+01000011100000100000000000001011
+01111000000000010000000000000001
+00111000001000011010000110000000
+00110000001000110000000000001000
+00110000001000100000000000001001
+01111000000000010000000000000001
+00111000001000011010000110001100
+00110000001000110000000000001000
+00110000001000100000000000001001
+00101011100111010000000000000100
+00110111100111000000000000001100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011110110100100
+00101100011001010000000000000000
+01111000000001000000000000000001
+00111000100001001011110110111100
+00111100001000010000000000000001
+10110100100001010010000000000000
+00110100101001010000000000000010
+00110000100000010000000000000000
+00110000100000100000000000000001
+00001100011001010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110100000000100000000000001000
+01010100001000100000000010111110
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101001001110101100
+10110100010000010001000000000000
+00101000010000010000000000000000
+01111000000011000000000000000001
+00111001100011001011110110100100
+11000000001000000000000000000000
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111111100010
+11100000000000000000000010101100
+00110100000000010000000000000001
+00110100000000100000000000000111
+11111011111111111111111111011110
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110110111100
+10110100001000100000100000000000
+00110100000000100000000000000100
+11100000000000000000000000001001
+00110100000000010000000000000010
+00110100000000100000000000000111
+11111011111111111111111111010101
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110110111100
+10110100001000100000100000000000
+00110100000000100000000000000011
+00110000001000100000000000000000
+00110100001000010000000000000001
+11111000000000000000001010001011
+00110100000010110000000000000111
+11100000000000000000000010010111
+00110100000000010000000000000011
+00110100000000100000000000000010
+11111011111111111111111111001000
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110110111100
+10110100001000100000100000000000
+00110100000000100000000000101000
+00110000001000000000000000000000
+00110000001000100000000000000001
+00110100000010110000000000000010
+11100000000000000000000010001011
+01111000000011010000000000000001
+00111001101011011000011101001100
+10111001101000000000100000000000
+11111000000000000010001000100000
+00110100001010110000000000000001
+00100001011000100000000011111111
+00110100000000010000000000000100
+11111011111111111111111110110111
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110110111100
+10110100010000010000100000000000
+10111001101000000001000000000000
+11111000000000000010000111110010
+11100000000000000000000001111100
+00110111100000010000000001000000
+11111011111111111111011111001101
+01111000000000100000000000000001
+00110111100000010000000001000000
+00111000010000101000111110000000
+00110100000000110000000000000100
+01111000000011000000000000000001
+01111000000011100000000000000001
+11111000000000000010000010110111
+00111001100011001011110110100100
+00111001110011101011110110111100
+00110111100011010000000000011000
+01000100001000000000000000001101
+00110111100000100000000001000000
+10111001101000000000100000000000
+11111011111111111111001100001100
+10111001101000000000100000000000
+11111000000000000010001000000011
+10111000001000000101100000000000
+00101101100000010000000000000000
+10111001101000000001000000000000
+00110100001000010000000000000010
+10110100001011100000100000000000
+11111000000000000010000111011001
+11100000000000000000000000010100
+00110111100000010000000000111000
+11111000000000000000001001010011
+01000011100000110000000000111000
+01000011100001000000000000111001
+01000011100001010000000000111010
+01000011100001100000000000111011
+01000011100001110000000000111100
+01000011100010000000000000111101
+01111000000000100000000000000001
+00111000010000101000000101000000
+10111001101000000000100000000000
+11111000000000000000000011111010
+00101101100000010000000000000000
+10111001101000000001000000000000
+00110100000000110000000000010001
+00110100001000010000000000000010
+10110100001011100000100000000000
+11111000000000000010001001100110
+00110100000010110000000000010001
+00110100000000010000000000000101
+00100001011000100000000011111111
+11100000000000000000000000100110
+00101101100011100000000000000000
+01111000000011010000000000000001
+00111001101011011011110110111100
+00110101110011100000000000000010
+01111000000010110000000000000001
+10110101110011010111000000000000
+00111001011010111100001001110100
+00110100000000110000000000000100
+10111001011000000001000000000000
+10111001110000000000100000000000
+11111000000000000010001001010111
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111000000000000010001010000111
+10110101110000010101100000000000
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000100111111001011100
+01111000000011100000000000000001
+11111000000000000010000110101110
+00111001110011101001011011011000
+00101001110000100000000000000000
+00110101011010110000000000000010
+10111001011000000000100000000000
+00110100000000110000000000100000
+11111000000000000010001001001000
+00101001110000010000000000000000
+00110100000000100000000000100000
+11111000000000000010001001111000
+10110101011000010000100000000000
+00101101100010110000000000000000
+00110101011010110000000000000010
+10110101011011010101100000000000
+11001000001010110101100000000000
+00100001011010110000000011111111
+00110100000000010000000000000110
+10111001011000000001000000000000
+11111011111111111111111101011011
+11100000000000000000000000100110
+01111000000000100000000000000001
+00110111100000010000000001000000
+00111000010000101000111110000000
+00110100000000110000000000000100
+11111000000000000010000001100101
+00110100000010110000000000000000
+01000100001000000000000000011111
+00110100000000010000000000001000
+00110100000000100000000000001100
+01111000000011000000000000000001
+11111011111111111111111101001111
+00111001100011001011110110100100
+00101101100000010000000000000000
+01111000000010110000000000000001
+00111001011010111011110110111100
+10110101011000010000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000010
+00110000001000100000000000000000
+00110100000000100000000000000001
+00110000001000110000000000000110
+00110000001000100000000000000001
+00110000001000100000000000001010
+00110111100000010000000001000000
+11111011111111111111011101100000
+00110111100000100000000001000000
+00110111100000010000000000011000
+11111011111111111111001010101010
+00101101100000010000000000000000
+00110111100000100000000001000000
+00110100000000110000000000000100
+00110100001000010000000000000010
+10110101011000010000100000000000
+11111000000000000010000001101001
+00110100000010110000000000001100
+11100000000000000000000000000010
+00110100000010110000000000000000
+01111000000000010000000000000001
+00111000001000011011110110100100
+00101100001000100000000000000000
+10110101011000100101100000000000
+00001100001010110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000010011110
+00111000001000011011110110111100
+11111000000000000010000011001111
+01111000000000010000000000000001
+00111000001000011011110110100100
+00001100001000000000000000000000
+01111000000000010000000000000001
+00111000001000011000011111101000
+11111000000000000000000010010111
+00110100000010110000000000000001
+00110100000011000000000000001001
+10111001011000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111100100001
+01011101011011001111111111111101
+00110100000000010000000000000000
+11111011111111111111111100011110
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111001101000
+00101000001000100000000000000000
+00110100000000110010011100010000
+01001100011000100000000000110100
+00110111100011000000000000010000
+10111001100000000000100000000000
+11111000000000000000000110111111
+00110111100010110000000000010111
+10111001011000000000100000000000
+11111011111111111111011100011101
+01111000000000100000000000000001
+00110100000000110000000000000110
+10111001100000000000100000000000
+00111000010000101011111001011100
+11111000000000000010000000001001
+10111000001000000001100000000000
+01011100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101011100011101000
+00101000010000010000000000000000
+01000100001000110000000000010010
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000101011111001100100
+00110100000000110000000000000100
+11111000000000000001111111111110
+01000100001000000000000000001100
+11111011111111111111111111000100
+01111000000000010000000000000001
+00110111100000100000000000010000
+00110100000000110000000000000110
+00111000001000011011111001011100
+11111000000000000010000000011000
+01111000000000010000000000000001
+00111000001000011011111001100100
+00110111100000100000000000010111
+00110100000000110000000000000100
+11111000000000000010000000010011
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011011110110100000
+00111000100001001011110110100100
+00101000001000010000000000000000
+00101100100001000000000000000000
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101011110110101000
+00111000011000111011110110111100
+00110100000001010000000000000000
+11111011111111111111011010000011
+01111000000000010000000000000001
+00111000001000011011111001101000
+01011000001000000000000000000000
+00110100000000010000000000000001
+11100000000000000000000000000100
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010000001110000
+00110100000000011000100011001100
+00001111100000010000000000011000
+01111000000000010000000000000001
+00110100000001000000000000000000
+10111001011000000001000000000000
+00110100000000110000000000000001
+00111000001000011011111001101100
+11111011111111111111010101010000
+01111000000000100000000000000001
+01111000000010110000000000000001
+00111001011010111011110110101000
+00111000010000101011110110100000
+01011000010000010000000000000000
+00110100000000110000000000010010
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000010000001011111
+01111000000000100000000000000001
+00111000010000101000111110001000
+00110100000000110000000000000110
+10111001011000000000100000000000
+11111000000000000001111111011100
+11111011111111111111111110000010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000010000000000000
+00111001011010111011111010100000
+10111000010000000001100000000000
+10111001011000000000100000000000
+10111000100000000001000000000000
+11111000000000000000000000100111
+10111000001000000110000000000000
+10111001011000000000100000000000
+11111000000000000000000100001100
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100111010000000000000100
+01011011100000110000000000001100
+00110111100000110000000000001100
+01011011100000100000000000001000
+01011011100001000000000000010000
+01011011100001010000000000010100
+01011011100001100000000000011000
+01011011100001110000000000011100
+01011011100010000000000000100000
+11111000000000000000000000010011
+00101011100111010000000000000100
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100111010000000000000100
+01011011100000100000000000001100
+00110111100000100000000000001100
+01011011100000010000000000001000
+01011011100000110000000000010000
+01011011100001000000000000010100
+01011011100001010000000000011000
+01011011100001100000000000011100
+01011011100001110000000000100000
+01011011100010000000000000100100
+11111011111111111111111111010011
+00101011100111010000000000000100
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111110011100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000101100000000000000001
+10111000001000001100100000000000
+10111000010000001010000000000000
+10111000001000001001100000000000
+00110100000110000000000000100101
+00110100000010010000000001101001
+00110100000010000000000001110000
+00110100000001110000000001011000
+00110100000110110000000000101010
+00110100000010100000000000110000
+00110100000101110000000000010000
+00110111100101010000000001011000
+00111010110101101000100000000000
+11100000000000000000000010010110
+00110100000011110000000000000000
+00110100000100010000000000100000
+00110100000011010000000000001010
+01000100001110000000000000000100
+00110010011000010000000000000000
+11100000000000000000000000111100
+00110100000100010000000000110000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01000100001010010000000001000000
+01010100001010010000000000001111
+01000100001001110000000000111011
+01010100001001110000000000001000
+01000100001110110000000000011010
+01010100001110110000000000000100
+01000100001000000000000010001000
+01011100001110000000000000011010
+11100000000000000000000000101111
+01011100001010100000000000011000
+11100000000000000000000000010110
+00110100000000100000000001100011
+01000100001000100000000000011100
+00110100000001000000000001100100
+01011100001001000000000000010011
+11100000000000000000000000110001
+01000100001010000000000000101101
+01010100001010000000000000000110
+00110100000000100000000001101110
+01000100001000100000000001111000
+00110100000001000000000001101111
+01011100001001000000000000001100
+11100000000000000000000000100100
+00110100000000100000000001110101
+01000100001000100000000000101000
+00110100000001000000000001111000
+01000100001001000000000000100011
+00110100000000100000000001110011
+01011100001000100000000000000101
+11100000000000000000000000010000
+00101000011011010000000000000000
+00110100011000110000000000000100
+01000101111000001111111111011101
+00110100001000011111111111010000
+00100000001000100000000011111111
+00110100000001000000000000001001
+01010100010001001111111111011010
+00001001111011110000000000001010
+10110100001011110111100000000000
+11100011111111111111111111010111
+00101000011000010000000000000000
+00110100011000110000000000000100
+00110010011000010000000000000000
+00110110011100110000000000000001
+11100000000000000000000001011111
+10111000011000000000100000000000
+00101000001000010000000000000000
+00110100011000110000000000000100
+11100000000000000000000000000100
+00110010011000100000000000000000
+00110100001000010000000000000001
+00110110011100110000000000000001
+01000000001000100000000000000000
+01011100010000001111111111111100
+11100000000000000000000001010101
+00110010011110000000000000000000
+00110110011100110000000000000001
+11100000000000000000000001010010
+00110100000000010000000000001010
+01000101101000010000000000000100
+11100000000000000000000000000100
+00110100000011010000000000010000
+11100000000000000000000000000010
+00110100000011010000000000001000
+00101000011001010000000000000000
+00110100011100100000000000000100
+10111000101000000111000000000000
+01011101111000000000000000000010
+00110100000011110000000000000001
+00000000101001100000000000011111
+01100101101000110000000000001010
+00110100000100000000000000000000
+10100000110000110001100000000000
+01000100011000000000000000000011
+11001000000001010111000000000000
+00110100000100000000000000000001
+00110100000011000000000000010000
+11100000000000000000000000010101
+10111001110000000000100000000000
+10111001101000000001000000000000
+01011011100001110000000001001100
+01011011100010000000000001010000
+01011011100010010000000001010100
+01011011100010100000000001001000
+11111000000000000001111011010111
+10110110110000010001100000000000
+01000000011000110000000000000000
+00110101100011001111111111111111
+10110110101011000101100000000000
+10111001110000000000100000000000
+00110001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000001111010111111
+00101011100010100000000001001000
+00101011100010010000000001010100
+00101011100010000000000001010000
+00101011100001110000000001001100
+10111000001000000111000000000000
+01111101100001000000000000000000
+01111101110000110000000000000000
+10100000100000110001100000000000
+01011100011000001111111111101001
+01011101100101110000000000000100
+00110100000000100000000000110000
+00110011100000100000000001100111
+00110100000011000000000000001111
+01100110001000100000000000100000
+10100010000000100001000000000000
+01000100010000000000000000001011
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110100000000110000000000101101
+00110000010000110000000000000000
+00110100000100000000000000000000
+11100000000000000000000000000101
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110000010100010000000000000000
+11100000000000000000000000000011
+11001010111011110000100000000000
+10110100001100000000100000000000
+01001001100000011111111111111010
+01000110000000000000000000000101
+00110101100011001111111111111111
+10110110101011000000100000000000
+00110100000000100000000000101101
+00110000001000100000000000000000
+11001010111011000001100000000000
+10111010011000000000100000000000
+00110100000001000000000000001111
+11100000000000000000000000000110
+10110110101011000001000000000000
+01000000010000100000000000000000
+00110101100011000000000000000001
+00110000001000100000000000000000
+00110100001000010000000000000001
+01001100100011001111111111111011
+10110110011000111001100000000000
+10111010010000000001100000000000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01011100001000001111111101101010
+11001010011110010000100000000000
+00110010011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001100100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001001111100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011100001010100100
+01011000001000100000000000000000
+00110100000000010000001111000110
+01011000010000010000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000001010
+01011101011000010000000000000011
+00110100000000010000000000001101
+11111011111111111111111111111001
+01111000000000100000000000000001
+00111000010000101100001010100100
+00101000010000100000000000000000
+00101000010000010000000000000000
+00100000001000010000000000000001
+01011100001000001111111111111110
+01011000010010110000000000001000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000001000000101100000000000
+11100000000000000000000000000100
+10111000010000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111111100100
+01000001011000100000000000000000
+01011100010000001111111111111100
+11001001011011000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010100100
+00101000001000100000000000000000
+00110100000000011111111111111111
+00101000010000110000000000000000
+00100000011000110000000000000010
+01000100011000000000000000000011
+00101000010000010000000000001100
+00100000001000010000000011111111
+11000011101000000000000000000000
+01111000000000100000000000000001
+00010100001000010000000000000010
+00111000010000101100001010100000
+00101000010000100000000000000000
+00100000001000010000000011111111
+00111100001000010000000000010000
+01011000010000010000000000101100
+00101000010000010000000000110000
+01001100001000001111111111111111
+00101000010000010000000000110000
+00100000001000011111111111111111
+11000011101000000000000000000000
+00010100001000010000000000000010
+01111000000000110000000000000001
+00111000011000111100001010100000
+00100000001000010000000011111111
+00101000011000110000000000000000
+00100000010000101111111111111111
+01111000000001001000000000000000
+00111100001000010000000000010000
+10111000010001000001000000000000
+10111000010000010001000000000000
+01011000011000100000000000101100
+00101000011000010000000000110000
+01001100001000001111111111111111
+11000011101000000000000000000000
+01000000001001000000000000000010
+01000000001000110000000000000011
+01111000000000100000000000000001
+00111100100001000000000000011000
+00111100011000110000000000010000
+00111000010000101100001010100000
+10111000100000110001100000000000
+01000000001001000000000000000101
+00101000010000100000000000000000
+10111000011001000001100000000000
+01000000001001000000000000000100
+00111100100001000000000000001000
+10111000011001000001100000000000
+01011000010000110000000000101000
+01000000001000110000000000000001
+01000000001000010000000000000000
+00111100001000010000000000001000
+10111000011000010000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010100000
+00101000010000110000000000000000
+00101000011000110000000000101000
+00110000001000110000000000000101
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000001000
+00110000001000110000000000000100
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000010000
+00110000001000110000000000000011
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000011000
+00110000001000110000000000000010
+00101000010000110000000000000000
+00101000011000110000000000100100
+00110000001000110000000000000001
+00101000010000100000000000000000
+00101000010000100000000000100100
+00000000010000100000000000001000
+00110000001000100000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000010000000110000000000000
+00111001011010111100001010100000
+01011100001000000000000000000100
+00101001011000010000000000000000
+01011000001000000000000000000000
+11100000000000000000000000100010
+00101001011000010000000000000000
+01011000001000000000000000000000
+00101000001000100000000000110100
+01111000000000010000000000000001
+00111000001000011000100000010100
+11111011111111111111111010010110
+11111000000000000000000010111110
+00101001011000010000000000000000
+00110100000000100000000011100000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111100100000
+00110100000000100000100000000000
+01011000001011000000000000000000
+00110100000000010000000000000000
+11111011111111111111111110101011
+00110100000000010000000011001000
+11111000000000000000010001111011
+00110100000000010000000000000000
+00111000000000101000000000000000
+11111011111111111111111110100110
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110100011
+00110100000000010000000000010000
+00110100000000100000000000000000
+11111011111111111111111110100000
+01111101100000100000000000000000
+00110100000000010000000000000000
+11001000000000100001000000000000
+00100000010000100001001000000000
+00110100010000100000000101000000
+11111011111111111111111110011010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111100100000
+00101000010010110000000000000000
+10111000001000000110000000000000
+00110100000000010000000000000100
+11111011111111111111111101111110
+01111101011010110000000000000000
+00001111100000010000000000010010
+00110100000000010000000000000100
+11001000000010110101100000000000
+11111011111111111111111101111001
+00100001011010110000000000100000
+00001111100000010000000000010010
+00110101011010110000000000000100
+01000101100000000000000000000100
+00110100000000010000000000010100
+11111011111111111111111101110011
+00001101100000010000000000000000
+00101111100000010000000000010010
+10100001011000010000100000000000
+11100100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101100110
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+00111000011000111011111100110000
+10111000010000000101100000000000
+00101000011000100000000000000000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111100110100
+00101000001011000000000000000000
+00110100000000010000000001000000
+11111011111111111111111101010010
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+10110100001011000000100000000000
+01011001011000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101000011
+00111000001000100000000000000001
+00110100000000010000000001000000
+11111011111111111111111101001100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111100111000
+00110100000000101111111111111110
+10100000001000100001000000000000
+00110100000000010000000001000000
+11111011111111111111111101000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111100001010100000
+00101001011000010000000000000000
+00101000001000100000000000000100
+00111000010000100000000000010000
+01011000001000100000000000000100
+00110100000000010000000000000001
+11111000000000000000010000000011
+00101001011000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000100000
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000001000100
+11111011111111111111111100010111
+00111000001000100000000000100000
+01000101011000000000000000000011
+00110100000000101111111111011111
+10100000001000100001000000000000
+00110100000000010000000001000100
+11111011111111111111111100011101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111110010000
+00101000010000100000000000000000
+01111000000010110000000000000001
+00111001011010111100001010100000
+01011001011000100000000000000000
+11111011111111111111111100011100
+00110100000000010000000000000001
+11111011111111111111111111100100
+01111000000000100000000000000001
+00111000010000101000111011110100
+00101000010000010000000000000000
+01111000000001000000000000000001
+00111000100001001000111011111000
+01011000001000000000000000000000
+00101001011000010000000000000000
+00101000100000110000000000000000
+00110100000000100000000000000011
+01011000001000000000000000000000
+01011000001000100000000000001100
+01011000001000110000000000001000
+01111000000000110000000000000001
+00111000011000111000111011111100
+01011000001000100000000000000100
+00101000011000100000000000000000
+01011000001000100000000000111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001011011110100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011010011111010000
+01000100010000000000000000000011
+01111000000000010000000000000001
+00111000001000011010011111011000
+00101000001010110000000000000000
+01011101011000000000000000000100
+01111000000000010000000000000001
+00111000001000011000100000011100
+11100000000000000000000000110110
+01111000000000110000000000000001
+00111000011000111000111100000000
+00101000001011000000000000000100
+00101001011000100000000000000000
+00101000011000010000000000000000
+01000100010000010000000000010001
+10111001011000000000100000000000
+01111000000001000000000011111111
+11100000000000000000000000001101
+00101000001000110000000000000000
+00111100011001100000000000011000
+00000000011001010000000000011000
+10111000110001010010100000000000
+10100000011001000011000000000000
+00000000110001100000000000001000
+00100000011000111111111100000000
+00111100011000110000000000001000
+10111000101001100010100000000000
+10111000101000110001100000000000
+01011000001000110000000000000000
+00110100001000010000000000000100
+01010101100000011111111111110100
+01111000000001000000000000000001
+00111000100001001000111100000000
+00101001011000110000000000000000
+00101000100000010000000000000000
+01000100011000010000000000000101
+01111000000000010000000000000001
+00111000001000011000100000110100
+11111011111111111111110110101000
+11100000000000000000000010101011
+01111000000000010000000000000001
+00111000001000011011111100100100
+00101000001000100000000000000000
+00110101011010110000000000000100
+01011100010000000000000000010110
+00101001011000110000000000001000
+00110100000000100001001000110100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000001011
+00101001011000110000000000010000
+00110100000000100101011001111000
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000000110
+00101001011000110000000000011000
+00110100010000100100010001000100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01000100011000100000000000000101
+01111000000000010000000000000001
+00111000001000011000100001011100
+11111011111111111111110110010000
+11100000000000000000000010010011
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110111100000010000000000010100
+11111011111111111111111011001100
+01111000000001100000000000000001
+00111000110001101000111100000100
+00101000110001010000000000000000
+00101001011001110000000000001000
+00101001011001100000000000010000
+00101001011000010000000000011000
+10100000111001010011100000000000
+10100000110001010011000000000000
+10100000001001010000100000000000
+01011001011001110000000000001000
+01011001011001100000000000010000
+01011001011000010000000000011000
+01000011100010000000000000010100
+01000011100010010000000000010101
+00110101011001000000000000001000
+00111101000010000000000000001000
+00110101011000110000000000010000
+10111001000010010100000000000000
+00111101000010000000000000001101
+00110101011000100000000000011000
+10111000111010000011100000000000
+01011001011001110000000000001000
+01000011100001110000000000010110
+01000011100010000000000000010111
+00111000000010011100101011111110
+00111100111001110000000000001000
+10111000111010000011100000000000
+00111100111001110000000000001101
+00110100000010000000000000000001
+10111000110001110011000000000000
+01011001011001100000000000010000
+01000011100001100000000000011000
+01000011100001110000000000011001
+00111100110001100000000000001000
+10111000110001110011000000000000
+00111100110001100000000000001101
+10111000001001100000100000000000
+01111000000001100000000000000001
+00111000110001101000111100001000
+01011001011000010000000000011000
+00101000110001110000000000000000
+10111001011000000000100000000000
+11100000000000000000000000001011
+00101000001001100000000000000000
+00000000110010100000000000001101
+00100001010010101111111111111111
+01011101010010010000000000000110
+00100000110010100000000000000111
+01011101010010000000000000000100
+10100000110001010011000000000000
+10111000110001110011000000000000
+01011000001001100000000000000000
+00110100001000010000000000001000
+01010101100000011111111111110110
+01111000000001110000000000000001
+00111000111001111000111100000100
+01111000000001100000000000000001
+10111001011000000000100000000000
+00110100000001010000000000000000
+00110100000010100000101010101010
+00110100000010010000000000000111
+00101000111010000000000000000000
+00111000110001101001011011110100
+11100000000000000000000000010000
+00101000001001110000000000000000
+00000000111011010000000000001101
+00100001101011011111111111111111
+01011101101010100000000000001011
+00000000111011010000000000000111
+00100001101011010000000000011111
+01011101101010010000000000001000
+10100000111010000011100000000000
+01011000001001110000000000000000
+00101000110001010000000000000000
+00111100101001010000000000001101
+10111000101001110011100000000000
+01011000001001110000000000000000
+10111000001000000010100000000000
+00110100001000010000000000001000
+01010101100000011111111111110001
+01111000000000010000000000000001
+00111000001000011100001010100000
+00101000001000010000000000000000
+00110100000001100000000000000000
+01011000001000000000000000010100
+11100000000000000000000000001111
+00101001011001110000000000000000
+00101001011010010000000000000100
+00110101011010110000000000001000
+00100000111010000000111111111111
+00111101001010010000000000010100
+00000000111001110000000000001100
+01011000001010000000000000011000
+10111001001001110011100000000000
+00111100111001110000000000001000
+00100000110010010000000000111111
+00111000111001110000000001000000
+10111000111010010011100000000000
+01011000001001110000000000010100
+00110100110001100000000000000001
+01010101100010111111111111110010
+01000100101000000000000000001011
+01111000000010000000000000000001
+00111001000010001000111100000100
+00101000101001110000000000000000
+00101001000001100000000000000000
+01111000000010000000000000000001
+00111001000010001000111100001100
+10100000111001100011000000000000
+00101001000001110000000000000000
+10111000110001110011000000000000
+01011000101001100000000000000000
+01111000000001110000000000000001
+00111000111001111000111100000100
+00101000100001100000000000000000
+00101000111001010000000000000000
+01111000000010000000000000000001
+00111001000010001000111100010000
+10100000110001010011000000000000
+01011000100001100000000000000000
+00101000011001100000000000000000
+10100000110001010011000000000000
+01011000011001100000000000000000
+00101000010001100000000000000000
+10100000110001010010100000000000
+01011000010001010000000000000000
+00101000100001100000000000000000
+00101001000001010000000000000000
+10111000110001010010100000000000
+01011000100001010000000000000000
+00101000011001010000000000000000
+01111000000001000000101011001111
+10111000101001000010000000000000
+01111000000001010000000000000001
+01011000011001000000000000000000
+00111000101001011000111100010100
+00101000010001000000000000000000
+00101000101000110000000000000000
+10111000100000110001100000000000
+01011000010000110000000000000000
+00110100000000100000000010000000
+01011000001000100000000000010100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011100
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011100
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+00110100000000100000000000000000
+11100000000000000000000000000011
+00110100000000000000000000000000
+00110100010000100000000000000001
+01011100010000011111111111111110
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111100000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111111011110
+00101001011000010000000000001000
+11111011111111111111111111101110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111111011001
+00101001011000010000000000001000
+11111011111111111111111111101001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111100000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111111001000
+00101001011000010000000000001000
+11111011111111111111111111011000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111111000011
+00101001011000010000000000001000
+11111011111111111111111111010011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110111110
+00101001011000010000000000001000
+11111011111111111111111111001110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110111001
+00101001011000010000000000001000
+11111011111111111111111111001001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111100000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110101000
+00101001011000010000000000001000
+11111011111111111111111110111000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111110100011
+00101001011000010000000000001000
+11111011111111111111111110110011
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111110011110
+00101001011000010000000000001000
+11111011111111111111111110101110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000110000000000000001
+00111000011000111010011111100000
+00100000010011110000000011111111
+00110100000011100000000000001000
+10110100011010110101100000000000
+00101001011000010000000000000100
+00100001111000100000000010000000
+00110101110011101111111111111111
+11111011111111111111111110000110
+00101001011000010000000000001000
+00111101111011110000000000000001
+00100001110011100000000011111111
+11111011111111111111111110010100
+00101001011000010000000000000000
+00110100000000100000000000000001
+00110101011011010000000000000100
+11111011111111111111111101111110
+00101001011000010000000000001000
+00110101011011000000000000001000
+00100001111011110000000011111111
+11111011111111111111111110001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101110111
+00101001011000010000000000001000
+11111011111111111111111110000111
+01011101110000001111111111101011
+00101001101000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101110001
+00101001100000010000000000000000
+11111011111111111111111110000001
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101101100
+00101001100000010000000000000000
+11111011111111111111111101111100
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101001101011100000000000000000
+00110100000000100000000000000000
+00101000001000010000000000000100
+10100000001011100111000000000000
+00101001011000010000000000000000
+11111011111111111111111101100001
+00101001100000010000000000000000
+11111011111111111111111101110001
+00101001101000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101011100
+00101001100000010000000000000000
+11111011111111111111111101101100
+01111101110000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000001000000000000000001
+00111000100001001010011111100000
+10110100100010110101100000000000
+00101001011000010000000000000100
+10111000010000001000000000000000
+00110100000000100000000000000001
+00100000011100010000000011111111
+11111011111111111111111100111110
+00101001011000010000000000001000
+01111000000011110000000000000001
+00110100000011100000000000001000
+11111011111111111111111101001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000011010000000000000000
+11111011111111111111111100110110
+00101001011000010000000000001000
+00111001111011111100001010011100
+11111011111111111111111101000101
+00101001011000010000000000000000
+00110100000000100000000000000001
+00111101101011010000000000000001
+11111011111111111111111100101111
+00101001011000010000000000001000
+00100001101011010000000011111111
+11111011111111111111111100111110
+00101001111000010000000000000000
+00101001011000100000000000000100
+00101000001000010000000000000100
+10100000001000100000100000000000
+01000100001000000000000000000010
+00111001101011010000000000000001
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110101110011101111111111111111
+11111011111111111111111100100010
+00101001011000010000000000001000
+00110101011011000000000000001000
+11111011111111111111111100110001
+01011101110000001111111111101100
+01000110001011100000000000000100
+00101001011000010000000000000100
+00110100000000100000000000000001
+11100000000000000000000000000011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111100010111
+00101001100000010000000000000000
+11111011111111111111111100100111
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111100010010
+00101001100000010000000000000000
+11111011111111111111111100100010
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111100001101
+00101001100000010000000000000000
+11111011111111111111111100011101
+00110010000011010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111100000
+10110100010010110101100000000000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111011110101
+00101001011000010000000000001000
+11111011111111111111111100000101
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111011110000
+00101001011000010000000000001000
+11111011111111111111111100000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00100000001010110000000011111111
+10111001011000000000100000000000
+00100000010011000000000011111111
+11111011111111111111111011111010
+00111101100000100000000000000001
+10111001011000000000100000000000
+00100000010000100000000011111110
+11111011111111111111111101000111
+10111000001000000110000000000000
+10111001011000000000100000000000
+11111011111111111111111100101001
+01100101100000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00100000001000010000000000000011
+00111100001000010000000000010000
+10111000001000100001000000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+01111000000010110000000000000001
+00110100000001000000000000000001
+00101000001000110000000000000000
+00111001011010111100001010010000
+00000000011000100000000000011000
+00100000010000100000000000001111
+01000100010001000000000000000110
+01111000000000010000000000000001
+00111000001000011000100010000100
+11111011111111111111101110110011
+01011001011000000000000000000000
+11100000000000000000000000000110
+01011001011000100000000000000000
+00110100000000100000000000000111
+01011000001000100000000001000000
+00111000011000110000010000000000
+01011000001000110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000011000001000100000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+10111000100000000110000000000000
+00101000011001000000000000000000
+00110100000010110000000000000000
+00101000100001010000000000000000
+00100000101001010001000000000000
+01011100101000000000000010011100
+01111000000000110000000000000001
+00111000011000111100001010010000
+00101000011000110000000000000000
+10111000101000000101100000000000
+01000100011001010000000010010111
+00110100100011110000000000001000
+01111000000010100100000000000000
+00110100000001000000000000000000
+00110100000010010000000000001101
+00110100000010000000000000000011
+00110100000001110000000000000001
+00101001111100000000000000000000
+11110001001001000011000000000000
+00000010000011100000000000010000
+00100010000011011111111111111111
+00100001110011100000000000000011
+01100101110001010000000000000000
+10100010000010101000000000000000
+10100000101001100011000000000000
+01111110000100000000000000000000
+01000100110000000000000000000111
+00000000100000110000000000000001
+00110100100001000000000000000010
+00111100011000110000000000000001
+10110100001000110001100000000000
+00001100011011010000000000000000
+11100000000000000000000000011110
+11110101011100011001000000000000
+01111101110000110000000000000010
+10100010010000110001100000000000
+01011100011001100000000000000110
+01000100101000110000000000000111
+00000001011000110000000000000001
+00111100011000110000000000000001
+10110100010000110001100000000000
+00001100011011010000000000000000
+00110101011010110000000000000010
+11100000000000000000000000010011
+01011101110010000000000000000111
+00000001011000110000000000000001
+00110101011010110000000000000001
+00111100011000110000000000000001
+10110100010000110001100000000000
+00001100011011010000000000000000
+11100000000000000000000000001100
+01111100100001100000000000000000
+01100101110000110000000000000010
+10100000110000110001100000000000
+01000100011001010000000000001000
+00100001101000010000000000000010
+00110100000011100000000000000010
+01000100001001010000000000001001
+01111000000000010000000000000001
+00111000001000011000100010111000
+11111011111111111111101101011110
+11100000000000000000000000000101
+01011110000000000000000000000011
+01011101110001111111111111010010
+11100000000000000000000000000010
+00110100000100000000000000000001
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001001010000000000000000
+00110100000100100000100000000000
+00110100000000010000000000000000
+00110100101001010000000000001000
+00110100000011110000000000000000
+00110100000000100000000000000001
+00110100000001000000000000000010
+01111000000000110100000000000000
+11100000000000000000000000010000
+01000100001000000000000000000111
+01011100001000100000000000000011
+00111101101011110000000000010000
+11100000000000000000000000000101
+01011100001001000000000000000100
+10111001111011010111100000000000
+11100000000000000000000000000010
+10111001101000001001000000000000
+00101000101100000000000000000000
+00110100001000010000000000000001
+00000010000011100000000000010000
+00100010000011011111111111111111
+10100010000000111000000000000000
+01111110000100000000000000000000
+00100001110011100000000000000011
+01011110000000000000000000000010
+01000101110000101111111111110000
+00110100001000011111111111111111
+00110100000000100000000000000010
+01010000010000010000000000000100
+01000101100000000000000000110000
+00110001100000000000000000000000
+11100000000000000000000000101110
+01000101100000000000000000101101
+00110111100000010000000000101000
+00110111100000100000000000110000
+11111000000000000000011000100100
+01111000000000100000000000000001
+00111000010000101000111100011000
+01111000000000110000000000000001
+00101000010000010000000000000000
+00111000011000111000111100011100
+00101000011000100000000000000000
+10100001111000010000100000000000
+00000001111011110000000000011100
+01010000010000010000000000001110
+01111000000001000000000000000001
+00111000100001001000111100100000
+00101011100000110000000000110000
+00101000100000100000000000000000
+01010100011000100000000000001001
+00101011100001000000000000101100
+00101011100000110000000000101000
+00110100100000101111111111111111
+11110100100000100010000000000000
+00110100011000111111111111111111
+10110100100000110001100000000000
+01011011100000110000000000101000
+01011011100000100000000000101100
+00101011100000100000000000101000
+01011001100000100000000000001000
+00101011100000100000000000101100
+01011001100000100000000000001100
+00100000001000100000000000001111
+11001000010011110111100000000000
+01100101111000101111111111110001
+01100101111011110000000000000001
+10111000010011110111100000000000
+01000101111000000000000000000100
+00110100000000100000000000000001
+01011001100000100000000000000100
+11100000000000000000000000000010
+01011001100000000000000000000100
+00100010010100100000100000000000
+00111100001000010000000000000100
+01100110010100100000000000000000
+01011001100000010000000000010000
+00110001100100100000000000000000
+01111000000000010000000000000001
+00111000001000011100001001101100
+00101000001000100000000000000100
+00110100010000100000000000000001
+01011000001000100000000000000100
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000000000
+00100000001000010010000000000000
+01000100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011000100011100100
+11111011111111111111101011111100
+01010010001010110000000000000010
+10111010001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+01111000000000100000000000000001
+00111000010000101100001010010000
+00101000010000100000000000000000
+10111000001000000111100000000000
+10111000011000000110000000000000
+10111000100000000101100000000000
+00110100000000010000000000000000
+01000100010000000000000010001010
+00101101111000110000000000001100
+00111000000000011000000100000000
+11111100011000010001100000000000
+00110100000000011111111111111100
+11001000000000110001100000000000
+10100000011000010001100000000000
+00110100011000110000000000010010
+10110100011011000001000000000000
+00110100000000010000000000111011
+00010100011100010000000000000001
+01010100010000010000000000000011
+00110100000011000000000000111100
+11001001100000110110000000000000
+00110101100100000000000000000001
+00110100000000010000000000000010
+00110100000000100000000000000000
+00000010000100000000000000000001
+11111011111111111111111100000000
+00110100000011100000000000000000
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111011111010
+00110101111011110000000000000010
+01010110001011101111111111111011
+10111001101000000111100000000000
+00110100000011100000000000000000
+00110110000100001111111111111111
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111011110000
+00110101111011110000000000000010
+01010110000011101111111111111011
+00100001100000100000000000000001
+00111110000000010000000000000001
+01011100010000000000000000000100
+10110101101000010110100000000000
+00110100000000010000000000000000
+11100000000000000000000000000011
+10110101101000010110100000000000
+00110100000000010000000000000011
+00101101101000100000000000000000
+11111011111111111111111011100100
+01000101011000000000000000000111
+00110100000000010000000000000001
+00110100000000100001000000000000
+11111011111111111111111011100000
+00110100000000010000000000000001
+00110100000000100000000000000000
+11111011111111111111111011011101
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000100000000000000000
+00110100000011010000000000000000
+10111000001000000111100000000000
+00101000010000110000000000000000
+00110100000100000000001111101000
+00111000011000110000000000000001
+01011000010000110000000000000000
+00101001111000010000000000000000
+00101000001011100000000000000000
+00100001110000010000000000000010
+01011100001000000000000000001001
+00110100000000010000000000000001
+00110101101011010000000000000001
+11111000000000000000000010001000
+01011101101100001111111111111001
+01111000000000010000000000000001
+00111000001000011000100100011000
+10111001110000000001000000000000
+11111011111111111111101010010010
+01000101011000000000000000111110
+01111000000011010000000000000001
+00110100000011100000000000000000
+00111001101011011100001010101100
+00110100000011110000000001100100
+00101001101000010000000000000000
+00101000001000100000000000000000
+00100000010000100000100000000000
+01011100010000000000000000001010
+00110100000000010000000000000001
+00110101110011100000000000000001
+11111000000000000000000001110111
+01011101110011111111111111111001
+01111000000000010000000000000001
+00111000001000011000100101001000
+11111011111111111111101010000010
+00110100000011100000000000000000
+11100000000000000000000000000011
+00101000001011100000000000010100
+00100001110011100000000000000001
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000111100011000
+00101000001011010000000000011000
+00101000001000010000000000010100
+00101000010000010000000000000000
+00110111100000100000000000101100
+10100001101000010110100000000000
+00110111100000010000000000100100
+11111000000000000000010101100011
+01111000000000110000000000000001
+00111000011000111000111100011100
+00101000011000010000000000000000
+01010000001011010000000000001110
+01111000000000110000000000000001
+00111000011000111000111100100000
+00101011100000100000000000101100
+00101000011000010000000000000000
+01010100010000010000000000001001
+00101011100000110000000000101000
+00101011100000100000000000100100
+00110100011000011111111111111111
+11110100011000010001100000000000
+00110100010000101111111111111111
+10110100011000100001000000000000
+01011011100000100000000000100100
+01011011100000010000000000101000
+00101011100000010000000000100100
+00110001011011100000000000000000
+00111101101011010000000000000100
+01011001011000010000000000001000
+00101011100000010000000000101000
+01011001011000000000000000000100
+01011001011011010000000000010000
+01011001011000010000000000001100
+01111000000000010000000000000001
+00111000001000011100001001101100
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001001101100
+00101000011001000000000000000000
+01011000001001000000000000000000
+00101000011000010000000000000100
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101100001010011100
+00101000010000100000000000000000
+00110100000000110000000000000100
+00101000010000100000000000010000
+01011011100000100000000000001000
+00110111100000100000000000001000
+11111000000000000001100111101100
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001100001010011100
+00101000100001000000000000000000
+00101000100001010000000000001100
+00000000101001010000000000010000
+00111100101001010000000000001010
+01011000011001010000000000000000
+00101000100000110000000000010100
+01011000010000110000000000000000
+00101000100000100000000000001100
+00000000010000100000000000001000
+00100000010000100000000000000011
+01011000001000100000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010110000
+00101000010000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011100
+01011000011000100000000000000000
+01000100001000000000000000000101
+00101000010000110000000000011000
+01111000000000011000000000000000
+10111000011000010000100000000000
+11100000000000000000000000000110
+01111000000001000000000000000001
+00111000100001001000111011000100
+00101000010000110000000000011000
+00101000100000010000000000000000
+10100000011000010000100000000000
+01011000010000010000000000011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000011100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011100
+00101000010000100000000000000000
+00101000010000110000000000011100
+10110100001000110000100000000000
+00101000010000110000000000011100
+11001000011000010001100000000000
+01001000000000111111111111111110
+11000011101000000000000000000000
+01111000000001010000000000000001
+00111000101001011100001010011100
+00101000101001010000000000000000
+01111000000001100000000000000001
+00111000110001101011111100101000
+00101000101010000000000000100100
+00101000101001110000000000100100
+00100001000010001111111111111111
+01011000110010000000000000000000
+00000000111001110000000000010000
+01111000000001100000000000000001
+00111000110001101011111100101100
+01011000110001110000000000000000
+01000100001000000000000000000100
+00101000101001100000000000100000
+00000000110001100000000000010000
+01011000001001100000000000000000
+01000100010000000000000000000100
+00101000101000010000000000100000
+00100000001000011111111111111111
+01011000010000010000000000000000
+01000100011000000000000000000010
+01011000011010000000000000000000
+01000100100000000000000000000010
+01011000100001110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000111000000000000
+10111000011000000110100000000000
+00110100000000011111111111101010
+01000100011000000000000000110110
+01111000000011000000000000000001
+00111001100011001011111100101000
+00101001100000010000000000000000
+01011100001000000000000000001010
+01111000000000010000000000000001
+00111000001000011000100101111000
+11111011111111111111100111011011
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000100100
+00100000001000011111111111111111
+01011001100000010000000000000000
+01111000000011000000000000000001
+00111001100011001011111100101100
+00101001100000010000000000000000
+01011100001000000000000000001010
+01111000000000010000000000000001
+00111000001000011000100110010000
+11111011111111111111100111001110
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000100100
+00000000001000010000000000010000
+01011001100000010000000000000000
+01011101110000000000000000000110
+01111000000000010000000000000001
+00111000001000011011111100101000
+00101000001000010000000000000000
+01010001011000010000000000001000
+11100000000000000000000000001110
+00110100000000010000000000000001
+01011101110000010000000000001100
+01111000000000010000000000000001
+00111000001000011011111100101100
+00101000001000010000000000000000
+01010100001010110000000000000100
+01011001101000000000000000000000
+00110100000000011111111111101010
+11100000000000000000000000001101
+01111000000000010000000000000001
+00111000001000011011111100101000
+00101000001000010000000000000000
+10110101011000010101100000000000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00100001011010111111111111111111
+01011000001010110000000000101000
+00101000001000010000000000101100
+01011001101000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111100101000
+00101000011001000000000000000000
+00110100000000111111111111101010
+01010000001001000000000000001010
+01111000000000110000000000000001
+00111000011000111100001010011100
+00101000011000110000000000000000
+00100000001000011111111111111111
+01011000011000100000000000101100
+01111000000000101000000000000000
+10111000001000100000100000000000
+01011000011000010000000000101000
+00110100000000110000000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000100000000000000100
+00111000010000100000000000010000
+01011000001000100000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011100
+01000100001000000000000000000101
+00101000010000010000000000000000
+00101000001000100000000000110000
+00111000010000100000000000000001
+11100000000000000000000000000101
+00101000010000010000000000000000
+00110100000000101111111111111110
+00101000001000110000000000110000
+10100000011000100001000000000000
+01011000001000100000000000110000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000000000001
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000000000001
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000100000000
+01111100001000010000000000000000
+11000011101000000000000000000000
+01111000000010010000000000000001
+00111001001010011100001010011100
+00101001001010010000000000000000
+01111100001000010000000000000000
+00100000010000100000000000001111
+01011001001000010000000000110100
+00101001001000010000000000110100
+00111100010000100000000000001000
+10111000010000010001000000000000
+01011001001000100000000000110100
+01011001001000110000000001011000
+01011001001001000000000001011100
+01011001001001010000000001100000
+01011001001001100000000001100100
+00101011100000010000000000000100
+01011001001001110000000001101000
+01011001001010000000000001101100
+01011001001000010000000001110000
+00101011100000010000000000001000
+01011001001000010000000001110100
+11000011101000000000000000000000
+01111100010000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011100
+01111100001000010000000000000000
+00111100010000100000000000000001
+00101000011000110000000000000000
+10111000010000010001000000000000
+01011000011000100000000000111000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011100
+00101000010000100000000000000000
+00100000001000010000000011111111
+01011000010000010000000000111100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011100
+00101000010000100000000000000000
+00100000001000010000000011111111
+01011000010000010000000001000000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011100
+00101000011000110000000000000000
+01011000011000010000000001000100
+01011000011000100000000001001000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001100001010011100
+00101000100001000000000000000000
+01011000100000010000000001001100
+01011000100000100000000001010000
+01011000100000110000000001010100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011100
+00101000010000100000000000000000
+01011000010000010000000001111000
+11000011101000000000000000000000
+00110111100111001111111111000100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010011100
+00101000001000010000000000000000
+01111000000011000000000000000001
+00111001100011001011111110101100
+00110001100000000000000000000000
+00101000001000100000000000000100
+00110100000000011111111111101101
+00100000010000100000000010000000
+01011100010000000000000001010011
+00110100000000010000000000000001
+11111011111111111111110100101011
+00110100000000010000000000000001
+11111011111111111111110001000000
+00110100000000100000000010100000
+00110100000000010000000000000001
+11111011111111111111110010001110
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111110010001011
+00110100000000010000000000000001
+11111011111111111111110001001110
+00110100000000100000000010100001
+00110100000000010000000000000001
+11111011111111111111110010000110
+00110111100011100000000000111111
+10111001110000000001000000000000
+00110100000000110000000000000001
+00110100000000010000000000000001
+11111011111111111111110011001000
+00110100000000010000000000000001
+11111011111111111111110001100100
+00110100000000010000000000000001
+01000011100011010000000000111111
+11111011111111111111110000101011
+00110100000000010000000000000001
+00110100000000100000000010100001
+11111011111111111111110001111001
+00110100000010111111111111011001
+00110100000100000000000000001111
+00110100000011110000000000010111
+00110100000000010000000000000001
+10111001110000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110010111001
+01000011100000010000000000111111
+10110101101000010110100000000000
+00100001101011010000000011111111
+01010101011100000000000000000011
+10110101011011000001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01011101011011111111111111110101
+00110111100000100000000000111111
+00110100000000010000000000000001
+00110100000000110000000000000001
+11111011111111111111110010101101
+00110100000000010000000000000001
+11111011111111111111110001001001
+01000011100000100000000000111111
+00110100000000011111111111111011
+01011100010011010000000000011111
+00110111100010110000000000100000
+01111000000000100000000000000001
+00111000010000101011111110101100
+00110100000000110000000000010000
+10111001011000000000100000000000
+11111000000000000001101001001100
+10111001011000000000100000000000
+11111000000000000000011100010110
+01111000000000100000000000000001
+00111000010000101011111100111000
+01011100001000000000000000000101
+00110100000000010000000000000001
+01011000010000010000000000000000
+00110100000000011111111111111010
+11100000000000000000000000010000
+00101011100000110000000000110100
+01111000000000010000000000000001
+00111000001000011011111100110000
+01011000001000110000000000000000
+00101011100000110000000000111000
+01111000000000010000000000000001
+00111000001000011011111100110100
+01011000001000110000000000000000
+00101011100000110000000000110000
+01111000000000010000000000000001
+00111000001000011010011111111000
+01011000001000110000000000000000
+00110100000000010000000000000010
+01011000010000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100110110000000000001000
+00110100000110110000000000100000
+10110111011111001101100000000000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+10111011100000000111100000000000
+00110100000000100000000000000001
+00111001011010111010100011000000
+00111001100011001000100110101000
+11100000000000000000000000010010
+10111011100000001000000000000000
+00110111100111001111111111100100
+00110111100011100000000000001011
+00000001110011100000000000000011
+00110101101000100000000000101100
+00111101110011100000000000000011
+00110100000000110000000000010100
+10111001110000000000100000000000
+11111000000000000001100001100000
+00110001110000000000000000010011
+00101001101000100000000000100000
+00101001011000110000000001110100
+10111001100000000000100000000000
+10111001110000000010000000000000
+11111011111111111111100010100110
+00110100000000100000000000000000
+10111010000000001110000000000000
+10111001011000000000100000000000
+11111000000000000001011000011010
+10111000001000000110100000000000
+01011100001000001111111111101100
+10111001111000001110000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100110110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111100111100
+00101001011000010000000000000000
+01011100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011010100011000000
+11111000000000000001010111011110
+00101001011000010000000000000000
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000010110000000000000001
+00111001011010111010100000000000
+01111000000011000000000000000001
+00110101011011010000000011000000
+00111001100011001010100011000000
+11100000000000000000000000001001
+00101001011000100000000000001000
+00101001011000110000000000001100
+00101001011001000000000000010000
+00101001011011100000000000000000
+10111001100000000000100000000000
+11111000000000000001011010100110
+01011001110000010000000000000000
+00110101011010110000000000011000
+01011101011011011111111111111000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000110000000000000
+11111000000000000000011110100100
+10111000001000000101100000000000
+01001100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011000100111010000
+10111001011000000001000000000000
+11100000000000000000000000000100
+00101001100000100000000000000000
+01111000000000010000000000000001
+00111000001000011000100111111100
+11111011111111111111100001011110
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111101000000
+01011000001000000000000000000000
+01111000000000100000000000000001
+01111000000000010000000000000001
+00111000001000011011111101010100
+00111000010000101011111101000100
+00110100000000111111111111111111
+01011000001000110000000000000000
+01011000010000110000000000000000
+01011000001000000000000000001000
+01011000010000000000000000001000
+01011000010000000000000000000100
+01011000001000000000000000000100
+01011000010000000000000000001100
+01011000001000000000000000001100
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111000000000000001001110011111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100000000010000000000000000
+11111000000000000001010001001000
+10111000001000000101100000000000
+00110100000000100000000000000000
+01011100001000000000000010000001
+11111011111111111111101000011001
+01111000000000110000000000000001
+00111000011000111011111101000100
+00101000011001010000000000001000
+01111000000000100000000000000001
+00111000010000101011111101000000
+10111000001000000010000000000000
+00101000010000100000000000000000
+01000100101010110000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011101
+11100000000000000000000000010000
+00110100000000010000000000000001
+01000100100000010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000001
+00111000011000111011111101000100
+00101000011001010000000000000100
+00110100000000010000000000000100
+01001100001001010000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100001010000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001010000000000000100
+00110100000000010000000000000100
+00110100101001010000000000000001
+01011000011001010000000000000100
+01001100001001010000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011001010000000000001000
+01000100101000000000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011100
+11100000000000000000000000001111
+01000100100001010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011001000000000000000100
+00110100000000010000000000000100
+01001100001001000000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100000000000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001000000000000000100
+00110100000000010000000000000100
+00110100100001000000000000000001
+01011000011001000000000000000100
+01001100001001000000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+00110100000000010100010001011011
+01001100001000100000000000110000
+01111000000000100000000000000001
+00111000010000101011111101000100
+00101000010001000000000000001000
+00110100000000010000000000000010
+00110100000000101111111111111111
+01011100100000010000000000110001
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011000010000000000001000
+01011100001001000000000000101101
+00101000011000100000000000001100
+00110100000000010011111001111111
+11100000000000000000000000000010
+00110100010000101100000110000000
+01001000010000011111111111111111
+01111000000000110000000000000001
+00111000011000111011111101010100
+01011000011000100000000000001100
+01111000000000110000000000000001
+00111000011000111011111101000100
+00101000011000110000000000001100
+00110100000000010011111001111111
+11100000000000000000000000000010
+00110100011000111100000110000000
+01001000011000011111111111111111
+01111000000001000000000000000001
+00111000100001001011111101000100
+01011000100000110000000000001100
+01001100011000100000000000000011
+00110100010001001110000011000000
+11100000000000000000000000000100
+00110100000001000000000000000000
+01001100010000110000000000000010
+00110100010001000001111101000000
+10110100100000110001100000000000
+00000000011000100000000000011111
+10110100010000110001100000000000
+00010100011000100000000000000001
+01001100010000000000000000000011
+00110100010000100011111010000000
+11100000000000000000000000000100
+00110100000000010011111001111111
+01001100001000100000000000000010
+00110100010000101100000110000000
+01011001100000100000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001000
+01111000000000010000000000000001
+00110100010000100000000001100100
+00111000001000011011111101000000
+01011000001000100000000000000000
+00110100000000010000000000000000
+11111000000000000001001100010011
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+10111000001000000101100000000000
+10111000010000000000100000000000
+00111000001000011000101000011100
+11111011111111111111011110101000
+11100000000000000000000000000011
+00110100000000010000000001100100
+11111011111111111111110110010110
+00110100000000010000000000000000
+11111011111111111111100100101111
+01000100001000001111111111111100
+00110100000000010000000000000011
+00110100000000100000000000000000
+00110100000000110000000000000001
+11111000000000000001001000011111
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000101000110100
+11111011111111111111011110011010
+11100000000000000000000000000011
+00110100000000010000000001100100
+11111011111111111111110110001000
+00110100000000010000000000000000
+11111000000000000001001011100000
+01000100001000001111111111111100
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000011110001000
+11111011111111111111011110010000
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000101001000100
+11111011111111111111011110001100
+11111011111111111111111100110100
+10111001011000000000100000000000
+11111011111111111111111101001010
+01000100001000001111111111111110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110100000000100000000000000011
+00110100000011000000000000000000
+00110100000011010000001111101001
+01011100001000100000000000100010
+11100000000000000000000000000101
+01000101100011010000000000100111
+11111011111111111111100100000011
+01000100001000000000000000100101
+00110101100011000000000000000001
+10111001011000000000100000000000
+11111011111111111111111100110100
+01000100001000001111111111111010
+01001100001000000000000000000010
+11100000000000000000000000011000
+00110111100000010000000000010100
+00110100000000100000000000000000
+11111000000000000000011010101001
+01001000000000010000000000000111
+00101001011000100000000000000000
+00101011100000010000000000010100
+00110100010000111111111100111000
+01010100011000010000000000000011
+00110100010000100000000011001000
+01010000010000010000000000011101
+00110100000000100000000000000001
+10111001011000000000100000000000
+11111000000000000000011010011111
+01111000000000110000000000000001
+00101001011000100000000000000000
+00111000011000111000101001101100
+01001100001000000000000000000011
+01111000000000110000000000000001
+00111000011000111000101001100100
+01111000000000010000000000000001
+00111000001000011000101001110100
+11111011111111111111011101011010
+11100000000000000000000000010000
+10111001011000000000100000000000
+11111011111111111111111011101001
+10111000001000000110000000000000
+01001000000000010000000000000101
+00101001011000010000000000000000
+11111011111111111110110001100100
+11100000000000000000000000000010
+00110100000011001111111111111111
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000011000000000000000000
+11100011111111111111111111110100
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000001100000000000
+10111000010000000101100000000000
+00110100000000010000100000000000
+10111000011000000001000000000000
+01111000000011000000000000000001
+11111011111111111111101001001001
+00110100000011010000000000001000
+11111011111111111111111111101101
+00111001100011001100001010011100
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101001000011
+10110001011000000000100000000000
+01001100001000000000000000000100
+00110100000000010001000000000000
+00110100000000100000000000000001
+11100000000000000000000000000011
+00110100000000010001000000000000
+00110100000000100000000000000000
+11111011111111111111101000111011
+11111011111111111111111111100000
+00110100000000010000010000000000
+00110100000000100000000000000001
+11111011111111111111101000110111
+00101001100000010000000000000000
+00111101011010110000000000000001
+00110101101011011111111111111111
+00101000001000010000000000000100
+00100000001000010010000000000000
+01111100001000010000000000000000
+10111001011000010101100000000000
+00100001011010110000000011111111
+11111011111111111111111111010100
+01011101101000001111111111101000
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101000101010
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000100000000000
+00110100000000100000000000000001
+11111011111111111111101000011110
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101000011011
+00110100000000010001000000000000
+00110100000000100000000000000000
+11111011111111111111101000011000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+00110100000000010000000000000001
+00110100000000100000000000000000
+10111000011000000110000000000000
+11111011111111111111111110110111
+00110100000000100000000000001011
+00110100000000010000000000000000
+11111011111111111111111110110100
+00000001011000110000000000010000
+00110100000000010000000000000000
+00100000011000100000000011111111
+11111011111111111111111110110000
+00100001011000111111111100000000
+00000000011000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111110101100
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111110101001
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110100110
+00110100000010110000000000000000
+11100000000000000000000000000111
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111110100001
+10110101101010110001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01001001100010111111111111111010
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111110011010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000101100000000000
+00110100000000010000000000000001
+11111011111111111111111110001100
+00110100000000100000000000000110
+00110100000000010000000000000000
+11111011111111111111111110001001
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111110000110
+00110100000000100000000011011000
+00110100000000010000000000000000
+11111011111111111111111110000011
+00000001011000100000000000010000
+00110100000000010000000000000000
+00100000010000100000000011111111
+11111011111111111111111101111111
+00100001011000101111111100000000
+00000000010000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111101111011
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111101111000
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101110101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101101011
+00110100000000100000000000000101
+00110100000000010000000000000000
+11111011111111111111111101101000
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111101100101
+10111000001000000101100000000000
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101100001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110010100
+00101001011011000000000000001000
+10111000010000000110100000000000
+10111000001000000111100000000000
+10111000010000000000100000000000
+10111001100000000001000000000000
+11111000000000000001010111110000
+01111100001011100000000000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000001010111011100
+10110101110000010111000000000000
+00110100000011000000000000000000
+11100000000000000000000000001001
+00101001011000100000000000001000
+10001001100000100001000000000000
+10110100010011110000100000000000
+11111011111111111111111110110000
+11111011111111111111111111010001
+00100000001000100000000000000001
+01011100010000001111111111111110
+00110101100011000000000000000001
+01001001110011001111111111111000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+00110100000000010000000000000001
+00110100000000100000000000000000
+10111000011000000110000000000000
+11111011111111111111111100101001
+00110100000000100000000000000110
+00110100000000010000000000000000
+11111011111111111111111100100110
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111100100011
+00110100000000100000000000000010
+00110100000000010000000000000000
+11111011111111111111111100100000
+00000001011000110000000000010000
+00110100000000010000000000000000
+00100000011000100000000011111111
+11111011111111111111111100011100
+00100001011000111111111100000000
+00000000011000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111100011000
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111100010101
+00110100000010110000000000000000
+11100000000000000000000000000110
+10110101101010110001000000000000
+01000000010000100000000000000000
+00110100000000010000000000000000
+00110101011010110000000000000001
+11111011111111111111111100001110
+01001001100010111111111111111011
+00110100000000010000000000000001
+00110100000000100000000000000000
+11111011111111111111111100001010
+11111011111111111111111110011001
+00100000001000010000000000000001
+01011100001000001111111111111110
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111010111011010000
+00111001100011001010111011011100
+11100000000000000000000000000101
+00101001011000100000000000000000
+10111001011000000000100000000000
+00110101011010110000000000001100
+11011000010000000000000000000000
+01010101100010111111111111111100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001011010111010111011010000
+00111001101011011010111011011100
+11100000000000000000000000000110
+00101001011000100000000000000000
+10111001011000000000100000000000
+00110101011010110000000000001100
+11011000010000000000000000000000
+10110101100000010110000000000000
+01010101101010111111111111111011
+01101001100000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011010000000000000001
+10111000001000000111000000000000
+00111001011010111010111011010000
+00111001101011011010111011011100
+11100000000000000000000000001100
+00101001011011000000000000001000
+11100000000000000000000000000111
+10111001110000000001000000000000
+11111000000000000001011010011001
+01011100001000000000000000000011
+00101001100000010000000000000100
+11100000000000000000000000000111
+00110101100011000000000000001000
+00101001100000010000000000000000
+01011100001000001111111111111001
+00110101011010110000000000001100
+01010101101010111111111111110101
+01111000000000011000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+10111000001000000001100000000000
+01011100001000000000000000001000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011010111011010000
+00111000010000101010111011011100
+01000100001000100000000000000011
+00101000001000010000000000001000
+11000011101000000000000000000000
+00101000011000100000000000001000
+00110100011000010000000000001000
+01011100010000000000000000010110
+01111000000000100000000000000001
+01111000000001000000000000000001
+00111000010000101010111011010000
+00111000100001001010111011011100
+11100000000000000000000000001111
+00101000010000010000000000001000
+11100000000000000000000000001010
+01011100001000110000000000001000
+01111000000000110000000000000001
+00110100010000100000000000001100
+00111000011000111010111011011100
+00110100000000010000000000000000
+01010000010000110000000000001001
+00101000010000010000000000001000
+11000011101000000000000000000000
+00110100001000010000000000001000
+00101000001001010000000000000000
+01011100101000001111111111110110
+00110100010000100000000000001100
+01010100100000101111111111110010
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000111000
+01011011100011000000000000110100
+01011011100011010000000000110000
+01011011100011100000000000101100
+01011011100011110000000000101000
+01011011100100000000000000100100
+01011011100100010000000000100000
+01011011100100100000000000011100
+01011011100100110000000000011000
+01011011100101000000000000010100
+01011011100101010000000000010000
+01011011100101100000000000001100
+01011011100101110000000000001000
+01011011100111010000000000000100
+10111000001000000111000000000000
+00110100000000010000000000000000
+10111000010000001011100000000000
+01111000000101000000000000000001
+11111011111111111111111111001011
+01111000000100110000000000000001
+01111000000100100000000000000001
+01111000000100010000000000000001
+01111000000100000000000000000001
+01111000000011110000000000000001
+10111000001000000110100000000000
+00110100000101010000000000000000
+00110100000010110000000000000000
+00111010100101001000000011010000
+00111010011100110111110001001000
+00111010010100101000101010100000
+01111000000101101000000000000000
+00111010001100011000011111000000
+00111010000100000111100100111000
+00111001111011111000011110111000
+11100000000000000000000000101000
+00110101011000100000000000001111
+10110101110010110000100000000000
+01001010111000100000000000000110
+01111000000000100000000000000001
+00111000010000101000101010011000
+11111011111111111111010110011011
+10110101011000010101100000000000
+11100000000000000000000000100001
+00101001101011000000000000000100
+10111010100000000001100000000000
+01000110101000000000000000000010
+10111010011000000001100000000000
+00101001101001000000000000000000
+10111010010000000001000000000000
+11111011111111111111010110010010
+10110100001010110101100000000000
+01011101100101100000000000000101
+10110101110010110000100000000000
+10111001111000000001000000000000
+11111011111111111111010110001101
+11100000000000000000000000001110
+01001101100000000000000000000110
+10110101110010110000100000000000
+10111010000000000001000000000000
+11111011111111111111010110001000
+11001000000011000110000000000000
+10110101011000010101100000000000
+00100001100001001111111111111111
+00001000100001000010011100010000
+00010101100000110000000000010000
+10110101110010110000100000000000
+00000000100001000000000000010000
+10111010001000000001000000000000
+11111011111111111111010101111111
+10110100001010110101100000000000
+10111001101000000000100000000000
+11111011111111111111111110010110
+10111000001000000110100000000000
+00110110101101010000000000000001
+01011101101000001111111111011001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000111000
+00101011100011000000000000110100
+00101011100011010000000000110000
+00101011100011100000000000101100
+00101011100011110000000000101000
+00101011100100000000000000100100
+00101011100100010000000000100000
+00101011100100100000000000011100
+00101011100100110000000000011000
+00101011100101000000000000010100
+00101011100101010000000000010000
+00101011100101100000000000001100
+00101011100101110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111110101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000001010000
+11111011111111111111111110011101
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000010111100111011000
+11111011111111111111010101101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000001011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111000100
+00101000001000010000000000000000
+00101000001000100000000000001000
+00101000001000010000000000001100
+00100000001000010000000011111111
+11000011101000000000000000000000
+01111000000000010000000000000001
+01111000000000110000000000000001
+00111000011000111000111100100100
+00111000001000011011111111000100
+00101000001000010000000000000000
+00101000011000100000000000000000
+01111000000001000000000000000001
+00111000100001001000111100101000
+01011000001000100000000000000000
+01011000001000000000000000010100
+00101000100000110000000000000000
+01011000001000000000000000011000
+01011000001000000000000000010000
+01011000001000110000000000000000
+01011000001000100000000000000000
+01011000001000000000000000011100
+11000011101000000000000000000000
+01111000000001000000000000000001
+00110100000001010000000000000010
+00111000100001001011111111000100
+01011100001001010000000000001110
+00101000100000010000000000000000
+00010100010001000000000000011111
+00100000100001000000000000001111
+10110100100000110001100000000000
+11110100100000110010000000000000
+00000000011000110000000000000100
+10110100100000100001000000000000
+00111100010000100000000000011100
+01011000001000000000000000010100
+01011000001000000000000000011000
+10111000010000110001100000000000
+01011000001000110000000000010000
+11100000000000000000000000000110
+00101000100000010000000000000000
+00100000010000100000000011111111
+01011000001000110000000000010100
+01011000001000100000000000011000
+01011000001000000000000000010000
+01111000000000010000000000000001
+00111000001000011011111111000100
+00101000001000010000000000000000
+00101000001000100000000000000000
+00111000010000100000000000000100
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+01111000000001010000000000000001
+00111000101001011011111111000100
+00101000101001010000000000000000
+00100000001000010000000011111111
+00000000011000110000000000000100
+01011000101000100000000000010100
+01011000101000010000000000011000
+01011000101000110000000000010000
+00110100000000010000000000000011
+01011100100000010000000000000111
+00101000101000100000000000000000
+00110100000000011111111111110011
+10100000010000010000100000000000
+00111000001000010000000000001000
+01011000101000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000001
+01011100100000010000000000000111
+00101000101000100000000000011100
+00110100000000011111111111100111
+10100000010000010000100000000000
+00111000001000010000000000010000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110100000000010000000000000010
+01011100100000010000000000000110
+00101000101000100000000000011100
+00110100000000011111111111000111
+10100000010000010000100000000000
+00111000001000010000000000100000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111000001000011000111100011000
+00101000001011110000000000000000
+01111000000010110000000000000001
+10111000010000000110100000000000
+00111001011010111011111111000100
+11111011111111111111111110011010
+10111000001000001000100000000000
+00101001011000010000000000000000
+10111000010000001000000000000000
+00101000001011100000000000000100
+10100001110011110111000000000000
+11111011111111111111111110010100
+01011100001100011111111111111001
+01011100010100001111111111111000
+01000101100000000000000000000011
+01011001100000010000000000000000
+01011001100000100000000000000100
+01000101101000000000000000000011
+00111101110000010000000000000011
+01011001101000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111000100
+00101000001000010000000000000000
+00101000001000010000000000000000
+00100000001000010000000000000100
+01100100001000010000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111000100
+00101000010000100000000000000000
+00101000010000110000000000011100
+01000100001000000000000000000011
+00111000011000110000000000001100
+11100000000000000000000000000011
+00110100000000011111111111110011
+10100000011000010001100000000000
+01011000010000110000000000011100
+00110100000000010000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111000100
+00101000010000100000000000000000
+00101000010000110000000000011100
+01000100001000000000000000000011
+00111000011000110000000000000010
+11100000000000000000000000000011
+00110100000000011111111111111101
+10100000011000010001100000000000
+01011000010000110000000000011100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001010110000000000000100
+10111000100000000110100000000000
+10111000011000000111100000000000
+01000001011000010000000000000011
+10111000010000000110000000000000
+00110101101011101111111111111111
+11111011111111111111011111011100
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111100000101000
+00010101100000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111100000100100
+01000001011000010000000000000011
+00100001100000100000000011111111
+00110100000011000000000000000000
+11111011111111111111100000100000
+01000001011000010000000000000011
+11111011111111111111011111100011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00111000010000100000000000000001
+00100000010000100000000011111111
+11111011111111111111100000011000
+11100000000000000000000000000101
+00100000101000010000000011111111
+00110100000000110000000000000000
+11111011111111111111100001011011
+00110101100011000000000000000001
+10110101111011000001000000000000
+00101001011001010000000000000000
+01001001110011001111111111111010
+00100000101000010000000011111111
+00110100000000110000000000000001
+11111011111111111111100001010100
+01000001011000010000000000000011
+11111011111111111111011111110000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110100000011010000000000000000
+10111000010000000110000000000000
+10111000011000000111000000000000
+00101000001010110000000000000100
+11100000000000000000000000100001
+01000001011000010000000000000011
+11111011111111111111011110100011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011111101111
+00010101100000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111011111101011
+01000001011000010000000000000011
+00100001100000100000000011111111
+00110101100011000000000000000001
+11111011111111111111011111100111
+01000001011000010000000000000011
+00110100000000100000000011111111
+11111011111111111111011111100100
+01000001011000010000000000000011
+11111011111111111111011111000111
+01000001011000010000000000000011
+11111011111111111111011110001111
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011111011011
+10111000001000000111100000000000
+01000001011000010000000000000011
+11111011111111111111011110111101
+01011101111000001111111111110110
+00110101101011010000000000000001
+01001001110011011111111111100000
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000010000000110100000000000
+10111000011000000111100000000000
+10111000100000000111000000000000
+00101000001010110000000000000100
+11100000000000000000000000100010
+01000001011000010000000000000011
+11111011111111111111011101101011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011110110111
+00010101101000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111011110110011
+01000001011000010000000000000011
+00100001101000100000000011111111
+00110101101011010000000000000001
+11111011111111111111011110101111
+10110101111011000001000000000000
+01000001011000010000000000000011
+01000000010000100000000000000000
+11111011111111111111011110101011
+01000001011000010000000000000011
+11111011111111111111011110001110
+01000001011000010000000000000011
+11111011111111111111011101010110
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011110100010
+10111000001000001000000000000000
+01000001011000010000000000000011
+11111011111111111111011110000100
+01011110000000001111111111110110
+00110101100011000000000000000001
+01001001110011001111111111011111
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+11111011111111111111110101111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+10111000100000000001100000000000
+11111011111111111111110110011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101011000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101111001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100000000010000000000000011
+10111000010000000110100000000000
+10111000011000000111000000000000
+00110100000010111111111111111100
+01010100011000010000000001110010
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111100110100
+00101000011000100000000000000000
+01111000000011110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001111011111010100101111000
+10111001111000000000100000000000
+11111000000000000001000111010110
+00110100000010111111111111111111
+01001000000000010000000001100011
+01011101110000000000000000010111
+01111000000001000000000000000001
+00111000100001001011111101110010
+00110000100000000000000000000000
+00110100000000100000000000000001
+00110111100100000000000000101000
+00110111100100100000000000111000
+00110100000100010000000011111111
+10111000100000000101100000000000
+11100000000000000000000000000110
+01000000010000010000000000000000
+01000100001100010000000000001100
+00110100010000100000000000000001
+01011100010100101111111111111101
+11100000000000000000000001100000
+10111001111000000000100000000000
+10111010000000000001100000000000
+00110100000001000000000000011101
+11111000000000000001001000000100
+00110100000000100000000000011101
+01011100001000100000000000000011
+10111010000000000001000000000000
+11100011111111111111111111110100
+00110100000000010000000000000001
+01011101101000010000000000000111
+01111000000000010000000000000001
+00111000001000011011111101110010
+01000000001000100000000000000000
+00110100000000010000000000000100
+00110100000010111111111111111110
+01000100010000010000000001000001
+10111001110011010000100000000000
+01011100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011111101110010
+01000000001000010000000000000000
+00110100000010110000000000000000
+01000100001010110000000000111010
+11100000000000000000000000000010
+01011101101000000000000000011010
+00001001110000100000000000011101
+01111000000000010000000000000001
+00111000001000011010100101111000
+00110100010000100000000000000001
+10111001100000000001100000000000
+00110100000001000000000000011101
+11111000000000000001000111101000
+00110100000000100000000000011101
+00110100000010111111111111111111
+01011100001000100000000000101110
+10111001100000000000100000000000
+00110101100000110000000000011100
+00110100000000100000000000000000
+01000000001001000000000000000000
+00110100001000010000000000000001
+10110100010001000001000000000000
+00100000010000100000000011111111
+01011100001000111111111111111100
+01000001100000010000000000011100
+01000100001000100000000000100001
+01111000000000010000000000000001
+00111000001000011000101010111100
+11111011111111111111001110011011
+00110100000010111111111111111111
+11100000000000000000000000011111
+00110100000000010000000000000001
+01011101101000010000000000011010
+10111001100000000000100000000000
+00110101100000110000000000011100
+00110100000000100000000000000000
+01000000001001000000000000000000
+00110100001000010000000000000001
+10110100010001000001000000000000
+00100000010000100000000011111111
+01011100001000111111111111111100
+01111000000011010000000000000001
+00110001100000100000000000011100
+00111001101011011011111101110010
+01000001101000100000000000000000
+01111000000000010000000000000001
+00111000001000011010100101111000
+00001000010000100000000000011101
+10111001100000000001100000000000
+00110100000001000000000000011101
+00110100010000100000000000000001
+11111000000000000001000111101101
+00110100000000100000000000011101
+00110100000010111111111111111111
+01011100001000100000000000000111
+01000001101000010000000000000000
+00110100001000010000000000000001
+00110001101000010000000000000000
+01111000000000010000000000000001
+00111000001000011011111101110010
+01000000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000001000110100010
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+01000001011000100000000000000000
+00110100010000100000000000000001
+00100000010000100000000011111111
+00110001011000100000000000000000
+00001000010000100000000000011101
+00110100010000100000000000000001
+11100011111111111111111110011011
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+10111000100000000001100000000000
+11111011111111111111110001011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+01111000000000010000000000000001
+00111000001000011000111100111000
+00101000001011100000000000000000
+01111000000010110000000000000001
+01011011100000000000000000101000
+00111001011010111001001111100100
+00110100000011000000000000000000
+00110100000011010000000000000111
+00101001011000010000000000000000
+00110111100110110000000000101000
+10111011011000000001000000000000
+00110100000000110000000000000100
+11111011111111111111110001000011
+00101011100000010000000000101000
+00110101011010110000000000000100
+01000100001011100000000000000011
+00110101100011000000000000000001
+01011101100011011111111111110111
+01111000000000010000000000000001
+00111000001000011000111100111000
+00101000001000100000000000000000
+00101011100000010000000000101000
+01000100001000100000000000001010
+01111000000011010000000000000001
+00111001101011011001010000000000
+01111000000011000000000000000001
+10111001101000000111000000000000
+00110100000010110000000000000000
+00111001100011001100000111100000
+10111000010000001000100000000000
+00110100000100000000000000000110
+11100000000000000000000000011011
+01111000000000010000000000000001
+00111101100011000000000000000010
+00111000001000011001001111100100
+10110100001011000000100000000000
+00101000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011000101011011000
+10111001011000000001000000000000
+11111011111111111111001100101000
+01111000000000110000000000000001
+00111000011000111011111110010100
+00101000011000100000000000001000
+01111000000000010000000000000001
+00111000001000011010100101111000
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100001001011101000
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100001000000100000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001000000000000000000100
+01011000001010110000000000001100
+00111000010000100001000000000000
+11100000000000000000000000101011
+00101001110000100000000000000000
+10111001100000000000100000000000
+10111011011000000001100000000000
+00110100000001000000000000000100
+11111000000000000000100001100000
+00110100000000100000000000000100
+01011100001000100000000000000110
+00101011100000010000000000101000
+00110101110011100000000000000100
+01000100001100010000000000000011
+00110101011010110000000000000001
+01011101011100001111111111110101
+01111000000000010000000000000001
+00111000001000011000111100111000
+00101000001100000000000000000000
+00101011100000010000000000101000
+01011100001100000000000000011100
+00111101011010110000000000000010
+01111000000000010000000000000001
+00111000001000011001010000000000
+10110100001010110000100000000000
+00101000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011000101011111000
+10111001011000000001000000000000
+11111011111111111111001011111101
+01111000000000010000000000000001
+00111000001000011010100101111000
+00110100000000100000000000000001
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100001000001000100
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100001000001111100
+01111000000000110000000000000001
+00111000011000111100000111100000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001000110000000000000100
+01011000001010110000000000001100
+00111000010000100001000001100000
+01011000001000100000000000100100
+11100000000000000000000000111010
+01111000000010110000000000000001
+00111001011010111011111101101000
+01111000000011100000000000000001
+01011001011011110000000000000000
+01011001011000000000000000000100
+00110100000100010000000001111111
+00111001110011101010100101111000
+00110100000110110000000000000110
+11100000000000000000000000101111
+01000001011000010000000000000011
+00100000010000100000000011111111
+10111001101000000111100000000000
+11111011111111111111011011111111
+00110100000011000000000000000000
+01000100001000000000000000100110
+00101001111000100000000000000000
+10111001110000000000100000000000
+00110111100000110000000000101000
+00110100000001000000000000000100
+11111011111111111111111000010000
+00101011100000010000000000101000
+00110101111011110000000000000100
+01000100001100000000000000000011
+00110101100011000000000000000001
+01011101100110111111111111110111
+00101011100000010000000000101000
+01011100001100000000000000011010
+00111101100011000000000000000010
+01111000000000010000000000000001
+00111000001000011001010000000000
+10110100001011000000100000000000
+00101000001011000000000000000000
+00101001011000110000000000000100
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011000101100010100
+11111011111111111111001011000110
+01111000000000010000000000000001
+00111000001000011010100101111000
+00110100000000100000000000000001
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100000110101011100
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100000111100011000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001010110000000000000100
+01011000001011000000000000001100
+00111000010000100000111001000000
+11100011111111111111111111001011
+00101001011000010000000000000100
+00110100001000010000000000000001
+01011001011000010000000000000100
+00101001011000100000000000000100
+01001110001000101111111111010001
+01111000000000010000000000000001
+01111000000010110000000000000001
+00110100000000100000000000000001
+00111000001000011011111101100100
+00111001011010111010100101111000
+00110000001000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000000000000
+01111000000011000000000000000001
+00110100000000100000000000000001
+00111001100011001000101100111000
+11100000000000000000000000001000
+00101000100000100000000000100000
+00101000100000110000000000001100
+00110000100000000000000000111111
+10111001100000000000100000000000
+00110100100001000000000000101100
+11111011111111111111001010100000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000000010101
+10111000001000000010000000000000
+01011100001000001111111111110110
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100110110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111100111100
+10111000010000000101100000000000
+01111000000011010000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001101011011010100101111000
+10111001101000000000100000000000
+11111000000000000001000001110111
+00110100000000101111111111111111
+01001000000000010000000001001110
+10111001101000000000100000000000
+00110100000000100000000000000000
+10111001011000000001100000000000
+00110100000001000000000000000110
+11111000000000000001000010110011
+10111000001000000110000000000000
+10111001101000000000100000000000
+11111000000000000001000010011101
+01001101100000000000000000000110
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101101010100
+00111000010000101001000011000100
+11111011111111111111001001101101
+01000001011000010000000000000000
+00110100000000100000000011111111
+01000100001000100000000000001101
+01000001011000110000000000000001
+01000001011000100000000000000010
+10111000011000100001000000000000
+10111000001000100000100000000000
+01000001011000100000000000000011
+10111000001000100000100000000000
+01000001011000100000000000000100
+10111000001000100000100000000000
+01000001011000100000000000000101
+10111000001000100000100000000000
+00100000001000010000000011111111
+01011100001000000000000000001000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101101100100
+00111000010000101001000011000100
+11111011111111111111001001011001
+00110100000011001111111111111111
+11100000000000000000000000000011
+00110100000000100000000000000000
+01001101100000000000000000101000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001000011000100
+00111000001000011000101101111100
+11111011111111111111001001010000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011100000111100000
+00111000010000101100000111110000
+00110100001001100000000010010000
+00110100000001010000000000100010
+00110100000001000000000000110011
+00101000010000010000000000000100
+00100000001000110000000011111111
+01111100011001110000000001000010
+01111100011000110000000000101000
+10100000111000110001100000000000
+01011100011000000000000000001100
+00101000010000110000000000000000
+00110100000011000000000000000000
+00110001011001010000000000000000
+00110001011000110000000000000010
+00000000001000110000000000011000
+00110001011001000000000000000001
+00110001011000110000000000000011
+00000000001000110000000000010000
+00000000001000010000000000001000
+00110001011000110000000000000100
+00110001011000010000000000000101
+00110100010000100000000000010000
+01011100010001101111111111101110
+00110100000000100000000000000000
+01000101100000000000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001000011000100
+00111000001000011000101110011000
+11111011111111111111001000101111
+00110100000000101111111111111111
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111100111100
+10111000010000000110100000000000
+01111000000010110000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100101111000
+10111001011000000000100000000000
+11111000000000000001000000001110
+10111000001000000110000000000000
+01001000000000010000000000001011
+00101001011000110000000001110000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000010100011
+10111001011000000000100000000000
+00110100000000100000000000000000
+10111001101000000001100000000000
+00110100000001000000000000000110
+11111000000000000001000001110010
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000001000000101111
+00110100000000010000000000000000
+01001101100000000000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101110101000
+00111000010000101001001111010000
+11111011111111111111000111111110
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111100110100
+00101000011000100000000000000000
+01111000000010110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100101111000
+10111001011000000000100000000000
+11111000000000000000111111100000
+10111000001000000001000000000000
+00110100000000011111111111111111
+01001000000000100000000000001110
+00101001011000110000000001110000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000001000001110100
+10111000001000000110000000000000
+00101001011000010000000001110000
+01011101100000010000000000000010
+00110100000011000000000000000001
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000001000000000010
+01111101100000010000000000000001
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000001000000101100000000000
+00110100000011010000000000000001
+00110111100011100000000000011000
+11100000000000000000000000100111
+10111001110000000000100000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+11111011111111111111110111001010
+00100000001011010000000011111111
+01000101101000000000000000100010
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000000010000
+11111000000000000001001011010011
+00110101100011000000000000000001
+01011100001000000000000000011011
+00101011100000010000000000101100
+00000000001000100000000000011000
+00110001011000010000000000010111
+00110001011000100000000000010100
+00000000001000100000000000010000
+00110001011000100000000000010101
+00000000001000100000000000001000
+00101011100000010000000000110000
+00110001011000100000000000010110
+00000000001000100000000000011000
+00110001011000010000000000011011
+00110001011000100000000000011000
+00000000001000100000000000010000
+00110001011000100000000000011001
+00000000001000100000000000001000
+00101011100000010000000000101000
+00110001011000100000000000011010
+00000000001000100000000000011000
+00110001011000010000000000010011
+00110001011000100000000000010000
+00000000001000100000000000010000
+00110001011000100000000000010001
+00000000001000100000000000001000
+00110100000000010000000000000001
+00110001011000100000000000010010
+11100000000000000000000000000011
+01001001101011001111111111011010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111100101000
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+00100000010000100000000011111111
+10111000001000000110000000000000
+00100000011000110000000011111111
+01000100010000000000000001000100
+01000000001000100000000000000000
+01000000001001000000000000000001
+01000000001111010000000000000101
+01000000001110110000000000000110
+01000000001110010000000000000111
+01000000001110000000000000001000
+01000000001101110000000000001001
+01000000001101100000000000001010
+01000000001101010000000000001011
+01000000001101000000000000001100
+01000000001100110000000000001101
+01000000001100100000000000001110
+01000000001100010000000000001111
+01000000001100000000000000010000
+01000000001011110000000000010001
+01000000001011100000000000010010
+01000000001011010000000000010011
+01000000001010110000000000010100
+01000000001010100000000000010101
+01000000001010010000000000010110
+01000000001010000000000000010111
+01000000001001110000000000011000
+01000000001001100000000000011001
+01000000001001010000000000011010
+01000000001000110000000000011011
+01000000001000010000000000011100
+00110011100000100000000010111100
+00110011100001000000000010111101
+01000001100000100000000000000010
+00110011100000100000000010111110
+01000001100000100000000000000011
+00110011100000100000000010111111
+01000001100000100000000000000100
+00110011100000100000000011000000
+00110011100000010000000011011000
+00110111100000010000000010111100
+00110011100111010000000011000001
+00110011100110110000000011000010
+00110011100110010000000011000011
+00110011100110000000000011000100
+00110011100101110000000011000101
+00110011100101100000000011000110
+00110011100101010000000011000111
+00110011100101000000000011001000
+00110011100100110000000011001001
+00110011100100100000000011001010
+00110011100100010000000011001011
+00110011100100000000000011001100
+00110011100011110000000011001101
+00110011100011100000000011001110
+00110011100011010000000011001111
+00110011100010110000000011010000
+00110011100010100000000011010001
+00110011100010010000000011010010
+00110011100010000000000011010011
+00110011100001110000000011010100
+00110011100001100000000011010101
+00110011100001010000000011010110
+00110011100000110000000011010111
+11111011111111111111111101110101
+01011100001000000000000000001001
+01111000000000010000000000000001
+00111000001000011000101111000100
+11111011111111111111000101000001
+10111001100000000000100000000000
+00110100000000100000000000000001
+00110100000000110000000000000000
+11111011111111111111110101000101
+11100000000000000000000001100011
+01111000000000010000000000000001
+00111000001000011000101111011100
+11111011111111111111000100111001
+00110100000011010000000000000000
+00110100000010110000000000000001
+00110111100100010000000001001000
+00110111100100000000000011011100
+11100000000000000000000001000110
+00001001101011100000000000011101
+00110100000000100000000000000000
+10111001101000000001100000000000
+10110110001011100111100000000000
+10111001111000000000100000000000
+11111011111111111111110100110110
+10111000001000000101100000000000
+01001100000000010000000001010100
+10111001111000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000000010000
+11111000000000000001001000111111
+01011100001000000000000000111000
+01000001100001010000000000010100
+01000001100000010000000000010101
+01000001100000110000000000010110
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000010111
+10110110000011100001000000000000
+00110100010001001111111110000000
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111110000000
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+01000001100001010000000000011000
+01000001100000010000000000011001
+01000001100000110000000000011010
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000011011
+00110100010001001111111110000100
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111110000100
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+01000001100001010000000000010000
+01000001100000010000000000010001
+01000001100000110000000000010010
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000010011
+00110100010001001111111101111100
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111101111100
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+00110101101011010000000000000001
+01001001011011011111111110111011
+11111011111111111111111011110111
+00110100000000101111111111111111
+10111001011000000111000000000000
+00110100000011000000000000000000
+00110111100011010000000001001000
+01011100001000100000000000001101
+01111000000000010000000000000001
+00111000001000011000001001111000
+11111011111111111111000011100101
+00110100000010111111111111111111
+11100000000000000000000000001011
+00001001100000010000000000011101
+00110100000000100000000000000001
+00110100000000110000000000000000
+10110101101000010000100000000000
+11111011111111111111110011100110
+00110101100011000000000000000001
+01001000000000010000000000000011
+10111001100000000000100000000000
+01001001110011001111111111111000
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000011011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111101000000
+00100000010011100000000011111111
+01111000000010110000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100101111000
+10111000001000000110100000000000
+10111001011000000000100000000000
+11111000000000000000111010101010
+00110100000011001111111111111111
+01001000000000010000000000100100
+01000101110000000000000000010010
+00101001011000110000000001110000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000000111100111110
+00101001101000100000000000000000
+01111000000000011000000000000000
+00110111100000110000000000011000
+10111000010000010000100000000000
+01011011100000010000000000011000
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110100000001000000000000000100
+11111000000000000000111100001001
+01111100001000010000000000000100
+11001000000000010110000000000000
+00111001100011000000000000000001
+11100000000000000000000000001111
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110111100000110000000000011000
+00110100000001000000000000000100
+11111000000000000000111011010100
+00110100000000100000000000000100
+01011100001000100000000000001000
+01111000000000100000000000000001
+00111000010000101000111011000100
+00101011100011000000000000011000
+00101000010000010000000000000000
+10100001100000010000100000000000
+00000001100011000000000000011111
+01011001101000010000000000000000
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000000111010110101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111101000100
+00101000011000100000000000000000
+01111000000010110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100101111000
+10111001011000000000100000000000
+11111000000000000000111001101100
+10111000001000000001000000000000
+00110100000000011111111111111111
+01001000000000100000000000001110
+00101001011000110000000001110000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000000111100000000
+10111000001000000110000000000000
+00101001011000010000000001110000
+01011101100000010000000000000010
+00110100000011000000000000000001
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000000111010001110
+01111101100000010000000000000001
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111101000100
+00101000011000100000000000000000
+01111000000011000000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+10111000001000000110100000000000
+00111001100011001010100101111000
+00110100000000010000000000100000
+00110011100000010000000000100111
+10111001100000000000100000000000
+11111000000000000000111000111111
+00110100000010111111111111111111
+01001000000000010000000001010001
+00001111100000000000000000100100
+00110111100011100000000000100110
+00110100000010110000000011111111
+11100000000000000000000000000110
+01000011100000010000000000100110
+01000100001010110000000000001100
+00101111100000010000000000100100
+00110100001000010000000000000001
+00001111100000010000000000100100
+00101111100000100000000000100100
+10111001100000000000100000000000
+10111001110000000001100000000000
+00110100010000100000000000000010
+00110100000001000000000000000001
+11111000000000000000111001110001
+00110100000000100000000000000001
+01000100001000101111111111110100
+00101111100000010000000000100100
+00110100000000100000000100000000
+01010000010000010000000000000010
+00001111100000000000000000100100
+01111000000011000000000000000001
+10111001101000000101100000000000
+00111001100011001010100101111000
+00110100000100000000000000001010
+00110100000011110000000000100000
+00110111100011100000000000100111
+11100000000000000000000000011110
+11111000000000000001000100001110
+00101111100000100000000000100100
+00101001011000110000000000000100
+10111000001000000110100000000000
+00110100010000100000000000000010
+10111001100000000000100000000000
+10111001101000000010000000000000
+11111000000000000000111010001000
+01011100001011010000000000101000
+00101111100000100000000000100100
+10110100001000100000100000000000
+00100000001000101111111111111111
+00101001011000010000000000001000
+00001111100000100000000000100100
+01000100001000000000000000000011
+00110011100011110000000000100111
+11100000000000000000000000000010
+00110011100100000000000000100111
+00110100010000100000000000000010
+10111001100000000000100000000000
+10111001110000000001100000000000
+00110100000001000000000000000001
+11111000000000000000111001111001
+00110100000000100000000000000001
+00110101011010110000000000000100
+01011100001000100000000000010111
+00101111100000010000000000100100
+00110100001000010000000000000001
+00001111100000010000000000100100
+00101001011000010000000000000100
+01011100001000001111111111100010
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110111100000110000000000100100
+00110100000001000000000000000010
+11111000000000000000111001101100
+10111000001000000110100000000000
+00110100000000010000000000000010
+00110100000010111111111111111111
+01011101101000010000000000001010
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110111100000110000000000100010
+00110100000001000000000000000010
+11111000000000000000111000110111
+11100100001011010101100000000000
+00110101011010111111111111111111
+11100000000000000000000000000010
+00110100000010111111111111111111
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000000111000011101
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111101000100
+00101000011000100000000000000000
+01111000000011000000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001100011001010100101111000
+10111001100000000000100000000000
+11111000000000000000110111001111
+00110100000011011111111111111111
+01001000000000010000000000100010
+01111000000000010000000000000001
+00111000001000011000101111111000
+01111000000011010000000000000001
+11111011111111111110111111001111
+00110100000010110000000000000000
+00110111100011110000000000011111
+00110100000011100000000011111111
+00111001101011010111111111011000
+00110101011000100000000000000010
+10111001100000000000100000000000
+10111001111000000001100000000000
+00110100000001000000000000000001
+11111000000000000000111000000011
+00110100000000100000000000000001
+01011100001000100000000000001111
+01000011100000100000000000011111
+01000100010011100000000000000101
+10111001101000000000100000000000
+00110101011010110000000000000001
+11111011111111111110111110111111
+00100001011010111111111111111111
+01000011100000010000000000011111
+01011100001011101111111111110010
+00110100000011010000000000000000
+01011101011000000000000000000110
+01111000000000010000000000000001
+00111000001000011000000000011100
+11111011111111111110111110110111
+11100000000000000000000000000010
+00110100000011011111111111111111
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000000110111011100
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+10111000001000000110100000000000
+00100000011011000000000011111111
+10111000100000000000100000000000
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100101100
+00111000100001001000111100110000
+00111000101001011000111101000100
+00100000010100010000000011111111
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111000001000011010100101111000
+00110100000010111111111111111111
+11111000000000000000110110001001
+01001000000000010000000000100010
+01011101100000000000000000000101
+01111000000000110000000000000001
+00111000011000111011111101110000
+00110100000000010000000000000010
+00001100011000010000000000000000
+01111000000011000000000000000001
+01111000000011100000000000000001
+00110100000010110000000000000000
+00111001100011001011111101110000
+00111001110011101010100101111000
+00110100000100000000000011111111
+00110100000011110000000000001010
+00101101100000100000000000000000
+00110100010000011111111111111110
+01010100001100010000000000001111
+00110100010000010000000000000001
+00001101100000010000000000000000
+10111001101000000001100000000000
+10111001110000000000100000000000
+00110100000001000000000000000001
+11111000000000000000110110110110
+00110100000000100000000000000001
+01011100001000100000000000000111
+01000001101000010000000000000000
+01000100001100000000000000000110
+00110101011010110000000000000001
+00110101101011010000000000000001
+01011100001011111111111111110001
+11100000000000000000000000000010
+00110100000010111111111111111111
+01111000000000010000000000000001
+00111000001000011010100101111000
+11111000000000000000110110010111
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110010100
+01111000000000100000000000000001
+01111000000000110000000000000001
+10111001011000000000100000000000
+00111000010000101011111110100000
+00111000011000111011111110011100
+11111011111111111111010100100011
+00101001011000010000000000000000
+01011100001000000000000000000111
+00101001011000100000000000001000
+01011100010000010000000000000101
+01111000000000010000000000000001
+01011001011000000000000000000100
+01011001011000010000000000001000
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111110010100
+00110100000000100000000000000001
+01011000001000100000000000000100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000011000000111000000000000
+00100000100011010000000011111111
+01100100011000110000000000000000
+01100100001001000000000000000000
+10111000010000000110000000000000
+10100000100000110001100000000000
+00110100000010111111111111101010
+01011100011000000000000000101011
+01000100100000110000000000001000
+01111000000000010000000000000001
+00111000001000011000110000010100
+11111011111111111110111100110100
+00001001110000100000000000000101
+10111001100000000000100000000000
+11111011111111111111100010010110
+11100000000000000000000000010010
+00110100000000110000000000000001
+01011100001000110000000000010010
+01111000000000010000000000000001
+10111001101000000001000000000000
+10111001100000000001100000000000
+00111000001000011000110000101100
+11111011111111111110111100101001
+01111000000001010000000000000001
+01111000000000010000000000000001
+00111000101001011011111101101000
+00111000001000011010100101111000
+01011000101000000000000000000000
+01011000101011010000000000000100
+01011000001001010000000000000100
+10111001100000000001000000000000
+00110100000000110000000101000000
+11111011111111111111101010010001
+00110100000010110000000000000000
+11100000000000000000000000010000
+00110100000000110000000000000010
+00110100000010110000000000000000
+01011100001000110000000000001101
+01111000000000010000000000000001
+00111000001000011000110001001100
+11111011111111111110111100010111
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011010100101111000
+00111000100001001100000111100000
+01011000001001000000000000000100
+10111001100000000001000000000000
+10111000100000000000100000000000
+00110100000000110000000101000000
+11111000000000000000010010000100
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000000101100
+01011011100011000000000000101000
+01011011100011010000000000100100
+01011011100011100000000000100000
+01011011100011110000000000011100
+01011011100100000000000000011000
+01011011100100010000000000010100
+01011011100100100000000000010000
+01011011100100110000000000001100
+01011011100101000000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+10111000010000000101100000000000
+10111000011000000111000000000000
+00110100000000100000000000000000
+00110111100000010000000000110000
+00110100000000110000000000010011
+00100000100100000000000011111111
+11111000000000000000111100100100
+01100101110000100000000000000000
+01100101011000010000000000000000
+01100101101100100000000000000000
+10111000010000010000100000000000
+01111000000011000000000000000001
+10100010010000010000100000000000
+00111001100011001010110000101100
+01011100001000000000000010001011
+11001000000011100001000000000000
+00110101110000010000000100111111
+10100000010000010000100000000000
+10110100001010110000100000000000
+10111001100000000111100000000000
+00110101100001110000000100000000
+10111001100000000010100000000000
+00110101110001101111111111111111
+00101000101001000000000001010100
+00101000101000110000000001001100
+01011000101000010000000001001100
+11001000100000110001100000000000
+00010100001001000000000000011111
+01011000101001000000000001001000
+10110100001000110010000000000000
+01011000101001000000000001010100
+00110100011000110000000000000001
+00010100100001000000000000011111
+10110100011000010000100000000000
+01011000101001000000000001010000
+10110100110000010000100000000000
+00110100101001010000000001000000
+10100000001000100000100000000000
+01011100101001111111111111110001
+01111000000000010000000000000001
+00111000001000011010110000101100
+01011000001000000000000000001000
+01011000001010110000000000001100
+00101001100000100000000100010000
+01111000000100010000000000000001
+00110101111101000000000101000000
+01011000001000100000000000010000
+00101001100000100000000100010100
+00110111100100110000000000110000
+10111001111000000110000000000000
+01011000001000100000000000010100
+00111010001100011000110001101100
+00110101100000100000000000101100
+00110100000000110000000000010010
+10111010011000000000100000000000
+11111000000000000001000000100101
+00101001100000110000000000001100
+00101001100001000000000000010100
+10111010001000000000100000000000
+10111010011000000001000000000000
+00110101100011000000000001000000
+11111011111111111110111010111011
+01011101100101001111111111110110
+01000110010000000000000000010001
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000011000110010010000
+11111011111111111110111010110101
+00001001110000100000000000000101
+10111001011000000000100000000000
+00110100000011000000000000000000
+11111011111111111111100000010110
+00110100000011100000000101000000
+10110101100010110000100000000000
+10110101111011000001000000000000
+00110100000000110000000001000000
+00110101100011000000000001000000
+11111011111111111111100000111000
+01011101100011101111111111111011
+11100000000000000000000001000110
+00110100000000010000000000000001
+01011101101000010000000000100010
+00110100000000010000000000000000
+10111010000000000001000000000000
+11111011111111111111001011000101
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011000110010110100
+11100000000000000000000000101010
+01111000000011100000000000000001
+00111001110011101011111101101000
+01111000000000010000000000000001
+01011001110100000000000000000100
+10111010000000000001000000000000
+01011001110000000000000000000000
+10111001011000000001100000000000
+00111000001000011000110011001100
+01111000000011000000000000000001
+11111011111111111110111010010110
+00111001100011001010100101111000
+01011001100011100000000000000100
+10111001100000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000101000000
+11111011111111111111101000000010
+00110100000011100000000000000000
+00110100000100000000000101000000
+10110101110010110001000000000000
+10110101111011100001100000000000
+10111001100000000000100000000000
+00110100000001000000000001000000
+00110101110011100000000001000000
+11111011111111111111101000110000
+01011101110100001111111111111010
+11100000000000000000000000100011
+00110100000000010000000000000010
+01011101101000010000000000100001
+01111000000011000000000000000001
+01111000000000010000000000000001
+00111000001000011100000111100000
+00111001100011001010100101111000
+00110100000000100000000000000000
+01011001100000010000000000000100
+00110111100000110000000001000100
+00110100000001000000000000000100
+11111000000000000000001111001001
+00110100000000100000000000000100
+01000100001000100000000000000101
+01111000000000010000000000000001
+00111000001000011000110011111100
+11111011111111111110111001110110
+11100000000000000000000000010110
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000011000110100011000
+11111011111111111110111001110001
+00101001100000010000000000000100
+10111001011000000001000000000000
+00110100000000110000000101000000
+11111000000000000000001111100011
+00110100000011100000000000000000
+00110100000100000000000101000000
+00101001100000010000000000000100
+10110101110010110001000000000000
+10110101111011100001100000000000
+00110100000001000000000001000000
+00110101110011100000000001000000
+11111000000000000000001111000111
+01011101110100001111111111111010
+00110100000000010000000000000000
+00110100000000100000000001010000
+11111011111111111111101100000110
+11100000000000000000000000000010
+00110100000011011111111111101010
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101100
+00101011100011000000000000101000
+00101011100011010000000000100100
+00101011100011100000000000100000
+00101011100011110000000000011100
+00101011100100000000000000011000
+00101011100100010000000000010100
+00101011100100100000000000010000
+00101011100100110000000000001100
+00101011100101000000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000111100000000000
+10111000010000000111000000000000
+00110100000011010000000000001000
+00110100000011000000000000000001
+00111001011010111010101000110000
+10100001100011100001100000000000
+00101001011001000000000000001000
+01111100011000100000000000000000
+10111001111000000000100000000000
+00110101101011011111111111111111
+11011000100000000000000000000000
+00111101100011000000000000000001
+01011101101000001111111111111001
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000111100000000000
+00110100000011100000000000001000
+00110100000011000000000000000000
+00110100000011010000000000000001
+00111001011010111010101000110000
+00101001011000100000000000000100
+10111001111000000000100000000000
+00110101110011101111111111111111
+11011000010000000000000000000000
+01111100001000100000000000000000
+11001000000000100001000000000000
+10100001101000100001000000000000
+10111001100000100110000000000000
+00111101101011010000000000000001
+01011101110000001111111111110111
+00110100000000010000000001100100
+11111011111111111110001001011000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000001000000
+01011011100011000000000000111100
+01011011100011010000000000111000
+01011011100011100000000000110100
+01011011100011110000000000110000
+01011011100100000000000000101100
+01011011100100010000000000101000
+01011011100100100000000000100100
+01011011100100110000000000100000
+01011011100101000000000000011100
+01011011100101010000000000011000
+01011011100101100000000000010100
+01011011100101110000000000010000
+01011011100110000000000000001100
+01011011100110010000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000110000000000000
+00110100000000110000000010000000
+00110100001000010000000000001000
+01111000000011010000000000000001
+11111000000000000000111000101101
+00111001101011011010101000110000
+00101001101000010000000000000000
+00110100000011110000000000000000
+01000100001000000000000001100001
+10111001100000000101100000000000
+00110100000100100000000000000000
+00110100000100010000000000000000
+01111000000110010100000000000000
+00110100000101100000000000000001
+00110100000110000000000000001000
+01011001011011000000000000001000
+01000101111000000000000000100010
+00101001011000010000000000000000
+01111000000000101000000000000000
+00110100000000110000000000000000
+01011001011000010000000000010000
+00101001011000010000000000000100
+01011001011000010000000000010100
+10100000010110010000100000000000
+01000100001000000000000000000011
+01111000000000100100000000000000
+00110100000000110000000000000000
+10100000011100010000100000000000
+10100000010100100010100000000000
+10111000101000010010100000000000
+00101001011001000000000000010000
+00101001011000010000000000010100
+01011100101000000000000000001110
+10100100011000000011000000000000
+10100000001001100000100000000000
+01011001011000010000000000010100
+00000000011000110000000000000001
+00111100010000010000000000011111
+10100100010000000011100000000000
+00000000010000100000000000000001
+10100000100001110010000000000000
+10111000001000110001100000000000
+01011001011001000000000000010000
+10111000010000110000100000000000
+01011100001001011111111111101011
+11100000000000000000000000111100
+10111000100000100001000000000000
+10111000001000110001100000000000
+01011001011000100000000000010000
+01011001011000110000000000010100
+00110101111011100000000000000001
+00101001101000100000000000000000
+00111101110011100000000000000100
+10111001100000000000100000000000
+10110101100011100111000000000000
+11011000010000000000000000000000
+01011100001101100000000000110001
+10111001100000000000100000000000
+00110100000000100000000011110000
+11111011111111111111111101110100
+00110100000101000000000001000000
+00110100000100110000000000000000
+00110100000100000000000000000001
+00110100000100100000000000000000
+00110100000100010000000000000000
+00101001101000100000000000000100
+10111001100000000000100000000000
+00101001110101110000000000000100
+11011000010000000000000000000000
+00101001101000100000000000000100
+10111000001000001010100000000000
+10111001100000000000100000000000
+10100010111100001011100000000000
+11011000010000000000000000000000
+01000110101000010000000000001000
+00101001101000110000000000001000
+10111010101000000001000000000000
+01111110101101010000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011110101101100000000000010001
+11100000000000000000000000000111
+00101001101000110000000000001000
+10111001100000000000100000000000
+10111010111000000001000000000000
+11011000011000000000000000000000
+01000110111000000000000000001001
+11100000000000000000000000001010
+00101001110000010000000000000000
+10111000001100110000100000000000
+01011001110000010000000000000000
+00101001110000010000000000000100
+10111000001100000000100000000000
+01011001110000010000000000000100
+11100000000000000000000000000011
+10111010010100111001000000000000
+10111010001100001000100000000000
+00111110000000010000000000000001
+00111110011100110000000000000001
+11110110000000011000000000000000
+00110110100101001111111111111111
+10110110000100111001100000000000
+10111000001000001000000000000000
+01011110100000001111111111011010
+11100000000000000000000000010100
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000001000000
+00101011100011000000000000111100
+00101011100011010000000000111000
+00101011100011100000000000110100
+00101011100011110000000000110000
+00101011100100000000000000101100
+00101011100100010000000000101000
+00101011100100100000000000100100
+00101011100100110000000000100000
+00101011100101000000000000011100
+00101011100101010000000000011000
+00101011100101100000000000010100
+00101011100101110000000000010000
+00101011100110000000000000001100
+00101011100110010000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110101111011110000000000000001
+00110101011010110000000000010000
+01011101111110001111111110010001
+11100011111111111111111111101010
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01111000000000010000000000000001
+00111000001000011010101000110000
+00101000001000100000000000000000
+00101001011000010000000000000000
+00110100000011000000000000000000
+00110100000011010000000001000000
+11011000010000000000000000000000
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111111100100000
+00101001011000010000000000001000
+00101001011000100000000000001100
+10111001100000000001100000000000
+00110101100011000000000000001000
+11111000000000000000110001000100
+00101001011000010000000000000000
+11111011111111111111111100011001
+01011101100011011111111111111001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001001101000
+00101000010000100000000000000000
+00111100001000010000000000001000
+00111000001000010000000000001010
+01011000010000010000000000000000
+00101000010000010000000000000000
+00100000001000110000000000001000
+01011100011000001111111111111110
+00100000001000010000000000000001
+00011000001000010000000000000001
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001001101000
+00101000010000100000000000000000
+00111100001000010000000000001000
+00111000001000010000000000001001
+01011000010000010000000000000000
+00101000010000010000000000000000
+00100000001000110000000000001000
+01011100011000001111111111111110
+00100000001000010000000000000001
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000110000000000000001
+00111000011000111100001001101000
+00111100001000010000000000001000
+00101000011000110000000000000000
+01111100010000100000000000000000
+00111000001000010000000000001000
+10111000001000100001000000000000
+01011000011000100000000000000000
+00101000011000010000000000000000
+00100000001000010000000000001000
+01011100001000001111111111111110
+11000011101000000000000000000000
+01111000000000010000000000000001
+01111000000000110000000000000001
+00111000001000011100001001101000
+00111000011000111000111101001000
+00101000001000010000000000000000
+00101000011000100000000000000000
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111000100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000000000000000
+00110100000010111111111111111111
+01000100001000000000000000101010
+00101001100000100000000000000100
+01000100010000000000000000101000
+11111011111111111110000100010110
+01111000000011100000000000000001
+10111000001000000110100000000000
+00110100000010110000000000000000
+00110100000100000000000000011111
+00110111100011110000000000100000
+00111001110011101000110101001100
+11100000000000000000000000001011
+11111011111111111110000100001110
+00100000001001000000000011111111
+10110101011011010001000000000000
+10110101111010110000100000000000
+00110000001001000000000000000000
+10111000010000000001100000000000
+10111001110000000000100000000000
+10111000100000000010100000000000
+11111011111111111110110100010101
+00110101011010110000000000000001
+00101001100000010000000000000100
+11101110000010110001100000000000
+00110101100011000000000000000100
+01111100001000100000000000000000
+10100000011000100001000000000000
+01011100010000001111111111110001
+01111000000000010000000000000001
+10111001011000000010000000000000
+10111001101000000001000000000000
+10111001111000000001100000000000
+00111000001000011100000111100000
+11111000000000000000001001101010
+10111000001000000110000000000000
+10111001011000000001100000000000
+01111000000000010000000000000001
+11111101100010110101100000000000
+00111000001000011000110101110000
+10111001101000000001000000000000
+10111001100000000010000000000000
+11111011111111111110110100000000
+11001000000010110101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111100
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+00110100000001011111111111111111
+01000100001000000000000000101100
+00101001011000100000000000000100
+01000100010000000000000000101010
+11111011111111111110000011011000
+10111000001000000111000000000000
+00101001011000010000000000000100
+11111011111111111110000011010101
+10111000001000000101100000000000
+00110100000000010000000000100000
+01001100001010110000000000000010
+00110100000010110000000000100000
+00110111100011010000000000011100
+01111000000000010000000000000001
+10111001011000000010000000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+00111000001000011100000111100000
+11111000000000000000001000100111
+10111000001000000110000000000000
+01111000000000010000000000000001
+10111001011000000001100000000000
+00111000001000011000110110010000
+10111001110000000001000000000000
+10111001100000000010000000000000
+11111011111111111110110011010010
+11101001100010110101100000000000
+11101100000011000000100000000000
+00110100000001011111111111111111
+10111001011000010101100000000000
+01011101011000000000000000001111
+10111001101000000111100000000000
+01111000000011010000000000000001
+00111001101011011000110101001100
+10110101111010110000100000000000
+01000000001001000000000000000000
+10110101011011100001000000000000
+10111001101000000000100000000000
+10111000010000000001100000000000
+10111000100000000010100000000000
+00110101011010110000000000000001
+11111011111111111110110011000010
+01001001100010111111111111111000
+11111101100010110010100000000000
+11001000000001010010100000000000
+10111000101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+00111001101011011100000111100000
+10111001101000000000100000000000
+01111000000010110000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+11111011111111111111111010010110
+00111001011010111100000111110000
+00110100000011000000000000000000
+00111001111011111000110110110000
+00111001110011101000110111001000
+00110100000100000000000000001000
+00101001011000110000000000000000
+00101001011001000000000000000100
+10111000011001000000100000000000
+01000100001000000000000000010000
+10111001100000000001000000000000
+10111001111000000000100000000000
+11111011111111111110110010011011
+00111101100000010000000000000100
+00110100000000100000000000000000
+00110100001000010000000000001000
+10110101101000010000100000000000
+11111000000000000000000000010101
+00100000001000111111111111111111
+00001000011000110010011100010000
+10111000001000000001000000000000
+00010100010000100000000000010000
+00010100011000110000000000010000
+10111001110000000000100000000000
+11111011111111111110110010001111
+00110101100011000000000000000001
+00110101011010110000000000010000
+01011101100100001111111111101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01000000001011010000000000001111
+10111000001000000110000000000000
+00110100000000010000000000101000
+10111000010000000111000000000000
+01000101101000010000000000000101
+00110100000000010000000001000010
+01000101101000010000000000000011
+00110100000000010000000000010000
+01011101101000010000000000110100
+00100001110010110000000000000010
+01011101011000000000000000001111
+10111001100000000000100000000000
+11111011111111111111111011110000
+00101001100000010000000000000000
+00110100000000100000000001000100
+00100001110011100000000000000001
+11111011111111111111111000011011
+00110100000000010000000000000000
+01011101110010110000000000101101
+01111000000010110000000000000001
+00111001011010111010101000110000
+00101001011000100000000000000100
+00101001100000010000000000000000
+11011000010000000000000000000000
+01000100001000001111111111111101
+10111001100000000000100000000000
+11111011111111111111111011100010
+00101001100000010000000000000000
+01111000000010110000000000000001
+00110100000000100000000010111110
+00111001011010111011111101110100
+11111011111111111111111000001100
+00110101011011100000000000001000
+11100000000000000000000000000101
+00101001100000010000000000000000
+11111011111111111111111000100101
+00110001011000010000000000000000
+00110101011010110000000000000001
+01011101011011101111111111111100
+01111000000000100000000000000001
+00111000010000101011111101110100
+01000000010000010000000000000001
+01000000010000110000000000000000
+00111100001000010000000000001000
+10111000001000110000100000000000
+00110100000000110000000000101000
+11011100001000000000100000000000
+01000101101000110000000000001011
+00110100000000110000000001000010
+01000101101000110000000000001001
+00110100000000110000000000010000
+01011101101000110000000000001011
+01000000010000100000000000000110
+00111100001000010000000000001111
+00111100010000100000000000001100
+00110100001000011100000000000000
+10111000001000100000100000000000
+11100000000000000000000000000110
+00111100001000010000000000001100
+11100000000000000000000000000100
+01111000000000011000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000000000
+10111000001000000010000000000000
+00110100000010010000000000101000
+00110100000010000000000001000010
+00110100000001110000000000010000
+00110100000001100000000000001000
+01000000100001010000000000010111
+01000100101010010000000000000011
+01000100101010000000000000000010
+01011100101001110000000000000110
+00111100011000110000000000000100
+00110100011000110000000000001000
+10110100001000110000100000000000
+11111011111111111111111110100101
+11100000000000000000000000000101
+00110100011000110000000000000001
+00110100100001000000000000010000
+01011100011001101111111111110101
+01111000000000011000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000000000000000
+10111000011000000110000000000000
+11111011111111111111111010010010
+00101001011000010000000000000000
+00110100000000100000000000001111
+00100010000011100000000011111111
+11111011111111111111110110111101
+00101001011000010000000000000000
+10111001110000000001000000000000
+00100010000100001111111100000000
+11111011111111111111110110111001
+00010110000100000000000000001000
+00101001011000010000000000000000
+10111010000000000001000000000000
+00110100000011010000000000000000
+11111011111111111111110110110100
+11100000000000000000000000000101
+00101001011000010000000000000000
+00110100000000100000000011111111
+00110101101011010000000000000001
+11111011111111111111110110101111
+01001001100011011111111111111100
+10111001011000000000100000000000
+11111011111111111111111001111101
+00101001011000010000000000000000
+00110100000000100000000010101010
+11111011111111111111110110101001
+00101001011000010000000000000000
+11111011111111111111110111000100
+10111000001000000111100000000000
+01011100001011100000000000100001
+00101001011000010000000000000000
+11111011111111111111110111000000
+10111000001000000111000000000000
+01011100001100000000000000011111
+00101001011000010000000000000000
+00110100000011010000000000000000
+00110100000100010000000011111111
+11111011111111111111110110111010
+10111000001000001000000000000000
+11100000000000000000000000000101
+00101001011000010000000000000000
+11111011111111111111110110110110
+01011100001100010000000000011000
+00110101101011010000000000000001
+01001001100011011111111111111100
+10111001011000000000100000000000
+11111011111111111111111001100101
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111110110010001
+00101001011000010000000000000000
+10111001111000000001000000000000
+11111011111111111111110110001110
+00101001011000010000000000000000
+10111001110000000001000000000000
+11111011111111111111110110001011
+00101001011000010000000000000000
+10111010000000000001000000000000
+11111011111111111111110110001000
+00110100000000010010011100010000
+11111011111111111110000000010011
+11100000000000000000000000000110
+00110100000011001111111111111111
+11100000000000000000000000000100
+00110100000011001111111111111110
+11100000000000000000000000000010
+00110100000011001111111111111101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000100000000000
+10111000011000001000000000000000
+10111000100000000110000000000000
+11111011111111111111111000111000
+00101001011000010000000000000000
+00110100000000100000000000001111
+00100010001011100000000011111111
+11111011111111111111110101100011
+00101001011000010000000000000000
+10111001110000000001000000000000
+00100010001100011111111100000000
+11111011111111111111110101011111
+00010110001100010000000000001000
+00101001011000010000000000000000
+10111010001000000001000000000000
+00110100000011010000000000000000
+11111011111111111111110101011010
+11100000000000000000000000000110
+10110110000011010001000000000000
+00101001011000010000000000000000
+01000000010000100000000000000000
+00110101101011010000000000000001
+11111011111111111111110101010100
+01001001100011011111111111111011
+10111001011000000000100000000000
+11111011111111111111111000100010
+00101001011000010000000000000000
+00110100000000100000000010101010
+11111011111111111111110101001110
+00101001011000010000000000000000
+11111011111111111111110101101001
+10111000001000000111100000000000
+01011100001011100000000000100010
+00101001011000010000000000000000
+11111011111111111111110101100101
+10111000001000000111000000000000
+01011100001100010000000000100000
+00101001011000010000000000000000
+00110100000011010000000000000000
+11111011111111111111110101100000
+10111000001000001000100000000000
+11100000000000000000000000000111
+00101001011000010000000000000000
+11111011111111111111110101011100
+10110110000011010001000000000000
+01000000010000100000000000000000
+01011100001000100000000000011000
+00110101101011010000000000000001
+01001001100011011111111111111010
+10111001011000000000100000000000
+11111011111111111111111000001001
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111110100110101
+00101001011000010000000000000000
+10111001111000000001000000000000
+11111011111111111111110100110010
+00101001011000010000000000000000
+10111001110000000001000000000000
+11111011111111111111110100101111
+00101001011000010000000000000000
+10111010001000000001000000000000
+11111011111111111111110100101100
+00110100000000010010011100010000
+11111011111111111101111110110111
+11100000000000000000000000000110
+00110100000011001111111111111111
+11100000000000000000000000000100
+00110100000011001111111111111110
+11100000000000000000000000000010
+00110100000011001111111111111101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000001000000000000000
+00100000010000010000000000011111
+10111000010000000101100000000000
+10111000011000000111000000000000
+10111000100000000110000000000000
+00110100000011010000000000000000
+01000100001000000000000000110000
+00110100010000011111111111111111
+10110100001001000000100000000000
+00010100001000100000000000011111
+10111000100000000111100000000000
+00000000010000100000000000011011
+10110100010000010000100000000000
+00010101011000100000000000011111
+00010100001000010000000000000101
+00000000010000100000000000011011
+10110100010010110001000000000000
+00010100010000100000000000000101
+01000100001000100000000000001100
+01111000000000010000000000000001
+00111000001000011000111101001100
+00101000001000100000000000000000
+10100001011000100001000000000000
+01001100010000000000000000000101
+00110100010000101111111111111111
+00110100000000011111111111100000
+10111000010000010001000000000000
+00110100010000100000000000000001
+00110100000011110000000000100000
+11001001111000100111100000000000
+10111010000000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+10111001111000000010000000000000
+11111011111111111111111101111010
+10111000001000000110100000000000
+01001000000000010000000000010110
+10110101110011110111000000000000
+10110101011011110101100000000000
+11001001100011110110000000000000
+11100000000000000000000000001110
+10111001100000000010000000000000
+01001101111011000000000000000010
+00110100000001000000000000100000
+10111010000000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111101101101
+01001000000000010000000000001001
+10110101101000010110100000000000
+00110101110011100000000000100000
+00110101011010110000000000100000
+00110101100011001111111111100000
+11100000000000000000000000000010
+00110100000011110000000000100000
+01001001100000001111111111110010
+11100000000000000000000000000010
+10111000001000000110100000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+11111011111111111111110110010011
+00101001100000010000000000000000
+00110100000000100000000011110000
+11111011111111111111110010111111
+00101001100000010000000000000000
+00100001011000100000000011111111
+11111011111111111111110010111100
+00100001011000101111111100000000
+00101001100000010000000000000000
+00000000010000100000000000001000
+00110100000010110000000000000000
+11111011111111111111110010110111
+11100000000000000000000000000110
+00101001100000010000000000000000
+11111011111111111111110011010001
+10110101110010110001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01001001101010111111111111111011
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+00100000010000010000000000011111
+10111000010000000101100000000000
+10111000011000000110000000000000
+00110100000011010000000000000000
+01000100001000000000000000101100
+00110100010000011111111111111111
+10110100001000110000100000000000
+00010100001000100000000000011111
+10111000011000000111000000000000
+00000000010000100000000000011011
+10110100010000010000100000000000
+00010101011000100000000000011111
+00010100001000010000000000000101
+00000000010000100000000000011011
+10110100010010110001000000000000
+00010100010000100000000000000101
+01000100001000100000000000001100
+01111000000000010000000000000001
+00111000001000011000111101001100
+00101000001000100000000000000000
+10100001011000100001000000000000
+01001100010000000000000000000101
+00110100010000101111111111111111
+00110100000000011111111111100000
+10111000010000010001000000000000
+00110100010000100000000000000001
+00110100000011100000000000100000
+11001001110000100111000000000000
+10111001111000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111010110011
+10111000001000000110100000000000
+01001000000000010000000000010011
+10110101011011100101100000000000
+11001001100011100110000000000000
+11100000000000000000000000001100
+10111001100000000001100000000000
+01001101110011000000000000000010
+00110100000000110000000000100000
+10111001111000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111010101000
+01001000000000010000000000001000
+10110101101000010110100000000000
+00110101011010110000000000100000
+00110101100011001111111111100000
+11100000000000000000000000000010
+00110100000011100000000000100000
+01001001100000001111111111110100
+11100000000000000000000000000010
+10111000001000000110100000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001010000000000000000
+10111000001000000011000000000000
+00110100000010000000000001000011
+00110100000001110000000000001000
+01000000110010010000000000010111
+01011101001010000000000000000110
+00111100101001010000000000000100
+00110100101001010000000000001000
+10110100001001010000100000000000
+11111011111111111111111110001011
+11100000000000000000000000000101
+00110100101001010000000000000001
+00110100110001100000000000010000
+01011100101001111111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001010000000000000000
+10111000001000000011000000000000
+00110100000010000000000001000011
+00110100000001110000000000001000
+01000000110010010000000000010111
+01011101001010000000000000000110
+00111100101001010000000000000100
+00110100101001010000000000001000
+10110100001001010000100000000000
+11111011111111111111111100101011
+11100000000000000000000000000101
+00110100101001010000000000000001
+00110100110001100000000000010000
+01011100101001111111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001000000000000000000
+10111000001000000010100000000000
+00110100000001110000000001000011
+00110100000001100000000000001000
+01000000101010000000000000010111
+01011101000001110000000000000110
+00111100100001000000000000000100
+00110100100001000000000000001000
+10110100001001000000100000000000
+11111011111111111111111110001000
+11100000000000000000000000000101
+00110100100001000000000000000001
+00110100101001010000000000010000
+01011100100001101111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110000100
+00101001011000010000000000000000
+01011100001000000000000000001001
+11111011111111111111000001011010
+01111000000000100000000000000001
+00110100001000010000001111101000
+00111000010000101011111101111100
+01011000010000010000000000000000
+00101001011000010000000000000000
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000010110000000000000001
+00111001011010111011111110000000
+00101001011011000000000000000000
+11111011111111111111000001001111
+01111000000000100000000000000001
+00111000010000101011111101111100
+00101000010001000000000000000000
+11001000001001000010100000000000
+00110100000000010000000000000000
+01001000000001010000000000011000
+00100001100000110000000000000001
+01111000000000010000000000000001
+00111100011001010000000000000010
+00111000001000011001010000011000
+10110100001001010000100000000000
+00101000001000010000000000000000
+10110100001001000010000000000000
+00101001011000010000000000000000
+01011000010001000000000000000000
+00110100000000100000000000000001
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000000010000000000000001
+00111000001000011100000111100000
+01000100011000100000000000000011
+11111011111111111111111000011000
+11100000000000000000000000000110
+00110100000000100000000000000010
+11111011111111111111111000010101
+01111000000000100000000000000001
+00111000010000101010101000111100
+01011000010000010000000000000100
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001001010000000000001000
+00101000001001000000000000000000
+00101000001001100000000000000100
+10110100010001010001100000000000
+10001000011001000010000000000000
+01011000001000100000000000011100
+10001000010001100001000000000000
+10110100100000100001000000000000
+00101000001001000000000000001100
+00010100010000100000000000001100
+10110100010001000010000000000000
+00101000001000100000000000010100
+01001100100000100000000000000101
+00101000001001000000000000010000
+01000100100000000000000000001000
+01001100101000110000000000001011
+11100000000000000000000000000110
+00101000001000100000000000011000
+01001100010001000000000000000110
+00101000001001000000000000010000
+01000100100000000000000000000010
+01001100011001010000000000000101
+01011000001000110000000000001000
+11100000000000000000000000000011
+01011000001000110000000000001000
+10111000100000000001000000000000
+01011000001000100000000000100000
+10111000010000000000100000000000
+11000011101000000000000000000000
+00101000001000100000000000001100
+01011000001000000000000000001000
+01011000001000100000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000000010100
+10111000010000000000100000000000
+11111000000000000000100110101000
+00101001011000110000000000001100
+00101001011000100000000000000000
+01001000001000110000000000001011
+00101001011000010000000000000100
+01001100010000010000000000000011
+00110100010000100000000000000001
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000010001
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000010000000000010000
+11100000000000000000000000001110
+00101001011000010000000000001000
+01001100001000100000000000000011
+00110100010000101111111111111111
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000000111
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000000000000000000000
+01011001011000000000000000010000
+00110100000000011111111111111111
+11100000000000000000000000000010
+00101001011000010000000000010000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+01011000001000000000000000010000
+01011000001000000000000000000000
+01011000001000000000000000010100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010001000
+00101000011001000000000000000000
+01001000100000010000000000010011
+01111000000000110000000000000001
+00111000011000111011111110101000
+11001000001001000000100000000000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000101000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110101000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111110101000
+00101000010000100000000000000000
+10111000001000000001100000000000
+00110100000000010000000000000000
+00101000010001000000000000001000
+00100000100001000000000000000010
+01000100100000000000000000001100
+00110100000001000000000000000010
+01011000010001000000000000001000
+01111000000001100000000000000001
+00101000010000100000000000010000
+00111000110001101000111101010000
+00101000110001000000000000000000
+00110100010001011111111110011011
+01010100101001000000000000000100
+00001000010000100000000001100100
+00110100000000010000000000000001
+01011000011000100000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111001011010111100001010001000
+00111000001000011100001010000000
+00101000001000010000000000000000
+00101001011011010000000000000000
+10110100001011010110100000000000
+00101001100000010000000000000000
+10111001101000000001000000000000
+11111000000000000000000100010000
+00101001100000010000000000000100
+00101001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000000000110001111
+01011001100000000000000000001100
+01011001100000000000000000001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+11111000000000000000000101100111
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+00110100000000100000000000000001
+00110100000000110000000000001001
+01011000001000100000000000000100
+01011001011000110000000000001100
+01111000000000110000000000000001
+00111000011000111000111101010100
+01011001011000100000000000001000
+00101000011000100000000000000000
+01011000001000100000000001001100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+10111000001000000001000000000000
+00101000001000010000000000000000
+00101000001000110000000001001000
+00110100000000010000000000000000
+01000100011000000000000000010110
+00101000010000110000000000000100
+00101000011000110000000000111000
+01000100011000000000000000010011
+01111000000000110000000000000001
+00111000011000111011111110101000
+00101000011000110000000000000000
+00101000011001000000000000000100
+00100000100001000000000000000100
+01000100100000000000000000001101
+00101000011000110000000000000100
+00100000011000110000000000001000
+01011100011000000000000000001010
+00101000010000100000000000001100
+00110100000000110000000000001010
+00110100000000010000000000000001
+01010100010000110000000000000110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001010001001000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000001100
+10111000001000000101100000000000
+00110100000000010000000000001001
+00110100010000101111111111111111
+00110100000011000000000000000000
+01010100010000010000000010100101
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001010000100000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+00110100000011000000000000000000
+00101000001000100000000000000100
+00100000010000100000000000001000
+01011100010000000000000010011000
+00101000001000110000000000000100
+01111000000000101000000000000000
+10111000011000100001000000000000
+01011000001000100000000000000100
+00110100000000010000000000001010
+11100000000000000000000010010000
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+01111000000001000000000000000001
+00111000100001001000111011000100
+00101000001000110000000000000100
+00101000100000100000000000000000
+10100000011000100001000000000000
+01011000001000100000000000000100
+00101000001000100000000000000100
+00100000010000100000000000001000
+01011100010000000000000010000011
+00101000001000010000000000000100
+00110100000011000000000000000001
+00100000001000010000000000000100
+01000100001000100000000010000010
+01011001011011000000000000001100
+11100000000000000000000010000000
+00101001011000010000000000000000
+00110100000011000000000000000000
+00101000001000010000000001001000
+01000100001000000000000001111100
+11111011111111111011000110001111
+00101001011000010000000000000100
+11111000000000000000000101000110
+11111011111111111011000110010101
+00110100000000010000000000001000
+11100000000000000000000001110100
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+00110100000000100000000000000010
+00110100000011000000000000000000
+01011000001000100000000000001000
+00101001011000010000000000000000
+00101000001000010000000001001000
+01000100001000000000000001101101
+00101001011000010000000000000100
+00101000001000010000000000111000
+01000100001000000000000001101010
+01111000000000010000000000000001
+00111000001000011011111110111100
+00101000001000010000000000000000
+00110100000000110000000010100010
+01011000001000110000000000000000
+00110100000000110000000000000011
+01011000001000110000000000010000
+00110100000000110000000000000001
+01011000001000110000000000011100
+01011001011000100000000000001100
+11100000000000000000000001011110
+01111000000000010000000000000001
+00111000001000011011111110111100
+00101000001000010000000000000000
+00110100000011000000000000000000
+00101000001000100000000000011100
+00100000010000100000000000000001
+01000100010000000000000001011000
+00110100000000100000000000000100
+01011000001000100000000000011100
+11111011111111111110111100000001
+00110100001000010000011111010000
+01011001011000010000000000010000
+00110100000000010000000000000011
+11100000000000000000000001001111
+11111011111111111110111011111100
+00101001011000100000000000010000
+00110100000011000000000000000000
+11001000001000100000100000000000
+01001000000000010000000001001100
+00110100000000010000000000000111
+01011001011000010000000000001100
+01011001011000000000000000011100
+11100000000000000000000001000111
+00110111100000010000000000010000
+11111011111111111111111100110111
+00110100000011000000000000000000
+01000100001000000000000001000100
+01111000000000110000000000000001
+00111000011000111000111101011000
+00101000011000100000000000000000
+00101011100000010000000000010000
+11111000000000000000100000110010
+00111000000000101100001101001111
+11101000001000100001000000000000
+01100100001000010000000000000000
+10111000010000010000100000000000
+01000100001000000000000000000101
+00110100000000010000000001100100
+01011001011000010000000000010100
+00110100000000011111111110011100
+11100000000000000000000000000011
+01011001011000000000000000010100
+00110100000000010000000001100100
+01011001011000010000000000011000
+00110100000000010000000000000100
+11100000000000000000000000101111
+00101001011000010000000000000100
+00110100000011000000000000000000
+11111000000000000000000111001110
+01011100001000000000000000101101
+00110111100000010000000000010000
+11111011111111111111111100011100
+01000100001011000000000000101010
+01111000000001000000000000000001
+00111000100001001000111101011000
+00101011100000010000000000010000
+00101000100000100000000000000000
+11111000000000000000100000011000
+00101001011000100000000000010100
+01011011100000010000000000010000
+01000100001000100000000000001001
+00101001011000010000000000011100
+00101001011000100000000000011000
+10110100010000010000100000000000
+01011001011000010000000000011100
+00101001011000010000000000000100
+00101001011000100000000000011100
+11111000000000000000000110011100
+11100000000000000000000000011001
+00101001011000100000000000010100
+00110100000011000000000000000001
+01011100001000100000000000010111
+00101001011000010000000000011100
+00110100001000010111010100110000
+01011001011000010000000000011100
+00101001011000010000000000000100
+00101001011000100000000000011100
+11111000000000000000000110010010
+00110100000000010000000000000101
+01011001011000010000000000001100
+11100000000000000000000000001110
+00101001011000010000000000000100
+00110100000011000000000000000000
+11111000000000000000000110101011
+01011100001000000000000000001010
+00110100000000010000000000000110
+11100000000000000000000000000110
+10111001011000000000100000000000
+11111011111111111111111100111101
+00110100000011000000000000000000
+01011100001000000000000000000100
+00110100000000010000000000001001
+01011001011000010000000000001100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001011111110101000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000001
+00111000110001101000111101011100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001011111110101000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000001
+00111000110001101000111101011100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+00110100000000110000000000000101
+01011000001000110000000000101000
+00111000000000111111111111111011
+01011000001000110000000000101100
+00110100000000111111111101101010
+01011000001000110000000000011000
+00110100000000111111111111111110
+01011000001000110000000000010100
+00110100000000110000000000000001
+01011000001000110000000000100100
+00110100000000110000000011001000
+01011000001000110000000001000100
+00110100000000110010011100010000
+01011000001000110000000000111100
+00110100000000110000000001100100
+01011000001000110000000001000000
+01011000001000100000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000001100
+10111000010000000110100000000000
+00110100000011000000000000000000
+01011100011000010000000001000111
+00110100000000010000000000100010
+00110100000000110000000000000000
+11111011111111111111111111000100
+00101001011000100000000000000100
+00110100000000010000000000100101
+00110100000000110000000000000000
+11111011111111111111111111000000
+00101001011000010000000000001000
+01001100001000000000000000000100
+01011001011011010000000000000100
+01011001011011010000000000001000
+11100000000000000000000000111011
+01001101101000010000000000000101
+00101001011000100000000000000000
+01111000000000010000000001000000
+10110100010000010000100000000000
+01011001011000010000000000000000
+00101001011000110000000000000000
+01111000000001010000000000000001
+00101001011000100000000000000100
+00111000101001011000111101100000
+00101000101000010000000000000000
+10110101101000110010000000000000
+11001000100000100110000000000000
+01001000001011000000000000000110
+01111000000001010000000000000001
+00111000101001011000111101100100
+00101000101000010000000000000000
+01001001100000010000000000000010
+11100000000000000000000000000010
+10111000001000000110000000000000
+01111000000001010000000000000001
+00111000101001011000111101101000
+00101000101000010000000000000000
+01001100001001000000000000000110
+01001100001000100000000000000101
+11001000011000010001100000000000
+11001000010000010000100000000000
+01011001011000110000000000000000
+01011001011000010000000000000100
+00101001011000010000000000000100
+10111001100000000001000000000000
+01011001011011010000000000001000
+00110100001000010100000000000000
+01011001011000010000000000000100
+00110101011000010000000000010100
+11111011111111111111111000010010
+01111000000000110000000000000001
+00111000011000111011111110101000
+00101001011000100000000000010000
+10111000001000000110100000000000
+00101000011000010000000000000000
+00110100000000110000000000000000
+01011000001011010000000001000000
+00110100010000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000100110
+11111011111111111111111110001101
+00110100000000010000000000100000
+10111001101000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111110001001
+10111001100000000001000000000000
+00110100000000010000000000100001
+00110100000000110000000000000001
+11111011111111111111111110000101
+10111001100000000001000000000000
+00110101011000010000000000111000
+11111011111111111111111000011101
+01111100001011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000101000
+01011001011000000000000000000100
+01011001011000000000000000000000
+01011001011000010000000000100000
+00110100000000011111111111111111
+01011001011000010000000000001000
+01011001011000000000000000010000
+00110101011000010000000000010100
+11111011111111111111111000000100
+00110101011000010000000000111000
+11111011111111111111111000101011
+00101001011000010000000000001100
+00110100000000100000000000000001
+11111011111111111111111000101100
+00110100000000010000000000100100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111101100100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000000101
+01011001011000010000000000011000
+00111000000000011111111111111010
+01011001011000010000000000011100
+00110100000000010000000000000001
+01011001011000010000000000010100
+00110100000000010111010100110000
+01011001011000010000000000010000
+00110100000000011111101110110100
+01011001011000010000000000001000
+00110100000000011111111111100010
+01011001011000010000000000000100
+00110100000000010000010010110000
+01011001011000010000000000110100
+00110100000000010000001111101000
+01011001011000010000000000101100
+00110100000000010000000001100100
+01011001011000010000000000110000
+01111000000000010000000000000001
+00111000001000011100001010001000
+00101000001000010000000000000000
+01011001011000110000000001100100
+01011001011000100000000001100000
+11001000011000010001100000000000
+01011001011000110000000001101100
+00110101011000010000000000000100
+01011001011000000000000001110000
+11111011111111111111110111010111
+00110101011000010000000000101000
+11111011111111111111110111111110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000001000100
+01011000001000000000000001000000
+00110100000000011111111111111111
+01011001011000010000000001001000
+01011001011000010000000001001100
+01011001011000010000000001010000
+01011001011000010000000001010100
+00110100000000010000000000000001
+01011001011000010000000001110000
+01011001011000000000000001011000
+00110101011000010000000000000100
+01011001011000000000000001011100
+01011001011000000000000001101000
+11111011111111111111110110111111
+00110101011000010000000000101000
+11111011111111111111110111100110
+00101001011000010000000001100000
+00110100000000100000000000000001
+11111011111111111111110111100111
+00101001011000010000000001100100
+00110100000000100000000000000001
+11111011111111111111110111100100
+00110100000000010000000000000100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111100101011
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000001100100
+00110100000000100000000000000000
+11111011111111111111110111010101
+01011001011000000000000001110000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000001110000
+10111000001000000101100000000000
+00110100000000010000000000000001
+01000100100000000000000001111000
+00101001011000010000000001100000
+01011100011000010000000000000010
+01011001011000100000000001001000
+00101001011000010000000001100100
+01011100011000010000000000000010
+01011001011000100000000001001100
+00101001011000010000000001001000
+01001000000000010000000000001001
+00101001011000100000000001010000
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000000
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000000
+01011001011000010000000001010000
+00101001011000010000000001001100
+01001000000000010000000000001001
+00101001011000100000000001010100
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000100
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000100
+01011001011000010000000001010100
+00101001011000110000000001001000
+00110100000000010000000000000000
+01001000000000110000000001011011
+00101001011000100000000001001100
+01001000000000100000000001011001
+00101001011011000000000001000000
+00101001011000010000000000111000
+10110100011011000001100000000000
+00101001011011000000000001000100
+11001000011000100001000000000000
+11001000010011000110000000000000
+01000100001000000000000000000110
+00100001100011000011111111111111
+00100001100000010010000000000000
+01000100001000000000000000000011
+00110100000000011100000000000000
+10111001100000010110000000000000
+10111001100000000001000000000000
+00110101011000010000000000000100
+11111011111111111111110101001111
+00101001011000100000000001101100
+01111000000000110000000000000001
+00111000011000111011111110101000
+00100000010000100000000000001111
+10111000001000000110100000000000
+00111100010000100000000000010000
+00101000011000010000000000000000
+00100001101000111111111111111111
+10111000011000100001000000000000
+01011000001000100000000001000100
+00101001011000110000000001000000
+00101001011000100000000001001000
+00110100000000010000000000000101
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011010100
+00101001011000110000000001000100
+00101001011000100000000001001100
+00110100000000010000000000000010
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011001110
+00110100000000010000000000000001
+10111001100000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111011001010
+00101001011000100000000001101000
+00110100000000110000000000000000
+00110100010000010000000000000001
+01011001011000010000000001101000
+00110100000000010000000000000110
+11111011111111111111111011000100
+00110100000000010000000000000000
+10111001101000000001000000000000
+00110100000000110000000000000001
+11111011111111111111111011000000
+01111000000000100000000000000001
+00110100000000011111111111111111
+00111000010000101000111101101100
+01011001011000010000000001001100
+01011001011000010000000001001000
+00101001011000110000000001000000
+00101000010000010000000000000000
+01001100001000110000000000001010
+00101001011000100000000001000100
+01001100001000100000000000001000
+01111000000001000000000000000001
+00111000100001001000111101110000
+00101000100000010000000000000000
+10110100011000010001100000000000
+10110100010000010000100000000000
+01011001011000110000000001000000
+01011001011000010000000001000100
+00101001011000010000000000111000
+01000100001000000000000000001111
+00101001011000010000000001011100
+00101001011000100000000001011000
+01001100001000100000000000000110
+00110100001000010000000000000001
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000011111111111111111
+11100000000000000000000000000110
+01001100010000010000000000000110
+00110100001000011111111111111111
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000010000000000000001
+01011001011000010000000001000000
+00110101011000010000000000101000
+10111001100000000001000000000000
+11111011111111111111110100101000
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00010100010000110000000000011111
+00110111100000010000000000001100
+01001000000000100000000000001011
+00000000010001000000000000010010
+00111100011000110000000000001110
+00111100010000100000000000001110
+10111000011001000001100000000000
+01011011100000100000000000010000
+00110100000000100011111010000000
+01011011100000110000000000001100
+11111011111111111011011110000001
+00101011100000100000000000010000
+11100000000000000000000000001001
+00001000010000101100000000000000
+01011011100000100000000000010000
+00010100010000100000000000011111
+01011011100000100000000000001100
+00110100000000100011111010000000
+11111011111111111011011101111001
+00101011100000100000000000010000
+11001000000000100001000000000000
+00110100000000010000000000000000
+01011001011000100000000001011000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000100000000001011000
+00101000001000010000000001011100
+11111100010000010000100000000000
+11000011101000000000000000000000
+01011000001000100000000000000100
+01011000001000000000000000011100
+01011000001000110000000000001000
+01011000001000000000000000001100
+01011000001000000000000000010000
+01011000001000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000100000000000000001
+01011000001000100000000000000000
+01011000001000000000000000010100
+01011000001000000000000000011100
+01011000001000000000000000001100
+01011000001000000000000000010000
+00101000001000010000000000000100
+11111011111111111111110100010110
+01111000000000010000000000000001
+00111000001000011100001010001000
+00101000001000010000000000000000
+00110100000000100000000000000001
+11111011111111111111110100010001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110111100000010000000000010100
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000000011100101010
+00110100000000011100000000000000
+01111000000001000000000000000001
+01011011100000010000000000100000
+00111000100001001100001010001000
+00110100000000010100000000000000
+01011011100000010000000001000100
+00101000100000010000000000000000
+01011101101000010000000000000101
+01111000000000110000000000000001
+00111000011000111010110101101100
+01011000011011000000000000000000
+11100000000000000000000000100111
+00111101101011010000000000000101
+10110101011011010101100000000000
+00101001011000010000000000000000
+01000100001000000000000000100011
+01111000000000110000000000000001
+00111000011000111010110101101100
+00101000011000010000000000000000
+00101001011000100000000000010000
+11001001100000010000100000000000
+00100000001000010011111111111111
+00010100001000110000000000001100
+01011100010000000000000000000111
+00111100011000110000000000000010
+01011001011000010000000000001100
+00110100000000010000000000000001
+01011001011000110000000000010100
+01011001011000010000000000010000
+11100000000000000000000000010101
+00101001011001000000000000001100
+00110100010000100000000000000001
+10110100001001000000100000000000
+00101001011001000000000000010100
+10110100011001000001100000000000
+00111100011000110000000000000010
+00110111100001000000000001010000
+10110100100000110001100000000000
+00101000011000111111111111000100
+01011001011000100000000000010000
+10110100001000110000100000000000
+00101001011000110000000000001000
+01011001011000010000000000001100
+01011100010000110000000000000111
+11111000000000000000010111010001
+01011001011000010000000000011000
+00110100000000010000000000000001
+01011001011000010000000000011100
+01011001011000000000000000001100
+01011001011000000000000000010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110101000
+01011100010000000000000000001010
+00110100000001000000000000000001
+00101000011000100000000000000000
+10111100100000010000100000000000
+00100000001000010000000011111111
+00101000010000110000000000100000
+00111100001000010000000000010000
+10100100001000000000100000000000
+10100000001000110000100000000000
+11100000000000000000000000001000
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100000
+00100000001000010000000011111111
+00111100001000010000000000010000
+10111000001000110000100000000000
+01011000010000010000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000001
+01000100001000100000000000001001
+00110100000000100000000000000010
+01000100001000100000000000001100
+01011100001000000000000000010111
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001010110000000000000000
+00110101011010110000000000011000
+11100000000000000000000000001010
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001010110000000000000000
+00110101011010110000000000010100
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001010110000000000000000
+00110101011010110000000000011100
+00110100000000010000011111010000
+11111011111111111110110010000011
+01111000000000110000000000000001
+00111000011000111000111100011000
+00101001011000100000000000000000
+00101000011000010000000000000000
+10100000010000010000100000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+10111000010000000101100000000000
+00111000011000111100000001010000
+01000100001000000000000000000111
+00110100001000011111111111111111
+00001000001000110000000001111100
+01111000000000010000000000000001
+00111000001000011011111111001000
+10110100011000010000100000000000
+00110100001000110000000100000100
+10111000011000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111100111000
+01111000000000010000000000000001
+00111000001000011011111111001000
+01011000001010110000000000010100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000011000000000000000001
+01111000000011010000000000000001
+10111000001000000111000000000000
+00110100000010110000000000000000
+00111001100011001100001010001000
+00111001101011011011111110001000
+11100000000000000000000000001010
+00101001101000010000000000000000
+10010100001010110000100000000000
+00100000001000010000000000000001
+01000100001000000000000000000101
+00111101011000100000000000000101
+10110101110000100001000000000000
+00110100010000010000000111110100
+11111011111111111111111101000110
+00110101011010110000000000000001
+00101001100000010000000000000000
+01001000001010111111111111110110
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000110110000000000000001
+01111000000010110000000000000001
+01111000000110010000000000000001
+01111000000011010000000000000001
+01111000000100010000000000000001
+01111000000100000000000000000001
+01111000000011000000000000000001
+01111000000101110000000000000001
+01111000000011110000000000000001
+00111011011110111011111110101000
+00111001011010111011111111001000
+00110100000101000000000000001001
+00111011001110011001010001110100
+00110100000110000000000000000001
+00110100000100110000000000000011
+00111001101011011100000000110000
+00110100000100100000000000001000
+00111010001100011100000001010000
+00111010000100001011111111100000
+00111001100011001100001010001000
+00111010111101111100000110111100
+00111001111011111100001010000000
+11100000000000000000000010000001
+00101010101101100000000001111100
+01111000000000010000000011111111
+00111000001000011111111111111111
+00000010110011100000000000011000
+10100010110000011011000000000000
+00101001011000010000000000000100
+00100001110011100000000001111111
+00110100001000011111111111111111
+01010100001101000000000001011000
+00111100001000010000000000000010
+10110111001000010000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001011000010000000001000100
+00110100000000100000000000000011
+11111000000000000000010100011110
+00111100001000010000000000000001
+01011010101000010000000001000000
+00101001011000010000000010100100
+00101001011000100000000010100000
+10110100010000010000100000000000
+00000000001000100000000000011111
+10110100010000010000100000000000
+00010100001000010000000000000001
+00110100000000100000000000000001
+01011010101000010000000001000100
+00101001100000010000000000000000
+11111011111111111111110000010110
+11111011111111111110101111110111
+00110100001000010000000000110010
+01011001011000010000000000001000
+00110100000000010000000000001010
+11100000000000000000000000010001
+00101001011101010000000000001000
+11111011111111111110101111110001
+11001010101000010000100000000000
+01001100001000000000000000111100
+00101001011000010000000000000000
+01011100001110000000000000000011
+01011001011110000000000000000100
+11100000000000000000000000111000
+01011001011100110000000000000100
+11100000000000000000000000110110
+00101001100000010000000000000000
+00110100000000100000000000000000
+11111011111111111111110000000100
+10111001101000000000100000000000
+11111011111111111111110001011001
+00110100000000010000000000000010
+01011001011000010000000000000100
+11100000000000000000000000101110
+10111001101000000000100000000000
+11111011111111111111110001101010
+11100000000000000000000000010010
+10111010000000000000100000000000
+11111011111111111111110110111101
+00110100000000010000000000000100
+11100011111111111111111111111000
+00101001011000010000000001100000
+01000100001000000000000000100101
+00101001011000010000000001100100
+01000100001000000000000000100011
+00101001011000010000000000000000
+01011100001100110000000000001001
+00110100000000010000000000000101
+11100011111111111111111111110000
+10111010001000000000100000000000
+11111011111111111111110111110001
+00110100000000010000000000000110
+11100011111111111111111111101100
+00101001011000010000000011000000
+01000100001000000000000000011001
+10111001011000000000100000000000
+11111011111111111111111101101111
+01011001011100100000000000000100
+00101001011000010000000011101000
+00110100000000100000000000000001
+11100000000000000000000000010010
+00101001011000010000000000000000
+01011100001110000000000000000100
+10111001101000000000100000000000
+11111011111111111111110001001101
+01000100001000000000000000000111
+00101001011000010000000001100000
+01000100001000000000000000000101
+00101001011000010000000000000000
+01011100001100110000000000001010
+00101001011000010000000011000000
+01011100001000000000000000001000
+00101001011000010000000000001100
+00110100000000100000000000000000
+00110100001000010000000000000001
+01011001011000010000000000001100
+01011001011101000000000000000100
+00101001011000010000000011101000
+11111011111111111111111100001010
+10111010000000000000100000000000
+10111010110000000001000000000000
+10111001110000000001100000000000
+11111011111111111111110100111010
+00101001011000010000000001100000
+01000100001000000000000000011011
+10111010001000000000100000000000
+10111010110000000001000000000000
+10111001110000000001100000000000
+11111011111111111111110111111001
+00101001011000010000000000000100
+01011100001100100000000000010101
+00101001011000010000000000000000
+00110100000101010000000000000000
+01011100001100110000000000001100
+11100000000000000000000000001000
+00001010101000010000000001111100
+10111010110000000001000000000000
+10111001110000000001100000000000
+10110101011000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110111101101
+00110110101101010000000000000001
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001101011111111111110111
+00101001100000010000000000000000
+01001001110000010000000000000101
+10111010111000000000100000000000
+10111010110000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111010100101
+00101011011101010000000000000000
+01111000000000100000000000000010
+00101010101000010000000010000000
+10100000001000100000100000000000
+01000100001000001111111101111100
+00101001011000010000000000010000
+00110100001000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000000001
+11010000010000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111000100
+00101000001000100000000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000001000011011111110111100
+00111000011000111000111101110100
+01011000001000100000000000000000
+00101000011000010000000000000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000000000000000
+10111000011000001001000000000000
+11111011111111111010110111000101
+01111000000000010000000000000001
+00111000001000011100001010110100
+00101000001001000000000000000000
+01111000000000010000000000000001
+00111000001000011011111110101000
+01011000001001000000000000000000
+01111000000000010000000000000001
+00101000100001010000000000000000
+00111000001000011011111111000100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101011111110111100
+00000000101001100000000000010000
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001010001000
+00100000110001100000000000111111
+00000000101001010000000000011000
+01011000010001100000000000000000
+01111000000000100000000000000001
+00111000010000101100001010000000
+00100000101001010000000000000111
+01011000010001010000000000000000
+01111000000001010000000000000001
+00111000101001011011111111001000
+01011000101010110000000000000000
+01011000101000000000000000001100
+01011000100000000000000001000000
+01011000100000000000000001000100
+01011000100000000000000000000000
+01011000100000000000000000101000
+01011000100000000000000000100100
+01011000100000000000000000000100
+01111000000000110000000000000001
+01011000100000000000000000100000
+00110100000000100000001111101000
+00111000011000111000111100100100
+01011000100000100000000001001000
+00101000011000100000000000000000
+01011000001000000000000000011100
+01011000001000100000000000000000
+00110100000000010000000000000100
+01011101011000010000000000000100
+00110100000000010000000000000111
+01011000101000010000000000000100
+11100000000000000000000000000110
+00110100000000010000000000001001
+01011000101000010000000000000100
+00110100000000010000000000000011
+01011101011000010000000000000010
+10111010000000000011000000000000
+01111000000000010000000000000001
+10111000110000000001000000000000
+00111000001000011011111111100000
+01111000000011010000000000000001
+11111011111111111111110010011101
+00111001101011011100001010001000
+00101001101000110000000000000000
+01111000000000010000000000000001
+00111000001000011100000001010000
+10111010000000000001000000000000
+01111000000011110000000000000001
+01111000000011100000000000000001
+11111011111111111111110100011000
+00110100000011000000000000000000
+00111001111011111100001010000000
+00111001110011101011111111001000
+00110100000100110000000000000001
+11100000000000000000000000001100
+00001001100100010000000001111100
+00101001101001000000000000000000
+10111010000000000001000000000000
+10110101110100010000100000000000
+00110100100001000000000000000001
+10110100100011000001100000000000
+00110100001000010000000100000100
+10110101110100011000100000000000
+11111011111111111111110100001010
+00110101100011000000000000000001
+01011010001100110000000011111100
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001011001111111111110011
+00110100000000010000000000000010
+01011101011000010000000000000110
+01111000000000010000000000000001
+00111000001000011011111110111100
+00101000001000010000000000000000
+00110100000000100000000000001100
+01011000001000100000000000011100
+01111000000011100000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001110011101100001010001000
+00111001101011011011111111001000
+11100000000000000000000000001000
+00111101100000010000000000000101
+10111001100000000001000000000000
+10110101101000010000100000000000
+00110100001000010000000111110100
+00110100000000110000001000000000
+11111011111111111111110111101111
+00110101100011000000000000000001
+00101001110000100000000000000000
+01001000010011001111111111111000
+00110100000000010000000000000001
+01011101011000010000000000010111
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000000010
+01000100001000000000000000100001
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011011111111001000
+00111000100001001011111111100000
+01011000001001000000000001101000
+01111000000001000000000000000001
+00111000100001001100000001010000
+01011000001001000000000001101100
+01111000000000010000000000000001
+00111000001000011100001010000000
+00101000001001000000000000000000
+01111000000000010000000000000001
+00111000001000011100000000110000
+10110100010001000001000000000000
+10111010010000000001100000000000
+11111011111111111111101100110101
+01111000000000010000000000000001
+00111000001000011011111110101000
+00101000001000010000000000000000
+01111000000000100000000000000010
+11100000000000000000000000000011
+00101000001000110000000001111100
+01011011100000110000000000101100
+00101000001000110000000010000000
+10100000011000100001100000000000
+01000100011000001111111111111100
+00110100000000100000000000000001
+01011000001000100000000001100100
+00101000001000100000000000101000
+00111000010000100000000000000001
+01011000001000100000000000101000
+11111011111111111010110100111101
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111111001000
+00101000010000110000000000000100
+01100100001001000000000000000000
+01111100011000110000000000001000
+10111000100000110001100000000000
+01011100011000000000000000000110
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100010000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110011010011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100001000000000000000001000
+00110100001000011111111111111111
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111001000
+10110100001000100000100000000000
+00110100001000010000000100000100
+11111011111111111111110011101000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000101011111111001000
+01011100001000000000000000000100
+00101000010000010000000000000100
+01100100001000010000000000001000
+11000011101000000000000000000000
+00101000010001010000000000000100
+00110100000001000000000000001000
+00110100000000010000000000000000
+01011100101001000000000000000110
+00110100011000111111111111111111
+00001000011000110000000001111100
+10110100010000110001000000000000
+00101000010000010000000100111100
+01111100001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110100000000111111111111111111
+10111000010000000111100000000000
+01011100001000110000000000010110
+00110100000000010000000000000000
+01111000000011000000000000000001
+01111000000011010000000000000001
+11111011111111111111111000010001
+00110100000010110000000000000000
+00111001100011001100001010000000
+00111001101011011011111111001000
+00110100000011100000000000000100
+11100000000000000000000000001001
+00001001011000010000000001111100
+10110101101000010000100000000000
+00101000001000010000000011111100
+01011100001011100000000000000100
+00110101011000010000000000000001
+10111001111000000001000000000000
+11111011111111111111111000000101
+00110101011010110000000000000001
+00101001100000010000000000000000
+00110100001000011111111111111111
+01001000001010111111111111110110
+11100000000000000000000000000010
+11111011111111111111110111111111
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000010000000110100000000000
+10111000011000000110000000000000
+00111001011010111100000001010000
+01000100001000000000000000000111
+00110100001000011111111111111111
+00001000001010110000000001111100
+01111000000000010000000000000001
+00111000001000011011111111001000
+10110101011000010000100000000000
+00110100001010110000000100000100
+01000101101000000000000000001010
+00101001011000100000000001011100
+00110100000001000011111010000000
+00110100000000110000000000000000
+00010100010000010000000000011111
+11111000000000000000001100101000
+00111100001000010000000000010010
+00000000010001000000000000001110
+10111000001001000010000000000000
+01011001101001000000000000000000
+01000101100000000000000000001010
+00101001011000100000000001011000
+00110100000000110000000000000000
+00110100000001000011111010000000
+00010100010000010000000000011111
+11111000000000000000001100011110
+00111100001000010000000000010010
+00000000010000100000000000001110
+10111000001000100001000000000000
+01011001100000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+01111000000000010000000000000001
+00111101011000100000000000000101
+00111000001000011011111111001000
+10110100001000100000100000000000
+00101000001000100000001000001100
+10111000011000000110000000000000
+01001100010000000000000000000011
+00110100010000100100000000000000
+11100000000000000000000000000100
+00110100000000010011111111111111
+01001100001000100000000000000010
+00110100010000101100000000000000
+00010100010000010000000000011111
+00110100000001000011111010000000
+00110100000000110000000000000000
+11111000000000000000001011111101
+00111100001000010000000000010010
+00000000010001000000000000001110
+10111000001001000010000000000000
+01011001101001000000000000000000
+01000101100000000000000000001100
+01111000000000010000000000000001
+00111000001000011011111110001000
+00101000001000100000000000000000
+00111101011000110000000000000101
+01111000000000010000000000000001
+00111000001000011011111111001000
+10110100001000110000100000000000
+00101000001000010000000111111000
+10010100010000010000100000000000
+00100000001000010000000000000001
+01011001100000010000000000000000
+00111101011010110000000000000101
+01111000000000100000000000000001
+00111000010000101011111111001000
+10110100010010110001000000000000
+00101000010000010000001000010000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+01000100001000000000000000000101
+01111000000000110000000000000001
+00111000011000111100001010001000
+00101000011000110000000000000000
+01011000001000110000000000000000
+01000100010000000000000000000101
+01111000000000010000000000000001
+00111000001000011100001010000000
+00101000001000010000000000000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000001100
+01111000000000010000000000000001
+00111000001000011011111111001000
+00101000001000110000000000000100
+01111000000000100000000000000001
+00111000010000101001010010011100
+00111100011000110000000000000010
+10110100010000110001000000000000
+00101000010000110000000000000000
+00101000001000100000000000000100
+00110100000000010000000000001010
+01010100010000010000000000000010
+11100000000000000000000000000011
+01111000000000110000000000000001
+00111000011000111000110111100100
+01111000000000010000000000000001
+00111000001000011011111111001000
+00101000001000100000000000000000
+01001100000000100000000000001110
+00101000001000100000000000010000
+00101000001001000000000000000000
+00101000001001010000000001110100
+00101000001001100000000001100000
+00101000001001110000000011000000
+00101000001010000000000001001100
+00101000001010010000000010101100
+00101000001000010000000000001100
+01011011100010010000000000000100
+01011011100000010000000000001000
+01111000000000010000000000000001
+00111000001000011000110111110000
+11111011111111111110001111110101
+00101011100111010000000000001100
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011100000001010000
+11100000000000000000000000000111
+00110100001000011111111111111111
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111001000
+10110100001000100000100000000000
+00110100001000010000000100000100
+11111011111111111111110011000101
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+01111000000010110000000000000001
+10111000001000000110000000000000
+00111001101011011011111111001000
+00111001011010111011111110001000
+01000100010000000000000000001101
+00110100000000100000000000000001
+11111011111111111111100111011111
+00111101100000010000000000000101
+10110101101000010110100000000000
+00110101101000010000000111110100
+11111011111111111111110010111100
+00101001011000010000000000000000
+00110100000000100000000000000001
+10111100010011000110000000000000
+10111001100000010110000000000000
+01011001011011000000000000000000
+11100000000000000000000000001010
+00110100000000110000000000000001
+00101001011001000000000000000000
+10111100011000010001100000000000
+10100100011000000001100000000000
+10100000011001000001100000000000
+01011001011000110000000000000000
+00101001101000110000000011101000
+01000100001000110000000000000010
+11111011111111111111100111001100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111001000
+10110100010000010001000000000000
+00101000010000010000000011111100
+00101000010000110000000011111100
+00110100000000100000000000000100
+01111100001000010000000000000001
+01011100011000100000000000000010
+00111000001000010000000000000010
+11000011101000000000000000000000
+01001100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111111001000
+00101000001000010000000001001100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111001000
+01011100001000000000000000000011
+00101000010000010000000010101100
+11000011101000000000000000000000
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100010000010001000000000000
+00101000010000010000000100101000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110101000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011111111001000
+01011000001000100000000001001100
+00101000011000010000000000000000
+01011000001000100000000001000000
+11000011101000000000000000000000
+00100000001001000000000000001111
+00101000011000110000000000000000
+00111100100001000000000000010000
+00100000010001011111111111111111
+10111000101001000010000000000000
+01011000011001000000000001000100
+01111000000000110000000000000001
+00111000011000111011111111001000
+01011100001000000000000000000011
+01011000011000100000000010101100
+11000011101000000000000000000000
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100011000010001100000000000
+01011000011000100000000100101000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111111001000
+00101000001000100000000000000000
+00110100000000010000000000000001
+00110100000101000000000000000000
+01011100010000010000000000000101
+01111000000000010000000000000001
+00111000001000011100000000110000
+11111011111111111111101000000100
+10111000001000001010000000000000
+01111000000100010000000000000001
+01111000000010110000000000000001
+01111000000011100000000000000001
+00110100000011010000000000000000
+00110100000011000000000000000001
+00111010001100011100001010000000
+00111001011010111011111111001000
+00110100000011110000000000000001
+00111001110011101011111110101000
+00110100000100100000000000000010
+00110100000101100000000000000011
+00110100000101010000000000000100
+11100000000000000000000001000111
+00110101100100111111111111111111
+00001010011100000000000001111100
+10110101011100001000000000000000
+00101010000000010000000011111100
+01000100001011110000000000001111
+00101001110000010000000000000000
+10111101111011000001000000000000
+00101000001000010000000000100000
+00000000001000010000000000001000
+00100000001000010000000011111111
+10100000001000100000100000000000
+01011100001000000000000000001000
+10111001100000000000100000000000
+11111011111111111111111010010100
+10111001100000000000100000000000
+00110100000000100000000000000000
+11111011111111111111110010010101
+00110101101011010000000000000001
+01011010000011110000000011111100
+00001010011000010000000001111100
+10110101011000011000000000000000
+00101010000000100000000011111100
+01000100010100100000000000010100
+01001000010100100000000000000011
+01011100010011110000000000101101
+11100000000000000000000000000100
+01000100010101100000000000010111
+01011100010101010000000000101010
+11100000000000000000000000011110
+00101001011000010000000011000000
+01000100001000000000000000100111
+00101001110000010000000000000000
+10111101111011000001000000000000
+00101000001000010000000000100000
+00000000001000010000000000001000
+00100000001000010000000011111111
+10100000001000100000100000000000
+01000100001000000000000000100000
+10111001100000000000100000000000
+11111011111111111111111001101001
+01011010000100100000000011111100
+11100000000000000000000000011011
+00101010000000010000000100111100
+01000100001000000000000000011010
+00101001011000100000000000010100
+10111001100000000000100000000000
+11111011111111111111110010101111
+01011010000101100000000011111100
+11100000000000000000000000010100
+10110101011000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110000010000
+01011100001000000000000000010001
+10111001100000000000100000000000
+00110100000000100000000000000001
+11111011111111111111110001101110
+01011010000101010000000011111100
+11100000000000000000000000001011
+00101001011000010000000011000000
+01000100001000000000000000000011
+00101010000000010000000100111100
+01011100001000000000000000001000
+00001010011100110000000001111100
+10111001100000000000100000000000
+00110100000000100000000000000000
+10110101011100111001100000000000
+11111011111111111111110001100011
+01011010011011110000000011111100
+00110101101011010000000000000001
+00110101100011000000000000000001
+00101010001000010000000000000000
+01001000001011001111111110111001
+00101001011000110000000000000000
+01111000000000100000000000000001
+00111000010000101010110101110100
+01011000010000110000000000001100
+00101001011000110000000000010000
+00101000010000010000000000001000
+01111101101011010000000000000000
+01011000010000110000000000010000
+00101001011000110000000000000100
+00110100001000010000000000000010
+10110101101101001010000000000000
+01011000010000110000000000010100
+00101001011000110000000001110100
+01011000010000010000000000001000
+01111110100000010000000000000000
+01011000010000110000000000011000
+00101001011000110000000001100000
+01011000010000110000000000011100
+00101001011000110000000011000000
+01011000010000110000000000100000
+00101001011000110000000001001100
+01011000010000110000000000100100
+00101001011000110000000010101100
+01011000010000110000000000101000
+00101001011000110000000000001100
+01011000010000110000000000101100
+00101011100111010000000000000100
+00101011100010110000000000110100
+00101011100011000000000000110000
+00101011100011010000000000101100
+00101011100011100000000000101000
+00101011100011110000000000100100
+00101011100100000000000000100000
+00101011100100010000000000011100
+00101011100100100000000000011000
+00101011100100110000000000010100
+00101011100101000000000000010000
+00101011100101010000000000001100
+00101011100101100000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+11111011111111111010101101000011
+00110100000000100000000000000000
+00110100000000011111111111111111
+11111011111111111111111101001011
+00110100000000010000000000000001
+11111011111111111111110001000001
+00111000000010111111111111111111
+10111001011000000001000000000000
+00110100000000011111111111111111
+11111011111111111111111101000101
+00110100000000010000000000000001
+11111011111111111111110000111011
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111101000000
+00110100000000010000000000000000
+11111011111111111111110000110110
+10111001011000000001000000000000
+00110100000000010000000000000000
+11111011111111111111111100111011
+00110100000000010000000000000000
+11111011111111111111110000110001
+00110100000000010000000000000010
+11111011111111111111110000101111
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001001000000000000010100
+10111000001000000001100000000000
+10111000010000000011000000000000
+01000100100000000000000000010101
+00101000001001010000000000010000
+00100000101001010000000000000010
+01011100101000000000000000000111
+10110100100001100010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100011010110000000000110000
+10110100100001100001000000000000
+10111001011000000000100000000000
+00110100000000110000000001000000
+11111000000000000000001001110001
+10111001011000000010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101000001001010000000000010000
+00100000101001110000000000000100
+01011100111001001111111111101011
+00101000001001010000000000011100
+00110100000001000000000000000000
+01000100101001111111111111101011
+00110100001010110000000000110000
+00110100000001000000000001000000
+10111001011000000001100000000000
+11011000101000000000000000000000
+10111001011000000010000000000000
+11100011111111111111111111110000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000010100
+10111000001000000101100000000000
+01000100010000000000000000010011
+00101001011000010000000000001100
+10110100010000010001000000000000
+00101000010000110000000000000000
+01111000000001000000000000000001
+00111000100001001000111100111000
+00101000100000100000000000000000
+00110100000000011111111111101100
+01011100011000100000000000000111
+01111000000000100000000000000001
+00111000010000101011111110001100
+00101000010000110000000000000000
+00110100000000010000000000000000
+01011000010010110000000000000000
+01011001011000110000000001111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001000110000000000010000
+00100000011000110000000000000100
+01011100011000101111111111101100
+00101000001001010000000000011100
+00101000001000100000000000001100
+00110111100000110000000000001100
+00110100000001000000000000000100
+11011000101000000000000000000000
+00101011100000110000000000001100
+11100011111111111111111111101000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01000100010000000000000001000111
+00101000001000100000000000001100
+01011000001000000000000010000000
+01011000001000000000000010110000
+01011000001000100000000010010000
+00110100000011000000000000000000
+10111001011000000000100000000000
+11111011111111111111111110101010
+01011001011000010000000000101000
+01000000001000100000000000111111
+01011100010000000000000000000110
+01111000000001000000000000000001
+00111000100001001000111100111000
+00101000001000110000000000000000
+00101000100000100000000000000000
+01000100011000100000000001011101
+00110100000000010000000000000000
+01000101100000000000000000110000
+00110101100000111111111111111111
+00110100011011000000000000101000
+10110101100011000000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000100000000000000000
+01011100010000000000000000001111
+00110100000000010000000000000000
+01000100011000100000000000100111
+00110100011000100000000000100111
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+11100000000000000000000000000010
+01000100011000010000000001000100
+00101000010000010000000000000000
+00110100011000111111111111111111
+00110100010000101111111111111100
+01000100001000001111111111111100
+01011001011000110000000010110000
+00110100011011000000000000101000
+00110100011011010000000000100100
+10110101101011010110100000000000
+10110101101011010110100000000000
+10110101011011010110100000000000
+00101001101000100000000000000000
+10111001011000000000100000000000
+10110101100011000110000000000000
+11111011111111111111111110000011
+10110101100011000110000000000000
+10110101011011000001000000000000
+00101001101001000000000000000000
+00101000010000110000000000000000
+00101001011011000000000010110000
+00110100100001000000000001000000
+00110100011000111111111111111111
+01011001011000010000000000101000
+01011001101001000000000000000000
+01011000010000110000000000000000
+00110101100000110000000000100000
+10110100011000110001100000000000
+10110100011000110001100000000000
+10110101011000110001100000000000
+00101000001001000000000000001100
+00101000011000100000000000000000
+10110100010001000001000000000000
+01011001011000100000000001110100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000010000000000101000
+00101001011000110000000010110000
+00110100000001010000000000000010
+01000000001001000000000000111111
+11101100101000110010100000000000
+01100100100001000000000000000010
+10100000100001010010000000000000
+01000100100000101111111111000101
+00110100011000100000000000100000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00101000010001010000000000000000
+00110100011001000000000000100101
+00101000001000100000000000000100
+10110100100001000010000000000000
+10110100100001000010000000000000
+10110100101000100001000000000000
+10110101011001000010000000000000
+01011000100000100000000000000000
+00101000001001000000000000001100
+00110100011000010000000000100001
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+10110100100001010010100000000000
+00110100011011000000000000000001
+01011000001001010000000000000000
+11100011111111111111111110100011
+00110100000000010000000000000000
+01011001011000000000000010110000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110101100000100000000000100100
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001100000000000
+00101100001001010000000000000100
+00101000011001000000000000000000
+00110101100000100000000000101000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00110100101001011111111111111111
+00110100100001000000000001000000
+01011000010001010000000000000000
+01011000011001000000000000000000
+01011001011011000000000010110000
+11100011111111111111111110111110
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00110100000000100000000000000001
+10111000001000000101100000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+11111011111111111111111101110011
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111111111101110000
+10111000001000000010100000000000
+01000100001000000000000000011110
+00101000101000010000000000011000
+01011100001011001111111111111010
+00101000101000010000000000011100
+01011100001011101111111111111000
+00101000101000010000000000100000
+01011100001011011111111111110110
+00101001011000010000000010110000
+01011001011001010000000000101000
+00101000101000100000000000001100
+00110100001000010000000000100000
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000110000000000000000
+00110100000000010000000000000000
+10110100010000110001100000000000
+01011001011000110000000001110100
+00101000101000110000000000010100
+01011001011000000000000001111000
+00110100011000110000000000000001
+11001000011000100001000000000000
+01011001011000100000000001110000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000000011111111111111110
+11100011111111111111111111111000
+01011000001000000000000000101000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+11111011111111111111111111001001
+01001100001000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101001011000010000000001110100
+01011001011000000000000000101000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000100000000001110100
+10111000011000000000100000000000
+10111001101000000001100000000000
+10110101100000100001000000000000
+10110100100000100001000000000000
+11111000000000000000000101100000
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000011100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+10111000011000000001000000000000
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000100110100
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000100000
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110100000000011111111111111110
+01000100100000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+00110100000000100000000011111111
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000110000110
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001000000000000100100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+11100011111111111111111111101110
+00100000010001011111111111111111
+00000000010001100000000000010000
+00100000100010001111111111111111
+00000000100010010000000000010000
+10001001000001010011100000000000
+10001001000001100100000000000000
+10001001001001010010100000000000
+00000000111010100000000000010000
+10001001001001100011000000000000
+10110101000001010010100000000000
+10110100101010100010100000000000
+01010000101010000000000000000011
+01111000000010000000000000000001
+10110100110010000011000000000000
+10001000010000110001000000000000
+10001000100000010010000000000000
+00000000101000010000000000010000
+00111100101001010000000000010000
+10110100110000010011000000000000
+00100000111001111111111111111111
+10110100010001000000100000000000
+10110100001001100000100000000000
+10110100101001110001000000000000
+11000011101000000000000000000000
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+11001000000001000001000000000000
+00110100000000110000000000000000
+10000000001000100001000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+10111100001001000010000000000000
+10000000010000110001000000000000
+10000000001000110001100000000000
+10111000100000100001000000000000
+10111000011000000000100000000000
+11100011111111111111111111111010
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+11001000000001000000100000000000
+00110100000000110000000000000000
+10111100010000010000100000000000
+10111000011000000001000000000000
+11000011101000000000000000000000
+10000000010001000010000000000000
+10111100001000110000100000000000
+10111100010000110001100000000000
+10111000100000010000100000000000
+10111000011000000001000000000000
+11100011111111111111111111111010
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+00010100001000110000000000011111
+11001000000001000001000000000000
+10010100001000100001000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+10111100001001000010000000000000
+10000000010000110001000000000000
+10010100001000110001100000000000
+10111000100000100001000000000000
+10111000011000000000100000000000
+11100011111111111111111111111010
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000100010000000000000000100010
+10111000010000010010000000000000
+00110100000000110000000000001111
+01010100100000110000000000001011
+01111000000000110000000000000001
+00111000011000111001010011001000
+00111100001000010000000000000100
+10110100011000100001000000000000
+10110100010000010000100000000000
+01000000001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000010110000000000000000
+01001100001000000000000000000011
+11001000000000010000100000000000
+00110100000010110000000000000001
+01001100010000000000000000000011
+11001000000000100001000000000000
+00011001011010110000000000000001
+10010000110000000001100000000000
+00100000011000110000000000000010
+01000100011000000000000000001000
+10001100001000100000100000000000
+01000101011000000000000000000010
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000110000000000000000
+11111000000000000000000001001010
+11100011111111111111111111111000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000100010000000000000000010101
+00110100000010110000000000000000
+01001100001000000000000000000011
+11001000000000010000100000000000
+00110100000010110000000000000001
+00010100010000110000000000011111
+10010000110000000010000000000000
+10011000011000100001000000000000
+00100000100001000000000000000010
+11001000010000110001000000000000
+01000100100000000000000000001000
+11000100001000100000100000000000
+01000101011000000000000000000010
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000110000000000000001
+11111000000000000000000000101010
+11100011111111111111111111111000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000000
+11111000000000000000000000011100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000001
+11111000000000000000000000001100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+11110100001000100010000000000000
+01000100100000000000000000011000
+00110100000001000000000000000001
+01001100010000000000000000001011
+00110100000001010000000000000000
+01010100010000010000000000000011
+11001000001000100000100000000000
+10111000101001000010100000000000
+00000000100001000000000000000001
+00000000010000100000000000000001
+01011100100000001111111111111011
+01011100011000000000000000000010
+10111000101000000000100000000000
+11000011101000000000000000000000
+00111100010000100000000000000001
+00111100100001000000000000000001
+11110100001000100010100000000000
+01111100100001100000000000000000
+10100000110001010010100000000000
+01000100101000000000000000000010
+01001100010000001111111111111010
+00110100000001010000000000000000
+01000100100000001111111111110101
+00110100000001010000000000000000
+11100011111111111111111111101101
+00110100000001000000000000000001
+00110100000001010000000000000000
+11100011111111111111111111101010
+00010100001000100000000000011111
+10011000010000010000100000000000
+11001000001000100000100000000000
+11000011101000000000000000000000
+00110100000001100000000000000011
+10111000001000000010000000000000
+10111000010000000010100000000000
+01010000110000110000000000001100
+10111000010000010011000000000000
+00100000110001100000000000000011
+01011100110000000000000000001011
+00110100000000010000000000000011
+00101000100001100000000000000000
+00101000101000100000000000000000
+01011100110000100000000000000101
+00110100011000111111111111111100
+00110100100001000000000000000100
+00110100101001010000000000000100
+01010100011000011111111111111010
+00110100000000010000000000000000
+01000100011000000000000000001110
+01000000100001100000000000000000
+01000000101000010000000000000000
+00110100011000101111111111111111
+01000100110000010000000000000110
+11100000000000000000000000001010
+01000000100001100000000000000000
+01000000101000010000000000000000
+00110100010000101111111111111111
+01011100110000010000000000000110
+00110100100001000000000000000001
+00110100101001010000000000000001
+01011100010000001111111111111010
+00110100000000010000000000000000
+11000011101000000000000000000000
+11001000110000010000100000000000
+11000011101000000000000000000000
+00110100000001000000000000001111
+10111000001000000011100000000000
+10111000010000000011000000000000
+01010000100000110000000000101101
+10111000010000010010000000000000
+00100000100001000000000000000011
+01011100100000000000000000101011
+10111000010000000010000000000000
+10111000001000000010100000000000
+10111000011000000011000000000000
+00110100000001110000000000001111
+00101000100010000000000000000000
+00110100110001101111111111110000
+01011000101010000000000000000000
+00101000100010000000000000000100
+01011000101010000000000000000100
+00101000100010000000000000001000
+01011000101010000000000000001000
+00101000100010000000000000001100
+00110100100001000000000000010000
+01011000101010000000000000001100
+00110100101001010000000000010000
+01010100110001111111111111110101
+00110100011000111111111111110000
+00000000011001100000000000000100
+00100000011000110000000000001111
+00110100110001100000000000000001
+00111100110001100000000000000100
+10110100001001100011100000000000
+10110100010001100011000000000000
+00110100000000100000000000000011
+01010000010000110000000000010001
+00110100000000100000000000000000
+00110100000010000000000000000011
+10110100110000100010000000000000
+00101000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000100
+01011000100001010000000000000000
+11001000011000100010000000000000
+01010100100010001111111111111010
+00110100011000111111111111111100
+00000000011000100000000000000010
+00100000011000110000000000000011
+00110100010000100000000000000001
+00111100010000100000000000000010
+10110100111000100011100000000000
+10110100110000100011000000000000
+01000100011000000000000000001000
+00110100000000100000000000000000
+10110100110000100010000000000000
+01000000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000001
+00110000100001010000000000000000
+01011100010000111111111111111011
+11000011101000000000000000000000
+10111000001000000011100000000000
+10111000010000000011000000000000
+01010000010000010000000000001100
+10110100010000110010000000000000
+01010000001001000000000000001010
+01000100011000000000000000111111
+10110100001000110001000000000000
+00110100100001001111111111111111
+01000000100001010000000000000000
+00110100010000101111111111111111
+00110100011000111111111111111111
+00110000010001010000000000000000
+01011100011000001111111111111011
+11000011101000000000000000000000
+00110100000001000000000000001111
+01010000100000110000000000101101
+10111000010000010010000000000000
+00100000100001000000000000000011
+01011100100000000000000000101011
+10111000010000000010000000000000
+10111000001000000010100000000000
+10111000011000000011000000000000
+00110100000001110000000000001111
+00101000100010000000000000000000
+00110100110001101111111111110000
+01011000101010000000000000000000
+00101000100010000000000000000100
+01011000101010000000000000000100
+00101000100010000000000000001000
+01011000101010000000000000001000
+00101000100010000000000000001100
+00110100100001000000000000010000
+01011000101010000000000000001100
+00110100101001010000000000010000
+01010100110001111111111111110101
+00110100011000111111111111110000
+00000000011001100000000000000100
+00100000011000110000000000001111
+00110100110001100000000000000001
+00111100110001100000000000000100
+10110100001001100011100000000000
+10110100010001100011000000000000
+00110100000000100000000000000011
+01010000010000110000000000010001
+00110100000000100000000000000000
+00110100000010000000000000000011
+10110100110000100010000000000000
+00101000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000100
+01011000100001010000000000000000
+11001000011000100010000000000000
+01010100100010001111111111111010
+00110100011000111111111111111100
+00000000011000100000000000000010
+00100000011000110000000000000011
+00110100010000100000000000000001
+00111100010000100000000000000010
+10110100111000100011100000000000
+10110100110000100011000000000000
+01000100011000000000000000001000
+00110100000000100000000000000000
+10110100110000100010000000000000
+01000000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000001
+00110000100001010000000000000000
+01011100010000111111111111111011
+11000011101000000000000000000000
+00100000001001010000000000000011
+10111000001000000010000000000000
+01000100101000000000000000001011
+01000100011000000000000000101100
+00110100011000111111111111111111
+00100000010001100000000011111111
+11100000000000000000000000000011
+01000100011000000000000000101000
+00110100011000111111111111111111
+00110000100001100000000000000000
+00110100100001000000000000000001
+00100000100001010000000000000011
+01011100101000001111111111111011
+00110100000001010000000000000011
+01010000101000110000000000011010
+00100000010001010000000011111111
+00111100101001100000000000001000
+00110100000010100000000000001111
+10111000110001010010100000000000
+00111100101001100000000000010000
+10111000100000000100000000000000
+10111000110001010011000000000000
+10111000011000000011100000000000
+10111000100000000010100000000000
+00110100000010010000000000001111
+01010100011010100000000000010111
+00110100000001000000000000000000
+00110100000001110000000000000011
+10110101000001000010100000000000
+00110100100001000000000000000100
+01011000101001100000000000000000
+11001000011001000010100000000000
+01010100101001111111111111111100
+00110100011000111111111111111100
+00000000011001000000000000000010
+00100000011000110000000000000011
+00110100100001000000000000000001
+00111100100001000000000000000010
+10110101000001000100000000000000
+10111001000000000010000000000000
+01000100011000000000000000000111
+00100000010000100000000011111111
+00110100000001010000000000000000
+10110100100001010011000000000000
+00110000110000100000000000000000
+00110100101001010000000000000001
+01011100011001011111111111111101
+11000011101000000000000000000000
+01011000101001100000000000000000
+01011000101001100000000000000100
+01011000101001100000000000001000
+01011000101001100000000000001100
+00110100111001111111111111110000
+00110100101001010000000000010000
+01010100111010011111111111111010
+00110100011000111111111111110000
+00000000011010000000000000000100
+00100000011000110000000000001111
+00110101000010000000000000000001
+00111101000010000000000000000100
+10110100100010000100000000000000
+00110100000001000000000000000011
+01010100011001001111111111011100
+10111001000000000010000000000000
+11100011111111111111111111101000
+01111000000000110000000000000001
+00111000011000111010110101110000
+00101000011001110000000000000000
+10111000001000000100100000000000
+00110100000000110000000000000000
+00110100000001100000000000000001
+11100000000000000000000000001001
+01000000100001000000000000000000
+10110100111001000100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01000101000001100000000000010010
+11001000101001000000100000000000
+01011100001000000000000000010011
+01000100100000010000000000010010
+10110101001000110010100000000000
+01000000101001010000000000000000
+10110100010000110010000000000000
+00110100011000110000000000000001
+10110100111001010100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01011101000001101111111111110001
+01000000100001000000000000000000
+00110100101001010000000000100000
+10110100111001000100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01011101000001101111111111110000
+00110100100001000000000000100000
+11001000101001000000100000000000
+01000100001000001111111111101111
+11000011101000000000000000000000
+10111000010000010001100000000000
+00100000011000110000000000000011
+01011100011000000000000000011101
+10111000001000000010000000000000
+00101000010000110000000000000000
+00101000001000010000000000000000
+01011100001000110000000000011000
+01111000000000110000000000000001
+00111000011000111001010111001000
+00101000011001110000000000000000
+01111000000000110000000000000001
+00111000011000111001010111001100
+00101000011001100000000000000000
+10100100001000000001100000000000
+10110100001001110000100000000000
+10100000001000110001100000000000
+10100000011001100001100000000000
+00110100000000010000000000000000
+01000100011000000000000000000011
+11100000000000000000000000011100
+01011100011000000000000000011001
+00110100100001000000000000000100
+00101000100000010000000000000000
+00110100010000100000000000000100
+00101000010010000000000000000000
+10110100001001110010100000000000
+10100100001000000001100000000000
+10100000101000110001100000000000
+10100000011001100001100000000000
+01000100001010001111111111110111
+10111000100000000000100000000000
+01000000001000110000000000000000
+01011100011000000000000000000110
+11100000000000000000000000001001
+00110100001000010000000000000001
+01000000001000110000000000000000
+00110100010000100000000000000001
+01000100011000000000000000000101
+01000000010001000000000000000000
+01000100011001001111111111111011
+11001000011001000000100000000000
+11000011101000000000000000000000
+01000000010001000000000000000000
+11001000011001000000100000000000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+10111000010000010010100000000000
+00100000101001010000000000000011
+10111000010000000011100000000000
+10111000001000000010000000000000
+01011100101000000000000000011000
+01111000000001000000000000000001
+00111000100001001001010111001000
+00101000010000110000000000000000
+00101000100010000000000000000000
+01111000000001000000000000000001
+00111000100001001001010111001100
+00101000100001110000000000000000
+10100100011000000011000000000000
+10110100011010000010000000000000
+10100000110001000011000000000000
+10100000110001110011000000000000
+10111000001000000010000000000000
+01011100110001010000000000001010
+01011000100000110000000000000000
+00110100010000100000000000000100
+00101000010000110000000000000000
+00110100100001000000000000000100
+10100100011000000011000000000000
+10110100011010000010100000000000
+10100000110001010010100000000000
+10100000101001110010100000000000
+01000100101000001111111111111000
+10111000010000000011100000000000
+00110100000000110000000000000000
+10110100111000110010100000000000
+01000000101001010000000000000000
+10110100100000110011000000000000
+00110100011000110000000000000001
+00110000110001010000000000000000
+01011100101000001111111111111011
+11000011101000000000000000000000
+00100000001000100000000000000011
+01000100010000000000000000101100
+01000000001000110000000000000000
+00110100000000100000000000000000
+01000100011000000000000000100111
+10111000001000000001000000000000
+11100000000000000000000000000011
+01000000010000110000000000000000
+01000100011000000000000000100010
+00110100010000100000000000000001
+00100000010000110000000000000011
+01011100011000001111111111111100
+01111000000001000000000000000001
+00111000100001001001010111001000
+00101000010000110000000000000000
+00101000100001100000000000000000
+01111000000001000000000000000001
+00111000100001001001010111001100
+00101000100001010000000000000000
+10100100011000000010000000000000
+10110100011001100001100000000000
+10100000011001000001100000000000
+10100000011001010001100000000000
+01011100011000000000000000010001
+00110100010000100000000000000100
+00101000010000110000000000000000
+10110100011001100010000000000000
+10100100011000000001100000000000
+10100000100000110001100000000000
+10100000011001010001100000000000
+01011100011000000000000000001010
+00110100010000100000000000000100
+00101000010000110000000000000000
+10110100011001100010000000000000
+10100100011000000001100000000000
+10100000100000110001100000000000
+10100000011001010001100000000000
+01000100011000001111111111110011
+11100000000000000000000000000010
+00110100010000100000000000000001
+01000000010000110000000000000000
+01011100011000001111111111111110
+11001000010000010001000000000000
+10111000010000000000100000000000
+11000011101000000000000000000000
+10111000001000000001000000000000
+11100011111111111111111111011110
+00110100000001100000000000000000
+01000100011000000000000000010111
+10111000010000010011100000000000
+00100000111001110000000000000011
+00110100011001001111111111111111
+01000100111000000000000000010101
+01000000001000110000000000000000
+01000000010001010000000000000000
+01011100011001010000000000001111
+00110100000001100000000000000000
+01000100100000000000000000001110
+00110100001000010000000000000001
+00110100010000100000000000000001
+01011100011000000000000000000100
+11100000000000000000000000001010
+01000100100000000000000000110011
+01000100011000000000000000110010
+01000000001000110000000000000000
+01000000010001010000000000000000
+00110100100001001111111111111111
+00110100001000010000000000000001
+00110100010000100000000000000001
+01000100011001011111111111111001
+11001000011001010011000000000000
+10111000110000000000100000000000
+11000011101000000000000000000000
+10111000001000000010100000000000
+00110100000000010000000000000011
+10111000010000000010000000000000
+01010000001000110000000000101000
+00101000101000010000000000000000
+00101000010000100000000000000000
+01011100001000100000000000100101
+00110100011000111111111111111100
+10111000111000000011000000000000
+01000100011000001111111111110101
+01111000000000100000000000000001
+00111000010000101001010111001000
+00101000010010010000000000000000
+01111000000000100000000000000001
+00111000010000101001010111001100
+00101000010010000000000000000000
+10100100001000000001000000000000
+10110100001010010000100000000000
+10100000001000100000100000000000
+10100000001010000000100000000000
+00110100000001110000000000000011
+01011100001000001111111111101001
+00110100101001010000000000000100
+00110100100001000000000000000100
+01010100011001110000000000000110
+10111000101000000000100000000000
+10111000100000000001000000000000
+01000100011000000000000000010100
+00110100011001001111111111111111
+11100011111111111111111111001111
+00101000101000010000000000000000
+00101000100010100000000000000000
+10110100001010010011000000000000
+10100100001000000001000000000000
+10100000110000100001000000000000
+10100000010010000001000000000000
+01011100001010100000000000000111
+00110100011000111111111111111100
+01000100011000000000000000000010
+01000100010000001111111111101111
+00110100000001100000000000000000
+10111000110000000000100000000000
+11000011101000000000000000000000
+10111000100000000001000000000000
+10111000101000000000100000000000
+00110100011001001111111111111111
+11100011111111111111111110111110
+01000000101000110000000000000000
+01000000100001010000000000000000
+11001000011001010011000000000000
+11100011111111111111111111001100
+10111000010000010010000000000000
+00100000100001000000000000000011
+01110100011001010000000000000011
+01100100100001000000000000000000
+10111000010000000011000000000000
+10100000100001010010000000000000
+10111000001000000010100000000000
+01000100100000000000000000010101
+01111000000001000000000000000001
+00111000100001001001010111001000
+00101000100010010000000000000000
+01111000000001000000000000000001
+00111000100001001001010111001100
+00101000100010000000000000000000
+00110100000010100000000000000011
+11100000000000000000000000000110
+01011000101001000000000000000000
+00110100011000111111111111111100
+00110100101001010000000000000100
+00110100010000100000000000000100
+01010001010000110000000000000111
+00101000010001000000000000000000
+10100100100000000011100000000000
+10110100100010010011000000000000
+10100000111001100011000000000000
+10100000110010000011000000000000
+01000100110000001111111111110110
+10111000010000000011000000000000
+01000100011000000000000000010100
+01000000110000100000000000000000
+00110100011000111111111111111111
+00110100101001000000000000000001
+00110000101000100000000000000000
+01000100010000000000000000001001
+00110100110000100000000000000001
+01000100011000000000000000001110
+01000000010001010000000000000000
+00110100011000111111111111111111
+00110100010000100000000000000001
+00110000100001010000000000000000
+00110100100001000000000000000001
+01011100101000001111111111111010
+00110100000000100000000000000000
+01000100011000000000000000000111
+10110100100000100010100000000000
+00110000101000000000000000000000
+00110100010000100000000000000001
+01011100011000101111111111111101
+11000011101000000000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110100000000110000000000000000
+01000100010000000000000000001100
+01000000001001000000000000000000
+01000100100000000000000000001010
+00110100010000101111111111111111
+10111000001000000001100000000000
+11100000000000000000000000000100
+01000000011001000000000000000000
+00110100010000101111111111111111
+01000100100000000000000000000011
+00110100011000110000000000000001
+01011100010000001111111111111100
+11001000011000010001100000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+01010111010100100010000001000011
+01101111011100100110010100111010
+00100000011100110111010001100001
+01110010011101000110100101101110
+01100111001000000111010101110000
+00101110001011100010111000001010
+00000000000000000000000000000000
+01010101011011100110000101100010
+01101100011001010010000001110100
+01101111001000000110010001100101
+01110100011001010111001001101101
+01101001011011100110010100100000
+01001101010000010100001100100000
+01100001011001000110010001110010
+01100101011100110111001100001010
+00000000000000000000000000000000
+01001100011011110110001101100001
+01101100001000000100110101000001
+01000011001000000110000101100100
+01100100011100100110010101110011
+01110011001110100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00001010000000000000000000000000
+01001110011001010111011100100000
+01101101011000010111100000100000
+01110010011101010110111000100000
+01110100011010010110110101100101
+00100000011001100110111101110010
+00100000011000010010000001110100
+01100001011100110110101100100000
+00100101011100110010110000100000
+01101111011011000110010000100000
+00100101011011000110010000101100
+00100000011011100110010101110111
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110100011000010111001101101011
+00100000001001010111001100101100
+00100000011100100111010101101110
+00100000011001100110111101110010
+00100000001001010110010000100000
+01101101011100110000101000000000
+01110011011100000110110001101100
+00101101011000100110100000000000
+01110011011010000110010101101100
+01101100001010110110011101110101
+01101001000000000000000000000000
+01110000011101000111000000000000
+01110101011100000111010001101001
+01101101011001010000000000000000
+01100011011010000110010101100011
+01101011001011010110110001101001
+01101110011010110000000000000000
+01101001011001000110110001100101
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00101101001100010010110100100101
+01110011001110100010000000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00111010001000000000000000000000
+01000101010011100101010001000101
+01010010001000000010010101110011
+00101100001000000111000001100001
+01100011011010110110010101110100
+00100000011011000110010101101110
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01110010011001010110010101101110
+01110100011001010111001000100000
+01101001011011100010000000100101
+01101001001000000110110101110011
+00001010000000000000000000000000
+01001100010001010100000101010110
+01000101001000000010010101110011
+00100000001010000110111001100101
+01111000011101000011101000100000
+00100101001100110110100100101001
+00001010000010100000000000000000
+01010010010001010100001101010110
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+00111001011001000010111000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00100000001010000111010001111001
+01110000011001010010000000100101
+01111000001011000010000000100101
+01110011001010010000101000000000
+01100110011100110110110100111010
+00100000010101010110111001101011
+01101110011011110111011101101110
+00100000011100110111010001100001
+01110100011001010010000001100110
+01101111011100100010000001110000
+01101111011100100111010000100000
+00100101011100110000101000000000
+01010111011100100110111101101110
+01100111001000000110010001101111
+01101101011000010110100101101110
+00100000001001010110100100111010
+00100000011001000110100101110011
+01100011011000010111001001100100
+00001010000000000000000000000000
+01000001011011000111010001100101
+01110010011011100110000101110100
+01100101001000000110110101100001
+01110011011101000110010101110010
+00111010001000000110010001101001
+01110011011000110110000101110010
+01100100000010100000000000000000
+01001100011011110110111101110000
+01101001011011100110011100100000
+01100110011100100110000101101101
+01100101001110100010000001100100
+01101001011100110110001101100001
+01110010011001000000101000000000
+01100110011100110110110100100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+01000101011100100111001001101111
+01110010001000000010010101101001
+00100000011010010110111000100000
+00100101011100110000101000000000
+01110000011100000111001101101001
+00000000000000000000000000000000
+00100101011100110010110100100101
+01101001001011010010010101110011
+00111010001000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010001000000111000001100001
+01110010011100110110100101101110
+01100111001000000010001000100101
+01110011001000100000101000000000
+01100100011010010110000101100111
+00101101011000110110111101101110
+01100110011010010110011100000000
+01100100011010010110000101100111
+00101101011001010111100001110100
+01100101011011100111001101101001
+01101111011011100000000000000000
+01100100011010010110000101100111
+00101101011000100110110101100011
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011100110110010101110010
+01110110011011110000000000000000
+01100100011010010110000101100111
+00101101011001100111001001100001
+01101101011001010111001100000000
+01100100011010010110000101100111
+00101101011101000110100101101101
+01100101000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00000000000000000000000000000000
+01101110011001010111011100100000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+00100101011010010000101000000000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100101011110000111000001101001
+01110010011001010110010000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010010010001010101000101010101
+01000101010100110101010000000000
+01010011010110010100111001000011
+01011111010100110100010101001110
+01000100000000000000000000000000
+01000001010011100100111001011111
+01010010010001010100001101000101
+01001001010100000101010000000000
+01000001010011100100111001011111
+01010011010001010100111001000100
+00000000000000000000000000000000
+01000110010000010101010101001100
+01010100000000000000000000000000
+01010001010101010100000101001100
+00000000000000000000000000000000
+01110011011110010110111001100011
+00000000000000000000000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110001000000000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100010000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110011011100000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000001011111
+01100110011011110110110001101100
+01101111011101110101111101110101
+01110000000000000000000000000000
+01100001011011100110111001101111
+01110101011011100110001101100101
+00000000000000000000000000000000
+01110011011010010110011101101110
+01100001011011000110100101101110
+01100111000000000000000000000000
+01101101011000010110111001100001
+01100111011001010110110101100101
+01101110011101000000000000000000
+01010000010100000101001101101001
+00100000011001100110111101110010
+00100000010101110101001001010000
+01000011001011100010000001000011
+01101111011011010110110101101001
+01110100001000000010010101110011
+00101100001000000110001001110101
+01101001011011000111010000100000
+01101111011011100010000001000001
+01110000011100100010000000100000
+00110100001000000011001000110000
+00110001001110000000101000000000
+01110000011100000111001101101001
+00101101011101100011001000110000
+00110001001101100010111000110001
+00110010001011010011100000111001
+00101101011001110110001101100010
+00110101001110010011001100110100
+01100101000000000000000000000000
+01010000010101000101000000100000
+01110011011101000110000101110010
+01110100000010100000000000000000
+01010000010101000101000000100000
+01110011011101000110111101110000
+00001010000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000000000
+00001010010011000110111101100011
+01101011001000000111010001101001
+01101101011001010110111101110101
+01110100001011100000000000000000
+00101110000000000000000000000000
+01110111011100100011000100000000
+00100000011010010110111001110110
+01100001011011000110100101100100
+00000000000000000000000000000000
+00100101011100110101010001001001
+01001101010001010011101000100000
+00101000001001010110110001101001
+00100000001011010010000000110000
+01111000001001010110110001111000
+00101001001000000010010101101100
+01101001001011100010010100110000
+00110110011011000110100100100101
+01110011000010100000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000000010100000000000000000
+00100101011100110010010101110011
+00100101011100110010000000101000
+01110011011010010111101001100101
+00100000001001010110100100101001
+00001010000000000000000000000000
+00100101011100110010010101110011
+00000000000000000000000000000000
+00100101001100000011001001111000
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000001110101
+01101110011100110111010101110000
+01110000011011110111001001110100
+01100101011001000010000000101000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000000100101
+01101001001000000010100001110100
+01111001011100000110010100100000
+00100101011010010010110000100000
+01101100011001010110111000100000
+00100101011010010010110000100000
+01100100011011110110110101100001
+01101001011011100010000000100101
+01101001001010010000101000000000
+00100101011100110100011001001100
+01000001010001110101001100111010
+00100000001100000111100000100101
+00110000001101000111100000100000
+00101000011000110110111101110010
+01110010011001010110001101110100
+01101001011011110110111000100000
+00110000011110000010010100110000
+00111000011110000011101000100101
+00110000001110000111100000100000
+00100101001100000011100001110101
+00101001000010100000000000000000
+01010000010011110101001001010100
+00111010001000000000000000000000
+00100101011100110101001001000101
+01010011010101000011101000100000
+01110011011001010111000100100000
+00100101011010010010110000100000
+01100011011101000111001001101100
+00100000001001010110100100101100
+00100000011011000110111101100111
+00101101011010010110111001110100
+01100101011100100111011001100001
+01101100001000000010010101101001
+00001010000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001010011
+01011001010011100100001100001010
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101011011000111010100101110
+00100101001100000011100101101001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010110010100111001000011
+00111010001000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010001001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000110
+01001111010011000100110001001111
+01010111010111110101010101010000
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000110010011110100110001001100
+01001111010101110101111101010101
+01010000001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010011
+01010000000010100000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010011010100000011101000100000
+00000000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000001
+01001110010011100100111101010101
+01001110010000110100010100001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000111001101110100
+01100001011011010111000000100000
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110100011110000000101000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010111000101110101
+01100001011011000110100101110100
+01111001001000000000000000000000
+00100101011100110100110101010011
+01000111001011010100000101001110
+01001110010011110101010101001110
+01000011010001010011101000100000
+01100111011100100110000101101110
+01100100011011010110000101110011
+01110100011001010111001000101101
+01110000011100100110100101101111
+00100000001001010110100100100000
+00100101011010010000101000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010110100101100100
+00100000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001010011
+01001001010001110100111001000001
+01001100010010010100111001000111
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010010010100011101001110
+01000001010011000100100101001110
+01000111001110100010000001110100
+01100001011100100110011101100101
+01110100001011010111000001101111
+01110010011101000010000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000010010101101001
+00100000001011010010000000100101
+01101001001000000011110100100000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01111001011100000110010100100000
+00100101001100000011010001111000
+00100000011011000110010101101110
+00100000001001010110100100100000
+01101111011101010110100100100000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000001110011
+01110101011000100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000010100000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000110010101111000
+01110000011001010110001101110100
+01100101011001000010000000100101
+01101001001011000010000001110100
+01101111011101000110000101101100
+00100000001001010110100100101001
+00001010000000000000000000000000
+01010100010011000101011000111010
+00100000000000000000000000000000
+01110100011011000111011000101101
+01100011011011110110111001110100
+01100101011011100111010000000000
+01000100010101010100110101010000
+00111010001000000000000000000000
+01110000011000010111100101101100
+01101111011000010110010000000000
+00100101011100110101011001001100
+01000001010011100010000000100101
+01101001000010100000000000000000
+00100101011100110100010101010100
+01001000001110100010000000100101
+00110000001101000111100000100000
+00101000001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000000101101
+00111110001000000010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000101001
+00001010000000000000000000000000
+00100101011100110100100101010000
+00111010001000000010010101101001
+00100000001010000010010101101001
+00101110001001010110100100101110
+00100101011010010010111000100101
+01101001001000000010110100111110
+00100000001001010110100100101110
+00100101011010010010111000100101
+01101001001011100010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110101010101000100
+01010000001110100010000000101000
+00100101011010010010000000101101
+00111110001000000010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101011011000110100100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000001001010111001100111010
+00100000011000110110000101101110
+00100000011011100110111101110100
+00100000011000010110010001101010
+01110101011100110111010000100000
+01100110011100100110010101110001
+01011111011100000111000001100010
+00100000001001010110110001101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101001110010110110001110101
+00101110001001010011000000111001
+01101100011010010000101000000000
+00100101011100110011101000100000
+01110011011011100111010000111101
+00100101011001000010110000100000
+01110011011001010110001100111101
+00100101011011000110010000101100
+00100000011011100111001101100101
+01100011001111010010010101101100
+01100100000010100000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000010000000000000
+01110011011001010110111001100100
+00111010001000000000000000000000
+01110010011001010110001101110110
+00111010001000000000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000000000000000000
+00100000001000000010000000100101
+00111001011001000010111000100101
+00110011011001000000101000000000
+01101001011011100110100101110100
+01101001011000010110110001101001
+01111010011010010110111001100111
+00000000000000000000000000000000
+01100110011000010111010101101100
+01110100011110010000000000000000
+01100100011010010111001101100001
+01100010011011000110010101100100
+00000000000000000000000000000000
+01101100011010010111001101110100
+01100101011011100110100101101110
+01100111000000000000000000000000
+01110000011100100110010100101101
+01101101011000010111001101110100
+01100101011100100000000000000000
+01110000011000010111001101110011
+01101001011101100110010100000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01110011011011000110000101110110
+01100101000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110000011100100110010101110011
+01100101011011100111010000000000
+01101101011000010111001101110100
+01100101011100100010111101110111
+01110010001011010110110100101101
+01101100011011110110001101101011
+00000000000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110011001011010110110001101111
+01100011011010110000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01101100011011110110001101101011
+01100101011001000000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001101001
+01101111011011100000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001100101
+01100100000000000000000000000000
+01110111011100100010110101110010
+01100101011100110111000000101101
+01100011011000010110110001101001
+01100010001011010111001001100101
+01110001000000000000000000000000
+01110111011100100010110101101100
+01101001011011100110101100101101
+01101111011011100000000000000000
+01100001011000100111001101101111
+01101100011101010111010001100101
+00101101011000110110000101101100
+01101001011000100111001001100001
+01110100011010010110111101101110
+00000000000000000000000000000000
+01101000011011110110111101101011
+00111010001000000010010101110011
+00001010000000000000000000000000
+01010100001100100010000001101111
+01110010001000000101010000110011
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01010100001100110010000001101111
+01110010001000000101010000110110
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01001000011000010110111001100100
+01110011011010000110000101101011
+01100101001000000110011001100001
+01101001011011000111010101110010
+01100101001110100010000001101110
+01101111011101110010000001101110
+01101111011011100010110101110111
+01110010001000000010010101110011
+00001010000000000000000000000000
+01010010011001010111010001110010
+01111001001000000110111101101110
+00100000011101000110100101101101
+01100101011011110111010101110100
+00001010000000000000000000000000
+00100101011100110011101000100000
+01110011011101010110001001110011
+01110100011000010111010001100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000010000001100110
+01101001011110000110010101100100
+00100000011001000110010101101100
+01100001011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100011001000110010001100100000
+01110100001101000010111001110000
+01101000011000010111001101100101
+00100000011010010111001100100000
+01100001011011000111001001100101
+01100001011001000111100100100000
+01100011011011110111001001110010
+01100101011000110111010001100101
+01100100001000000110011001101111
+01110010001000000110001001101001
+01110100011100110110110001101001
+01100100011001010000101000000000
+01110100001100010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+01110100001101000011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000011000100110100101110100
+01110011011011000110100101100100
+01100101001110100010000000100101
+01100100000010100000000000000000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100100000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000001001110
+01100101011101110010000001100011
+01101100011000010111001101110011
+00100000001001010110100100001010
+00000000000000000000000000000000
+01000010010101010100011100111010
+00100000010101000111001001111001
+01101001011011100110011100100000
+01110100011011110010000001110011
+01100101011011100110010000100000
+01101001011011100111011001100001
+01101100011010010110010000100000
+01110111011100100101111101101101
+01110011011001110010000001101101
+01101111011001000110010100111101
+00100101011110000010000001101001
+01100100001111010010010101111000
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000101010001101000
+01101001011100110010000001101001
+01110011001000000110111001101111
+01110100001000000110111101110010
+01100111011000010110111001101001
+01111010011000010111010001101001
+01101111011011100010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00100000010101000100110001010110
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000100001101000101
+01010010010011100010011101110011
+00100000010011110101010101001001
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000101011101101000
+01101001011101000110010100100000
+01010010011000010110001001100010
+01101001011101000010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00111101001000000011000001111000
+00100101011110000000101000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000111001101110101
+01110000011100000110111101110010
+01110100011001010110010000100000
+01110110011001010111001001110011
+01101001011011110110111000100000
+01101110011101010110110101100010
+01100101011100100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100101011100110010000000111101
+00100000001001010110110001100100
+00111010001001010011000000111001
+01101100011001000011101000100101
+00110000001100110110110001100100
+00001010000000000000000000000000
+01010101011011100110100101101110
+01101001011101000110100101100001
+01101100011010010111101001100101
+01100100000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000010010101100100
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110001
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110011
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110100
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110101
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110110
+00000000000000000000000000000000
+00101101001111100110110101100100
+01100101011011000110000101111001
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000000101000000000
+00100000001010000111011101100001
+01101001011101000010000001100110
+01101111011100100010000001101000
+01110111001010010000000000000000
+01101111011001100110011001110011
+01100101011101000101111101101000
+01110111001110100010000000100101
+01101100011010010010111000100101
+00110000001110010110110001101001
+00100000001010000010101100100101
+01101100011010010010100100001010
+00000000000000000000000000000000
+01010000010011000100110000100000
+01001111011101010111010001001111
+01100110010011000110111101100011
+01101011001011000010000001110011
+01101000011011110111010101101100
+01100100001000000111001001100101
+01110011011101000110000101110010
+01110100001000000111001101111001
+01101110011000110000101000000000
+01110011011001010111001001110110
+01101111001110100110001001110101
+01110011011110010000101000000000
+01110111011100100101111101110011
+01100101011100100111011001101111
+00100000011100110111010001100001
+01110100011001010011101000100000
+00100101011100110010010101110011
+00001010000000000000000000000000
+01101111011011000110010001110011
+01100101011101000111000000100000
+00100101011010010010110000100000
+01101111011001100110011001110011
+01100101011101000010000000100101
+01101001001110100010010100110000
+00110100011010010000101000000000
+01100001011001000110101001110101
+01110011011101000010000001110000
+01101000011000010111001101100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010011100101001101000101
+01000011000000000000000000000000
+01010011010110010100111001000011
+01011111010100110100010101000011
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010100000100100001000001
+01010011010001010000000000000000
+01010100010100100100000101000011
+01001011010111110101000001001000
+01000001010100110100010100000000
+01010111010000010100100101010100
+01011111010011110100011001000110
+01010011010001010101010001011111
+01010011010101000100000101000010
+01001100010001010000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110011
+01111001011011100110001100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001100001
+01101110011011100110111101110101
+01101110011000110110010100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110010
+01100101011100010111010101100101
+01110011011101000000101000000000
+01001110011001010111011100100000
+01100110011011110111001001100101
+01101001011001110110111000100000
+01001101011000010111001101110100
+01100101011100100010000000100101
+01101001001000000110000101100100
+01100100011001010110010000001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01100011011000010110111000100111
+01110100001000000110100101101110
+01101001011101000010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+00111101001000000010010101100100
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110000101100011
+01100011011101010111001001100001
+01100011011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01001001011001110110111001101111
+01110010011001010110010000100000
+01100110011100100110000101101101
+01100101001000000010010101101001
+00001010000000000000000000000000
+01110000011100000101111101110011
+01101100011000010111011001100101
+00100000001110100010000001000100
+01100101011011000110000101111001
+00100000010100100110010101110011
+01110000001000000110010001101111
+01100101011100110110111000100111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001001000000010100001100110
+00100000001001010111100000101001
+00001010000000000000000000000000
+01110000011100000101111101110000
+01100011011011000110111101100011
+01101011001000000011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01100100011011110110010101110011
+01101110001001110111010000100000
+01101101011000010111010001100011
+01101000001000000101000001000100
+01100101011011000110000101111001
+00100000010100100110010101110001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01000110001011010111010101110000
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001010000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001000010100000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001000110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000011010010111001100100000
+01101110011011110111010000100000
+01100110011100100110111101101101
+00100000011000110111010101110010
+01110010011001010110111001110100
+00100000011100000110000101110010
+01100101011011100111010000001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01101100011000010111011001100101
+00100000011101110110000101110011
+00100000011011100110111101110100
+00100000011101110110000101101001
+01110100011010010110111001100111
+00100000011000010010000001100110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00001010000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01100101011100010111010101100101
+01101110011000110110010101001001
+01000100001000000010010101100100
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001101100
+01100001011100110111010000100000
+01010011011110010110111001100011
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000001001010110010000001010
+00000000000000000000000000000000
+00100101011100110010100000100101
+01100100001010010010000001001101
+01100101011100110111001101100001
+01100111011001010010000001100011
+01100001011011100010011101110100
+00100000011000100110010100100000
+01110011011001010110111001110100
+00001010000000000000000000000000
+01010011010001010100111001010100
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+01100100001011100010010100110000
+00111001011001000010111000100101
+00110000001100110110010000100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100010000101000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100100000101000000000
+01110000011100100110010100101101
+00000000000000000000000000000000
+01000010011001010111001101110100
+00100000011001100110111101110010
+01100101011010010110011101101110
+00100000011011010110000101110011
+01110100011001010111001000100000
+01101001011100110010000000100101
+01101001001011110010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01110000011000010111001101110011
+01101001011101100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+00100101011100110110110101100001
+01110011011101000110010101110010
+00001010000000000000000000000000
+01001110011001010111011100100000
+01010101010101000100001100100000
+01101111011001100110011001110011
+01100101011101000011101000100000
+00100101011010010000101000000000
+00100101011100110011101000100000
+01110011011011000110000101110110
+01100101000010100000000000000000
+00101101000000000000000000000000
+00100101011100110010010101100100
+00101110001001010011000000111001
+01100100000000000000000000000000
+01010100011100100110100101101101
+00100000011101000110111101101111
+00101101011011000110111101101110
+01100111001000000110110101110000
+01100100001110100010000000100101
+01101001000010100000000000000000
+01000001011001100111010001100101
+01110010001000000110000101110110
+01100111001010000010010101101001
+00101001001011000010000001101101
+01100101011000010110111001010000
+01100001011101000110100001000100
+01100101011011000110000101111001
+00111010001000000010010101101001
+00001010000000000000000000000000
+01100101011100100111001001101111
+01110010001000000110100101101110
+00100000011101000101111101101111
+01110000011100110010110100111110
+01110011011001010111001001110110
+01101111010111110110100101101110
+01101001011101000000000000000000
+01001001011011100110100101110100
+01101001011000010110110001101001
+01111010011001010110010000111010
+00100000011011110110001001110011
+01011111011001000111001001101001
+01100110011101000010000000100101
+01101100011011000110100100001010
+00000000000000000000000000000000
+01001111011001100110011001110011
+01100101011101000010000001100110
+01110010011011110110110100100000
+01101101011000010111001101110100
+01100101011100100011101000100000
+00100000001000000010000000100000
+00100101011100110000101000000000
+01010100001100010011101000100000
+00100101011100110000101000000000
+01010100001100100011101000100000
+00100101011100110000101000000000
+01001111011000100111001101100101
+01110010011101100110010101100100
+00100000011001000111001001101001
+01100110011101000011101000100000
+00100101001110010110100100001010
+00000000000000000000000000000000
+01100100011010010111001101100011
+01100001011100100110010000100000
+01010100001100110010111101010100
+00110100001110100010000001110111
+01100101001000000110110101101001
+01110011011100110010000001010100
+00110001001011110101010000110010
+00001010000000000000000000000000
+01010100001100110011101000100000
+00100101011100110000101000000000
+01010100001101000011101000100000
+00100101011100110000101000000000
+01001101011000010111001101110100
+01100101011100100010000001110100
+01101111001000000111001101101100
+01100001011101100110010100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010011011011000110000101110110
+01100101001000000111010001101111
+00100000011011010110000101110011
+01110100011001010111001000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011001010110000101101110
+01010000011000010111010001101000
+01000100011001010110110001100001
+01111001001110100010000000100101
+01110011000010100000000000000000
+01010100001101010011101000100000
+00100101011100110000101000000000
+01010100001101100011101000100000
+00100101011100110000101000000000
+01010011011011000110000101110110
+01100101001000000100111101101110
+01101100011110010010110000100000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+01110011011001010111010000100000
+01110100011011110010000000100101
+01100100000010100000000000000000
+00100101001100100011000001110101
+00000000000000000000000000000000
+00100101011101010000000000000000
+00100101001100010011000101110101
+00100101001100000011100101110101
+00000000000000000000000000000000
+00100101011101010010010100110000
+00111001011101010000000000000000
+01101100011011100110101100111010
+00100101011001000010000001110010
+01111000001110100010010101100100
+00100000011101000111100000111010
+00100101011001000010000000000000
+01101100011011110110001101101011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110000011101000111000000111010
+00100101011100110010000000000000
+01110011011101100011101000100101
+01100100001000000000000000000000
+01110011011100110011101000100111
+00100101011100110010011100100000
+00000000000000000000000000000000
+01100001011101010111100000100101
+01100100001110100010010101111000
+00100000000000000000000000000000
+01110011011001010110001100111010
+00100101011001000010000001101110
+01110011011001010110001100111010
+00100101011001000010000000000000
+01101101011101010011101000100101
+01110011001000000000000000000000
+01100100011011010111001100111010
+00100101011100110010000000000000
+01100100011101000111100001101101
+00111010001001010110010000100000
+01100100011100100111100001101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100100011101000111100001110011
+00111010001001010110010000100000
+01100100011100100111100001110011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100001011100110111100101101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100011011100100111010001110100
+00111010001001010111001100100000
+00000000000000000000000000000000
+01100011011010110110111100111010
+00100101011001000010000000000000
+01110011011001010111010001110000
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110101011000110110111001110100
+00111010001001010110010000100000
+00000000000000000000000000000000
+01101000011001000011101000100101
+01100100001000000110110101100100
+00111010001001010110010000100000
+01100001011001000011101000100101
+01100100001000000000000000000000
+01110000011000110110001000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100001000000100001100000000
+00001010000010100101000001010100
+01010000001000000111001101110100
+01100001011101000111010101110011
+00111010001000000000000000000000
+00100101011100110000000000000000
+00001010000010100101001101111001
+01101110011000110010000001101001
+01101110011001100110111100100000
+01101110011011110111010000100000
+01110110011000010110110001101001
+01100100000010100000000000000000
+00001010000010100101001101111001
+01101110011000110110100001110010
+01101111011011100110100101111010
+01100001011101000110100101101111
+01101110001000000111001101110100
+01100001011101000111010101110011
+00111010000010100000000000000000
+01010111010100100010000001010000
+01010100010100000010000001000011
+01101111011100100110010100100000
+01010011011110010110111001100011
+00100000010011010110111101101110
+01101001011101000110111101110010
+00100000001001010111001100000000
+00001010010001010111001101100011
+00100000001111010010000001100101
+01111000011010010111010000000000
+00001010000010100101010001000001
+01001001001000000101010001101001
+01101101011001010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+00001010000010100100110001101001
+01101110011010110010000001110011
+01110100011000010111010001110101
+01110011001110100000000000000000
+00001010001001010111001100111010
+00100000000000000000000000000000
+01110111011100100111010100110001
+00000000000000000000000000000000
+01001100011010010110111001101011
+00100000011101010111000000100000
+00100000001000000000000000000000
+01001100011010010110111001101011
+00100000011001000110111101110111
+01101110001000000000000000000000
+00101000010100100101100000111010
+00100000001001010110010000101100
+00100000010101000101100000111010
+00100000001001010110010000101001
+00000000000000000000000000000000
+00100000010010010101000001110110
+00110100001110100010000000000000
+01000010010011110100111101010100
+01010000001000000111001001110101
+01101110011011100110100101101110
+01100111000000000000000000000000
+00100101011100110010000000101000
+01100110011100100110111101101101
+00100000011000100110111101101111
+01110100011100000010100100000000
+00100101011100110010000000101000
+01110011011101000110000101110100
+01101001011000110010000001100001
+01110011011100110110100101100111
+01101110011011010110010101101110
+01110100001010010000000000000000
+00001010010011010110111101100100
+01100101001110100010000000000000
+01010111010100100010000001001111
+01100110011001100000000000000000
+00001010010000110110110001101111
+01100011011010110010000001101111
+01100110011001100111001101100101
+01110100001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00100101001100100110100100101110
+00100101001100000011100101101001
+00100000011100110000000000000000
+00100101011010010010111000100101
+00110000001110010110100100100000
+01110011000000000000000000000000
+00100101001110010110100100100000
+01101110011100110000000000000000
+00001010010011110110111001100101
+00101101011101110110000101111001
+00100000011001000110010101101100
+01100001011110010010000001100001
+01110110011001010111001001100001
+01100111011001010110010000111010
+00100000001000000010000000100000
+00100000001000000010000000000000
+00001010010011110110001001110011
+01100101011100100111011001100101
+01100100001000000110010001110010
+01101001011001100111010000111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010111010100100010000001001101
+01100001011100110111010001100101
+01110010001000000010000000000000
+01010111010100100010000001010011
+01101100011000010111011001100101
+00100000001000000010000000000000
+01010111010100100010000001010101
+01101110011010110110111001101111
+01110111011011100010000000000000
+01001100011011110110001101101011
+01100101011001000010000000000000
+01001110011011110100110001101111
+01100011011010110010000000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01100101011001000000000000000000
+01010101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01010011011001010111001001110110
+01101111001000000111001101110100
+01100001011101000110010100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01001111010011100000101000000000
+01001111010001100100011000001010
+00000000000000000000000000000000
+01000001011101010111100000100000
+01100011011011000110111101100011
+01101011001000000010010101100100
+00100000011100110111010001100001
+01110100011101010111001100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00000000000000000000000000000000
+01100101011011100110000101100010
+01101100011001010110010000000000
+00101100001000000110110001101111
+01100011011010110110010101100100
+00000000000000000000000000000000
+00001010010101000110100101101101
+01101001011011100110011100100000
+01110000011000010111001001100001
+01101101011001010111010001100101
+01110010011100110011101000001010
+00000000000000000000000000000000
+01010010011011110111010101101110
+01100100001011010111010001110010
+01101001011100000010000001110100
+01101001011011010110010100100000
+00101000011011010111010100101001
+00111010001000000000000000000000
+00100101011100110010000001110000
+01110011000010100000000000000000
+01001101011000010111001101110100
+01100101011100100010110101110011
+01101100011000010111011001100101
+00100000011001000110010101101100
+01100001011110010011101000100000
+00100000001000000000000000000000
+01001101011000010111001101110100
+01100101011100100010000001010000
+01001000010110010010000001100100
+01100101011011000110000101111001
+01110011001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100010110000011101000100000
+00100101001110010110010000100000
+01110000011100110010110000100000
+01010010010110000011101000100000
+00100101001110010110010000100000
+01110000011100110000101000000000
+01010011011011000110000101110110
+01100101001000000101000001001000
+01011001001000000110010001100101
+01101100011000010111100101110011
+00111010001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100011011110111010001100001
+01101100001000000110110001101001
+01101110011010110010000001100001
+01110011011110010110110101101101
+01100101011101000111001001111001
+00111010000000000000000000000000
+00100101001100100011000101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01000011011000010110001001101100
+01100101001000000111001001110100
+01110100001000000110010001100101
+01101100011000010111100100111010
+00100000001000000010000000100000
+00100000001000000000000000000000
+01000011011011000110111101100011
+01101011001000000110111101100110
+01100110011100110110010101110100
+00111010000000000000000000000000
+00100101001100100011100101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010000011010000110000101110011
+01100101001000000111001101100101
+01110100011100000110111101101001
+01101110011101000011101000000000
+00100101001100100011011101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010011011010110110010101110111
+00111010001000000010000000100000
+00100000001000000000000000000000
+00100101001100110011001001100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100011
+01101111011101010110111001110100
+01100101011100100011101000000000
+00100101001100100011011101100100
+00001010000000000000000000000000
+01110101011011100110101101101110
+01101111011101110110111000000000
+01100100011010010110000101100111
+01110011000000000000000000000000
+01110011011101000110000101110100
+01110011000000000000000000000000
+00011011010110110011000100100101
+01100011000000000000000000000000
+01000011011011110110110101101101
+01100001011011100110010000100000
+00100010001001010111001100100010
+00111010001000000110010101110010
+01110010011011110111001000100000
+00100101011001000000101000000000
+01010101011011100111001001100101
+01100011011011110110011101101110
+01101001011110100110010101100100
+00100000011000110110111101101101
+01101101011000010110111001100100
+00100000001000100010010101110011
+00100010001011100000101000000000
+01110111011100100110001100100011
+00100000000000000000000000000000
+00100101011000110000000000000000
+01100101011110000110010101100011
+01110101011101000110100101101110
+01100111001110100010000000100101
+01110011000010100000000000000000
+01000101011011010111000001110100
+01111001001000000110100101101110
+01101001011101000010000001110011
+01100011011100100110100101110000
+01110100001011100010111000101110
+00001010000000000000000000000000
+00101101001011010010000001100010
+01110101011010010110110001110100
+00101101011010010110111000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+00101000011001010110110101110000
+01110100011110010010100100001010
+00000000000000000000000000000000
+01010111010100100010000001000011
+01101111011100100110010100100000
+01100010011101010110100101101100
+01100100001110100010000000100101
+01110011001001010111001100001010
+00000000000000000000000000000000
+01000010011101010110100101101100
+01110100001110100010000000100101
+01110011001000000010010101110011
+00100000011000100111100100100000
+00100101011100110000101000000000
+01000010011101010110100101101100
+01110100001000000110011001101111
+01110010001000000010010101100100
+00100000011010110100001000100000
+01010010010000010100110100101100
+00100000011100110111010001100001
+01100011011010110010000001101001
+01110011001000000010010101100100
+00100000011000100111100101110100
+01100101011100110000101000000000
+01010111010000010101001001001110
+01001001010011100100011100111010
+00100000011010000110000101110010
+01100100011101110110000101110010
+01100101001000000111001101100001
+01111001011100110010000000100101
+01101001011010110100001000100000
+00111100001111010010000001010010
+01000001010011010010000000111100
+00100000001001010110100101101011
+01000010000010100000000000000000
+01110110011001010111001000000000
+00100101011100110011101100100000
+00100101011100110010000000100101
+01110011000010100000000000000000
+01010101011011100110101101101110
+01101111011101110110111000100000
+01110011011101010110001001100011
+01101111011011010110110101100001
+01101110011001000010000000100010
+00100101011100110010001000001010
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100000000000000000000000000
+01110011011101000110111101110000
+00000000000000000000000000000000
+01100101001100100110010100000000
+01100100011001010110110001100001
+01111001000000000000000000000000
+01100111011011010000000000000000
+01100001011000100111001101100011
+01100001011011000000000000000000
+01101101011011110110010001100101
+00000000000000000000000000000000
+01110011011101000110111101110000
+01110000011001010110010000000000
+01110010011101010110111001101110
+01101001011011100110011100000000
+01110000001100100111000000000000
+01000001011101100110000101101001
+01101100011000010110001001101100
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100011100110011101000001010
+00000000000000000000000000000000
+00100000001000000010010101110011
+00001010000000000000000000000000
+01101000011001010110110001110000
+00000000000000000000000000000000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000000000000000000000000
+01100111011001010111010000000000
+01100111011001010111010001110000
+00000000000000000000000000000000
+01110011011001010111010000000000
+01110011011001010111010001110000
+00000000000000000000000000000000
+01001101010000010100001100101101
+01100001011001000110010001110010
+01100101011100110111001100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011000010110001100000000
+01110010011001010111001101100101
+01110100000000000000000000000000
+01101101011000010111100000000000
+01110000011100100110100101101110
+01110100010111110111010001100001
+01110011011010110101111101110100
+01101001011011010110010101011111
+01110100011010000111001001100101
+01110011011010000110111101101100
+01100100001000000010010101100100
+00001010000000000000000000000000
+00100000011010010111010001100101
+01110010011000010111010001101001
+01101111011011100111001100100000
+00100000001000000010000000100000
+01110011011001010110001101101111
+01101110011001000111001100101110
+01101101011010010110001101110010
+01101111011100110010000000100000
+00100000001000000110110101100001
+01111000010111110110110101110011
+00100000011011100110000101101101
+01100101000010100000000000000000
+00100000001000000010010100111001
+01101100011010010010000000100000
+00100000001001010011100101101100
+01101001001011100010010100110000
+00110110011011000110100100100000
+00100101001110010110110001100100
+00100000001001010111001100001010
+00000000000000000000000000000000
+01110000011100110000000000000000
+00100101011101010000101000000000
+01010101011100110110000101100111
+01100101001110100010000001110010
+01100101011001100111001001100101
+01110011011010000010000000111100
+01110011011001010110001101101111
+01101110011001000111001100111110
+00001010000000000000000000000000
+01110010011001010110011001110010
+01100101011100110110100000000000
+01110011011101000110000101110100
+01101001011100110111010001101001
+01100011011100110010000001101110
+01101111011101110010000001101111
+01100110011001100000101000000000
+01100010011101000111001100000000
+01101111011001100110011000000000
+01110011011101000110000101110100
+00000000000000000000000000000000
+01010111011100100110111101101110
+01100111001000000111000001100001
+01110010011000010110110101100101
+01110100011001010111001000001010
+00000000000000000000000000000000
+01100101011100100110000101110011
+01100101000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01000100010000100000101000000000
+01100001011001000110010000000000
+01010011010001100101000000100000
+01000100010000100010000001101001
+01110011001000000110011001110101
+01101100011011000000101000000000
+01001001001100100100001100100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010111001001110010
+01101111011100100010000000101000
+00100101011001000010100100001010
+00000000000000000000000000000000
+00100101011001000010000001010011
+01000110010100000111001100100000
+01101001011011100010000001000100
+01000010000010100000000000000000
+01110011011010000110111101110111
+00000000000000000000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010110110101110000
+01110100011110010000101000000000
+00100101011001000011101000100000
+01010000010011100011101000000000
+00100000011001000101010001111000
+00111010001000000010010100111000
+01100100001000000110010001010010
+01111000001110100010000000100101
+00111000011001000010000001100001
+01101100011100000110100001100001
+00111010001000000010010100111000
+01100100000010100000000000000000
+01101101011000010111010001100011
+01101000000000000000000000000000
+01001110011011110010000001010011
+01000110010100000010111000001010
+00000000000000000000000000000000
+01010011010001100101000000100000
+01110010011001010110000101100100
+00100000011001010111001001110010
+01101111011100100000101000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01110100011011110010000001000100
+01000010000010100000000000000000
+01010011010001100101000000100000
+01101101011000010111010001100011
+01101000011001010110010000101100
+00100000011001000101010001111000
+00111101001001010110010000100000
+01100100010100100111100000111101
+00100101011001000010000001100001
+01101100011100000110100001100001
+00111101001001010110010000001010
+00000000000000000000000000000000
+01100101011011100110000100000000
+01110011011001100111000000000000
+01101001011011100110100101110100
+00000000000000000000000000000000
+01100011011011000000000000000000
+01110011011100000111001100000000
+01100111011100000111001100000000
+00100101011001000010000000100101
+01100100000010100000000000000000
+01110011011001000110000101100011
+00000000000000000000000000000000
+01100111011001000110000101100011
+00000000000000000000000000000000
+01100011011010000110010101100011
+01101011011101100110001101101111
+00000000000000000000000000000000
+01110000011011000110110000000000
+01100110011011110111001001100011
+01100101000000000000000000000000
+01000110011011110111010101101110
+01100100001000000111000001101000
+01100001011100110110010100100000
+01110100011100100110000101101110
+01110011011010010111010001101001
+01101111011011100010000001101001
+01101110001000000100010101000101
+01010000010100100100111101001101
+00111010001000000010010101100100
+01110000011100110000101000000000
+01001101011001010110000101110011
+01110101011100100110100101101110
+01100111001000000111010000110010
+00101111011101000011010000100000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011011100111001101101001
+01110100011010010110111101101110
+00101110001011100010111000001010
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000000000
+01110011011001010111010001110011
+01100101011000110000000000000000
+01110011011001010111010001101110
+01110011011001010110001100000000
+01110010011000010111011100000000
+00100101011100110010000000101011
+00100101011001000010000001101110
+01100001011011100110111101110011
+01100101011000110110111101101110
+01100100011100110010111000001010
+00000000000000000000000000000000
+01110100011010010110110101100101
+00000000000000000000000000000000
+01100111011101010110100100000000
+01100110011100110000000000000000
+01100110011100110110010100000000
+01110011011001000110001000000000
+01001111010011100000000000000000
+01001111010001100100011000000000
+01100101011011100110000101100010
+01101100011001010000000000000000
+01100100011010010111001101100001
+01100010011011000110010100000000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110010000000100101
+01110011000010100000000000000000
+01110000011101000111001001100001
+01100011011010110000000000000000
+00100101011001000010111000100101
+01100100001011100010010101100100
+00101110001001010110010000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+01101001011011100010000001110100
+01110010011000010110100101101110
+01101001011011100110011100001010
+00000000000000000000000000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+00100101011100110010000000101000
+01100110011100100110111101101101
+00100000011000100110111101101111
+01110100011100000010100100001010
+00000000000000000000000000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+00100101011100110010000000101000
+01110011011101000110000101110100
+01101001011000110010000001100001
+01110011011100110110100101100111
+01101110011011010110010101101110
+01110100001010010000101000000000
+01101001011100000000000000000000
+01010000010100000101001101001001
+00100000011101100110010101110010
+01100010011011110111001101101001
+01110100011110010011101000100000
+00100101001100000011100001101100
+01111000000010100000000000000000
+01110110011001010111001001100010
+01101111011100110110010100000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01101001011011100110100101110100
+00100000011100110110001101110010
+01101001011100000111010000001010
+00000000000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110000101100100
+01100100001000000111010001101000
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100000010100000000000000000
+01001111010010110010111000001010
+00000000000000000000000000000000
+01100010011011110110111101110100
+00000000000000000000000000000000
+00100101011010010010000000101000
+00100010001001010111001100100010
+00101001001000000110111101110101
+01110100001000000110111101100110
+00100000011100100110000101101110
+01100111011001010000101000000000
+01100011011101010111001001110010
+01100101011011100111010000100000
+01110110011011000110000101101110
+00111010001000000010010101101001
+00100000001010000011000001111000
+00100101011110000010100100001010
+00000000000000000000000000000000
+01110110011011000110000101101110
+00000000000000000000000000000000
+01000001011101010111100000100000
+01100100011010010110000101100111
+01101110011011110111001101110100
+01101001011000110111001100100000
+01101001011011100110011001101111
+00111010000010100000000000000000
+01101001011001000011101000100000
+00100101011001000010111000100101
+01100100001011000010000001110010
+00101111011101110010000001110111
+01101111011100100110010001110011
+00111010001000000010010101100100
+00101100001000000111001000101111
+01101111001000000111011101101111
+01110010011001000111001100111010
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110010011011110000000000000000
+01010111011011110111001001100100
+00100000001001010110010000100000
+01101001011100110010000000110000
+01111000001001010011000000111000
+01111000000010100000000000000000
+01110010011101110000000000000000
+01110111000000000000000000000000
+01010110011000010110110001110101
+01100101001000000011000001111000
+00100101001100000011100001111000
+00100000011101110111001001101001
+01110100011101000110010101101110
+00100000011101000110111100100000
+01110100011010000110010100100000
+01110111011011110111001001100100
+00100000001001010110010000001010
+00000000000000000000000000000000
+01100100011010010110000101100111
+00000000000000000000000000000000
+00100101011100110010110000100000
+00100101011100110010000000100101
+01100100001011000010000000100101
+01100100001011000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101011100110010000000100101
+00110010011001000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101001101000110010000101101
+00100101001100000011001001100100
+00101101001001010011000000110010
+01100100001011010010010100110000
+00110010011001000011101000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00000000000000000000000000000000
+00011011010110110011000000100101
+01100100001110110011001100100101
+01100100011011010000000000000000
+00011011010110110110110100000000
+00011011010110110010010101100100
+00111011001001010110010001100110
+00000000000000000000000000000000
+00011011010110110011001001001010
+00011011010110110011000100111011
+00110001010010000000000000000000
+01010011011101010110111000000000
+01001101011011110110111000000000
+01010100011101010110010100000000
+01010111011001010110010000000000
+01010100011010000111010100000000
+01000110011100100110100100000000
+01010011011000010111010000000000
+01001010011000010110111000000000
+01000110011001010110001000000000
+01001101011000010111001000000000
+01000001011100000111001000000000
+01001101011000010111100100000000
+01001010011101010110111000000000
+01001010011101010110110000000000
+01000001011101010110011100000000
+01010011011001010111000000000000
+01001111011000110111010000000000
+01001110011011110111011000000000
+01000100011001010110001100000000
+01001100011011110110111101110000
+01110011001000000111000001100101
+01110010001000000110101001101001
+01100110011001100111100100111010
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01101110011011110010000001110011
+01101111011000110110101101100101
+01110100001000000111001101101100
+01101111011101000111001100100000
+01101100011001010110011001110100
+00001010000000000000000000000000
+01110111011100100011000000000000
+01101110011001010111010000101101
+01100010011010000000000000000000
+01101001011100000111011000110100
+00000000000000000000000000000000
+01100001011100100111000000000000
+01000100011010010111001101100011
+01101111011101100110010101110010
+01100101011001000010000001001001
+01010000001000000110000101100100
+01100100011100100110010101110011
+01110011001000000010100000100101
+01100100001011100010010101100100
+00101110001001010110010000101110
+00100101011001000010100100100001
+00001010000000000000000000000000
+01010011010011100100110101010000
+00111010001000000101001101000110
+01010000001000000111010101110000
+01100100011000010111010001100101
+01100100001000000110100101101110
+00100000011011010110010101101101
+01101111011100100111100100101100
+00100000011100100110010101110011
+01110100011000010111001001110100
+00100000010100000101010001010000
+00001010000000000000000000000000
+01001001010011100101011001000001
+01001100010010010100010000000000
+00100101011001000010111000100101
+00110000001101000110010000000000
+01110011011011100110110101110000
+00000000000000000000000000000000
+01000001011100000111001000100000
+00100000001101000010000000110010
+00110000001100010011100000100000
+00110001001100010011101000110010
+00110000001110100011001100111000
+00000000000000000000000000000000
+01101100011011000110010001110000
+00100000011101010111000001100100
+01100001011101000110010100001010
+00000000000000000000000000000000
+01101100011011000110010001110000
+00000000000000000000000000000000
+00110000001100010011001000110011
+00110100001101010011011000110111
+00111000001110010110000101100010
+01100011011001000110010101100110
+00000000000000000000000000000000
+01001001010001000011101000100000
+00100101011110000000101000000000
+01101110011011110010000001110000
+01100110011010010110110001110100
+01100101011100100010000001110010
+01110101011011000110010100101101
+01110011011001010111010000100001
+00001010000000000000000000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00101000011001110110111101110100
+00100000001100000111100000100101
+01111000001010010000101000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001110010
+01110101011011000110010100101101
+01110011011001010111010000101100
+00100000011000110110000101101110
+00100111011101000010000001100001
+01110000011100000110110001111001
+00001010000000000000000000000000
+01000101011100100111001001101111
+01110010001110100010000001001101
+01101001011011100110100101100011
+00100000010010000100010001001100
+00100000011101100110010101110010
+01110011011010010110111101101110
+00100000001001010110010000100000
+01101110011011110111010000100000
+01110011011101010111000001110000
+01101111011100100111010001100101
+01100100001000000110001001111001
+00100000011100110111011100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001110010
+01100101011000110110010101101001
+01110110011001010110010000100000
+01100101011100100111001001101111
+01101110011001010110111101110101
+01110011001000000110011001110010
+01100001011011010110010100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001010010
+01111000001000000110011001101001
+01100110011011110010000001100110
+01110101011011000110110000101100
+00100000011001010111100001110000
+01100101011000110111010000100000
+01110111011100100110111101101110
+01100111001000000110011001110010
+01100001011011010110010101110011
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01101110011011110111010000100000
+01110100011001010111001001101101
+01101001011011100110000101110100
+01100101011001000010000001101001
+01101110011001100110100101101110
+01101001011101000110010100100000
+01101101011000110111001000111101
+00110000011110000010010101111000
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01110100011010010110110101100101
+01110011011101000110000101101101
+01110000001000000110111001100101
+01110110011001010111001000100000
+01100010011001010110001101100001
+01101101011001010010000001100001
+01110110011000010110100101101100
+01100001011000100110110001100101
+00001010000000000000000000000000
+01100110011001010111010001100011
+01101000011010010110111001100111
+00100000011001000110100101100001
+01100111010111110111001001110111
+01011111011101110110111101110010
+01100100011100110000101000000000
+01100110011001010111010001100011
+01101000011010010110111001100111
+00100000011001000110100101100001
+01100111010111110111001001101111
+01011111011101110110111101110010
+01100100011100110000101000000000
+01100100011001010111011000100000
+00100000001100000111100000100101
+00110000001110000110110001111000
+00100000010000000010000000100101
+00110000001101100110110001111000
+00101100001000000010010101110011
+00001010000000000000000000000000
+01100110011100000110011101100001
+00101101011000010111001001100101
+01100001000000000000000000000000
+01000101011100100111001001101111
+01110010001000000010010101100100
+00100000011101110110100001101001
+01101100011001010010000001110010
+01100101011000010110010001101001
+01101110011001110010000001110100
+00110010001101000111000000100000
+01100110011100100110111101101101
+00100000011100110111010001101111
+01110010011000010110011101100101
+00001010000000000000000000000000
+01110100001100100011010001110000
+00100000011100100110010101100001
+01100100001000000110011001110010
+01101111011011010010000001110011
+01110100011011110111001001100001
+01100111011001010011101000100000
+00100101011001000010000001110000
+01110011000010100000000000000000
+01010111011000010110100101110100
+01101001011011100110011100100000
+01100110011011110111001000100000
+01101100011010010110111001101011
+00101110001011100010111000001010
+00000000000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000101110
+00101110001011100000101000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01101001011011100110011100100000
+01010010010110000010000001110100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01100101011100100010111000101110
+00101110000010100000000000000000
+01000110011000010110100101101100
+01100101011001000000000000000000
+01010011011101010110001101100011
+01100101011100110111001100000000
+01010111011100100110111101110100
+01100101001000000110111001100101
+01110111001000000111010000110010
+00110100011100000010000001110110
+01100001011011000111010101100101
+00111010001000000010010101100100
+00100000011100000111001100100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100000010001010100111001001111
+01010011010100000100001100000000
+00100101011100110010010101110011
+00111010000000000000000000000000
+01110100011001010110110101110000
+00000000000000000000000000000000
+01110100011001010110110101110000
+01100101011100100110000101110100
+01110101011100100110010100000000
+01110011011001100111000000111010
+00100000011000110110111101110010
+01110010011101010111000001110100
+01100101011001000010000001100011
+01101000011001010110001101101011
+01110011011101010110110100001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100011001101100
+01100001011100110110100000001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000101011100110001
+00001010000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100100100110010
+01000011001010000011000001111000
+00100101001100100101100000101001
+00001010000000000000000000000000
+01100110011010010110110001100101
+00100000001100000111100000100101
+00110000001110000111100000100000
+01000000001000000010010100110100
+01101001001011000010000001101110
+01100001011011010110010100100000
+00100101011100110000101000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100110011010010110110001100101
+00100000011010010111001100100000
+01100101011011010111000001110100
+01111001000010100000000000000000
+00100101011100110011101000100000
+01010101011100110110100101101110
+01100111001000000101011100110001
+00100000011100110110010101110010
+01101001011000010110110000100000
+01101110011101010110110101100010
+01100101011100100000101000000000
+00100101011100110011101000100000
+01100110011000010110100101101100
+01110101011100100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010001011000010000001100011
+01100001011011100010011101110100
+00100000011100110110000101110110
+01100101000010100000000000000000
+01000001011001000110010001101001
+01101110011001110010000001101110
+01100101011101110010000001010011
+01000110010100000010000001100101
+01101110011101000111001001111001
+00001010000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100101
+01111000011010010111001101110100
+01101001011011100110011100100000
+01010011010001100101000000100000
+01100101011011100111010001110010
+01111001000010100000000000000000
+00101101001011010010000001110101
+01110011011001010111001000101101
+01100100011001010110011001101001
+01101110011001010110010000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100110011010010110110001100101
+01101110011000010110110101100101
+00111010001000000010010101110011
+00111011001000000110011001101001
+01110010011100110111010000111010
+00100000001001010111100000111011
+00100000011011000110000101110011
+01110100001110100010000000100101
+01111000000010100000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000001101110
+01101111011101000010000001100110
+01101111011101010110111001100100
+00001010000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+00110001001011010101011101101001
+01110010011001010010000001000101
+01000101010100000101001001001111
+01001101001000000110111001101111
+01110100001000000110011001101111
+01110101011011100110010000001010
+00000000000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100101011001010111000001110010
+01101111011011010000000000000000
+01101111011001100110011001110011
+01100101011101000010000000100101
+00110100011010010010000000101000
+00110000011110000010010100110000
+00110011011110000010100100111010
+00100000001001010011001101101001
+00100000001010000011000001111000
+00100101001100000011001001111000
+00101001000010100000000000000000
+01110111011100100110100101110100
+01100101001010000011000001111000
+00100101011110000010110000100000
+00100101011010010010100100111010
+00100000011100100110010101110011
+01110101011011000111010000100000
+00111101001000000010010101101001
+00001010000000000000000000000000
+01110010011001010110000101100100
+00101000001100000111100000100101
+01111000001011000010000000100101
+01101001001010010011101000100000
+01110010011001010111001101110101
+01101100011101000010000000111101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01100100011001010111011001101001
+01100011011001010010000000100101
+01101001001110100010000000100101
+00110000001110000111100000100101
+00110000001110000111100000001010
+00000000000000000000000000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100000010100000000000000000
+01110111001100010000000000000000
+01110111001100010111001000000000
+01110111001100010111011100000000
+00111100010101010110111001101011
+01101110011011110111011101101110
+00111110000000000000000000000000
+01110011011011110110011001110100
+01110000011011000110110000111010
+00100000011010010111001001110001
+01110011001000000010010101100100
+00100000011100110110010101110001
+00100000001001010111001100100000
+01101101011011110110010001100101
+00100000001001010110010000100000
+01100001011011000110100101100111
+01101110011011010110010101101110
+01110100010111110111001101110100
+01100001011101000110010100100000
+00100101011001000010000001001000
+01001100001001010110010000100000
+01001101010011000010010101100100
+00100000010010000101100100111101
+00100101011001000010000001001101
+01011001001111010010010101100100
+00100000010001000110010101101100
+01000011011011100111010000111101
+00100101011001000000101000000000
+01110011011101000110000101110010
+01110100001011010110010101111000
+01110100000000000000000000000000
+01110111011000010110100101110100
+00101101011001010111100001110100
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100001011010110100001100101
+01101100011100000110010101110010
+00000000000000000000000000000000
+01110111011000010110100101110100
+00101101011010000110010101101100
+01110000011001010111001000000000
+01110011011101000110000101110010
+01110100001011010110110101100001
+01101001011011100000000000000000
+01110111011000010110100101110100
+00101101011011010110000101101001
+01101110000000000000000000000000
+01110010011001010110000101100100
+01111001000000000000000000000000
+01100011011011000110010101100001
+01110010001011010110010001100001
+01100011011100110000000000000000
+01110111011000010110100101110100
+00101101011000110110110001100101
+01100001011100100010110101100100
+01100001011000110111001100000000
+10111010110111000000111111111110
+00111011100110101100101000000000
+00000000000011110100001001000000
+01000001110001100100111001101101
+01111111111111111111111111111111
+00000000000010000000000000110000
+11000100011001010011011000000000
+11111111111100001011110111000000
+00000000000001111101000000000000
+00111011100110101100100111111111
+00000000000000010000000001000011
+00000000000000010000000001000100
+00000000000000010101000110000000
+10000011101010100111111010000000
+01111111111111111111111111111110
+10000000000000000000000000000001
+00000000000001100010000000000000
+00000000010111101110000000000000
+00000001000000000000000000000001
+00010001001000100011001101000100
+11100000000000000001111111111111
+00000000001001000110000000000000
+00000001010101010100000000000000
+00000010010001101000000000000000
+00010011010101111000000000000000
+00001111111111111111111111111111
+00000010110010110100000101111000
+00001110111001101011001001111111
+00000001001100010010110100000010
+00000001001100010010110100001010
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+01010011010001000100001000101101
+01101101011000010110001100101101
+01100011011000010110110001101001
+01110111011100100010110101101001
+00000000001111010000000100110111
+10000000000000000000000000011111
+00000000100110001001010110110110
+11000100000000000000000000000001
+00000000000000011000011010100000
+00000000111111111111111111111111
+11111111111111011011011000010000
+00000000000000100100100111110000
+00000101111101011110000100000000
+00001011111010111100001000000000
+11111010000010100001111100000000
+00000001001100010010110100000011
+00000001000110110001100100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001100000001100001000000000
+00000000000011100000000000000000
+00000000000000000000000000101100
+00000000000000000000000000101100
+00000000000000000000000000110110
+00000000000000000000000000110110
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000101100
+00000000000000000000000000110110
+00000000000000000000000000110110
+00000000000000000000000001000000
+00000000000000000000000000100010
+00000000000000000000000000110000
+01110000011100000101111101100100
+01101001011000010110011101011111
+01110000011000010111001001110011
+01100101000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110100101010100
+00000000000000010110100101100000
+00000000000000010110100101110000
+00000000000000010110100101111100
+00000000000000010110100110001000
+00000000000000010110100110010100
+00000000000000010110100110100000
+00000000000000000001110010000100
+00000000000000000001110011110100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000001110101110000
+00000000000000000001110111100000
+00000000000000000010000000001100
+00000000000000000001111001110100
+00000000000000000001111111100000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+01011111011011110110011001100110
+01110011011001010111010000000000
+01110111011100100101111101110011
+00110001000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+00000000000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110111001101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110011101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011011100110010101110100
+01011111011100110110010101101110
+01100100000000000000000000000000
+00000001000110110001100100000000
+00000000000000000000000110000000
+11000010000000000000000000001110
+01110111011100100101111101110101
+01101110011100000110000101100011
+01101011010111110110000101101110
+01101110011011110111010101101110
+01100011011001010000000000000000
+01110111011100100101111101110000
+01100001011000110110101101011111
+01100001011011100110111001101111
+01110101011011100110001101100101
+00000000000000000000000000000000
+01100111011001010111010001011111
+01110000011001010111001001110011
+01101001011100110111010001100101
+01101110011101000101111101101101
+01100001011000110000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110110011001101111
+01101100011011000110111101110111
+01110101011100000000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110110000101101110
+01101110011011110111010101101110
+01100011011001010000000000000000
+01110111011100100101111101100101
+01111000011001010110001101110101
+01110100011001010101111101110011
+01101100011000010111011001100101
+00000000000000000000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110111001001100101
+01110011011100000000000000000000
+01110111011100100101111101101110
+01100101011101110101111101110011
+01101100011000010111011001100101
+00000000000000000000000000000000
+01110111011100100101111101101101
+01100001011100110111010001100101
+01110010010111110110110101110011
+01100111000000000000000000000000
+01110111011100100101111101101100
+01101001011100110111010001100101
+01101110011010010110111001100111
+00000000000000000000000000000000
+01110111011100100101111101101111
+01110000011001010110111000000000
+01110111011100100101111101101001
+01101110011010010111010000000000
+00000000000000000011010110010100
+00000000000000000011010110111100
+00000000000000000011010111011100
+00000000000000000011011001001100
+00000000000000000011011001101100
+00000000000000000011011010001000
+00000000000000000011011010101000
+00000000000000000011011100110100
+00000000000000000011011101010100
+01110111011100100101111101100011
+01100001011011000110100101100010
+01110010011000010111010001101001
+01101111011011100000000000000000
+00000000000000000100110000001000
+00000000000000000100101111110000
+00000000000000000100110000110000
+00000000000000000100110011101000
+00000000000000000100110010000100
+00000000000000010111010010011100
+00000000000000010111011000000000
+00000000000000010111011000001100
+00000000000000010111011000011000
+00000000000000010111011000100100
+00000000000000010111011000110000
+01110111011100100101111101100101
+00110010011001010101111101101111
+01100110011001100111001101100101
+01110100000000000000000000000000
+01110000011100000101111101101001
+01101110011010010111010001101001
+01100001011011000110100101111010
+01101001011011100110011100000000
+00000000000000000101111011110000
+00000000000000000101011011110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101000111101100
+00000000000000000101110100000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101110111101000
+00000000000000000101100101010000
+00000000000000000000000000000000
+00000000000000000101000111101100
+01110011011101000101111101100011
+01101111011011010101111101110011
+01101100011000010111011001100101
+01011111011010000110000101101110
+01100100011011000110010101011111
+01100110011011110110110001101100
+01101111011101110111010101110000
+00000000000000000000000000000000
+01100010011011010110001101011111
+01100100011000010111010001100001
+01110011011001010111010001011111
+01100011011011010111000000000000
+01100010011011010110001101011111
+01110011011101000110000101110100
+01100101010111110110010001100101
+01100011011010010111001101101001
+01101111011011100000000000000000
+00000000000000011000000100000100
+00000000000000011000000100001100
+00000000000000011000000011100100
+00000000000000011000000100010100
+00000000000000000000000000000000
+00000000000000011000000011110000
+00000000000000010111000001011100
+00000000000000010111000001111100
+00000000000000011000000011110100
+00000000000000000000000000011111
+00000000000000000000000000011100
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011101
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000011000011011001100
+00000000000000011000011011010000
+00000000000000011000011011010100
+00000000000000011000011011011000
+00000000000000011000011011011100
+00000000000000011000011011100000
+00000000000000011000011011100100
+00000000000000011000011011101000
+00000000000000011000011011101100
+00000000000000011000011011110000
+00000000000000011000011011110100
+00000000000000011000011011111000
+00000000000000011000011011111100
+00000000000000011000011100000000
+00000000000000011000011100000100
+00000000000000011000011100001000
+00000000000000011000011100001100
+00000000000000011000011100010000
+00000000000000011000011100010100
+01110000011101000111000001100100
+01011111011011100110010101110100
+01101001011001100101111101100011
+01110010011001010110000101110100
+01100101010111110111001101101111
+01100011011010110110010101110100
+00000000000000000000000000000000
+00000000000000001100100110001100
+00000000000000001100100110011100
+00000000000000001100101000000000
+00000000000000001100101000000000
+00000000000000001100100110101100
+00000000000000001100101000000000
+00000000000000001100101000000000
+00110000111111110000001000000001
+11111010000001000000011001110000
+01110101011000100110110001101001
+01100011111111011111111100000010
+11111001000000100000000111111100
+00000010000000011111101100110000
+11111111001100001111111100000110
+00000000000000001101101011110100
+00000000000000001101101100000100
+00000000000000001101101100101000
+00000000000000001101101101011100
+00000000000000001101101110001100
+00000000000000001101101111001000
+00000000000000001101110010000100
+00000000000000001101110110110000
+00000000000000001101110100100000
+01110011011001010111010001011111
+01110000011001010111001001110011
+01101001011100110111010001100101
+01101110011101000101111101101101
+01100001011000110000000000000000
+00000000000000000000000000000000
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000001100000000
+00000000000101110000000000000000
+00000000001011100000000000000000
+00000000011000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000001000000
+00000000000000000000000010000000
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000010000000000
+00000000000000000000000011001000
+00000000000000000011100111010000
+00000000000000010011101101111100
+00000000000000010011110000000000
+00000000000000010011110000111000
+00000000000000010011110010111000
+00000000000000010011110101000100
+00000000000000010011110101011100
+00000000000000010011110001011100
+00000000000000010011101110100100
+00000000000000010011101100000000
+00000000000000010011101100110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010100100010001000
+00000000000000010100100010101000
+00000000000000010100100010110100
+00000000000000010100100011000100
+00000000000000010100100011100100
+00000000000000010100100011110100
+00000000000000010100100101011100
+00000000000000010100100100010100
+00000000000000010100100000010000
+00000000000000010100100001100000
+00000000000000000000000000000000
+00000000000000011000111001000100
+00000000000000011000111001010000
+00000000000000011000111001011100
+00000000000000011000111001101100
+00000000000000011000111001111000
+00000000000000011000111010000100
+00000000000000010111000001000000
+00000000000000011000111010010000
+00000000000000011000111010011000
+00000000000000011000111010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000100000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000110000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001000000001000000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001010000001000000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001100000001100000010
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001110000001100000010
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000010000000010000000010
+00000010000000010000000100000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000010010000010000000011
+00000010000000010000000100000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000010100000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000010110000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000011000000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000000000000000000000
+00000000000011010000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000010000000000000000
+00000000000011100000011100000100
+00000011000000100000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000000
+00000000000011110000011100000101
+00000011000000110000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000001
+11111110111111101111111011111111
+10000000100000001000000010000000
+00000000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010100000101000
+00101000001010000010100000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000100010000001000000010000
+00010000000100000001000000010000
+00010000000100000001000000010000
+00010000000100000001000000010000
+00010000000001000000010000000100
+00000100000001000000010000000100
+00000100000001000000010000010000
+00010000000100000001000000010000
+00010000000100000100000101000001
+01000001010000010100000101000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00010000000100000001000000010000
+00010000000100000100001001000010
+01000010010000100100001001000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00010000000100000001000000010000
+00100000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011010110110101000
+00000000000000011010110111001000
+00000000000000011010110111011000
+00000000000000011010110111101000
+00000000000000000000001111101000
+00000000000000000000000000000001
+00000000000000000000100101010101
+00000000000000000000000000000001
+00000000000000010110100111011100
+00000000000000000000000000000010
+00000000000000000000000000000000
+00000000000000010110100111100100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000010110100111110000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110100111111100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000010110101000001000
+00000000000000000000000000000000
+00000000000000000000111110100000
+00000000000000010110101000010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101000011000
+00000000001011000000000100000000
+00000000000000010000000000000000
+00000000000000010110101000100000
+00000000001011000000000100000000
+00000001011111110000000000000000
+00000000000000010110101000101100
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000010110101000111000
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101001011100
+00000000001011000000000000000000
+00000010000000010000000000000000
+00000000000000010110101001000100
+00000000001101100000000000000000
+00000011000000100000000000000000
+00000000000000010110101001010000
+00000000001101100000000000000001
+00000101011111110000000000000000
+00000000000000010110101001101000
+00000000010000000000000000000000
+00000101000000000000000000000000
+00000000000000010110101001110100
+11111111111111110000000000000000
+00000101011111110000000000000000
+00000000000000010110101010000000
+11111111111111110000000000000000
+00000100011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110000110000
+00000000000000011001110101010000
+00000000000000011001110100110100
+00000000000000011011000011010100
+00000000000000011011000101010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110001111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101100010000
+00000000000000010110101100010000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001100000011000
+00000000000000011011000111011000
+00000000000000000000000000000000
+00000000000000011011001000011000
+00000000000000011011001001000000
+00000000000000011011001001110000
+00000000000000011011001010011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011011001010111000
+00000000000000000000001111101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110010001100
+00000000000000011001110011111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000001000011110000
+00000000000000000001000100101000
+00000000000000000001000110111000
+00000000000000000001000111000000
+00000000000000000001001000011000
+00000000000000000001001001000100
+00000000000000000001001010011100
+00000000000000000001001011000000
+00000000000000000001001110000100
+00000000000000000001001110001100
+00000000000000000001001110010100
+00000000000000000001001111111000
+00000000000000000001010000010100
+00000000000000000001000111100100
+00000000000000000000000000000000
+00000000000000000010010001100000
+00000000000000000010001111011000
+00000000000000000010001101111100
+00000000000000000010001100100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010001011111100
+00000000000000000010100011010000
+00000000000000000010100010110000
+00000000000000000010011010101000
+00000000000000000010010011110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001000000000
+00000000000000000000000000000000
+00000000000000011011001111011000
+00000000000000000000000000000001
+00000000000000010111000000101000
+00000000000000000101001111001000
+00000000000000000000000000000010
+00000000000000010111000000111000
+00000000000000000101010111010100
+00000000000000000000000000000011
+00000000000000010111000001000000
+00000000000000000101011000100000
+00000000000000000000000000000100
+00000000000000010111000001001100
+00000000000000000101011000110000
+00000000000000000000000000000101
+00000000000000010111000001011000
+00000000000000000101011100100000
+00000000000000000000000000000110
+00000000000000010111000001011100
+00000000000000000101011100100000
+00000000000000000000000000000111
+00000000000000010111000001100100
+00000000000000000101100010001100
+00000000000000000000000000001000
+00000000000000010111000001101100
+00000000000000000101100011100000
+00000000000000000000000000001001
+00000000000000010111000001111100
+00000000000000000101101001101100
+00000000000000000000000001100100
+00000000000000010111000010000100
+00000000000000000011000101001100
+00000000000000000000000001100110
+00000000000000010111000010011100
+00000000000000000011001000110100
+00000000000000000000000001100101
+00000000000000010111000010110000
+00000000000000000011001100001000
+00000000000000000000000001100111
+00000000000000010111000011001000
+00000000000000000011001111101100
+00000000000000000000000001101000
+00000000000000010111000011100000
+00000000000000000011010011000000
+00000000000000000000000001101001
+00000000000000010111000011110000
+00000000000000000011011110010100
+00000000000000000000000001101010
+00000000000000010111000100000000
+00000000000000000011100001101000
+00000000000000000000000001101011
+00000000000000010111000100010100
+00000000000000000011100110100000
+00000000000000000000000001110101
+00000000000000010111000100100000
+00000000000000000100111100011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000010111000000101000
+00000000000000000101001111001000
+00000000000000000000000000000010
+00000000000000010111000000111000
+00000000000000000101010111010100
+00000000000000000000000000000011
+00000000000000010111000001000000
+00000000000000000101011000100000
+00000000000000000000000000000100
+00000000000000010111000001001100
+00000000000000000101011000110000
+00000000000000000000000000000101
+00000000000000010111000001011000
+00000000000000000101011100100000
+00000000000000000000000000000110
+00000000000000010111000001011100
+00000000000000000101011100100000
+00000000000000000000000000000111
+00000000000000010111000001100100
+00000000000000000101100010001100
+00000000000000000000000000001000
+00000000000000010111000001101100
+00000000000000000101100011100000
+00000000000000000000000000001001
+00000000000000010111000001111100
+00000000000000000101101001101100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010101101000100
+00000000000000000010101001100100
+00000000000000000000000000000000
+00000000000000000010101000011100
+00000000000000000010111101010000
+00000000000000000010111100001000
+00000000000000000010111000011100
+00000000000000000010100110001100
+00000000000000000010110110101000
+00000000000000000010110100101100
+00000000000000000010110010111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010110001010000
+00000000000000000010101111100100
+00000000000000000000000000000001
+00000000000000000000000010111011
+00000000000000000000000011111110
+11111111111111111111000001100000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000010100000001111101000
+00000000000001100000000100000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001100000011000
+01110110011011000110000101101110
+00100000011011110110011001100110
+00111011011100000111010001110000
+00100000011100110111010001101111
+01110000001110110111001101100110
+01110000001000000110110101100001
+01110100011000110110100000111011
+01101101011011110110010001100101
+00100000011100110110110001100001
+01110110011001010011101101110000
+01110100011100000010000001110011
+01110100011000010111001001110100
+00000000000000000000000000000000
+00000000000000011001111101101000
+00000000000000011000000011010100
+00000000000000000001011111011000
+00000000000000000000000000000001
+00000000000000011000000011011100
+00000000000000000001011111011000
+00000000000000000000000000000000
+00000000000000011000000011100100
+00000000000000000001010001110100
+00000000000000000000000000000000
+00000000000000011000000011101000
+00000000000000000001010001110100
+00000000000000000000000000000000
+00000000000000011000000011110000
+00000000000000000001010110110100
+00000000000000000000000000000001
+00000000000000010111000001011100
+00000000000000000001010110110100
+00000000000000000000000000000010
+00000000000000010111000001111100
+00000000000000000001010110110100
+00000000000000000000000000000011
+00000000000000011000000011110100
+00000000000000000001010110110100
+00000000000000000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001000000000
+00000000000000000000000000000000
+00000000000000011011100100000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000001100000
+00000000000000000000000000000000
+00000000000000011011101100000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000011011101101100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000011011101111101000
+00000000000000011010000111001100
+00000000000000001100111011011100
+00000000000000011010000111011000
+00001001000000000000000000000000
+00000000000000011010001000111100
+00000000000000001100111011011100
+00000000000000011010001001001000
+00001001000000000000000000000000
+00000000000000011010001010011000
+00000000000000001100110011001100
+00000000000000011010001010100100
+00001010000000000000000000000000
+00000000000000011010001011100000
+00000000000000001100111011011100
+00000000000000011010001011101100
+00001001000000000000000000000000
+00000000000000011010001110110100
+00000000000000001100111011011100
+00000000000000011010001111000000
+00001001000000000000000000000000
+00000000000000011010010100101000
+00000000000000001100111011011100
+00000000000000011010010100110100
+00001001000000000000000000000000
+00000000000000011010010111000000
+00000000000000001100111011011100
+00000000000000011010010111001100
+00001001000000000000000000000000
+00000000000000011010011001000100
+00000000000000001100110011001100
+00000000000000011010011001010000
+00001010000000000000000000000000
+00000000000000011010000110000000
+00000000000000001100011000011100
+00000000000000011010011010110100
+00001100000000000000000000000000
+00000000000000011010000110001100
+00000000000000001100011000011100
+00000000000000011010011011011100
+00001100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000010
+00000000000000000000000100000001
+00101011000001100000000100000100
+00000001011000000110010100000010
+00000000000000000000001000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000100000000
+00000000000000000000000000000000
+00000000000000011011110010011000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000001000000000000000000000000
+00000000000000011010011100000100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001001110100
+00000010000001000000000000000101
+00000000000000011010011100001000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011001011011011000
+00000010000001000000000000000100
+00000000000000011010011100001100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011001011011100100
+00000010000001000000000000000100
+00000000000000011010011100010000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011010011100010100
+00000010000001000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000010000000000000000000000000
+00000000000000011010011100011000
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000100
+00000010010001100000000000000001
+00000000000000011010011100011100
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000101
+00000010000001000000000000000001
+00000000000000011010011100100000
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000010
+00000010010000110000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000011000000010000000000000000
+00000000000000011010011100100100
+00000000000000001101100000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000011010011100101000
+00000000000000001101100000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000100000000000000000000000000
+00000000000000011010011100101100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110000000
+00000010000000100000000000000100
+00000000000000011010011100110000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110000100
+00000010010000010000000000000100
+00000000000000011010011100110100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110001000
+00000010000000100000000000000100
+00000000000000011010011100111000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110001100
+00000010000000100000000000000100
+00000000000000011010011100111100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110010000
+00000010010000010000000000000100
+00000000000000011010011101000000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110010100
+00000010010000010000000000000100
+00000000000000011010011101000100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110011000
+00000010000000100000000000000100
+00000000000000011010011101001000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110011100
+00000010000000100000000000000100
+00000000000000011010011101001100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110100000
+00000010010000010000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000101000000000000000000000000
+00000000000000011010011101010000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100001010000000100
+00000000000000011010011101010100
+00000000000000001101001111000100
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000101000100000001000
+00000000000000011010011101011000
+00000000000000001101001111000100
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000101000000000001000
+00000000000000011010011101011100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010010001100100000000001000
+00000000000000011010011101100000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010010000010101100000000100
+00000000000000011010011101100100
+00000000000000001101001010110000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000010010001100000000000000001
+00000000000000011010011101101000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100001100000000100
+00000000000000011010011101101100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100001110000000100
+00000000000000011010011101110000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100010000000000100
+00000000000000011010011101110100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100010010000000100
+00000000000000011010011101111000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010010000011001000000000100
+00000000000000011010011101111100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010010000011001010000000100
+00000000000000011010011110000000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010010000011001100000000100
+00000000000000011010011110000100
+00000000000000001101001010110000
+00000000000000000000000000000000
+00000000000000000000000000000010
+00000010010001100000000000000001
+00000000000000011010011110001000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011001110000101000
+00000010010000010000000000000100
+00000000000000011010011110001100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011001110000101100
+00000010010000010000000000000100
+00000000000000011010011110010000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001101100
+00000010000000100010100000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000110000000000000000000000000
+00000000000000011010011110010100
+00000000000000001101010001111100
+00000000000000001101011000110100
+00000000000000011011110110011000
+00000010000000100000000000000100
+00000000000000011010011110011000
+00000000000000001101010001111100
+00000000000000001101011010010100
+00000000000000011011110110011100
+00000010000000100000000000000100
+00000000000000011010011110011100
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110001110000
+00000010000001000000000000010000
+00000000000000011010011110100000
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010000100
+00000010000000100000000000000100
+00000000000000011010011110100100
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010001000
+00000010000000100000000000000100
+00000000000000011010011110101000
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010000000
+00000010000000100000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000111000000000000000000000000
+00000000000000011010011110101100
+00000000000000001101010111010100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000010000000100000000000000001
+00000000000000011010011110110000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011011111110101100
+00000010000001000000000000010000
+00000000000000011010011110110100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011011111100111000
+00000010000000100000000000000100
+00000000000000011010011110111000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001001101100
+00000010010000010000000000000100
+00000000000000011010011110111100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001001110000
+00000010010000010000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00001000000000010000000000000000
+00000000000000011010011111000000
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000011010011111000100
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000011010011111001000
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000011010011111001100
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001101001010010100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000100010000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001101001010010100
+00000000000000001101001001111000
+00000000000000000000000000000000
+00000100010000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000000000000011000011111010000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000110000000000000000000000000
+00000111000000000000000000000000
+00001000000000000000000000000000
+00001001000000000000000000000000
+00000101000000000000000000000000
+00001000000000000000000000000000
+00001001000000000000000000000000
+00001010000000000000000000000000
+00001100000000000000000000000000
+00001101000000000000000000000000
+00001110000000000000000000000000
+00001111000000000000000000000000
+00010000000000000000000000000000
+00010001000000000000000000000000
+00010010000000000000000000000000
+00010011000000000000000000000000
+00010100000000000000000000000000
+00010110000000000000000000000000
+00010111000000000000000000000000
+00011000000000000000000000000000
+00011010000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000110000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000000000000011010101001001100
+00000000000000011010101101001000
+00000000000000011010101101001000
+00000000000000011010110000101100
+00000000000000000000000000000100
+00000000000000000000000000001000
+00000000000000000000000000001111
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000000100101100
+00000100011000110110001010100000
+00000000000000000000000000000000
+00000000000000011100001010101100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+10101011001010000110001100111010
+00000000000000000000000000000000
+00000000000000011011111110010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01100101000011000010110101001111
+00000000000000000000000000000000
+00000000000000011100001010110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01100101000101011000110111000000
+00000000000000000000000000000000
+00000000000000011011111111000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11011110000011011000110011101101
+00000000000000000000000000000000
+00000000000000011100001010110000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11111111000001111111110001000111
+00000000000000000000000000000000
+00000000000000011100001001111100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11100010110100010011110100000100
+00000000000000000000000000000000
+00000000000000011100001001101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01110111100111000101010001000011
+00000000000000000000000000000000
+00000000000000011100001010101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000011001010001
+01101000001000000010101100100010
+00000000000000000000000000000000
+00000000000000011000100111000100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000110000000000000000
+00000000000000000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000110101000100
+00000000000000011011111101101000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010000110101011100
+00000000000000010000111100011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010010101011110100
+00000000000000010010101100101000
+00000000000000010010101101011000
+00000000000000010111101110101000
+10000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000100001100110010001000010001
+00000000000000000000000000000000
+00000100000000000000000000000000
+00010011100000000100011011100010
+00000001000000000000000000000000
+10010000000000001100111111101010
+00000001000000000000000000000000
+00010000100000010101011111110011
+00000001000000000000000000000000
+00001011111000001111111111111111
+00000001000000000000000000000000
+10001000111000001111111111111111
+00000001000000000000000000000000
+00001000111000011111111111111111
+00000001000000000000000000000000
+00011011000000000010000011100000
+00000001000000000000000000000000
+10011000000000001100000011101011
+00000001000000000000000000000000
+01101011001000010011000011100000
+00000001000000000000000000000000
+01101001011000010000110111100000
+00000001000000000000000000000000
+00010000101000111000100100000000
+00000100000000000000000000000000
+01101011000000110010000011110000
+00000001000000000000000000000000
+10111011000011011000000000000001
+00000100000000000000000000000000
+00110011111000110001111011110001
+00000001000000000000000000000000
+00110001110000110101111111111001
+00000001000000000000000000000000
+00101011000000110000000011100001
+00000001000000000000000000000000
+01000011110000110000000011100001
+00000001000000000000000000000000
+01111001010000010001010000000000
+00000100000000000000000000000000
+11001011001001010000000001100000
+00000000000000000000000000000000
+11010011001001010000001001100000
+00000000000000000000000000000000
+01010000111010101000000100000001
+00000100000000000000000000000000
+10000001110010001000000000000001
+00000100000000000000000000000000
+10000000001011111100000100000000
+00000100000000000000000000000000
+01011011000010010000000010000000
+00000001000000000000000000000000
+01011001000010010010000010000000
+00000001000000000000000000000000
+11000000011010101100000100000000
+00000100000000000000000000000000
+01100011000010010111101011111101
+00000001000000000000000000000000
+11111000100010101000000100000001
+00000100000000000000000000000000
+11110100100010101000000100000001
+00000100000000000000000000000000
+00000000000000000000000000000000
+00001000000000000000000000000000
+01000100001100110010001000010001
+00000000000000000000000000000000
+00000100000000000000000000000000
+00010011100000000100011011100010
+00000001000000000000000000000000
+10010000000000001100111111101010
+00000001000000000000000000000000
+00010000100000010101011111110011
+00000001000000000000000000000000
+00001011111000001111111111111111
+00000001000000000000000000000000
+10001000111000001111111111111111
+00000001000000000000000000000000
+00001000111000011111111111111111
+00000001000000000000000000000000
+00011011000000000010000011100000
+00000001000000000000000000000000
+10011000000000001100000011101011
+00000001000000000000000000000000
+01101011001000010011000011100000
+00000001000000000000000000000000
+01101001011000010000110111100000
+00000001000000000000000000000000
+00010000101000111000100100000000
+00000100000000000000000000000000
+01101011000000110010000011110000
+00000001000000000000000000000000
+10111111000011011000000000000001
+00000100000000000000000000000000
+10100011010000110101010111100001
+00000000000000000000000000000000
+00110011111001000001111011110001
+00000001000000000000000000000000
+00110001110001000101111111111001
+00000001000000000000000000000000
+00101011000001000000000011100001
+00000001000000000000000000000000
+01000011110001000000000011100001
+00000001000000000000000000000000
+10000001001000101001100000000000
+00000100000000000000000000000000
+11000000100100001000000000000001
+00000100000000000000000000000000
+01101001001000101000000000000001
+00000100000000000000000000000000
+10100011010000110000000111100000
+00000000000000000000000000000000
+10100001011000110000000111100000
+00000000000000000000000000000000
+11111000100011011000000000000001
+00000100000000000000000000000000
+10100011100000110000001011100000
+00000000000000000000000000000000
+11110000100011011000000000000001
+00000100000000000000000000000000
+00000000000000000000000000000000
+00001000000000000000000000000000
+01010011010001000100001000101101
+00000000000001010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+00101110001000000010000000100000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00101110001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000000101000000
+00000000000000000000000000000000
+00000000000000000000001000111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110111011100100010110101101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110111011100100010110101101001
+01101110011010010111010000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001001000000
+00000000000000000000000000000000
+00000000000000000000001010111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01100011011000010110110001101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001011000000
+00000000000000000000000000000000
+00000000000000000000001011000101
+01000110011010010110110001100101
+01000100011000010111010001100001
+01101101011000010110001100101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01101101011000010110001100101101
+01100001011001000110010001110010
+01100101011100110111001100100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001100000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110011011001100111000000101101
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000001000000010000000100000
+00100000001000000010000000000001
+11111111111111111111111111111111
+00000000000000011001010111010000
+01011011000100010101011110100111
+00000000000000000000000000000011
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01110111011100100111000001100011
+00101101011101100011010000101110
+00110010001011010011001000101101
+01100111001110010011011101100110
+00110100001100010011100001100101
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000001011100000111001000100000
+00100000001101000010000000110010
+00110000001100010011100000000000
+00000000000000000000000000000000
+00110001001100010011101000110010
+00110110001110100011001000111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01001101011011110111001001101001
+01110100011110100010000001000110
+01101001011100110110001101101000
+01100101011100100000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000000010101000
+00000000000000001001011001000000
+00000000000000011000000011111100
+00000000000000001001011100000000
+00000000000000010110011111100100
+00000000000000001001011100000000
+00000000000000011000000100111000
+00000000000000001001100000111100
+00000000000000011000000110001100
+00000000000000001001100101010100
+00000000000000011000001000001100
+00000000000000001001101001100100
+00000000000000010110011111101000
+00000000000000001001101110011100
+00000000000000011000001000110000
+00000000000000001001101111001100
+00000000000000011000001001010100
+00000000000000001001110000101100
+00000000000000011000001110000100
+00000000000000001001110100110000
+00000000000000011000001111000000
+00000000000000001010000011001000
+00000000000000011000010000011100
+00000000000000001010001100110000
+00000000000000011000010001010100
+00000000000000001010010000001000
+00000000000000011000010001011100
+00000000000000001010010101101000
+00000000000000011000010001101000
+00000000000000001010010110000000
+00000000000000011000010010011000
+00000000000000001010011100101000
+00000000000000011000010100001100
+00000000000000001010100001111000
+00000000000000011000010100101000
+00000000000000001010100101101000
+00000000000000011000001110001000
+00000000000000001010100110110000
+00000000000000011000010110110000
+00000000000000001010101010010100
+00000000000000011000011001000100
+00000000000000001010101101111000
+00000000000000011000101010101000
+00000000000000010000101010100100
+00000000000000011000110111011000
+00000000000000010010110110100100
+00000000000000011000110111011100
+00000000000000010010110010101000
+00000000000000011000110111100000
+00000000000000010010101110101100
+00000000000000010011011010100000
+00000000000000000000000000000000
+00000000000000011010101000111100
+00000000000000010110011111111100
+00000000000000000000000000000000
+00000000000000000000001010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010101001001011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111011000
+00000000000000000000000000000000
+00000000000000001001010011000000
+00000000000000000000010011100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000001100000011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111101000
+00000000000000000000000000000000
+00000000000000000000001010000000
+00000000000000000000001000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111110000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001111110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010111111110000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000001010100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010111111110001100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000111111011101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101010000
+00000000000000011100001010010100
+00000000000000000000000000000000
+00000000000000001011001010011100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101011000
+00000000000000011100001010010100
+00000000000000001011101000010000
+00000000000000001011101111111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101100000
+00000000000000011100001010010100
+00000000000000001011111111101100
+00000000000000001011111001100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011111001000
+00000000000000011100001010010100
+00000000000000001101100111110000
+00000000000000001100100011000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011111111000
+00000000000000000000000000000000
+00000000000000001101111101100100
+00000000000000001101111001010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000101010110000
+00000000000000000000000000000000
+00000000000000010000011101111100
+00000000000000010000011111001000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram
new file mode 100644
index 000000000..d02bac529
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.bram
@@ -0,0 +1,32768 @@
+10011000000000000000000000000000
+11010000000000000000000000000000
+11010000001000000000000000000000
+01111000000000010000000000000000
+00111000001000010000000000000000
+11010000111000010000000000000000
+11111000000000000000000000111010
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01010111010100100101000001000011
+00101101001011010010110100101101
+00000001001000110100010101100111
+10001001101010111100110111101111
+00000000000000011011111111011000
+00000000000000000000000000000000
+00000000000000011001100000101000
+00000000000000011010110110000100
+00000000000000000000000000000000
+00000010000101000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01011011100111010000000000000000
+11111000000000000000000000011110
+00110100000000010000000000000010
+11111000000000000101000110011110
+11100000000000000000000000101110
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+10011000000000000000000000000000
+01111000000111000000000000000001
+00111011100111001111111111111100
+01111000000000010000000000000001
+00111000001000011011000010110000
+00110100000000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001011001000
+11001000011000010001100000000000
+11111000000000000101100000001011
+00110100000000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+11111000000000000000000100001001
+11100000000000000000000000000000
+00110111100111001111111111000100
+01011011100000010000000000000100
+01011011100000100000000000001000
+01011011100000110000000000001100
+01011011100001000000000000010000
+01011011100001010000000000010100
+01011011100001100000000000011000
+01011011100001110000000000011100
+01011011100010000000000000100000
+01011011100010010000000000100100
+01011011100010100000000000101000
+01011011100111100000000000110100
+01011011100111110000000000111000
+00101011100000010000000000111100
+01011011100000010000000000110000
+10111011100000000000100000000000
+00110100001000010000000000111100
+01011011100000010000000000101100
+11000011101000000000000000000000
+00101011100000010000000000000100
+00101011100000100000000000001000
+00101011100000110000000000001100
+00101011100001000000000000010000
+00101011100001010000000000010100
+00101011100001100000000000011000
+00101011100001110000000000011100
+00101011100010000000000000100000
+00101011100010010000000000100100
+00101011100010100000000000101000
+00101011100111010000000000110000
+00101011100111100000000000110100
+00101011100111110000000000111000
+00101011100111000000000000101100
+00110100000000000000000000000000
+11000011110000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000001000010000000000000000
+11000011101000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00111000010000100000000000000001
+11010000001000100000000000000000
+00111000001000010000000000000001
+11010000000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011110110000011
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000011000111011000011000100
+00111000010000101011000011001000
+00101000011001000000000000000000
+00101000010001010000000000000000
+01011000011000010000000000000000
+00110100000000110000001111101000
+11001000101001000010000000000000
+10110100100000010010000000000000
+01011000010001000000000000000000
+00110100000000010000000000000000
+01010000011001000000000000001001
+01111000000000010000000000000000
+00111000001000010000000010100000
+00110100100001001111110000011000
+01011000010001000000000000000000
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011110101101000
+01111000000000100000000000000001
+00111000010000101011000011000100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000000100
+11111000000000000011111011011111
+11111000000000000011100001001101
+01111000000000010000000000000001
+00111000001000010110011100100000
+11111000000000000011011101101111
+00110100000000010000000000000001
+11111000000000000011110101000111
+01111000000000010000000000000001
+00111000001000011100001010000100
+11111000000000000011110100101001
+11111000000000000100100000001000
+11111000000000000100101000101101
+01111000000000010000000000000001
+00111000001000011100000111110000
+01011000001000000000000000000000
+11111000000000000100100101010011
+11111000000000000100000001010100
+00110100000000010000000000000000
+11111000000000000011101101101100
+00110100000000010000000000000000
+00110100000000100000000001010000
+11111000000000000100010000000011
+00110111100000100000000000001000
+00110100000000010000000000000000
+11111000000000000100010011001100
+00110100000000101111111111111111
+01011100001000100000000000000110
+01111000000000010000000000000001
+00111000001000010110011100111100
+11111000000000000011011101010110
+00110100000000010000000000100010
+00110011100000010000000000001000
+01000011100001000000000000001010
+01000011100001010000000000001011
+01000011100001100000000000001100
+01000011100001110000000000001101
+01000011100000110000000000001001
+01000011100000100000000000001000
+01111000000000010000000000000001
+00111000001000010110011101100000
+11111000000000000011011101001011
+11111000000000000011110110110101
+00110111100000010000000000001000
+11111000000000000011100101010000
+00110100000000010000000011001000
+11111000000000000011110100110111
+00110100000000100000000000000001
+00110100000000010000000000000001
+11111000000000000011100010011101
+11111000000000000011101110000000
+11111000000000000100000111100011
+11111000000000000000010000101110
+01111000000000100000000000000001
+00111000010000101001011100000000
+00110100000000010000000000000010
+11111000000000000011111110111001
+11111000000000000101000110110001
+11111000000000000010101101010001
+11111000000000000010001100100010
+01111000000000110000000000000001
+00111000011000111000111011000100
+01111000000000010000000000000001
+00101000011000100000000000000000
+00111000001000011011000010110000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011111100000000000
+01011000001000100000000000000000
+00110100000000010000000000000011
+11111000000000000000010001111101
+11111000000000000000010000110000
+01111000000000100000000000000001
+00111000010000101011000010111000
+00110100000000010000000000000000
+11111000000000000100001000011010
+11111000000000000011110100010100
+01111000000000100000000000000001
+00111000010000101011000010111100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000010000000000000000
+11111000000000000011100010101001
+10111000001000000101100000000000
+01111000000000010000000000000001
+00111000001000011011000011000000
+00101000001001000000000000000000
+01111101011000100000000000000000
+01100100100000110000000000000000
+10100000010000110001100000000000
+01000100011000000000000000001101
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00110100000000100000000000000010
+01011000001000100000000000000100
+11111000000000000011110111011100
+11111000000000000000010000010001
+01111000000000010000000000000001
+00111000001000011100001010100100
+00110100000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000010100
+01100101011000010000000000000000
+01111100100001000000000000000000
+10100000001001000000100000000000
+01000100001000110000000000010010
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00110100000000100000000000000010
+01011000001000100000000000001000
+01111000000000010000000000000001
+00111000001000011100001010100100
+01011000001000100000000000000000
+11111000000000000000010000100101
+00110100000000010000000000000010
+00110100000000100000000000000000
+00110100000000110000000000000001
+11111000000000000101000101111001
+00110100000000010000000000000000
+11111000000000000100001000010111
+00110100000000010000000000000001
+11100000000000000000000000001000
+11111100010000010001000000000000
+01111000000000010000000000000001
+11001000000000100001000000000000
+00111000001000011100001010100100
+00100000010000100000000000000011
+01011000001000100000000000000000
+00110100000000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000011000000
+01011000010010110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011000010110000
+00101000001000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000001111
+11111000000000000001111111111100
+10111000001000000101100000000000
+11111000000000000011011111100100
+00110100000000100000000000011011
+01000100001000100000000000000101
+01111000000000100000000000000001
+00111000010000101001011011111000
+00101000010000010000000000000000
+01011100001000000000000000001000
+11111000000000000010001010111101
+01111000000000100000000000000001
+00111000010000101011000010110000
+01011000010000000000000000000000
+11100000000000000000000000000011
+11111000000000000010001011000010
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+11111000000000000101001111101010
+00111001011010111010111011101100
+00111001100011001011000010101100
+11100000000000000000000000000101
+00101001011000010000000000001000
+01000100001000000000000000000010
+11011000001000000000000000000000
+00110101011010110000000000100000
+01010101100010111111111111111100
+01111000000010110000000000000001
+01111000000000010000000000000001
+00111001011010111010111011101100
+01111000000101000000000000000001
+01111000000100000000000000000001
+00111000001000011000111011001000
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000100100000000000000001
+01111000000100010000000000000001
+00111010100101001011000010101100
+00111010000100001011000010111000
+00101000001100110000000000000000
+00111001111011111011000010111100
+00111001110011101011000010110100
+00111010010100100110011111001000
+00111010001100010110011110010100
+10111001011000001010100000000000
+11100000000000000000000000111100
+00101001011000010000000000001100
+01011100001000000000000000000101
+00101001011000010000000000010000
+00110100001000010000000000000001
+01011001011000010000000000010000
+11100000000000000000000000001011
+00101001011000100000000000000100
+01000100010000000000000000000011
+00101000010000100000000000000000
+01000100010000000000000000000111
+11011000001000000000000000000000
+00101001011000100000000000010000
+10111001011000000110000000000000
+10110100010000010001000000000000
+01011001011000100000000000010000
+01011100001000000000000000000010
+10111010101000000110000000000000
+00110111100000100000000000111000
+00110100000000010000000000000000
+11111000000000000100000101111010
+11111000000000000011110001110100
+10111000001000001011000000000000
+00101010000000100000000000000000
+00101011100000010000000000111000
+11001000001000100001000000000000
+01001100010000000000000000000010
+10110100010100110001000000000000
+00101001100000110000000000011000
+10110100010000110001000000000000
+01011001100000100000000000011000
+01010010011000100000000000000110
+11001000010100110001000000000000
+01011001100000100000000000011000
+00101001100000100000000000010100
+00110100010000100000000000000001
+01011001100000100000000000010100
+00101001111011010000000000000000
+01011010000000010000000000000000
+11001010110011010110100000000000
+01001101101000000000000000000010
+00110101101011010000001111101000
+00101001100000110000000000011100
+01010000011011010000000000001000
+00101001110000010000000000000000
+01000100001000000000000000000101
+00101001100000100000000000000000
+10111010001000000000100000000000
+10111001101000000010000000000000
+11111000000000000011011001101100
+01011001100011010000000000011100
+00101001110000010000000000000000
+01000100001000000000000000000110
+01010000001011010000000000000101
+00101001100000100000000000000000
+10111010010000000000100000000000
+10111001101000000001100000000000
+11111000000000000011011001100100
+01011001111101100000000000000000
+00110101011010110000000000100000
+01010110100010111111111111000101
+11111000000000000101001110010001
+10111010101000000101100000000000
+11100011111111111111111111111101
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01011011100000110000000000101100
+01111000000000110000000000000001
+00111000011000111011000011001100
+01011011100000100000000000101000
+01011011100001000000000000110000
+01011011100001010000000000110100
+01011011100001100000000000111000
+01011011100001110000000000111100
+01011011100010000000000001000000
+00101000011011010000000000000000
+10111000001000000101100000000000
+10111000010000000111000000000000
+00110100000000110000000000000000
+01000100001000000000000000000010
+00101000001000110000000000011100
+10111000011011010001100000000000
+00000000011000110000000000011100
+01000100011000000000000000011110
+01111000000011000000000000000001
+00111001100011001011000011001100
+00111001101000010000000000000001
+01011001100000010000000000000000
+00101001011000010000000000111000
+00110111100000100000000000011000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+01011001100011010000000000000000
+00101011100001000000000000100000
+00101111100000110000000000100100
+00101001011010110000001111010100
+00111100100001000000000000010000
+01111000000011000000000000000001
+10111000100000110000100000000000
+01111000000000110000000000000001
+00111000011000111000111011001100
+00101000011000100000000000000000
+00111001100011000110100000010100
+11111000000000000101010100111011
+00101011100000110000000000011100
+10111000001000000010000000000000
+10111001011000000001000000000000
+10111001100000000000100000000000
+11111000000000000011011000101100
+10111001110000000000100000000000
+00110111100000100000000000101100
+11111000000000000011011000000111
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000010100000000000
+01011100011000000000000000000101
+01111000000000100000000000000001
+00111000010000100110100000110000
+10111000101000000001100000000000
+11100000000000000000000000001100
+00110100000000100000000000000001
+01011100011000100000000000000110
+01111000000000100000000000000001
+00111000010000100110100001001100
+10111000101000000001100000000000
+00101000001001000000000000001000
+11100000000000000000000000000101
+00101000001001000000000000000100
+01111000000000100000000000000001
+00111000010000100110100001100100
+10111000101000000001100000000000
+11111011111111111111111110110001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100111010000000000001100
+10111000001000000101100000000000
+10111000010000000111000000000000
+10111000011000000110100000000000
+01001100000000110000000010110110
+01000000010000110000000000000000
+00101000001010000000000100001100
+00101000001010010000000100001000
+00100000011000110000000000001111
+00101000001001100000000100000100
+01011011100000110000000000000100
+00001000011000110000000000001100
+01111000000000100000000000000001
+00000001000001110000000000010000
+00111000010000101001011101101000
+00100001000010001111111111111111
+10110100010000110001000000000000
+00001001000010000000001111101000
+00101000010000100000000000000000
+00111101001010010000000000010000
+01111000000001000000000000000001
+00000001000010000000000000010000
+01011011100000100000000000001000
+00110100000000110000000000000001
+00110100000000100000000000000101
+00111000100001000110100001111100
+10111001101000000010100000000000
+10111001001001110011100000000000
+11111000000000000000000010100010
+00110100000000010000000000100001
+01001100001011010000000010011100
+01000001110000010000000000000000
+00110100000000100000000000001101
+00100000001000010000000000001111
+01001000001000100000000000010000
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101000111110100000
+10110100010000010001000000000000
+00101000010000010000000000000000
+01001000001011010000000000001010
+01000001110000100000000000000001
+00110100000000010000000000000010
+00100000010000100000000000001111
+01011100010000010000000000000110
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11111000000000000001011111010010
+01000100001000000000000000000011
+00110100000011010000000000000000
+00110100000011100000000000000000
+00101001011011000000000000010000
+01011001011000000000000000001100
+00101001011000010000000000000000
+01000101100000000000000000000011
+00101001100000100000000000000000
+01000100010000010000000000010011
+00110100000000100000000000000001
+01111000000011000000000000000001
+01011001011000100000000000001100
+00111001100011001001110110101000
+11100000000000000000000000000110
+01011100010000010000000000000100
+01011001011011000000000000010000
+01011101100000000000000000001011
+11100000000000000000000000000100
+00110101100011000000000000001100
+00101001100000100000000000000000
+01011100010000001111111111111010
+00101001011000100000001111010100
+01111000000000010000000000000001
+00111000001000010110100010101100
+11111000000000000011010110111010
+00110100000000010010011100010000
+11100000000000000000000001100110
+01011001011000010000000000000100
+00101001011000010000000000001100
+01011001011000000000000000001000
+01000100001000000000000000000110
+00101001100000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000000
+10111001101000000010000000000000
+11111011111111111111111110001110
+01000101110000000000000000110011
+00101001011000010000000000110000
+01000001011001010000001110100110
+00101000001000010000000000001100
+01000000001000010000000000011110
+01000100001001010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100011001100
+11111000000000000000000001011110
+11100000000000000000000000100101
+01000001011100000000001110100111
+00100010000100000000000000000001
+01000110000000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100011101000
+11100000000000000000000000001100
+00101001011000100000001101011000
+00110101011011110000001111000000
+10111001111000000000100000000000
+00110100000000110000000000001010
+11111000000000000101010100101011
+01011100001100000000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000110100100000100
+11111000000000000000000001001000
+11100000000000000000000000001111
+01000001011000100000001110100001
+00110100000000010000000000001011
+01011100010000010000000000001110
+00101001011000100000001101011000
+10111001111000000000100000000000
+00110100000000110000000000001000
+11111000000000000101010100011100
+01011100001000000000000000001001
+00101001011000010000001101011000
+00101101011000100000001111001000
+00101100001000010000000000001000
+01010000010000010000000000000011
+00110100000000010000000000000111
+01011001011000010000000000000100
+00110100000011010000000000000000
+00110100000011100000000000000000
+00101001011000010000000000000100
+00101001011000100000000000000000
+01011100010000010000000000010011
+01011101101000000000000000000011
+00110100000000010000000000001111
+00110001011000010000001110100001
+00101001100001000000000000001000
+10111001101000000001100000000000
+10111001011000000000100000000000
+10111001110000000001000000000000
+11011000100000000000000000000000
+10111000001000000001100000000000
+01000100001000000000000000000110
+00101001011000100000001111010100
+00101001100001000000000000000100
+01111000000000010000000000000001
+00111000001000010110100100011100
+11111000000000000011010101101010
+00101001011000010000000000000100
+00101001011000100000000000000000
+01000100010000010000000000001111
+01011001011000010000000000000000
+10111001011000000000100000000000
+11111000000000000000000011100110
+01000001011000010000000000100000
+00101001011000100000000000010000
+00110100000000110000000000000010
+00100000001000010000000011111001
+00110001011000010000000000100000
+00101000010000100000000000000100
+10111001011000000000100000000000
+00110100000001000000000000000000
+11111011111111111111111100111010
+00110100000000010000000000000000
+11100000000000000000000000000111
+00101001100000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111011111111111111111100110011
+00101001011000010000000000001000
+00101011100111010000000000001100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110100000000010000000000000000
+00110100000011010000000000000000
+00110100000011100000000000000000
+11100011111111111111111101100110
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100001000000000000001100
+01011011100001010000000000010000
+10111000100000000101100000000000
+01011011100001100000000000010100
+01111000000001000000000000000001
+01011011100001110000000000011000
+01011011100010000000000000011100
+00111000100001000110100100111000
+00110100000001010000000000000000
+01000100001000000000000000000011
+00101000001001000000001111010100
+00101000001001010000000000011100
+01111000000001100000000000000001
+00111000110001101011000011001100
+00101000110000010000000000000000
+00111100010000100000000000000010
+10111000101000010010100000000000
+10000000101000100010100000000000
+00100000101001010000000000001111
+01010100011001010000000000001100
+01111000000001010000000000000001
+00111000101001011000111111101000
+10110100101000100010100000000000
+01111000000001100000000000000001
+00101000101000100000000000000000
+10111000110000000000100000000000
+00111000001000010110100101000000
+11111000000000000011010100100111
+10111001011000000000100000000000
+00110111100000100000000000010000
+11111000000000000011010100000010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000011100
+10111000001000000001100000000000
+00110100000010110000000000000000
+00110100000001011111111111111100
+00110100000001000000000000000011
+11100000000000000000000000001001
+00110100001000011111111111010000
+00100000001001100000000011111111
+01010000100001100000000000000010
+11100000000000000000000000001000
+10111100001000100000100000000000
+00110100011000110000000000000001
+10111001011000010101100000000000
+00110100010000101111111111111100
+01000000011000010000000000000000
+01000100001000000000000000000111
+01011100010001011111111111110110
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000010110100101001100
+00111000010000101000111111011000
+11111000000000000011010100000111
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101000001001000000001101011000
+01111000000000100000000000000001
+00111000010000101001011100001000
+00010000100000110000000000001010
+00110100000001010000000000000001
+00101000001000010000000000110000
+01011000010000110000000000001000
+00110100011000110000000000001100
+10111100101000110001100000000000
+00101000001000010000000000010000
+01011000010000110000000000111000
+00010000100000110000000000001101
+00101100001000010000000000000000
+01011000010000110000000000010100
+00010000100000110000000000001011
+01000000100001000000000000001100
+00110100001000010000000000000001
+01011000010000110000000000101100
+10111100100000110010000000000000
+00001000100001000000001111101000
+01011000010001000000000000100000
+00110100000001000000001111101000
+10111100100000110001100000000000
+10001000001000110001100000000000
+01011000010000110000000001000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000000000111000
+10111000011000000110000000000000
+10111000001000000101100000000000
+00101000010000110000000000011000
+10111001100000000001000000000000
+11011000011000000000000000000000
+00110101101000100000000011010110
+00111100010000100000000000000010
+00001001101011010000000000001100
+10110101011000100001000000000000
+01011000010000010000000000000100
+01111000000000010000000000000001
+00111000001000011001011100001000
+10110100001011010110100000000000
+00101001101001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000011
+00111000100001000110100110111100
+10111001100000000011000000000000
+11111011111111111111111110000111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+10111000001000000110100000000000
+00001001100000010000000000001100
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101001011100001000
+00111000011000111011000011010000
+10110100010000010001000000000000
+00101000011000010000000000000000
+00101000010001000000000000001000
+01011100001000000000000000000101
+00101001101000010000000000110000
+00101000001000010000000000001100
+00101000001000010000000000001000
+01011000011000010000000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000011000111011000011010000
+00111000001000011000111011010000
+00101000011000100000000000000000
+00101000001001010000000000000000
+00110100000010110000000000011001
+10001000010001010001000000000000
+00110100010000100011000000111001
+00000000010000010000000000010000
+10001000010001010001000000000000
+00100000001000010000011111111111
+00110100010000100011000000111001
+01011000011000100000000000000000
+00111100001000110000000000001010
+00000000010000010000000000010000
+00110100100000100000000000000100
+00100000001000010000001111111111
+10011000001000110000100000000000
+00001001100000110000000000001100
+10111101011000100101100000000000
+01111000000000100000000000000001
+00111000010000101001011100001000
+10110100010000110001000000000000
+00101000010000100000000000000100
+00110100000000110000000000000001
+01000100010000110000000000000101
+00110100000000110000000000000010
+01000100010000110000000000001000
+01011100010000000000000000001100
+11100000000000000000000000001010
+10111001011000000001000000000000
+00111101011010110000000000000001
+11111000000000000101001111110111
+10110100001010110101100000000000
+11100000000000000000000000000110
+00001001011000100000000000000101
+11111000000000000101001111110011
+10111000001000000101100000000000
+11100000000000000000000000000010
+10111000100000000101100000000000
+10111001101000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+11111011111111111111111110011110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000001000000110000000000000
+00110100000011010000000000001000
+10111001011000000001000000000000
+10111001100000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111110101110
+01011101011011011111111111111100
+10111001100000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000010100
+11111011111111111111111110000111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000011000
+00110100000000100000000000000000
+11011000011000000000000000000000
+00110101100000100000000011010110
+00111100010000100000000000000010
+10110101011000100001000000000000
+00101000010000100000000000000100
+11001000001000100001000000000000
+00110100000000010000000000000000
+01001000000000100000000000001101
+00001001100011000000000000001100
+01111000000000010000000000000001
+00111000001000011001011100001000
+10110100001011000110000000000000
+00101001100001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110100111010100
+11111011111111111111111100000111
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000011000
+00110100000000100000000000000000
+11011000011000000000000000000000
+00110101100000100000000011010110
+00111100010000100000000000000010
+10110101011000100101100000000000
+00101001011000100000000000000100
+11001000010000010000100000000000
+10100100001000000001000000000000
+00010100010000100000000000011111
+10100000001000100000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+10111000011000000110000000000000
+00101000010001000000000000011000
+00110100000000100000000000000000
+11011000100000000000000000000000
+00110101101000100000000011010110
+00110101100000110000000011010110
+00111100011000110000000000000010
+00111100010000100000000000000010
+10110101011000100001000000000000
+10110101011000110101100000000000
+00101000010000100000000000000100
+00101001011000110000000000000100
+11001000010000010001000000000000
+11001000011000010000100000000000
+01001100010000010000000000000010
+10111000010000000000100000000000
+10100100001000000001000000000000
+00010100010000100000000000011111
+10100000001000100000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000000000111000
+10111000001000000101100000000000
+10111000011000000110100000000000
+00101000010001010000000000011000
+00110100000000100000000000000000
+10111000100000000110000000000000
+11011000101000000000000000000000
+00110101110000100000000011010110
+00110101101000110000000011010110
+00111100010000100000000000000010
+00111100011000110000000000000010
+10110101011000100001000000000000
+10110101011000110001100000000000
+00101000010001010000000000000100
+00101000011000100000000000000100
+11001000101000010010100000000000
+11001000010000010001000000000000
+01001100101000100000000000000010
+10111000101000000001000000000000
+00110101100001000000000011010110
+00111100100001000000000000000010
+10110101011001000101100000000000
+00101001011000110000000000000100
+11001000011000010000100000000000
+01001100001000100000000000000010
+10111000001000000001000000000000
+10100100010000000000100000000000
+00010100001000010000000000011111
+10100000010000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000000001
+00110100000000010000000000000011
+00110100000000100000000000000000
+11111000000000000100111001011110
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000100111111111101
+11111000000000000011101110000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000010000000000000000
+10111000010000000110000000000000
+11111000000000000100111100011001
+01000101100000000000000000000101
+01100100001000100000000000000000
+11001000000000100001000000000000
+00111000010000100000000000000001
+11100000000000000000000000010011
+01111000000010110000000000000001
+00111001011010111011000011010100
+01011100001011000000000000000100
+01011001011000000000000000000000
+00110100000000101111111111111111
+11100000000000000000000000001101
+00101001011011000000000000000000
+00110100000000100000000000000001
+01011101100000000000000000001010
+01111000000000100000000000000001
+00111000010000101001011100000000
+00110100000000010000000000000011
+11111000000000000011110000111001
+00110100000000100000000000000010
+01001001100000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000000
+00110100000000100000000000000001
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000100111111001101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000001101011000
+00101000001000010000000000010000
+00101000001000110000000000001100
+01000100010000110000000000000100
+01011000001000100000000000001100
+10111000010000000000100000000000
+11111000000000000011111010111110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011111010110000
+00110100000000100000000000000001
+01011100001000000000000000000011
+11111000000000000100111110100110
+01111100001000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000010100000000000
+10111000001000100000100000000000
+10111000010000000010000000000000
+10111000011000000101100000000000
+01000100001000000000000000000101
+00110100000000010000000000000001
+10111000101000000001000000000000
+10111000100000000001100000000000
+11111000000000000011111000110101
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000011111000110000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00110100000000011111111111111111
+11111000000000000100111011001111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000001111010000
+10111000100000000111000000000000
+00110111100000010000000000011000
+10111000011000000101100000000000
+10111000101000000110100000000000
+11111000000000000001111001100101
+01000101110000000000000000000101
+01111000000000010000000000000001
+00111000001000011010100000001000
+00101000001000010000000000000000
+01011001110000010000000000000000
+01000101101000000000000000000011
+00101011100000010000000011001100
+01011001101000010000000000000000
+00101011100000100000000001101100
+00110100000000011111111111111101
+01000100010000000000000000010011
+01000101100000000000000000000111
+00101011100000100000000001100000
+00101011100000010000000001011000
+10110100010000010000100000000000
+00101011100000100000000010100000
+10110100001000100000100000000000
+01011001100000010000000000000000
+00101011100000100000000001101000
+00110100000000011111111111111101
+01000100010000000000000000001001
+00110100000000010000000000000000
+01000101011000000000000000000111
+00101011100000110000000001100100
+00101011100000100000000001011100
+10110100011000100001000000000000
+00101011100000110000000010100100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000001000000000000000000
+10111000010000000110000000000000
+10111000011000000101100000000000
+00110111100000100000000000010000
+00110111100000110000000000010100
+00110100000001010000000000000000
+01011011100000000000000000010100
+01011011100000000000000000010000
+11111011111111111111111110111111
+00110100000000010000000000000001
+01011101100000010000000000000011
+00101011100000010000000000010000
+11100000000000000000000000000010
+00101011100000010000000000010100
+01011001011000010000000000000000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011010011101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011010011101111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000011101001111100
+11111000000000000011001111101010
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000100110101011001100
+00111000001000010110101010011100
+11111000000000000011001100001010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000010000000000000000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001100000101000
+00101000001000010000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000010110101011101000
+11111000000000000011001011111000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001111101000100
+00111000001000011001110001000000
+01111000000010110000000000000001
+11111000000000000001100111111111
+00111001011010111001100000101000
+00110100000000110000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111111110011100011
+01111000000000100000000000000001
+00111000010000101001110010000100
+01011000010000010000000000000000
+11111000000000000011100011010101
+01111000000000100000000000000001
+00111000010000101011000011100000
+01011000010000010000000000000000
+00101001011000010000001101011000
+00101000001000010000000000010000
+01011000001000000000000001101000
+10111001011000000000100000000000
+11111000000000000000101100110001
+01111000000000010000000000000001
+00111000001000011011000011011100
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001100000101000
+00101001011000010000001101011000
+00101000001011000000000000010000
+01111000000000010000000000000001
+00111000001000010110101011110100
+11111000000000000011001011001101
+00101001100000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001011000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000001000110000
+01011001100000000000000001000000
+00110001100000000000000000110101
+00111000001000011001100101010000
+11111000000000000101001011110111
+01111000000000010000000000000001
+00111000001000011011000011011100
+01011000001000000000000000000000
+10111001011000000000100000000000
+00001101011000000000000100100000
+11111000000000000000101100001011
+01111000000000010000000000000001
+00111000001000011001110001000000
+11111000000000000001101000010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001100000101000
+10111000001000000110000000000000
+00101001011000010000001101011000
+00101000001011010000000000010000
+01111000000000010000000000000001
+00111000001000011011000011011000
+01011000001000000000000000000000
+11111011111111111111111111001100
+00110100000000010000000000000010
+01000101100000010000000000011111
+01001001100000010000000000000011
+00110100000000010000000000000001
+11100000000000000000000000000100
+00110100000000100000000000000011
+01000101100000100000000000101111
+00110100000000010000000000000100
+01011101100000010000000000111001
+00110100000000010000000000000001
+01111000000010110000000000000001
+00111001011010111001100000101000
+00110001101000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111101000100
+00110100000011100000000000000110
+00110100000000100000000000000000
+00110100000000110000000000000001
+01011000001011100000000000000000
+00110100000000010000000000000001
+11111000000000000100110100001101
+00110100000000010000000000000001
+11111000000000000011110110110111
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011100000000000010000
+10111001011000000000100000000000
+11111000000000000001001011101101
+00111000000010111110101001100000
+11100000000000000000000000100011
+00110100000000010000000000000001
+00110001101000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111101000100
+00110100000011100000000010111011
+00110100000000100000000000000000
+00110100000000110000000000000001
+01011000001011100000000000000000
+00110100000000010000000000000010
+11111000000000000100110011111000
+00110100000000010000000000000001
+11111000000000000011110110100010
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011100000000000010000
+10111001011000000000100000000000
+11111000000000000001001011011000
+00110100000010110000111110100000
+11100000000000000000000000001110
+00110001101000010000000000000100
+01011001011000010000000000100100
+01111000000000010000000000000001
+00111000001000011001111101000100
+00110100000000100000000011111111
+01011000001000100000000000000000
+00110100000000110000000000000001
+00110100000000010000000000000011
+00110100000000100000000000000000
+11111000000000000100110011100101
+00110100000000010000000000000000
+11111000000000000011110110001111
+00110100000010110000000000000000
+11111000000000000011100001001100
+01111000000000100000000000000001
+10111000001000000111000000000000
+10111000010000000000100000000000
+00111000001000010110101100000000
+11111000000000000011001001011011
+00101001101000100000000000000000
+01111000000011010000000000000001
+00111001101011010110101100011100
+00101000010000110000000000110100
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011001100000101000
+00110100000000100000000000000000
+11011000011000000000000000000000
+11100000000000000000000000001110
+11111000000000000100111011001100
+00110100000000010000001111101000
+11111000000000000011100000111111
+11111000000000000011100000111001
+11001000001011100001000000000000
+01010001011000100000000000000110
+01111000000000010000000000000001
+00111000001000010110101100001100
+11111000000000000011001001001000
+00110100000010111111111110001100
+11100000000000000000000000001000
+10111001101000000000100000000000
+11111000000000000011001001000100
+00110100000000010000000000000000
+11111000000000000100110110001101
+01011100001000000000000000000010
+01011101011000011111111111110000
+00110100000010110000000000000000
+01111000000000010000000000000001
+00111000001000011000011110011000
+11111000000000000011001000111100
+01111101011000100000000000000000
+01100101100000010000000000000001
+10100000010000010000100000000000
+01000100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011001111101000100
+00110100000000100000000000110100
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011000011011000
+01011000001011000000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100001000000000000000000100
+00110100000000100000000000000001
+01011100001000100000000000000110
+11100000000000000000000000000011
+11111011111111111111111101001011
+11100000000000000000000000000110
+11111011111111111111111100100011
+11100000000000000000000000000100
+01111000000000010000000000000001
+00111000001000011011000011011100
+00101000001000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011011100
+00101000001000010000000000000000
+00110100000011100000000000000000
+01000100001000000000000000100100
+01111000000010110000000000000001
+00111001011010111001100000101000
+00101001011000010000000000110100
+00101001011000100000000001001000
+01111000000001000000000000000001
+00101000001001010000000000001000
+00110100000000110000000001111100
+10111001011000000000100000000000
+00111000100001001001100100101000
+11011000101000000000000000000000
+10111000001000000001100000000000
+01001100000000010000000000000101
+00101001011000010000010000010100
+00110100001000010000000000000001
+01011001011000010000010000010100
+11100000000000000000000000001100
+01011100001000000000000000001011
+01111000000011010000000000000001
+11111000000000000011011111100111
+00111001101011011011000011100000
+00101001101000100000000000000000
+01111000000011000000000000000001
+00111001100011001001110010000100
+11001000001000100000100000000000
+00101001100000100000000000000000
+01010100010000010000000000001010
+11100000000000000000000000010001
+01111000000000010000000000000001
+00111000001000011001100000101000
+00101000001000100000000001010000
+11111011111111111111101111100101
+01111000000000100000000000000001
+00111000010000101001110010000100
+01011000010000010000000000000000
+00110100000011100000000000000001
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+11111000000000000011011111001110
+01011001101000010000000000000000
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110100000000110000000000000000
+11111011111111111111101111010011
+01011001100000010000000000000000
+11100011111111111111111111110000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010001010000000000001000
+00101100010001000000000000001100
+00101000010011010000000000000000
+00111100101001010000000000010000
+10111000001000000110000000000000
+00101000010010110000000000000100
+10111000101001000000100000000000
+00110100000000100000001111101000
+11111000000000000101000011010111
+00010101101000100000000000011000
+10111000001000000011000000000000
+01111000000001110000000000000001
+00100000010000100000000011000000
+00110100000000010000000010000000
+00111000111001111000000011100000
+01011100010000010000000000000011
+01111000000001110000000000000001
+00111000111001110110101100100100
+01111000000001000000000000000001
+10111000100000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+10111001011000000010000000000000
+10111001011000000010100000000000
+00111000001000010110101100110000
+11111000000000000011000110111100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100111010000000000011000
+10111000001000000101000000000000
+01000000011000010000000000000101
+01000000011001000000000000000000
+01000000011001010000000000000001
+01000000011001100000000000000010
+01000000011001110000000000000011
+01000000011010000000000000000100
+01011011100000010000000000000100
+01000000011000010000000000000110
+10111000010000000100100000000000
+10111001010000000001000000000000
+01011011100000010000000000001000
+01000000011000010000000000000111
+01011011100000010000000000001100
+01000000011000010000000000001000
+01011011100000010000000000010000
+01000000011000010000000000001001
+10111001001000000001100000000000
+01011011100000010000000000010100
+01111000000000010000000000000001
+00111000001000010110101101010100
+11111000000000000011000110011110
+00101011100111010000000000011000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100101010000000000001000
+01011011100111010000000000000100
+10111000011000000011000000000000
+10111000001000001001100000000000
+10111000010000001001000000000000
+01111000000000010000000000000001
+10111000100000001010100000000000
+00111000001000010110101110001100
+10111010011000000001000000000000
+10111010010000000001100000000000
+10111000110000000010000000000000
+10111000101000001010000000000000
+01111000000100010000000000000001
+11111000000000000011000110000010
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+10111000001000000101100000000000
+00110100000011000000000000000000
+00111010001100010110101110100000
+00111010000100000110101110101000
+00111001111011110111110001011000
+00111001110011101000011110011000
+00111001101011010111111100100000
+11100000000000000000000000010111
+01011100110000000000000000000110
+10111010001000000000100000000000
+10111010011000000001000000000000
+10111010010000000001100000000000
+11111000000000000011000101110001
+10110101011000010101100000000000
+10110110101011000001000000000000
+01000000010000100000000000000000
+10111010000000000000100000000000
+00110101100011000000000000000001
+11111000000000000011000101101011
+00100001100000100000000000000011
+10110100001010110101100000000000
+10111001111000000011000000000000
+01011100010000000000000000000101
+00100001100000010000000000001111
+10111001110000000011000000000000
+01000100001000100000000000000010
+10111001101000000011000000000000
+10111000110000000000100000000000
+11111000000000000011000101100001
+10110101011000010101100000000000
+00100001100001100000000000001111
+01001010100011001111111111101001
+01000100110000000000000000000101
+01111000000000010000000000000001
+00111000001000011000011110011000
+11111000000000000011000101011010
+10110100001010110101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00101011100101010000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111110111000
+01011011100010110000000001001000
+01011011100011000000000001000100
+01011011100011010000000001000000
+01011011100011100000000000111100
+01011011100011110000000000111000
+01011011100100000000000000110100
+01011011100100010000000000110000
+01011011100100100000000000101100
+01011011100100110000000000101000
+01011011100101000000000000100100
+01011011100101010000000000100000
+01011011100101100000000000011100
+01011011100101110000000000011000
+01011011100110000000000000010100
+01011011100111010000000000010000
+10111000011000001000000000000000
+01000000010000110000000000000001
+10111000001000000110000000000000
+00110100000000010000000000000010
+00100000011000110000000000001111
+10111000010000000110100000000000
+01000000010011100000000000000000
+01000100011000010000000000000110
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110101110110000
+11111000000000000011000100101110
+11100000000000000000000101010000
+01000000010001010000000000000010
+01000000010001100000000000000011
+00100001110011100000000000001111
+00111100101001010000000000001000
+01111000000000010000000000000001
+10111000110001010010100000000000
+01000001101001100000000000000100
+00110100000000110000000000000010
+10111001110000000010000000000000
+00110100010010110000000000100010
+00111000001000010110101111010000
+10111001100000000001000000000000
+11111000000000000011000100100000
+01000001101000110000000000000110
+01000001101001000000000000000111
+00101001101001010000000000001100
+00111100011000110000000000001000
+01111000000000010000000000000001
+10111000100000110001100000000000
+00101001101001000000000000001000
+10111000101000000011000000000000
+10111001100000000001000000000000
+00111000001000010110101111111100
+11111000000000000011000100010101
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100110110000101100
+00110101101000110000000000010100
+11111011111111111111111101011011
+01000001101000110000000000011110
+01000001101001000000000000011111
+01000001101001010000000000100001
+00111100011000110000000000001000
+01111000000000010000000000000001
+10111000100000110001100000000000
+01000001101001000000000000100000
+00111000001000010110110000110100
+10111001100000000001000000000000
+11111000000000000011000100000110
+00110100000000010000000000001100
+01010101110000010000000011101001
+01111000000000010000000000000001
+00111101110011100000000000000010
+00111000001000011001000000001000
+10110100001011100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110001100000
+11111000000000000011000011111010
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110110001111000
+10111001100000000001000000000000
+00111000011000110110110010001000
+11100000000000000000000000011100
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110010010100
+11111000000000000011000011011110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+01000001011001110000000000000101
+01000001011001100000000000001001
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000001000010110110001111000
+10111001100000000001000000000000
+00111000011000110110110010110000
+10111000111001000010000000000000
+10111000110001010010100000000000
+11111000000000000011000011000100
+11100000000000000000000010100110
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110011000000
+11111000000000000011000010111111
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110110001111000
+10111001100000000001000000000000
+00111000011000110110110011011100
+11100011111111111111111111100001
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110011101100
+11111000000000000011000010100011
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+01111000000011100000000000000001
+00111001110011100110110100001000
+10111000101000010010100000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+10111001110000000001100000000000
+10111000111001000010000000000000
+10111000110001010010100000000000
+00111000001000010110110001111000
+11111000000000000011000010001000
+00110101011000110000000000001010
+10111001100000000000100000000000
+10111001110000000001000000000000
+11111011111111111111111011001111
+00110100000010110000000000110110
+11100000000000000000000010011000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110100011100
+11111000000000000011000001111110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+10111000111001000010000000000000
+10111000110001010010100000000000
+10111001100000000001000000000000
+00111000011000110110110100111000
+00111000001000010110110001111000
+11111000000000000011000001100100
+01000001011000100000000000001110
+01000001011000010000000000001111
+01000001011001000000000000010000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000010010
+01000001011000010000000000010011
+01000001011001010000000000010100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01000001011000100000000000010110
+01000001011000010000000000010111
+01000001011001100000000000011000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011010010000000000010001
+01000001011010000000000000010101
+01000001011001110000000000011001
+00111100110001100000000000001000
+10111000001000100000100000000000
+10111000110000010011000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+10111001001001000010000000000000
+10111001000001010010100000000000
+10111000111001100011000000000000
+10111001100000000001000000000000
+00111000011000110110110101100100
+00111000001000010110110101010000
+11111000000000000011000001000000
+01000001011000110000000000001101
+01000001011001000000000000011010
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110110110001000
+11111000000000000011000000111010
+01000001011000010000000000100000
+01000001011001000000000000011011
+01000001011001010000000000011100
+01000001011001100000000000011101
+01000001011001110000000000011110
+01000001011010000000000000011111
+01011011100000010000000000000100
+01000001011000010000000000100001
+01111000000000110000000000000001
+10111001100000000001000000000000
+01011011100000010000000000001000
+01000001011000010000000000100010
+00111000011000110110110111100000
+00110100000010110000000001000000
+01011011100000010000000000001100
+01111000000000010000000000000001
+00111000001000010110110110110000
+11111000000000000011000000101000
+11100000000000000000000000111101
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000010110111000000000
+11111000000000000011000000100011
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100110111000011100
+10111001011000000001100000000000
+11111011111111111111111001101001
+00110100000010110000000000101100
+11100000000000000000000000110010
+00110100000010110000000000100010
+11100000000000000000000000110000
+01010101111101110000000000001001
+01111000000000010000000000000001
+10111001100000000001000000000000
+10111010000000000001100000000000
+10111001011000000010000000000000
+10111001111000000010100000000000
+00111000001000010110111000111000
+11111000000000000011000000010010
+11100000000000000000000000110100
+10110101101010110111000000000000
+01000001110101100000000000000010
+01000001110000010000000000000011
+01000001110000110000000000000000
+00111110110101100000000000001000
+01000001110001000000000000000001
+10111000001101101011000000000000
+01000001110000010000000000001000
+01000001110001010000000000000100
+01000001110001100000000000000101
+01000001110001110000000000000110
+01000001110010000000000000000111
+01011011100000010000000000000100
+01000001110000010000000000001001
+00111100011000110000000000001000
+00110110110100010000000000000100
+01011011100000010000000000001000
+10111000100000110001100000000000
+10111010101000000000100000000000
+10111001100000000001000000000000
+10111010001000000010000000000000
+11111000000000000010111111111011
+01001101111100010000000000000111
+10111010010000000000100000000000
+10111001100000000001000000000000
+10111010001000000001100000000000
+10111001111000000010000000000000
+11111000000000000010111111110101
+11100000000000000000000000001000
+10111001100000000000100000000000
+10111010100000000001000000000000
+10111010011000000001100000000000
+00110101110001000000000000001010
+00110110110001011111111111111010
+11111011111111111111111001010100
+10111010001000000111100000000000
+10110101011011110101100000000000
+11100000000000000000000000001011
+01111000000101010000000000000001
+01111000000101000000000000000001
+01111000000100110000000000000001
+01111000000100100000000000000001
+00110100000110000000000000000010
+00110100000101110000000000001001
+00111010101101010110111001011100
+00111010100101000110111011001000
+00111010011100110110111011010000
+00111010010100100110111010011100
+01001101011100000000000000000011
+11001010000010110111100000000000
+01001001111110001111111111000101
+01111000000000100000000000000001
+01111000000000110000000000000001
+10111001100000000000100000000000
+00111000010000100110111011011100
+00111000011000110110111011100100
+10111001101000000010000000000000
+10111010000000000010100000000000
+11111011111111111111111000111100
+00101011100111010000000000010000
+00101011100010110000000001001000
+00101011100011000000000001000100
+00101011100011010000000001000000
+00101011100011100000000000111100
+00101011100011110000000000111000
+00101011100100000000000000110100
+00101011100100010000000000110000
+00101011100100100000000000101100
+00101011100100110000000000101000
+00101011100101000000000000100100
+00101011100101010000000000100000
+00101011100101100000000000011100
+00101011100101110000000000011000
+00101011100110000000000000010100
+00110111100111000000000001001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+01000100100000000000000000000101
+10111000100000000001000000000000
+01011011100000110000000000010000
+11111011111111111111110111100001
+00101011100000110000000000010000
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111001101110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001011010000000000000000
+10111000001000000111100000000000
+00101000001011100000000000000100
+10111000010000000110000000000000
+00110100000010110000000000000000
+00110100000000010000000000000000
+00110100000001000000000000000000
+01010100010011010000000000000110
+10111001101000000000100000000000
+11111000000000000100111011110111
+10001000001011000001000000000000
+10111001011000000010000000000000
+11001001101000100110100000000000
+00110100000000110000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001011
+00111101100001010000000000000001
+00111101011010110000000000000001
+11110101100001010110000000000000
+00111100011000110000000000000001
+10110101100010110101100000000000
+10111000101000000110000000000000
+00111100010001010000000000000001
+11110100010001010001000000000000
+10110100010000110001100000000000
+10111000101000000001000000000000
+00010101011001010000000000011111
+11001000101011000011000000000000
+11110100110001010011000000000000
+11001000101010110010100000000000
+11001000101001100010100000000000
+00000000101001010000000000011111
+00110100000001100000000000000001
+01010101101010110000000000000100
+01011101101010110000000000000010
+01010101110011000000000000000010
+00110100000001100000000000000000
+10100000101001100011000000000000
+01011100110000001111111111101010
+01010101011011010000000000001101
+01011101011011010000000000000010
+01010101100011100000000000001011
+11001001110011000010100000000000
+11110100101011100111000000000000
+11001001101010110110100000000000
+11001001101011100110100000000000
+10111000101000000111000000000000
+10110100100000100010100000000000
+11110100100001010010000000000000
+10110100001000110000100000000000
+10110100100000010000100000000000
+10111000101000000010000000000000
+00111100011001010000000000011111
+00000000010000100000000000000001
+00000000011000110000000000000001
+10111000101000100001000000000000
+10111000011000100010100000000000
+01000100101000000000000000000110
+00111101011001010000000000011111
+00000001100011000000000000000001
+00000001011010110000000000000001
+10111000101011000110000000000000
+11100011111111111111111111101001
+01011001111000010000000000000000
+10111001110000000000100000000000
+01011001111001000000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+11111000000000000011010101000111
+10110100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+10111000010000000101100000000000
+01111000000001010000000000000001
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111110010100
+00111000101001011001000000111100
+10111001011000000011000000000000
+11111011111111111111101000000101
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000011100111111000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+10111000011000000011000000000000
+01000100011000000000000000001000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111110100000
+00111000101001011001000001011100
+11111011111111111111100111101100
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111111011001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+01000100010000000000000000010101
+00101000010000010000000000001000
+00101100010010110000000000001100
+00101000010011000000000000000100
+00111100001000010000000000010000
+00110100000001000000000000000011
+10111000001010110101100000000000
+00101000010000010000000000000000
+10111001011000000001100000000000
+10111001100000000001000000000000
+11111000000000000011100111101001
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001101000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110111111001100
+00111000101001011001000001110000
+10111001100000000011000000000000
+10111001011000000011100000000000
+11111011111111111111100111001001
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+00110111100000100000000000011000
+00110111100000010000000000010000
+11111000000000000011100111101111
+00101011100001110000000000011000
+00101011100000010000000000010000
+00101011100001100000000000010100
+00000000111000100000000000010000
+01011001011000010000000000000000
+01011001011000100000000000001000
+00111100111000010000000000010000
+01111000000000100000000000000001
+00111000010000101011000011001100
+01011001011000010000000000001100
+00101000010000010000000000000000
+01011001011001100000000000000100
+00100000001000010000000000000001
+01011100001000000000000000001001
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000010
+00111000100001000110111111001100
+00111000101001011001000010000000
+11111011111111111111100110100011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00001000100001000000000000001100
+10111000001000000101100000000000
+00110100001011010000000100010000
+01111000000000010000000000000001
+00111000001000011001011101101000
+10110100001001000000100000000000
+10111000010000000111100000000000
+01000000001000100000000000000111
+01111000000001010000000000000001
+00110111100011000000000001000000
+00001000010000100000000000000110
+00111000101001011001000010100000
+00101001011100000000000001101000
+00110100000000011000100011110111
+10110100010001010001000000000000
+10111000011000000111000000000000
+00001111100000010000000001001100
+00110100000000110000000000000110
+10111001100000000000100000000000
+11111000000000000100111001111110
+10111001100000000001000000000000
+10111010000000000000100000000000
+10111001111000000001100000000000
+10111001110000000010000000000000
+00110111100001010000000000100000
+11111000000000000010010011110000
+10111000001000000110000000000000
+01000101101000000000000000011111
+00101011100000010000000000101000
+00101011100000100000000000100100
+00101011100000110000000000100000
+00010100001001010000000000011111
+00000000001001000000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10111000100001010010100000000000
+00101011100001000000000000111100
+01011001011000110000000100010000
+01011001011000100000000100010100
+01011001011001010000000100011000
+01011001011000010000000100011100
+01011100100000000000000000000100
+01111000000001001000111100000000
+10111000011001000001100000000000
+01011001011000110000000100010000
+00111100101010010000000000010000
+00000000001010000000000000010000
+00101001011001110000000100010100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000010
+00111000100001000110111111011100
+00111000101001011001000010010000
+10111001100000000011000000000000
+10111001001010000100000000000000
+11111011111111111111100101011011
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000001101
+00101001011001000000000100011100
+00101001011001010000000100011000
+00101001011000100000000100010100
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000001
+00000000100001000000000000010000
+00111000001000010110111111111100
+10111000101000110001100000000000
+11111000000000000010111010001111
+01001100000011000000000000010000
+01111000000000010000000000000001
+00111000001000011011000011001100
+00101000001000100000000000000000
+00101001011000010000000000011100
+10111000010000010000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000001
+00111000001000010111000000001100
+10111001111000000001000000000000
+10111001110000000001100000000000
+10111001101000000010000000000000
+11111011111111111111111010111011
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+00110111100111001111111110010000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000000001101000
+10111000011000000010100000000000
+10111000010000000111000000000000
+10111000100000000101100000000000
+00110111100000100000000001000000
+10111000101000000010000000000000
+10111001110000000001100000000000
+00110111100001010000000000100000
+11111000000000000010010000100000
+10111000001000000110100000000000
+01001100000000010000000001100101
+01000101011000000000000000100001
+00101011100000010000000000101100
+00101011100011110000000000100100
+00101011100100000000000000100000
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011001011100000000000000000000
+01011001011011110000000000000100
+11111000000000000100110101100010
+00101011100001010000000000101000
+10111000001000000010000000000000
+00010100001000100000000000011111
+00010100101000010000000000011111
+00000000101000110000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10110100100001010010100000000000
+10111000011000010000100000000000
+11110100100001010010000000000000
+10110100010000010000100000000000
+10110100100000010000100000000000
+01011001011000010000000000001000
+00101011100000010000000000111100
+01011001011001010000000000001100
+01011100001000000000000000001001
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01000100010000010000000000000100
+01111000000000011000111100000000
+10111010000000011000000000000000
+01011001011100000000000000000000
+01111000000000010000000000000001
+00111000001000011011000011001100
+00101001100000100000000000011100
+00101000001000010000000000000000
+10111000001000100000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000001
+00111000001000010111000000010100
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001011000000010000000000000
+11111011111111111111111001101101
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000110000
+00101001011001000000000000000000
+00101001011000110000000000000100
+00101001011000100000000000001000
+00101001011000010000000000001100
+01011011100001000000000001100100
+01011011100000110000000001101000
+01011011100000100000000001101100
+01011011100000010000000001110000
+11111000000000000010111111001101
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011011100000000000000001011000
+01011011100000000000000001010100
+11111000000000000100110100101000
+00010100001000100000000000011111
+00110111100010110000000001100100
+01011011100000010000000001100000
+01011011100000100000000001011100
+10111001011000000000100000000000
+00110111100000100000000001010100
+11111000000000000001001001010101
+00101011100001000000000001110000
+00101011100001010000000001101100
+00101011100000100000000001101000
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000001
+00000000100001000000000000010000
+10111000101000110001100000000000
+00111000001000010111000000011100
+11111000000000000010111000001011
+10111001011000000000100000000000
+00110101100000100000000100010000
+11111000000000000001001001000110
+00101011100000110000000001110000
+00101011100001000000000001101100
+01111000000000010000000000000001
+00000000011000100000000000010000
+00100000011000111111111111111111
+00001000011000110000001111101000
+00111100100001000000000000010000
+00111000001000010111000000101100
+00000000011000110000000000010000
+10111000100000100001000000000000
+11111000000000000010110111111101
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001110000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000001101000
+11111000000000000010001101010010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000001101000
+01000100001000000000000000000010
+11111000000000000010001101000101
+10111001011000000000100000000000
+11111000000000000000110010101111
+00110111100011000000000000010100
+00110100000000011000100011110111
+01111000000000100000000000000001
+00001111100000010000000000100000
+00111000010000101000111110001000
+10111001100000000000100000000000
+00110100000000110000000000000110
+11111000000000000100110110010000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011001110101110100
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111000000000000010001011101100
+10111000001000000110000000000000
+01000100001000000000000000001110
+00110111100011010000000000101000
+10111001101000000001000000000000
+11111000000000000010001011010110
+10111001101000000001000000000000
+00110100000000110000000000000110
+00110101011000010000000001110000
+11111000000000000100110110000001
+00110101011000010000000001011100
+01011001011011000000000001101000
+10111001101000000001000000000000
+00110100000000110000000000000110
+11111000000000000100110101111100
+01011001011011000000000001010100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111000011000000110000000000000
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000001010100
+10111000001000000101100000000000
+11111011111111111111100001101010
+00101001100000100000000000101100
+00101001011000010000001101011000
+00100000010000110000000000000011
+00101000001000010000000000010000
+01111100011001000000000000000000
+01011000001001000000000000111000
+00100000010001000000000000001000
+00100000010000100000000000000100
+01111100100001000000000000000000
+01111100010000100000000000000000
+00110000001000110000000000110101
+01011000001000100000000001000100
+01011000001001000000000001000000
+00101001011000010000000000110000
+00101000001000100000000000010000
+00101001011000010000001101011000
+00101100001000010000000000001000
+00001100010000010000000000101000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010010110000000000010000
+00110100000000110000000000000010
+00110100000000100000000000000010
+00111000100001000111000101001000
+00111000101001011001000101010100
+11111011111111111111100001000111
+00110100000000010000000000000000
+00110001011000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111000001000000101100000000000
+00110100000000100000000000000010
+00110100000000010000000000000000
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000101100100
+11111011111111111111100000110101
+00101001011000010000000000100100
+01000100001000000000000000000110
+00110100000000100000000000000000
+00110100000000110000000000000001
+00110100000001000000000000000010
+00110100000001100000000000000011
+11100000000000000000000000011111
+00101001011000010000000000000000
+00101001011000100000000001000000
+01011000001000100000000000011000
+11100000000000000000000000011101
+00101001011001010000000000000000
+00001000010000010000010000011000
+10110100101000010000100000000000
+00101001011001010000000001000000
+01011000001001010000000000011000
+00101000001001010000010000001000
+01011100101000110000000000010000
+00101000001001010000000000100100
+01000100101000110000000000000100
+00101000001000010000001101011000
+01011100101001000000000000001001
+11100000000000000000000000000101
+00101000001000010000001101011000
+00101000001000010000000000010000
+00110000001000110000000000000100
+11100000000000000000000000001010
+00101000001000010000000000010000
+00110000001001000000000000000100
+11100000000000000000000000000111
+00101000001000010000000000010000
+00110000001001100000000000000100
+11100000000000000000000000000100
+00101000001000010000001101011000
+00101000001000010000000000010000
+00110000001000000000000000000100
+00110100010000100000000000000001
+00101001011000010000000000100100
+01001000001000101111111111100101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010010110000000000010000
+00110100000000110000000000000010
+00110100000000100000000000000010
+00111000100001000111000101001000
+00111000101001011001000101101100
+10111000001000000110000000000000
+11111011111111111111011111111011
+01000001011000110000000000000100
+00110100000000010000000100101100
+01011001011000010000000000101000
+00110100000000100000000000000001
+00110100000000010000101110111000
+01011001011000010000000000110000
+01011001011000000000000000001000
+00110001011000000000000000110101
+01011001011000000000000001000000
+01011001011000100000000000010100
+00100000011000110000000000000011
+00101001011000010000000000000000
+01011100011000100000000000000100
+00101000001000110000000000110100
+10111001100000000000100000000000
+11100000000000000000000000000100
+00101000001000110000000000110100
+00110100000000100000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101100001011010000000000000010
+10111000001000000101100000000000
+10111000010000000110000000000000
+00110100000000010000000000000000
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000010101100
+11111011111111111111011111010001
+00110100000000010000000001000000
+01001100001011010000000000000100
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111000000000000000001111101101
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000011000000
+10111000001000000101100000000000
+11111011111111111111011110111011
+00101001011000010000001101011000
+00110100000000100000000001000000
+00101000001000010000000000010000
+01000000001000010000000000000100
+01000100001000000000000000000110
+00110100000000110000000000000010
+01000100001000110000000000000100
+10111001011000000000100000000000
+11111000000000000000001110010001
+00110100000000100000000001001110
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000110000000000000010
+10111000010000000110000000000000
+00111000100001000111000101001000
+00110100000000100000000000000010
+00111000101001011001000011101000
+10111000001000000101100000000000
+11111011111111111111011110011111
+00101001011000010000001101011000
+00110100000000110000000000000000
+00101000001000010000000000010000
+00101000001000010000000000001000
+01000100001000000000000000000110
+00110101011000110000000010101000
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111000000000000000010110110001
+00110100000000110000000000000001
+10111000011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000011111100
+10111000001000000101100000000000
+11111011111111111111011110000100
+00101001011000010000001101011000
+00101000001000100000000000010000
+01000000010000010000000000000100
+00100000001000010000000000000010
+01000100001000000000000000001011
+01000000010000010000000000110101
+00100000001000010000000000000001
+01000100001000000000000000001000
+00101000010000010000000000001000
+01000100001000000000000000000011
+00101000010000010000000001000000
+01011100001000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000001001
+11111000000000000000000010100101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000100010000
+10111000001000000101100000000000
+11111011111111111111011101100101
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111111100001000000
+01000100001000000000000000000011
+10111001011000000000100000000000
+11111000000000000000010011110100
+00101001011000010000001101011000
+00101000001000100000000000010000
+00110100000000010000000000000000
+00101000010000110000000001100100
+01000100011000000000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000100
+01011000010000000000000001100100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+01111000000001000000000000000001
+01111000000001010000000000000001
+00101000010011010000000000010000
+00101000001000100000001101011000
+00110100000000110000000000000010
+00111000100001000111000101001000
+00101000010011000000000000010000
+00111000101001011001000100100100
+00110100000000100000000000000010
+10111000001000000101100000000000
+11111011111111111111011101000010
+00101001100000010000000000001000
+01011100001000000000000000011110
+00010001011000100000000010101000
+00110100000000010000000010000000
+00100000010000100000000011000000
+01000100010000010000000000000100
+00010001011000100000000010111000
+00100000010000100000000011000000
+01011100010000010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111000101010100
+11111011111111111111011100110011
+11100000000000000000000000010100
+10111001011000000000100000000000
+11111000000000000001001011011000
+00101001101000100000000000001100
+00101001101000010000000000001000
+10111000001000100000100000000000
+00101001100000100000000000000000
+01000100001000000000000000000101
+00101000010000110000000000110100
+10111001011000000000100000000000
+00110100000000100000000000000000
+11100000000000000000000000000100
+00101000010000110000000000110100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11011000011000000000000000000000
+10111001011000000000100000000000
+11111000000000000000010101010011
+10111001011000000000100000000000
+11111000000000000000011010011101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000100110100
+10111000001000000101100000000000
+11111011111111111111011100001101
+10111001011000000000100000000000
+11111000000000000000010011000101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00110100000000100000000000001111
+10111000001000000101100000000000
+10111000100000000110000000000000
+01000100100000100000000000100101
+01111000000001000000000000000001
+01111000000001010000000000000001
+00110100000000100000000000000010
+00110100000000110000000000000010
+00111000100001000111000101001000
+00111000101001011001000101000100
+11111011111111111111011011110101
+00110100000000010000000000000001
+01000101100000010000000000000100
+00110100000000010000000000001100
+01011101100000010000000000011010
+11100000000000000000000000000110
+10111001011000000000100000000000
+00110101011000100000000100000000
+11111000000000000000111111000001
+00110100000011000000000000001111
+11100000000000000000000000010100
+00101001011000010000001101011000
+10111001101000000001000000000000
+00110111100000110000000000010100
+00101000001001000000000000010000
+10111001011000000000100000000000
+00110100000011000000000000001111
+00110100100001000000000000111100
+11111000000000000000001110011010
+00101001011000010000001101011000
+00110100000000100001000000000000
+00101000001000010000000000010000
+00101100001000110000000000111100
+01011100011000100000000000000111
+01000000001000010000000000000100
+00100000001000010000000000000001
+01000100001000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111000000000000000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00101000001000110000001101011000
+00110100000001000000000000000110
+00101000011000110000000000010000
+01000100010001000000000000000100
+00110100000001000000000000001001
+01011100010001000000000000001000
+11100000000000000000000000000100
+00110100000000100000000000000001
+00110000011000100000000000000101
+11100000000000000000000000000111
+00110100000000100000000000000010
+00110000011000100000000000000101
+11100000000000000000000000000110
+01000000011000110000000000000101
+00110100000000100000000000000001
+01011100011000100000000000000011
+00110100000000100000000001100110
+11100000000000000000000000000010
+00110100000000100000000001100100
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000001101011000
+01111000000001010000000000000001
+00111000101001010111000010001100
+00101000001011000000000000010000
+00110100000000010000000000000001
+01000001100000100000000000000101
+01011100010000010000000000000011
+01111000000001010000000000000001
+00111000101001010111000001101100
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111000110100100
+11111011111111111111011010101000
+01000001100000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000000011
+00110100000000010000000000000110
+11100000000000000000000000000010
+00110100000000010000000000001001
+01011001011000010000000000000100
+00110001100000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000010000100000000000010000
+01000000010000110000000000101100
+01000100011000000000000000001010
+00110100011000111111111111111111
+01111000000001000000000000000001
+00110000010000110000000000101100
+00111000100001000111000111001000
+00110100000000100000000000000010
+00110100000000110000000000000001
+11111011111111111111011010001110
+00110100000000010000000000000001
+11100000000000000000000000000011
+11111011111111111111111111010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011010000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001101000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011101010100
+00110100000011000000000000000000
+01000100001011000000000000001100
+10111001011000000000100000000000
+11111011111111111111111111011000
+01000100001000000000000000011101
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110000001111101000
+11111011111111111111011011001011
+10111001011000000000100000000000
+00110100000000100001000000000000
+11111000000000000000001110010001
+10111000001000000110000000000000
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101101001000000000000111100
+11111000000000000000001100011000
+00101101101000100000000000111100
+00110100000000010001000000000001
+01011100010000010000000000000011
+00110100000000010000000001100101
+01011001011000010000000000000100
+01011101100000000000000000000011
+10111001011000000000100000000000
+11111000000000000000101010010100
+00101001011000010000001101011000
+00101000001000010000000000010000
+00101000001000010000000000101000
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011100011010
+00110100000011010000000000000000
+01000100001011010000000000001100
+10111001011000000000100000000000
+11111011111111111111111110011110
+01000100001000000000000000011000
+00110100000000100001000000000001
+10111001011000000000100000000000
+11111000000000000000001101011011
+10111000001000000110100000000000
+00110100000000100000000000000110
+10111001011000000000100000000000
+00110100000000110011101010011000
+11111011111111111111011010001101
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101100001000000000000111100
+11111000000000000000001011011110
+00101101100000100000000000111100
+00110100000000010001000000000010
+01011100010000010000000000000011
+00110100000000010000000001101000
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000001011010000000000001100
+10111000001000000101100000000000
+00101000010011000000000000010000
+01000101101000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001011
+00110100000000100000000000000110
+11111011111111111111011011100111
+01000100001011010000000000010000
+00101001100000010000000000000000
+00101000001000100000000000001000
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111001011000000000100000000000
+11111011111111111111111101101000
+01000100001000000000000000011100
+00101001100000010000000000000000
+00101000001000100000000000000000
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000110
+00110100000000110011101010011000
+11111011111111111111011001010111
+00101001100000010000000000101000
+00110100000000100000000000000000
+01011001011000010000000000001000
+00101001100000010000000000000000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000000001000
+00110100000000010000000001100111
+01011001011000010000000000000100
+00101001100000010000000000000000
+00101000001000100000000000001000
+10111001011000000000100000000000
+11011000010000000000000000000000
+11100000000000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000000010
+01011001011000000000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000111000000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00110100000000010000000000000011
+00110001100000010000000000101100
+11100000000000000000000000001000
+00110100000000100000000000000110
+11111011111111111111011010101100
+00110100000011010000000000000000
+01000100001011010000000000001100
+10111001011000000000100000000000
+11111011111111111111111100110000
+01000100001000000000000000011000
+00101001100000110000000000101000
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111011111111111111011000100011
+10111001011000000000100000000000
+00110100000000100001000000000010
+11111000000000000000001011101001
+10111000001000000110100000000000
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000001011
+10111001011000000000100000000000
+10111001110000000001000000000000
+00110111100000110000000000011000
+00110101100001000000000000111100
+11111000000000000000001001110000
+00101101100000100000000000111100
+00110100000000010001000000000011
+01011100010000010000000000000011
+00110100000000010000000001101010
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00101000001011010000000000001100
+10111000001000000110000000000000
+00101000010010110000000000010000
+01000101101000000000000000000100
+00110100000000010000000000000011
+00110001011000010000000000101100
+11100000000000000000000000000111
+00110100000000100000000000000110
+11111011111111111111011001111001
+01000100001011010000000000010001
+10111001100000000000100000000000
+11111011111111111111111011111110
+01000100001000000000000010011100
+00101001011000110000000000110000
+10111001100000000000100000000000
+00110100000000100000000000000110
+11111011111111111111010111110001
+10111001100000000000100000000000
+00110100000000100001000000000011
+11111000000000000000001010110111
+00110100000000010000000001101100
+00110001011000010000000000010000
+00101001011000010000000000010100
+01000100001000000000000000000011
+00110100000000010000000001101110
+00110001011000010000000000010000
+01000001011001100000000000010000
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111000111011100
+00111000101001011001000110011000
+00110100110001101111111110010100
+11111011111111111111010110000000
+01000001011000100000000000010000
+00110100000000010000000000001000
+00110100010000101111111110010100
+00100000010000100000000011111111
+01010100010000010000000001111110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001000101110100
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001010000000000101100
+00110100000001000000000000000000
+10111001100000000000100000000000
+11011000101000000000000000000000
+01011100001000000000000001110000
+00110100000000010000000001101101
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000100100
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000001101000
+00110100000000010000000001101110
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00110111100000110000000000010100
+00101000001001000000000000101000
+10111001100000000000100000000000
+11011000100000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000001011110
+00101011100000010000000000010100
+01111000000001000000000000000001
+00110100000000100000000000000010
+00000000001001010000000000010000
+00111100001000010000000000010000
+01011001011001010000000000011100
+01011001011000010000000000011000
+00110100000000110000000000000001
+10111001100000000000100000000000
+00111000100001000111000111110000
+11111011111111111111010101010000
+00101001011001010000000000011000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001000010100
+11111011111111111111010101001001
+00110100000000010000000001101111
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000100000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000001000100
+00110100000000010000000001110000
+00110001011000010000000000010000
+00101001011000010000000000000000
+00101000001000100000000000110000
+10111001100000000000100000000000
+11011000010000000000000000000000
+01011100001000000000000000111101
+00110100000000010000000001110001
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00101000001000110000000000100100
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000000110101
+00110100000000010000000001110010
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00110111100000110000000000010100
+00101000001001000000000000101000
+10111001100000000000100000000000
+11011000100000000000000000000000
+00110100000000100000000000000001
+01011100001000100000000000101011
+00101011100001010000000000010100
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001000111000
+11111011111111111111010100100001
+00101011100000010000000000010100
+01111000000001000000000000000001
+00110100000000100000000000000010
+00000000001001010000000000010000
+00111100001000010000000000010000
+01011001011001010000000000100100
+01011001011000010000000000100000
+00110100000000110000000000000001
+10111001100000000000100000000000
+00111000100001000111001001010000
+11111011111111111111010100010110
+00101001011001010000000000100000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111001001110100
+11111011111111111111010100001111
+00110100000000010000000001110011
+00110001011000010000000000010000
+00101001011000010000000000000000
+00110100000000100000000000000010
+00101000001000110000000000100000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011100001000000000000000001010
+00110100000000010000000001110100
+00110001011000010000000000010000
+10111001100000000000100000000000
+00110100000000100001000000000100
+11111000000000000000001000101001
+00110100000000010000000001101001
+01011001100000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000010100
+00101001011000010000000000101000
+01011001100000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101000001000100000000000001100
+01000100010000000000000000000100
+00101001100000110000000000101000
+00110100000000100000000000000110
+11111011111111111111010101000101
+10111001011000000000100000000000
+00110100000000100000000000000110
+11111011111111111111010111000010
+01000100001000000000000000000100
+10111001011000000000100000000000
+11111011111111111111111000100110
+11100000000000000000000000011010
+01000001011000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000010101
+10111001011000000000100000000000
+10111001101000000001000000000000
+00110111100000110000000000010100
+00110101100001000000000000111100
+11111000000000000000000110001111
+00101101100000010000000000111100
+00110100000000100001000000000011
+01011100001000100000000000000110
+01000001100000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000001010
+00110100000000010000000001101010
+11100000000000000000000000000111
+00110100000000100001000000000101
+01011100001000100000000000000110
+01000001100000100000000000000101
+00110100000000010000000000000010
+01011100010000010000000000000011
+00110100000000010000000001101011
+01011001011000010000000000000100
+00101001100000010000000000101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000010000000111100000000000
+00101000001000100000001101011000
+00101000001011100000000000001100
+10111000001000000110000000000000
+00101000010010110000000000010000
+00101101011011010000000001001000
+01111101101011010000000000000000
+01000101110000000000000000000100
+00110100000000010000000000000011
+00110001011000010000000000101100
+11100000000000000000000000001100
+00110100000000100000000000000110
+11111011111111111111010110001010
+01000100001011100000000000011000
+01000101101000000000000000000101
+00101001011000010000000000000000
+00101000001000110000000000110000
+10111001100000000000100000000000
+11011000011000000000000000000000
+10111001100000000000100000000000
+11111011111111111111111000001010
+01000100001000000000000000101001
+01000101101000000000000000001000
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001010000000000101100
+00110100000001000000000000000000
+10111001100000000000100000000000
+11011000101000000000000000000000
+00101001011000010000000001001100
+00110100000000100000001111101000
+11111000000000000100100100110100
+10111000001000000001100000000000
+00110100000000100000000000000110
+10111001100000000000100000000000
+11111011111111111111010011110010
+01000001100000100000001110100001
+00110100000000010000000000001100
+01011100010000010000000000010101
+10111001100000000000100000000000
+10111001111000000001000000000000
+00110111100000110000000000011100
+00110101011001000000000000111100
+11111000000000000000000101000011
+00101101011000100000000000111100
+00110100000000010001000000000100
+01011100010000010000000000001101
+01000101101000000000000000000101
+00101001011000010000000000000000
+00101000001000100000000000110000
+10111001100000000000100000000000
+11011000010000000000000000000000
+01000001011000100000000000000101
+00110100000000010000000000000001
+01011100010000010000000000000011
+00110100000000010000000001101011
+11100000000000000000000000000010
+00110100000000010000000001101000
+01011001100000010000000000000100
+00101001011000010000000000101000
+01011001100000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000100000001101011000
+00110100000011010000000000000001
+10111000001000000101100000000000
+00101000010011000000000000010000
+00101001100000100000000000000000
+01011001100011010000000000001000
+00101000010000100000000000001100
+11011000010000000000000000000000
+01000001100000100000000000000101
+00110100000000010000000000000000
+01011100010011010000000000000100
+10111001011000000000100000000000
+00110100000000100001000000000101
+11111000000000000000000110000110
+00110100000000100000000000000001
+01011001100000100000000001000000
+00110100000011011111111111111111
+01011100001000000000000000011011
+01000001100000100000000000000101
+00110100000000010000000000000010
+01011100010000010000000000000011
+00110100000000010000000000001001
+11100000000000000000000000000010
+00110100000000010000000000000110
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000100
+00110100000011010000000000000000
+01011100010000010000000000001110
+00110100000000010000000001110101
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000010111001010011000
+11111000000000000010100110001110
+11111000000000000010101100110111
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111001011001000
+11111000000000000010100110001001
+01111000000000010000000000000001
+00111000001000010111001100000100
+11111000000000000010100110000110
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00000000010000110000000000011000
+00110000001000100000000000000011
+00110000001000110000000000000000
+00000000010000110000000000010000
+00110000001000110000000000000001
+00000000010000110000000000001000
+00110000001000110000000000000010
+11000011101000000000000000000000
+01000000001000100000000000000000
+01000000001000110000000000000011
+00111100010000100000000000011000
+10111000011000100001000000000000
+01000000001000110000000000000001
+01000000001000010000000000000010
+00111100011000110000000000010000
+00111100001000010000000000001000
+10111000010000110001000000000000
+10111000010000010000100000000000
+11000011101000000000000000000000
+01000000001000100000000000000000
+01000000001000010000000000000001
+00111100010000100000000000001000
+10111000010000010000100000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001000110000000000110000
+00101000001000100000001101011000
+10111000001000000101100000000000
+00101000011000110000000000001100
+00101000010000100000000000010000
+00101000001011000000000001001100
+00101000011001000000000000010000
+00110100000000110000000010111010
+01001000100000110000000000010111
+00101000010000100000000000000000
+00101000010000110000000000000100
+00110100000000100000000000000001
+11011000011000000000000000000000
+01111100001000010000000000000001
+11001000000000010110100000000000
+10111001011000000000100000000000
+11111000000000000000100110111001
+00101001011000010000000000110000
+00100001101011010000000000101110
+00110101101011010000000000000110
+00101000001000010000000000001100
+00101000001000010000000000010000
+01000101101000010000000000001001
+01111000000000010000000000000001
+00111000001000010111001100111000
+10111001101000000001000000000000
+11111000000000000010100101000111
+00101001011000010000000000110000
+00101000001000010000000000001100
+01011000001011010000000000010000
+00110001100011010000000000110000
+00110100000000010000000001001110
+00001101100000010000000000000010
+00110100000000010000000000000011
+00001101100000010000000001000000
+00110100000000010000000000001010
+00001101100000010000000001000010
+00110100000000010000100000000000
+00001101100000010000000001000100
+00110100000000010011000011011110
+00001101100000010000000001000110
+00110100000000011010110100000001
+00001101100000010000000001001000
+00110100000000010010000000000000
+00001101100000010000000001001010
+00101001011000010000001101011000
+00101000001000100000000000010000
+00101000010000110000000000010100
+01000000010000010000000000000100
+01000100011000000000000000000010
+00111000001000010000000000000100
+00101000010000100000000000001000
+01000100010000000000000000000010
+00111000001000010000000000001000
+00001101100000010000000001001100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100001000010000000001000000
+10111000010000000110000000000000
+11111011111111111111111110110010
+00101101011001010000000001000100
+00101101011001000000000001000110
+01111000000001110000000000000001
+00111100101001010000000000001000
+00000000100001100000000000001000
+00111000111001111000111011011000
+10111000101001100010100000000000
+00101000111001100000000000000000
+01100100001000010000000000000011
+00101101011000110000000001001000
+11100100101001100010100000000000
+00101101011000100000000001001010
+10100000001001010000100000000000
+01000100001000000000000000010000
+00111100100001000000000000001000
+00000000011000010000000000001000
+00100000100001001111111111111111
+10111000100000010010000000000000
+00100000011000110000000011111111
+00111000000000011101111010101101
+11100100100000010010000000000000
+01100100011000110000000000000001
+10100000100000110001100000000000
+01000100011000000000000000000110
+00110100000000010010000000000000
+01011100010000010000000000000100
+00110101011000010000000001001100
+11111011111111111111111110010110
+01011001100000010000000000101100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000001101011000
+00100000010011011111111111111111
+00101000001000010000000000010000
+01000000001001010000000000000101
+01000100101000000000000000000011
+00110100000000010010000000000000
+01011101101000010000000000001010
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001101010000
+10111001101000000011000000000000
+11111011111111111111001110100010
+00110100000000010000000000000000
+11100000000000000000000001010001
+00101001100010110000000001001100
+00110100000000110000000000001000
+01000001011000010000000000000000
+00100000001000010000000011110000
+00111000001000010000000000001100
+00110001011000010000000000000000
+00110100000000010000000000000101
+00110001011000010000000000100000
+00101001100000100000000000110000
+00110101011000010000000000100010
+00101000010000100000000000010100
+11111000000000000100100010010001
+00101001100000010000000000110000
+00101000001000010000000000010100
+00101100001000010000000000001000
+00001101011011010000000000110110
+00000000001000100000000000001000
+00110001011000010000000000101011
+00110100000000010000000000000011
+00001101011000010000000000101100
+00110100000000010000100000000000
+00001101011000010000000000110000
+00110100000000010011000011011110
+00001101011000010000000000110010
+00110100000000011010110100000001
+00001101011000010000000000110100
+00110001011000100000000000101010
+00110100000000010001000000000011
+01000101101000010000000000000101
+00110100000000010001000000000100
+00110100000000100000000000001000
+01011101101000010000000000101101
+11100000000000000000000000010111
+00101001100000010000001101011000
+00110101011000100000000000111000
+00101000001000010000000000010000
+00101000001000110000000000010100
+01000100011000000000000000000101
+01000000001000010000000000110100
+00110001011000010000000000111000
+00110000010000000000000000000001
+11100000000000000000000000000111
+01000000001000010000000000110100
+00111100001000010000000000001000
+00111000001000010000000000000001
+00000000001000110000000000001000
+00110001011000110000000000111000
+00110000010000010000000000000001
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111010
+00101000010000100000000000110000
+11111011111111111111111100110010
+00110100000000100000000000010100
+11100000000000000000000000010110
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111000
+00101000010000100000000000011100
+11111011111111111111111100101011
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000000111100
+00101000010000100000000000011000
+11111011111111111111111100100110
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000001000000
+00101000010000100000000000100100
+11111011111111111111111100100001
+00101001100000010000001101011000
+00101000001000100000000000010000
+00110101011000010000000001000100
+00101000010000100000000000100000
+11111011111111111111111100011100
+00110100000000100000000000011000
+00110100010000010000000000110000
+00110001011000000000000000000010
+00110001011000010000000000000011
+00001101011000100000000000101110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000011000000111000000000000
+00110100010000100000000000100010
+10111000001000000110000000000000
+10111000011000000000100000000000
+00110100000000110000000000001000
+10111000100000000110100000000000
+11111000000000000100100000111001
+00110101011000010000000000101010
+11111011111111111111111100010100
+00001101110000010000000000001000
+00110101011000010000000000101100
+11111011111111111111111100010001
+10111000001000000010100000000000
+00110100000001000000000000000011
+00101101011000110000000000110000
+00101101011000100000000000110010
+00101101011000010000000000110100
+01000100101001000000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001110000100
+11100000000000000000000000100010
+00111100011001010000000000001000
+01111000000001000000000000000001
+00000000010000110000000000001000
+00111000100001001000111011011000
+10111000101000110010100000000000
+00101000100000110000000000000000
+01000100101000110000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111001111010100
+11100000000000000000000000010101
+00111100010001010000000000001000
+00000000001000110000000000001000
+00100000101001011111111111111111
+10111000101000110010100000000000
+00111000000000101101111010101101
+01000100101000100000000000000111
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111010000001100
+11100000000000000000000000001001
+00100000001001010000000011111111
+00110100000000010000000000000001
+01000100101000010000000000001000
+01111000000001000000000000000001
+10111001100000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111010001010000
+11111011111111111111001100001001
+11100000000000000000000000101000
+00101101011000010000000000110110
+01000101101000000000000000000010
+00001101101000010000000000000000
+00110100000000100001000000000011
+01000100001000100000000000000100
+00110100000000100001000000000100
+01011100001000100000000000100001
+11100000000000000000000000010010
+00101001100000010000001101011000
+00110101011011100000000000111000
+00101000001011010000000000010000
+10111001110000000000100000000000
+11111011111111111111111011010101
+00100000001000010000000011111111
+00001101101000010000000001001000
+10111001110000000000100000000000
+11111011111111111111111011010001
+00000000001000010000000000001000
+00110001101000010000000001010000
+00110101011000010000000000111010
+11111011111111111111111011000010
+00101001100000100000001101011000
+00101000010000100000000000010000
+01011000010000010000000001001100
+11100000000000000000000000001111
+00101001100000010000001101011000
+00101000001011000000000000010000
+00110101011000010000000000111000
+11111011111111111111111010111010
+01011001100000010000000001011000
+00110101011000010000000000111100
+11111011111111111111111010110111
+01011001100000010000000001010100
+00110101011000010000000001000000
+11111011111111111111111010110100
+01011001100000010000000001100000
+00110101011000010000000001000100
+11111011111111111111111010110001
+01011001100000010000000001011100
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000010000101111111111111111
+10111000001000000101100000000000
+11111011111111111111111100011111
+10111000001000000001000000000000
+00110100000000110000000000000000
+10111001011000000000100000000000
+11111000000000000000011110110101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000110010001111111111111111
+00001001000010000000001111101000
+10111000010000000101000000000000
+00111000000000101000000000000000
+00111100101010110000000000010000
+00000000110001110000000000010000
+10110101000000100100000000000000
+10111000100000000100100000000000
+01011011100001000000000000010000
+00000001000010000000000000010000
+01111000000001000000000000000001
+01011011100000110000000000001100
+01011011100001010000000000010100
+01011011100001100000000000011000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010010010100
+10111001010000000010100000000000
+10111001001000000011000000000000
+10111001011001110011100000000000
+11111011111111111111001010110100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00010100001010110000000000011111
+10111000001000000010100000000000
+00111001011010110000000000000001
+00010101011011010000000000011111
+10111000010000000010000000000000
+10111000011000000110000000000000
+10111001101000000000100000000000
+10111000101000000001100000000000
+10111001011000000001000000000000
+11111000000000000100011010101001
+01011011100000010000000000011100
+01011011100000100000000000100000
+00110111100000010000000000011100
+00110100000000100000001111101000
+11111011111111111111100000101111
+10111000001000000111100000000000
+00101011100000010000000000011100
+01111000000000110000000000000001
+00111000011000111000111011001000
+01011011100000010000000000100100
+00101011100000010000000000100000
+00101000011000100000000000000000
+01011011100000010000000000101000
+00110111100000010000000000100100
+11111011111111111111100000100101
+10111000001000000111000000000000
+00111101111000010000000000010000
+00110100000000100000001111101000
+11111000000000000100011011011011
+00111101110000100000000000010000
+10111000001000000010000000000000
+00010100001000110000000000011111
+10110100100000100001000000000000
+00000001110000010000000000010000
+11110100100000100010000000000000
+10110100011000010000100000000000
+10110100100000010000100000000000
+10111001101000000001100000000000
+10111001011000000010000000000000
+11111000000000000100011010001011
+00101011100000110000000000100100
+00101011100001000000000000101000
+01011001100000010000000000001000
+01011001100000100000000000001100
+10111001101000000000100000000000
+10111001011000000001000000000000
+11111000000000000100011010000100
+01011001100000010000000000000000
+01011001100000100000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101001111101000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001010110000000000011000
+10111000001000000110100000000000
+01000101011000000000000000010100
+01111000000011000000000000000001
+00111001100011001100001010101000
+00101001100000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001011011011
+00110100000000100000000000000000
+00110001101000000000000000100000
+10111001011000000000100000000000
+00110100000000110000000100100000
+00101001011011110000000010010000
+00101001011011100000000010010100
+00101001011011010000000010011000
+11111000000000000100011111010000
+00101001100000010000000000000000
+01011001011011110000000010010000
+01011001011011100000000010010100
+01011001011011010000000010011000
+00110100000000100000000000000000
+11111000000000000001001011001101
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001000010000001101011000
+00110100000000100000000000000001
+00101001101010110000000000011000
+00101000001011000000000000010000
+01111000000000010000000000000001
+00111000001000011100001010101000
+00101000001000010000000000000000
+11111000000000000001001010110111
+00101001100000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+00101000001001100000000000011100
+00110101011001000000000000101000
+10111001101000000000100000000000
+00110101011001010000000000101100
+11011000110000000000000000000000
+00110100000000101111111111111111
+01011100001000000000000001000011
+00101001100000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001101000000000100000000000
+11011000011000000000000000000000
+00110101101000100000001111111000
+10111001011000000000100000000000
+00110100000000110000000000010000
+11111000000000000100100011010011
+00101001011000010000000001001000
+00101001011000100000000000101100
+01001100010000010000000000000011
+11111000000000000100011010011110
+01011001011000010000000001001000
+00101001100000010000000000000000
+00101000001000100000000000011000
+00101001011000010000000001001000
+11011000010000000000000000000000
+00101001100000010000000001011000
+00101101100000100000000001010100
+01011001011000000000000100011000
+00111100001000010000000000010000
+01011001011000000000000000010100
+10111000001000100000100000000000
+01011001011000010000000000011000
+00101001100000010000000001100000
+00101101100000100000000001011100
+00111100001000010000000000010000
+10111000001000100000100000000000
+01011001011000010000000000011100
+00101001100000010000000000011100
+00101101100000100000000000011000
+00111100001000010000000000010000
+10111000001000100000100000000000
+01011001011000010000000000100000
+00101001100000010000000000100100
+00101101100000100000000000100000
+00111100001000010000000000010000
+10111000001000100000100000000000
+01111000000000100000000000000001
+01011001011000010000000000100100
+00111000010000100111010010101100
+00110101011000010000000001100000
+11111000000000000100100000010000
+00101001011000010000000000010000
+00110101011000100000000010100000
+01011001011000000000000001011000
+00111000001000010000000000000001
+01011001011000010000000000010000
+00101001101000010000000000111000
+00101000001000110000000000000000
+10111001101000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111101000000
+00101000001000010000000000000000
+00110100000000100000000000000000
+01011001011000010000000001011100
+01111000000000010000000000000001
+00111000001000011011010111101000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010101000
+00101000001000010000000000000000
+11111000000000000001001001101100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000010001010000000000000100
+00101000010001000000000000001000
+00101000010001100000000000000000
+00101000001000010000000000011000
+00101000010000100000000000001100
+01011000001001100000000010110000
+01011000001001010000000010110100
+01011000001001000000000010111000
+01011000001000100000000010111100
+00101000011000100000000000001000
+00101000011001010000000000000000
+00101000011001000000000000000100
+00101000011000110000000000001100
+01011000001000100000000011001000
+01011000001001010000000011000000
+01011000001001000000000011000100
+01011000001000110000000011001100
+01111000000000010000000000000001
+00111000001000011011010111101000
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+00111001101011011100001010101000
+00101000001011000000000000011000
+10111000001000000101100000000000
+00101001101000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001001000001
+00101001011000010000000011000100
+00101001011001000000000010111000
+00101001011000110000000010111100
+00101001011000100000000011000000
+01011001100000010000000011011100
+00101001011000010000000011010100
+01011001100001000000000011010000
+01011001100000110000000011010100
+00101001011001000000000011001000
+00101001011000110000000011001100
+01011001100000100000000011011000
+00101001011000100000000011010000
+01011001100000010000000011101100
+00101001101000010000000000000000
+01011001100000100000000011101000
+01011001100001000000000011100000
+01011001100000110000000011100100
+00110100000000100000000000000000
+11111000000000000001001000101110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+10111000011000000110100000000000
+00101000001000010000001101011000
+00010001011000110000000010110000
+00101000001000100000000000010000
+00100000011000110000000011000000
+00110100000000010000000010000000
+01000100011000010000000000001010
+00010001011001000000000011000000
+00100000100001000000000011000000
+01000100100000010000000000000111
+00010001011001000000000011010000
+00100000100001000000000011000000
+01000100100000010000000000000100
+00010001011001000000000011100000
+00100000100001000000000011000000
+01011100100000010000000000011001
+01111000000000010000000000000001
+00111000001000011011010111101100
+00101000001000100000000000000000
+00110100000011000000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000101
+01001100001000100000000011111001
+00010001011001000000000011000000
+00010001011001010000000011010000
+00010001011001100000000011100000
+00100000100001000000000011000000
+00100000101001010000000011000000
+00100000110001100000000011000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+01111100011000110000000010000000
+01111100100001000000000010000000
+01111100101001010000000010000000
+01111100110001100000000010000000
+00111000010000101001000111010100
+00111000001000010111010010111100
+11111000000000000010011010111100
+11100000000000000000000011101001
+00101000010000010000000000000000
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011011010111101100
+01011000001000000000000000000000
+00101001011000010000000001011000
+00110101011000100000000010100000
+00110111100011100000000000110100
+00110100001000010000000000000001
+01011001011000010000000001011000
+00101001100000010000000000111000
+00110101011100010000000011000000
+00101000001000110000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01111000000000010000000000000001
+00111000001000011011010111101000
+00101001011000100000000011101000
+01011000001000000000000000000000
+00101001011000010000000011101100
+00101001011001000000000011100000
+00101001011000110000000011100100
+01011011100000100000000000101100
+01011011100000010000000000110000
+00110101011000100000000010110000
+00110111100000010000000000100100
+01011011100001000000000000100100
+01011011100000110000000000101000
+11111000000000000000101011011000
+00101001011000100000000011011000
+00101001011000010000000011011100
+00101001011001000000000011010000
+00101001011000110000000011010100
+01011011100000100000000000111100
+01011011100000010000000001000000
+10111010001000000001000000000000
+10111001110000000000100000000000
+01011011100001000000000000110100
+01011011100000110000000000111000
+11111000000000000000101011001101
+00101011100000010000000000100100
+10111001110000000001000000000000
+01011001011000010000000000110000
+00101011100000010000000000101000
+01011001011000010000000000110100
+00101011100000010000000000101100
+01011001011000010000000000111000
+00101011100000010000000000110000
+01011001011000010000000000111100
+00110101011000010000000000110000
+11111000000000000000101011000010
+01111000000000010000000000000001
+00111000001000011011000011001100
+00101000001000010000000000000000
+00101001100000100000000000011100
+10111000001000100000100000000000
+00000000001000010000000000010000
+00100000001000010000000000001111
+01000100001000000000000000101001
+00101001011000110000000010110000
+00101001011001000000000010110100
+00101001011001010000000010111000
+00101001011001100000000010111100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010011101100
+11111011111111111111111001100100
+00101001011000110000000011000000
+00101001011001000000000011000100
+00101001011001010000000011001000
+00101001011001100000000011001100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010011111000
+11111011111111111111111001011100
+00101001011000110000000011010000
+00101001011001000000000011010100
+00101001011001010000000011011000
+00101001011001100000000011011100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010100000100
+11111011111111111111111001010100
+00101001011000110000000011100000
+00101001011001000000000011100100
+00101001011001010000000011101000
+00101001011001100000000011101100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010100010000
+11111011111111111111111001001100
+00101001011000110000000000110000
+00101001011001000000000000110100
+00101001011001010000000000111000
+00101001011001100000000000111100
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000100111010100110100
+11111011111111111111111001000100
+00101001011000010000000000111000
+00101001011000100000000000111100
+00110100000000110000000000000000
+00110100000001000000001111101000
+11111000000000000100010100010100
+00111000000011001000000000000000
+10110100010011000110000000000000
+11110100010011000001100000000000
+01111000000001010000000000000001
+10110100011000010000100000000000
+00111100001000100000000000010000
+00000001100011000000000000010000
+00111000101001011000111011001000
+10111000010011000110000000000000
+00101000101001000000000000000000
+00010100001011100000000000010000
+00101001011000100000000000110100
+00101001011000010000000000110000
+00110100000000110000000000000000
+11111000000000000100010100000101
+10110101100000100011000000000000
+11110101100001100110000000000000
+10110101110000010000100000000000
+00101001011001110000000000011000
+00101001011000110000000000100000
+10110101100000010110000000000000
+00101001011000010000000000011100
+00101001011001000000000000100100
+10110100111000110001100000000000
+10110100011000010001100000000000
+10110100011001000001100000000000
+00010100011001010000000000011111
+01011001011011000000000001000000
+01011001011001100000000001000100
+01001000101011000000000000000100
+01011100101011000000000000000101
+01010100011001100000000000000010
+11100000000000000000000000000011
+01011001011001010000000001000000
+01011001011000110000000001000100
+00101001011000100000000001000100
+00101001011000010000000001000000
+00010100100011110000000000011111
+11001000010000110001100000000000
+11110100011000100001000000000000
+11001000001001010000100000000000
+11001000001000100000100000000000
+10110100100001110010100000000000
+00010100111000100000000000011111
+11110100100001010010000000000000
+10110101111000100111100000000000
+00000000011011000000000000000001
+00111100001000100000000000011111
+10110100100011110111100000000000
+00101001011001000000000000101000
+10111000010011000110000000000000
+00000000001000100000000000000001
+10110100101011000110000000000000
+11110100101011000010100000000000
+10110101111000100111100000000000
+10111000011000000001000000000000
+00010100100000110000000000011111
+10110100101011110111100000000000
+11111000000000000100010011011001
+00010100001011100000000000001000
+00010100001000010000000000011111
+10110101100011100111000000000000
+11110101100011100110000000000000
+10110101111000010000100000000000
+10110101100000010111100000000000
+00101001011000100000000010111000
+00101001011000010000000010111100
+00101001011001000000000010110000
+00101001011000110000000010110100
+00110111100100000000000000110100
+01011011100000100000000000111100
+01011011100000010000000001000000
+10111010001000000001000000000000
+10111010000000000000100000000000
+01011011100001000000000000110100
+00110111100011000000000000100100
+01011011100000110000000000111000
+11111000000000000000101000111111
+10111001100000000001100000000000
+10111001111000000000100000000000
+10111001110000000001000000000000
+11111011111111111111111000001001
+10111010000000000000100000000000
+10111001100000000001000000000000
+11111000000000000000101000011110
+00101011100000010000000000111100
+00101011100100010000000000110100
+00101011100100000000000000111000
+00101011100000100000000001000000
+00110100000000110000000000000000
+01011001101100010000000000000000
+01011001101100000000000000000100
+01011001101000010000000000001000
+01011001101000100000000000001100
+00110100000001000000001111101000
+11111000000000000100010010110100
+00111000000011001000000000000000
+10110100010011000110000000000000
+11110100010011000001000000000000
+01111000000001010000000000000001
+10110100010000010001100000000000
+00111000101001011000111011001000
+00111100011000010000000000010000
+00000001100011000000000000010000
+00101000101001000000000000000000
+10111000001011000110000000000000
+00010100011011010000000000010000
+10111010001000000000100000000000
+00110100000000110000000000000000
+10111010000000000001000000000000
+11111000000000000100010010100101
+10110101100000100001000000000000
+11110101100000100110000000000000
+10110101101000010000100000000000
+01111000000000110000000000000001
+10110101100000010000100000000000
+00111000011000111001111101000000
+01011001011000010000000010001000
+00101000011000010000000000000000
+01011001011000100000000010001100
+01011001011011110000000001010000
+01011001011000010000000001011100
+01011001011011100000000001010100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000111000000000000
+00101000001000010000001101011000
+00101001110010110000000000011000
+00101000001011010000000000010000
+01111000000000010000000000000001
+00111000001000011011010111101000
+00101000001000010000000000000000
+01000100001000000000000100111100
+01111000000000010000000000000001
+00111000001000011100001010101000
+00101000001000010000000000000000
+00110100000000100000000000000001
+11111000000000000001000011101001
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110111100000110000000000101100
+00101001011100100000000001000000
+00101001011100000000000001000100
+11111011111111111111111010111101
+01000100001000000000000100100101
+00101001011000010000000000101100
+00110100000000100000001111101000
+11111000000000000100010010110000
+10111000001000001001100000000000
+00101011100000010000000000111000
+00101011100011000000000000110100
+00101011100100010000000000110000
+00100000001011111111111111111111
+00001001111011110000001111101000
+00111101100011000000000000010000
+00000000001000010000000000010000
+00010101111011110000000000010000
+10111001100000010110000000000000
+01001100000011000000000000001000
+10111001100000000000100000000000
+10111010011000000001000000000000
+11111000000000000100010011001111
+10111000001000000001100000000000
+00001000001000010000001111101000
+11001001100000110110000000000000
+10110101111000010111100000000000
+10111010001000000001100000000000
+01001101100000000000000000000110
+01111000000000100000000000000001
+00111000010000101000111011001000
+00101000010000010000000000000000
+00110110001000111111111111111111
+10110101100000010110000000000000
+01101001100000100000000000000000
+01100100011000011111111111111111
+10100000010000010000100000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00111000010000101000111011011100
+00101000010000010000000000000000
+00110100000000110000000000000000
+10110101100000010110000000000000
+01100100011000110000000000000000
+00000001100000010000000000011111
+10100000011000010001100000000000
+01000100011000000000000000000110
+11001000000100111001100000000000
+01001010011011000000000000000100
+00001001100011000000001111101000
+10110101111011000111100000000000
+00110100000011000000000000000000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010101111000
+10111010001000000010100000000000
+10111001100000000011000000000000
+10111001111000000011100000000000
+11111011111111111111000000101101
+00101001101000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000000100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00110100001000011111111111111111
+00110100000000100000000000000001
+01010000010000010000000000001100
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010110011000
+11111011111111111111000000011111
+00101001101000010000000000000000
+00110100000000100000000000000000
+00101000001000110000000000110100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00101001101000010000000000000000
+00101000001000010000000000010000
+11011000001000000000000000000000
+01011100001000000000000000001010
+00101001011000110000000000010000
+00110100000000101111111111111101
+10100000010000110001000000000000
+01011001011000100000000000010000
+00101011100000100000000000110000
+00101011100000110000000000101100
+10111000011000100001000000000000
+01011100010000010000000000001001
+11100000000000000000000000001010
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010110111100
+11111011111111111111000000000111
+11100000000000000000000011000111
+00110100000000010000000000000010
+11100000000000000000000000000110
+00110100000000010000000000000001
+01011101100000100000000000000100
+00101001011000010000000000010100
+01011100001011000000000000000011
+00110100000000010000000000000011
+01011001011000010000000000010100
+00101001011000100000000000010100
+01111000000000010000000000000001
+00111000001000011001000110111100
+00111100010000100000000000000010
+01111000000001100000000000000001
+10110100001000100000100000000000
+00101000001001010000000000000000
+01111000000001000000000000000001
+00111000110001101000000011100000
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111010111001000
+11111011111111111110111111110000
+00101001011000100000000000010100
+01111000000000010000000000000001
+00111000001000011001000110111100
+00111100010000100000000000000010
+10110100001000100001000000000000
+00101000010000100000000000000000
+00110101011000010000000001100000
+11111000000000000100010111110101
+00101001011000100000000000010100
+00110100000000010000000000000100
+00110100010000101111111111111111
+01010100010000010000000001101110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001000110101000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001101000010000000000000000
+00101011100000100000000000110000
+00110100000000110000000000000000
+00101000001001000000000000010100
+00101011100000010000000000101100
+11100000000000000000000000000110
+00101001101000010000000000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+00101000001001000000000000010100
+00110100000000010000000000000000
+11011000100000000000000000000000
+00101001011000010000000000010000
+00111000001000010000000000000010
+01011001011000010000000000010000
+11100000000000000000000001000010
+00101001011001010000000001001000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111010111100000
+10111001100000000011000000000000
+10111001111000000011100000000000
+11111011111111111110111111000101
+00101001101000100000000000000000
+00101001011000010000000001001000
+00101000010000100000000000011000
+10110101111000010000100000000000
+01011001011000010000000001001000
+11011000010000000000000000000000
+00101001011000010000000000010000
+00111000001000010000000000000010
+01011001011000010000000000010000
+00110100000000010000000000000101
+01011001011000010000000000010100
+11100000000000000000000001000011
+00010101111000010000000000011111
+00110100000000100000000000111011
+10011000001011110111100000000000
+11001001111000010000100000000000
+01001000001000100000000000001101
+00101001101000010000000000000000
+00110100000000100000000000000001
+00101000001000110000000000110100
+10111001110000000000100000000000
+11011000011000000000000000000000
+00101001011000010000000001010000
+01011001011000010000000100010000
+00101001011000010000000001010100
+01011001011000010000000100010100
+00110100000000010000000000000100
+01011001011000010000000000010100
+11100000000000000000000000000100
+00101001011000010000000100011000
+00110100001000010000000000000001
+01011001011000010000000100011000
+00101001011000100000000100011000
+00110100000000010000000000001001
+01001100001000100000000000101100
+01011001011000000000000100011000
+11100000000000000000000000010100
+00101001011000110000000001010100
+00101001011000010000000100010100
+00101001011001000000000001010000
+00101001011000100000000100010000
+11001000011000010000100000000000
+11110100001000110001100000000000
+01011001011000010000000010000100
+01111000000000010000000000000001
+00111000001000011001111101000000
+11001000100000100001000000000000
+00101000001000010000000000000000
+11001000010000110001000000000000
+01011001011000100000000010000000
+01000100001000000000000000011100
+00010101111000010000000000011111
+00110100000000110000000001111000
+10011000001011110001000000000000
+11001000010000010001000000000000
+01001100011000100000000000000011
+00110100000000010000000000000011
+11100011111111111111111111010001
+00000000001000010000000000011110
+00101001101000100000000000000000
+10110100001011110111100000000000
+00101001011000010000000001001000
+00010101111011110000000000000010
+00101000010000100000000000011000
+10110101111000010000100000000000
+01011001011000010000000001001000
+11011000010000000000000000000000
+00101001011001010000000001001000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000111010111111100
+11111011111111111110111101111011
+00101001011000010000000001010000
+01011001011000010000000100010000
+00101001011000010000000001010100
+01011001011000010000000100010100
+00101001011000100000000000010100
+00110100000000010000000000000100
+01000100010000010000000000000100
+00101001011000010000000010010000
+00110100001000010000000000000001
+01011001011000010000000010010000
+00101001011001000000000010001000
+00101001011000110000000010001100
+00010100100000010000000000011111
+10011000011000010001100000000000
+11001000011000010001000000000000
+10011000100000010010000000000000
+11110100010000110001100000000000
+11001000100000010000100000000000
+11001000001000110000100000000000
+01001000001000000000000000000101
+01011100001000000000000000000111
+00110100000000010000000111110100
+01010100010000010000000000000010
+11100000000000000000000000000100
+00101001011000010000000010010100
+00110100001000010000000000000001
+01011001011000010000000010010100
+00101001011001010000000001000100
+00101001011001000000000001000000
+11001010000001010001100000000000
+11110100011100000000100000000000
+11001010010001000001000000000000
+11001000010000010001000000000000
+01001000000000100000000000000111
+00110100000000010000000000000001
+01001000010000000000000000010011
+01011100010000000000000000010001
+00110100000000100000001111101000
+01010100011000100000000000010000
+11100000000000000000000000001110
+11001000000100000000100000000000
+01111100001000100000000000000000
+11001000000100100001100000000000
+11001000011000100001100000000000
+11001000001001010001000000000000
+11110100010000010000100000000000
+11001000011001000001100000000000
+11001000011000010001100000000000
+00110100000000010000000000000001
+01001000011000000000000000000101
+01011100011000000000000000000011
+00110100000000110000001111101000
+01010100010000110000000000000010
+00110100000000010000000000000000
+00100000001000010000000011111111
+01000100001000000000000000000100
+00101001011000010000000010011000
+00110100001000010000000000000001
+01011001011000010000000010011000
+01111000000000010000000000000001
+00111000001000011100001010101000
+00101000001000010000000000000000
+00110100000000100000000000000000
+11111000000000000000111110111001
+00101001101000010000000000000000
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11011000011000000000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000110000000000111000
+10111000010000000101100000000000
+00101000011000110000000000000000
+11011000011000000000000000000000
+00101001011000100000000000001000
+00101101011000010000000000001100
+01111000000000110000000000000001
+00111100010000100000000000010000
+00111000011000111000111011100000
+10111000010000010000100000000000
+00101000011000100000000000000000
+11111000000000000100001101101000
+00110100001000010000001111101000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000001011010000000000001100
+10111000001000000101100000000000
+00110111100011000000000000011000
+01000101101000000000000000001000
+10111001100000000001000000000000
+11111011111111111111111111100001
+00110100001000110000001111011110
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111101100010
+11100000000000000000000000110010
+10111001100000000001000000000000
+11111011111111111111111111011010
+10111000001000000111000000000000
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111111011011
+01000100001011010000000000100110
+00101011100011100000000000011100
+00101011100011010000000000011000
+00101001011000010000000000111000
+10111001100000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+00101011100000100000000000011000
+00101011100000010000000000011100
+01011100010011010000000000000010
+01000100001011101111111111111000
+00101001011000010000000000111000
+00110111100011000000000000011000
+10111001100000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111000000000000000011010001100
+10111000001000000001000000000000
+00110100000000110000000000000001
+10111001011000000000100000000000
+11111000000000000000001111001001
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111011111111111111111110111010
+00110100001000111111111111110110
+00110100000000100000000000000110
+10111001011000000000100000000000
+11111011111111111110111100111011
+10111001011000000000100000000000
+10111001100000000001000000000000
+11111011111111111111111110110011
+00110100001000011111111111110110
+01011001011000010000000000001000
+11100000000000000000000000000110
+00110101110000101111111111110110
+11101100010000010000100000000000
+11001000000000010000100000000000
+10100000010000010001000000000000
+01011001011000100000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000001
+10111000001000000101100000000000
+11111011111111111110111110100001
+00110100000011000000000000000000
+01000100001000000000000000010100
+10111001011000000000100000000000
+00110100000000100000000000000001
+11111011111111111110111100111110
+00101001011000110000001111100100
+00110100000000100000000000000001
+00110100000000010000000000000000
+01011100011000100000000000000010
+00101001011000010000001111100000
+00001101011000010000000010010010
+10111001011000000000100000000000
+11111000000000000000011100111001
+10111000001000000110000000000000
+01000100001000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011001010100
+11111011111111111110111010101110
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000011
+10111000001000000101100000000000
+11111011111111111110111101111111
+00110100000011000000000000000000
+01000100001000000000000000010100
+10111001011000000000100000000000
+00110100000000100000000000000011
+11111011111111111110111100011100
+00101001011000110000001111100100
+00110100000000100000000000000001
+00110100000000010000000000000000
+01011100011000100000000000000010
+00101001011000010000001111100000
+00001101011000010000000010010010
+10111001011000000000100000000000
+11111000000000000000011010110010
+10111000001000000110000000000000
+01000100001000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011001101100
+11111011111111111110111010001100
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000101100000000000
+11111011111111111110111101011101
+00110100000011000000000000000000
+01000100001000000000000000011001
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111011111111111110111011111010
+10111001011000000000100000000000
+11111000000000000000011100101000
+10111000001000000110000000000000
+00101001011001000000000100010000
+00101001011000010000000100011100
+00101001011000110000000100010100
+00101001011000100000000100011000
+01011001011000010000000011000100
+01011001011001000000000010111000
+01011001011000110000000010111100
+01011001011000100000000011000000
+00110100000000011111111111111111
+01011101100000010000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011010001000
+11111011111111111110111001100111
+11100000000000000000000000000010
+00110100000011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000001000000101100000000000
+10111000010000000111000000000000
+00110100001011110000001110100000
+00110100001100000000001111000000
+11100000000000000000000000010010
+00001001100011010000000001110000
+10111010000000000000100000000000
+00110100000000110000000000001010
+00110101101000100000000100101000
+10110101011000100001000000000000
+11111000000000000100001100100111
+01011100001000000000000000001010
+00110101101000010000000101101000
+10111001111000000001000000000000
+10110101011000010000100000000000
+11111000000000000000001001010011
+10110101011011010001000000000000
+10111001110000000000100000000000
+00110100010000100000000100110100
+11111000000000000000011000010000
+11100000000000000000000000011111
+00110101100011000000000000000001
+00101101011000110000000100100000
+01001000011011001111111111101110
+00110100000000010000000000000100
+01010100011000010000000000000011
+00110100011000110000000000000001
+00001101011000110000000100100000
+00101101011011010000000100100000
+00110100000000110000000000001010
+00110101011000100000001111000000
+00110101101011011111111111111111
+00001001101011000000000001110000
+00110101100000010000000100101000
+10110101011000010000100000000000
+11111000000000000100001100101111
+00110101100000010000000101101000
+10111001111000000001000000000000
+10110101011000010000100000000000
+11111000000000000000001000111011
+10110101011011000001000000000000
+10111001110000000000100000000000
+00110100010000100000000100110100
+11111000000000000000010111111000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111011010100000
+10111001101000000010100000000000
+11111011111111111110111000100011
+10111001011000000000100000000000
+11111000000000000000010000000010
+01011001011000010000000000000100
+00110100000000100000000000000010
+10111001011000000000100000000000
+11111011111111111110111010011101
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001000100000000000100100
+00110100000000010000000000000000
+01000100010000000000000000000011
+10111001011000000000100000000000
+11011000010000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00101000001000100000000000000000
+01111000000001010000000000000001
+00111000101001011000111011010100
+00101000010000110000000000010100
+00101000010000100000000000001100
+00101000010001000000000000000100
+01011000011001000000000000000000
+00101000010000100000000000001000
+00110100000001001111111111111111
+01011000011000100000000000000100
+00101000001000110000000000000000
+00101000011000100000000000010100
+00101000011000110000000000001100
+00001100010001000000000000001010
+00101000101001000000000000000000
+01011000010001000000000000001100
+00101000011001000000000000000100
+01011000010001000000000000010000
+00101000011000110000000000001000
+01011000010000110000000000010100
+00101000001000100000000000000000
+00101000010000110000000000010100
+00101000010000100000000000001100
+00101000010001100000000000010000
+00101000010001010000000000010100
+00101000010001000000000000011000
+01011000011001100000000000011000
+01011000011001010000000000011100
+01011000011001000000000000100000
+01000000010000100000000000011100
+00110000011000100000000000100100
+00101000001000010000000000000000
+00101000001000100000000000010100
+00101000001000010000000000001100
+01000000001000010000000000011101
+00110000010000010000000000100101
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000010000001000000000000000
+00101000001000100000000000110000
+10111000001000000101100000000000
+10111000011000000111100000000000
+00101000010011010000000000001000
+00101000001000100000000000110100
+00101000001011000000001101011000
+00101000010001000000000000000000
+11011000100000000000000000000000
+01001000000000010000000001100110
+00110101011011100000000000110000
+10111001110000000000100000000000
+11111011111111111111111111000111
+00101001011000010000000000110000
+00101000001001000000000000001100
+01000001011000010000000001011100
+00110000100000010000000000000100
+01000001011000010000000001011101
+00110000100000010000000000000101
+01000001011000010000000001011110
+00110000100000010000000000000110
+00110100000000011111111111111111
+00110000100000010000000000000111
+00110100000000011111111111111110
+00110000100000010000000000001000
+01000001011000010000000001011111
+00110000100000010000000000001001
+01000001011000010000000001100000
+00110000100000010000000000001010
+01000001011000010000000001100001
+00110000100000010000000000001011
+10111001110000000000100000000000
+11111011111111111111111110110011
+00101001011000010000000000110000
+00110100000000110000000000001000
+00101000001001000000000000001100
+10111001100000000000100000000000
+00110100100000100000000000000100
+11111000000000000100001010110110
+00101001011000010000000000110000
+00110101011000100000010000011000
+00101000001000010000000000000000
+00110001100000000000000000001010
+11001000010000010000100000000000
+00010100001000010000000000000011
+00001000001000010100111000101011
+00001101100000010000000000001000
+01000001101000010000000000011010
+00110001100000010000000000001011
+00110100000000010000000000010100
+00110001100000010000000000001100
+00101001101000010000000000011100
+00110001100000010000000000001101
+00110100000000010000000000000010
+00110001100000010000000000001110
+10111001011000000000100000000000
+11111011111111111110110111101011
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001001000000000000000000
+01000100100000000000000000001111
+10111001011000000000100000000000
+10111010000000000001000000000000
+10111001111000000001100000000000
+11011000100000000000000000000000
+01000100001000000000000000001010
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000001
+00111000100001000111011011000000
+00111000101001011001000111100100
+11111011111111111110110110010110
+11100000000000000000000000100101
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000011
+00101000001001010000000000001100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000101001010000000000010000
+00111000100001000111011011011100
+11111011111111111110110110001100
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000011
+00101000001001010000000000001100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000101001010000000000010100
+00111000100001000111011011110000
+11111011111111111110110110000011
+00101001011000100000000001001100
+10111001011000000000100000000000
+11111000000000000000010100000111
+00101001011000100000000000100100
+00110100000000010000000000000001
+01000100010000010000000000000011
+00110100000000010000000000000100
+11100000000000000000000000000010
+00110100000000010000000000000110
+01011001011000010000000000000100
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000000110
+00110100000000010000000001101011
+01011001011000010000000000000100
+11100000000000000000000000000011
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000100
+10111000001000000101100000000000
+11111011111111111110111000111101
+01000100001000000000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000100
+11100000000000000000000000000101
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110111001011000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000100000001111101000
+01011000001000100000000000001000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00110100000000100000000000000100
+10111000001000000101100000000000
+10111000011000000110000000000000
+11111011111111111110110111000100
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001001000000000000001100
+01000100100000000000000000000110
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11011000100000000000000000000000
+01011100001000000000000000010010
+01000001011000010000001110100001
+01000100001000000000000000001000
+00110100000000100000000000001011
+01011100001000100000000000001011
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11111011111111111111111011010101
+11100000000000000000000000000101
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11111000000000000000001000010001
+01011100001000000000000000000100
+10111001011000000000100000000000
+11111000000000000000000101100110
+01000100001000000000000000000011
+00110100000000010000000000000010
+01011001011000010000000000000100
+10111001011000000000100000000000
+00110100000000100000000000000010
+11111011111111111110111000100101
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001001000000000000000000
+00110100000000110000000000000110
+01011100100000110000000000000011
+00110100001000100000000100000000
+11111000000000000000010111101010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000011000000110000000000000
+00101000001000110000000000000000
+10111000010000000110100000000000
+00110100000000100000000000000101
+10111000001000000101100000000000
+01011100011000100000000000000111
+11111011111111111110110111100100
+01000100001000000000000000001000
+00110100000000010000000000000110
+01011001011000010000000000000100
+00110100000011000000000000000000
+11100000000000000000000001000100
+11111011111111111111111000110111
+10111001011000000000100000000000
+11111011111111111111111001010111
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111110110101111011
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001001100000000000010000
+01000001011001010000001110100001
+01000100110000000000000000001000
+10111000101000000010000000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+10111001100000000001100000000000
+11011000110000000000000000000000
+10111000001000000010100000000000
+01001000000000010000000000101011
+00110100000000010000000000001011
+01010100101000010000000000001110
+01111000000000010000000000000001
+00111100101000100000000000000010
+00111000001000011001000111110100
+10110100001000100000100000000000
+00101000001001000000000000000000
+01000100100000000000000000001000
+10111001100000000001100000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+11011000100000000000000000000000
+10111000001000000110000000000000
+01011100001000000000000000001101
+11100000000000000000000000010001
+01111100101000010000000000001111
+01111101100011000000000000000000
+10100000001011000110000000000000
+01000101100000000000000000001101
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011100001000
+11111011111111111110110011010110
+11100000000000000000000000000110
+00110100000000010000000000000001
+01000101100000010000000000001111
+00110100000000011111111111111111
+01011101100000010000000000001110
+11100000000000000000000000001100
+00101001011000010000000000110000
+00101000001000010000000000001100
+00101000001000100000000000010000
+00110100000000010000000011111111
+01000100010000010000000000000101
+00101001011000100000000000100100
+00110100000000010000000000000010
+00110100000011000000000000000000
+01011100010000010000000000000100
+00110100000000010000000000000100
+01011001011000010000000000000100
+00110100000011000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111011111111111110110111110111
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001001000000001110100001
+10111000001000000101100000000000
+01000100100000000000000000000101
+00110100000001010000000000001011
+01011100100001010000000000000101
+11111011111111111111111001010000
+11100000000000000000000000000010
+11111000000000000000000110001111
+01011100001000000000000000000011
+10111001011000000000100000000000
+11111000000000000000000011100100
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001001000000001110100001
+10111000001000000101100000000000
+01000100100000000000000000000111
+00110100000001010000000000001000
+01000100100001010000000000000111
+00110100000001010000000000001011
+01011100100001010000000000000111
+11111011111111111111111000111001
+11100000000000000000000000000100
+11111000000000000000000011111101
+11100000000000000000000000000010
+11111000000000000000000100110100
+01011100001000000000000000000100
+10111001011000000000100000000000
+11111000000000000000000011001011
+01000100001000000000000000000011
+00110100000000010000000000000010
+01011001011000010000000000000100
+00110100000000010000001111101000
+01011001011000010000000000001000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+00110111100000100000000000010000
+11111000000000000000010010000010
+00101001011000010000001101011000
+00110111100000100000000000100000
+00110100000000110000000000001000
+11111000000000000100000101010110
+01011100001000000000000000001011
+00101101011000100000001110000000
+00101101011000010000001111001010
+01011100010000010000000000001000
+00101001011000010000001101011000
+00101100001000100000000000001000
+00101111100000010000000000101000
+01011100010000010000000000000100
+01000001011000010000000000100000
+00100000001000010000000000000001
+01011100001000000000000000001010
+01000001011001010000000000100000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011100011100
+11111011111111111110110001101000
+00110100000011000000000000000000
+11100000000000000000000000100010
+00101011100000010000000000010000
+00110101011000100000001110110000
+01011001011000010000000011001000
+00101011100000010000000000010100
+01011001011000010000000011001100
+00101011100000010000000000011000
+01011001011000010000000011010000
+00101011100000010000000000011100
+01011001011000010000000011010100
+00110101011000010000000011001000
+11111000000000000000010111000100
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110110011011000
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001000100000000000011000
+01000100010000000000000000000110
+10111001011000000000100000000000
+11011000010000000000000000000000
+10111000001000000110000000000000
+01000100001000000000000000000100
+11100000000000000000000000001011
+10111001011000000000100000000000
+11111000000000000000011111110101
+00101001011000010000001101011000
+00010001011000100000001111001100
+00110100000011000000000000000000
+00010000001000110000000000001010
+01000100011000100000000000000100
+00110000001000100000000000001010
+10111001011000000000100000000000
+11111011111111111110110010001001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000001100
+10111000010000000111000000000000
+10111000011000000110100000000000
+01000100001000000000000000010001
+00110100000000100000000000000000
+00110100000000110000000000010000
+00110101011000010000000010011000
+11111000000000000100000110101011
+10111001011000000000100000000000
+11111000000000000000011101001100
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001001000000000000010100
+01000100100000000000000000000111
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+10111000001000000110000000000000
+01011100001000000000000000011011
+10111001011000000000100000000000
+11111011111111111111110110011101
+01000001011001010000001110100001
+00110100000000010000000000001011
+01010100101000010000000000001100
+01111000000000010000000000000001
+00111100101000100000000000000010
+00111000001000011001001000100100
+10110100001000100000100000000000
+00101000001001000000000000000000
+01000100100000000000000000000110
+10111001011000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+11100000000000000000000000001000
+01000101101000000000000000000111
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111011100001000
+11111011111111111110110000001101
+10111001011000000000100000000000
+11111000000000000000000001000110
+10111000001000000110000000000000
+01111101100000010000000000000001
+00101001011000100000000000000100
+11001000000000010000100000000000
+10100001100000010110000000000000
+00101001011000010000000000000000
+01000100010000010000000000000100
+10111001011000000000100000000000
+11111000000000000000011100100000
+11100000000000000000000000000110
+10111001011000000000100000000000
+00110100000000100000000000000010
+00110100000000110000000000000000
+11111011111111111110110100010100
+01011001011000010000000000001000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000110000
+11111000000000000100000011101101
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00101000001000100000000000101000
+00110100000000110000000000000001
+01000100010000110000000000001010
+00110100000000110000000000000010
+01000100010000110000000000000011
+01011100010000000000000000001001
+11100000000000000000000000000110
+00110100000000100000000000010010
+01011000001000100000000010000100
+00110100000000100000000000001110
+01011000001000100000000010001000
+11100000000000000000000000000011
+01011000001000000000000010000100
+01011000001000000000000010001000
+00101000001001000000000010000100
+00101000001001010000000000111100
+00110100000000100000000000000000
+10110100101001000010100000000000
+00100000101000110000000000000011
+01000100011000000000000000000011
+00110100000000100000000000000100
+11001000010000110001000000000000
+10110100101000100010100000000000
+00101000001001100000000001000000
+00101000001000100000000010001000
+01011000001001010000000001001100
+00110100000000110000000000000000
+10110100110000100011000000000000
+00100000110001110000000000000011
+01000100111000000000000000000011
+00110100000000110000000000000100
+11001000011001110001100000000000
+10110100110000110001100000000000
+11001000101001000010000000000000
+11001000011000100001000000000000
+01011000001000110000000001010000
+01011000001001000000000001000100
+01011000001000100000000001001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101001111100000100
+00101000010000100000000000100000
+10111000001000000101100000000000
+01000100010000000000000000000110
+11011000010000000000000000000000
+10111000001000000001000000000000
+00110100000000010000000000000001
+01000100010000010000000000011100
+01001000000000100000000000011100
+10111001011000000000100000000000
+00110100000000100000000000000010
+11111011111111111110110010010100
+01011100001000000000000000000110
+00110100000000100000000000000100
+10111001011000000000100000000000
+11111011111111111110110010010000
+00110100000000100000000000000000
+01000100001000100000000000010011
+00101001011000010000000000110000
+00001101011000000000000100100000
+00101000001000010000000000001100
+00101000001000100000000000010000
+00110100000000010000000011111111
+01000100010000010000000000000111
+00101001011000100000000000100100
+00110100000000010000000000000010
+01000100010000010000000000000100
+00110100000000010000000000000110
+01011001011000010000000000000100
+11100000000000000000000000000110
+00110100000000010000000000000100
+01011001011000010000000000000100
+00110100000000100000000000000010
+10111001011000000000100000000000
+11111011111111111110110000011111
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+01000001011000100000000000100000
+00100000010000100000000000000001
+01000100010000000000000000101101
+00101001011000100000000100001100
+00101001011001010000000100000000
+00101001011001000000000100000100
+00101001011000110000000100001000
+01011001011000100000000010110100
+01011001011001010000000010101000
+00110111100000100000000000001100
+01011001011001000000000010101100
+01011001011000110000000010110000
+11111000000000000000001101001011
+01000001011000100000001110100111
+01000001011000010000000000100000
+00100000010000100000000000000010
+01000100010000000000000000001110
+00111000001000010000000000000010
+00110001011000010000000000100000
+00101101011000010000001111001010
+00101001011001000000001110110000
+00101001011000110000001110110100
+00001101011000010000001101111100
+00101001011000100000001110111000
+00101001011000010000001110111100
+01011001011001000000000010011000
+01011001011000110000000010011100
+01011001011000100000000010100000
+01011001011000010000000010100100
+11100000000000000000000000010010
+00100000001000010000000011111101
+00110001011000010000000000100000
+00101011100000010000000000001100
+00110101011000100000001110110000
+01011001011000010000000010011000
+00101011100000010000000000010000
+01011001011000010000000010011100
+00101011100000010000000000010100
+01011001011000010000000010100000
+00101011100000010000000000011000
+01011001011000010000000010100100
+00110101011000010000000010011000
+11111000000000000000010011010010
+10111001011000000000100000000000
+01011001011000000000000011111000
+01011001011000000000000011111100
+11111000000000000000011011111011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000000100000000000
+01000001011000100000000000100000
+00100000010000110000000000000001
+01011100011000000000000000000100
+01111000000000010000000000000001
+00111000001000010111011110111000
+11100000000000000000000000000101
+00100000010000100000000000000010
+01011100010000000000000000000111
+01111000000000010000000000000001
+00111000001000010111011111110100
+01111000000000100000000000000001
+00111000010000101001001001010100
+11111000000000000010000010010001
+11100000000000000000000000100111
+00101101011001000000001101111100
+00101101011000110000001111001010
+01000100100000110000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001001001010100
+00111000001000010111100000101100
+11111000000000000010000010001000
+11100000000000000000000000011110
+00110111100011010000000000010100
+10111001101000000001000000000000
+11111000000000000000001100111001
+01000001011000010000000000100000
+00110101011011000000000010011000
+10111001101000000001000000000000
+00100000001000010000000011111101
+00110001011000010000000000100000
+10111001100000000000100000000000
+11111000000000000000010010100001
+10111001100000000000100000000000
+00110101011000100000001110110000
+11111000000000000000010010011110
+00101001011000010000001110111000
+01011001011000010000000011111000
+00101001011000010000001110111100
+01011001011000010000000011111100
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001000110000000000101000
+01000100011000000000000000000111
+10111001100000000001000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+00110100000000100000000000000001
+01000100001000100000000000000100
+01001000000000010000000000000100
+10111001011000000000100000000000
+11111000000000000000011010111011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100111010000000000001000
+10111000010000000110000000000000
+00101000001000100000000001001100
+10111000011000000111000000000000
+00101000001000110000000010000100
+01000000010011010000000000000000
+00101000001000100000000000110100
+10110101100000110001100000000000
+00100001101011010000000000001111
+00101000010001010000000000001100
+00101000001000100000000001000100
+10111001101000000010000000000000
+10111000001000000101100000000000
+11011000101000000000000000000000
+10111000001000000001000000000000
+00110100000000111111111111111110
+00110100000000010000000000000000
+01000100010000110000000000101111
+01111000000010010000000000000001
+00111001001010011001011101101000
+00001001101000010000000000001100
+01001100010011000000000000001100
+10110101001000010100100000000000
+00101001001001010000000000000000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000001
+00111000100001000111100001101100
+10111001101000000011000000000000
+11111011111111111110101011111000
+00110100000000011111111111111111
+11100000000000000000000000100000
+00101001011010000000000100011100
+00101001011010100000000100011000
+10110101001000010100100000000000
+00000001000001110000000000010000
+00100001000010001111111111111111
+00001001000010000000001111101000
+00101001001000010000000000000000
+00111101010010100000000000010000
+00101001011001100000000100010100
+01111000000001000000000000000001
+00000001000010000000000000010000
+01011011100000010000000000000100
+00110100000000100000000000000101
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111100010001100
+10111001100000000010100000000000
+10111001010001110011100000000000
+11111011111111111110101011100011
+00110100000000010000000000000001
+01011101110000010000000000000101
+00010001011000100000000100010000
+00110100000000010000000010000000
+00100000010000100000000011000000
+01000100010000010000000000000110
+00101001011000010000010000010000
+00110100001000010000000000000001
+01011001011000010000010000010000
+00110100000000010000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000001
+00101011100111010000000000001000
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000001000
+11111000000000000011111110101000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000011100000000000000001
+00111001110011101001001001110100
+01111000000001000000000000000001
+10111000010000000110100000000000
+10111000011000000110000000000000
+00110100000000100000000000000011
+00110100000000110000000000000010
+00111000100001000111100111101000
+10111001110000000010100000000000
+10111000001000000111100000000000
+00110101101100010000000000101001
+11111011111111111110101010110100
+00110101100100000000000000101001
+10111010001000000000100000000000
+10111010000000000001000000000000
+11111011111111111111111111100001
+01011100001000000000000000110011
+00101101100000010000000000110010
+00101101101010110000000000110010
+11001001011000010101100000000000
+00110101011000100000000000000001
+00110100000000010000000000000010
+01010100010000010000000001000011
+00101001111000100000000000110000
+00110100000000110000000000000001
+00110101101000010000000001100000
+00101000010000100000000000010100
+01011101011000110000000000001011
+11111011111111111111111111010100
+01011100001000000000000000111100
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100010110100
+10111001110000000010100000000000
+00110100000001100000000010010000
+11100000000000000000000000001110
+00110100000000111111111111111111
+00110101100011000000000001100000
+01011101011000110000000000001110
+10111001100000000000100000000000
+11111011111111111111111111000110
+01011100001000000000000000101110
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100010110100
+10111001110000000010100000000000
+00110100000001100000000010011001
+11111011111111111110101010001100
+00110100000010110000000000000000
+11100000000000000000000000100100
+10111001100000000001000000000000
+11111011111111111111111110111001
+10111000001000000101100000000000
+01011100001000000000000000100000
+01111000000001000000000000000001
+10111001111000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011000100
+10111001110000000010100000000000
+00110100000001100000000010100001
+11111011111111111110101001111110
+11100000000000000000000000010111
+01000001101010110000000000011010
+01000001100000010000000000011010
+01011101011000010000000000001110
+00101001101010110000000000011100
+00101001100000010000000000011100
+01011101011000010000000000001011
+00101001101010110000000000100000
+00101001100000010000000000100000
+01011101011000010000000000001000
+00101001101000100000000000100100
+00101001100000010000000000100100
+00110100000010110000000000000000
+01011100010000010000000000001010
+01000001101010110000000000101000
+01000001100000010000000000101000
+01000101011000010000000000000011
+11001001011000010101100000000000
+11100000000000000000000000000101
+10111010001000000000100000000000
+10111010000000000001000000000000
+11111011111111111111111110011001
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000100000000000000000
+00110100000000110000000000010000
+11111000000000000011111111010010
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001000010000000000110000
+00101000001011000000000000010100
+00101000001010110000000000001100
+00101000001000010000000000010000
+00001100001000000000000000000000
+00110100001000010000000000001000
+11111011111111111111111111101100
+00101001101000010000000000110000
+00101000001000010000000000010000
+00110100001000010000000000011000
+11111011111111111111111111101000
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000101000
+11111000000000000011111110111010
+00101001011000010000000000000100
+01011001100000010000000000000000
+00101001011000010000000000001000
+00001101100000000000000000001000
+01011001100000010000000000000100
+00101001011000010000000000000100
+01011001100000010000000000010000
+00101001011000010000000000001000
+01011001100000010000000000010100
+00101001011000100000000000010100
+00101001011000010000000000011000
+00101001011000110000000000010000
+01011001100000100000000000011100
+01011001100000010000000000100000
+01011001100000110000000000011000
+01000001011000010000000000011100
+00110100000000100000000000000001
+00110001100000010000000000100100
+01000001011000010000000000011101
+00110001100000010000000000100101
+00101001101000010000000000110000
+00101000001000010000000000011000
+01011000001000100000000000011000
+00110100000000101111111110100000
+00110000001000100000000000011100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111101110100
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101100001000100000000100100000
+10111000001000000101100000000000
+00110100000011010000000000000000
+00110100000011000000000000000001
+01011100010000000000000000010100
+00101000001000110000000000000000
+10111000010000000110100000000000
+00110100000000100000000000000110
+01011100011000100000000000010000
+11111011111111111111111110111100
+00101001011011000000000000000000
+11100000000000000000000100010011
+00001001100000100000000001110000
+00001001101000110000000001110000
+10111001011000000000100000000000
+00110100010000100000000100101000
+00110100011000110000000100101000
+10110101011000100001000000000000
+10110101011000110001100000000000
+11111011111111111111111100111101
+01001000000000010000000000000010
+11100000000000000000000000000010
+10111001100000000110100000000000
+00110101100011000000000000000001
+00101101011001100000000100100000
+01001000110011001111111111110011
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011011100
+10111001101000000010100000000000
+11111011111111111110100111111000
+00011101011000010000000100100010
+01000100001011010000000000100010
+00001101011011010000000100100010
+00101001011011000000000000110000
+00110100000011110000000000000000
+00110100000011100000000000000001
+11100000000000000000000000010101
+00101001100000100000000000000000
+00001001110000010000010000011000
+10110100010000010000100000000000
+00101100001000110000000100100000
+01000100011000000000000000001111
+00001001111001000000010000011000
+00011100001000110000000100100010
+10110100010001000010000000000000
+00011100100000100000000100100010
+00001000011000110000000001110000
+00001000010000100000000001110000
+00110100011000110000000100101000
+10110100001000110001100000000000
+00110100010000100000000100101000
+10110100100000100001000000000000
+11111011111111111111111100011001
+01001000000000010000000000000010
+11100000000000000000000000000010
+10111001110000000111100000000000
+00110101110011100000000000000001
+00101001100000010000000000001100
+00101100001000010000000000001100
+01001000001011101111111111101010
+00101001100000010000000000011100
+01000100001011110000000000000100
+00110100000000010000000000000001
+01011001100011110000000000011100
+01011001100000010000000000100000
+00101001011000100000000000100100
+00110100000000010000000000000010
+01000100010000010000000001101100
+00101101011000010000000100100000
+01011100001000000000000000000100
+00101001011000010000000000000000
+00110100000011000000000000000100
+01000100001011000000000011010011
+00101001011000010000000000110000
+00001001101011000000000001110000
+00101000001000010000000000001100
+01000000001001000000000000001001
+01000000001000110000000000001010
+01000000001000100000000000001011
+01000000001010010000000000000100
+01000000001010000000000000000101
+01000000001001110000000000000110
+01000000001001100000000000000111
+01000000001001010000000000001000
+00110011100010010000000001001001
+00110011100010000000000001001010
+00110011100001110000000001001011
+00110011100001100000000001001100
+00110011100001010000000001001101
+00110011100001000000000001001110
+00110011100000110000000001001111
+00110011100000100000000001010000
+00101000001000100000000000011000
+00101000001001000000000000010000
+00101000001000110000000000010100
+01011011100000100000000001000100
+01000000001000100000000000011100
+01011011100000110000000001000000
+00110101100000110000000100101000
+00110011100000100000000000111010
+01000000001000100000000000011101
+10110101011000110001100000000000
+01011011100001000000000000111100
+00110011100000100000000001001000
+00101000001000100000000000000100
+00001111100000000000000001010010
+01011011100000100000000010000000
+00101000001000010000000000001000
+00110111100000100000000000100000
+01011011100000010000000010000100
+10111001011000000000100000000000
+11111011111111111111111011011110
+00101001011000100000000000100100
+00110100000001000000000000000001
+01000100010001000000000000101010
+00101001011000100000000000110000
+01111000000001010000000000000001
+00110100000001100000000001111111
+00101000010000110000000000001100
+00111000101001011001001010000100
+00101000011001110000000000010000
+01001000111001100000000000000100
+01001000000000010000000000100011
+01011100001000000000000000011001
+11100000000000000000000000000110
+01001000000000010000000000100000
+01000100001000000000000000000100
+00101100011000010000000000001100
+01011100001001000000000000001010
+11100000000000000000000000101110
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100011111100
+11111011111111111110100110001110
+00110100000011000000000000000010
+11100000000000000000000010010010
+00101001011000110000001111011000
+00101000010000010000000000011100
+01000100011000010000000000100011
+10110101011011000001000000000000
+00110111100000010000000001001001
+00110100010000100000000101010001
+01011011100001010000000000011100
+11111011111111111111111010110101
+00101011100001010000000000011100
+01011100001000000000000000010000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100001000
+11111011111111111110100101111100
+00110100000011000000000000000111
+11100000000000000000000010000000
+01001100001000000000000000000111
+10111001011000000000100000000000
+11111011111111111111111100100100
+01111000000001100000000000000001
+00110100000011000000000000000110
+00111000110001101000000011100000
+11100000000000000000000000000100
+01111000000001100000000000000001
+00110100000011000000000000000101
+00111000110001100111100011010100
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100011000
+00111000101001011001001010000100
+11111011111111111110100101101000
+11100000000000000000000001101101
+00001001101000110000000001110000
+00101001011000100000000000110000
+10110101011000110001100000000000
+00101100011001000000000101011010
+00101000010000010000000000010100
+00101000010011000000000000011000
+00101000010000100000000000010000
+00110100100001000000000000000001
+00001100010001000000000000000000
+00110100011000100000000110001000
+00101000010001000000000000000100
+00101000011001010000000110001000
+01011000001001000000000000000100
+01011000001001010000000000000000
+00101100010000100000000000001000
+00001100001000100000000000001000
+00110100011000100000000101001000
+01000000010011100000000000001001
+01000000010001100000000000001110
+01000000010001010000000000001111
+01000000010001000000000000010000
+01000000010010100000000000001010
+01000000010010010000000000001011
+01000000010010000000000000001100
+01000000010001110000000000001101
+00110000001011100000000000010000
+00110000001001000000000000010111
+00110000001010100000000000010001
+00110000001010010000000000010010
+00110000001010000000000000010011
+00110000001001110000000000010100
+00110000001001100000000000010101
+00110000001001010000000000010110
+00110100011001000000000101000000
+00101000100001010000000000001000
+00101000100001100000000000000100
+00101000100001000000000000001100
+00110100011011100000000100111000
+01011000001001010000000000011100
+01011000001001100000000000011000
+01011000001001000000000000100000
+01000001110001000000000000001010
+00110000001001000000000000100100
+01000000010000100000000000001000
+00110000001000100000000000100101
+01000000011000010000000101011100
+00110001100000010000000000011100
+00011101110001010000000000001000
+00011101100000010000000000000000
+01000100001001010000000000001110
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100101000
+11111011111111111110100100101111
+00101101110000010000000000001000
+00110100000000100000000000000000
+00001101100000010000000000000000
+00101001011000010000000000111000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00001001101011010000000001110000
+10110101011011010000100000000000
+00110100001000010000000101101001
+01000000001000100000000000000111
+00100000010000100000000000000100
+01111100010000100000000000000000
+01011001100000100000000000000100
+01000000001000100000000000000111
+00100000010000100000000000000010
+01111100010000100000000000000000
+01011001100000100000000000001000
+01000000001000100000000000000111
+00100000010000100000000000000001
+01011001100000100000000000001100
+01000000001000100000000000000111
+00100000010000100000000000010000
+01111100010000100000000000000000
+01011001100000100000000000010000
+01000000001000100000000000000111
+00100000010000100000000000100000
+01111100010000100000000000000000
+01011001100000100000000000010100
+01000000001000010000000000000111
+00100000001000010000000000001000
+01111100001000010000000000000000
+01011001100000010000000000011000
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001001000000000000011100
+01000100100000000000000000000111
+00110101101000100000000101101000
+10110101011011010110100000000000
+10111001011000000000100000000000
+10110101011000100001000000000000
+00110101101000110000000100110100
+11011000100000000000000000000000
+01111000000001000000000000000001
+01111000000001010000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000011
+00110100000000110000000000000001
+00111000100001000111100100111100
+00111000101001011001001010000100
+11111011111111111110100011111100
+00110100000011000000000000001001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000010001100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+00101000001010110000000001001100
+00110100000000010000000000001111
+00110100000011110000000000000000
+01010100010000010000000000100001
+00001000010011100000000000001100
+01111000000000010000000000000001
+00111000001000011001011101101000
+10110100001011100111000000000000
+00101101110011110000000000000100
+01000001110011000000000000001001
+00110101011000010000000000001000
+00110001011000100000000000000000
+00001101011011110000000000000010
+00110100000000100000000000000000
+00110100000000110000000000001000
+11111000000000000011111001010101
+00001101011000000000000000000110
+01000001110000010000000000001000
+00110001011000010000000000100000
+00110100000000010000000000000001
+01000101100000010000000000001000
+01000101100000000000000000000100
+00110100000000010000000000000010
+01011101100000010000000000001100
+11100000000000000000000000001000
+00101001101000010000001101011000
+01000000001000010000000000001011
+11100000000000000000000000000011
+00101001101000010000001101011000
+01000000001000010000000000001101
+00110001011000010000000000100001
+11100000000000000000000000000101
+00101001101000010000001101011000
+01000000001000010000000000001010
+11100011111111111111111111111100
+00110001011011000000000000100001
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01000000010000010000000000000000
+10111000010000000110000000000000
+00110100000000110000000000000010
+00000000001000010000000000000100
+00110101011011010000001111000000
+00110001011000010000001110100000
+01000000010000010000000000000000
+00100000001000010000000000001111
+00110001011000010000001110100001
+01000000010000010000000000000001
+00100000001000010000000000001111
+00110001011000010000001110100010
+00101100010000010000000000000010
+00001101011000010000001110100100
+01000000010000010000000000000100
+00110100010000100000000000000110
+00110001011000010000001110100110
+00110101011000010000001110100111
+11111000000000000011110110100001
+00101001100000100000000000001000
+00101001100000010000000000001100
+00110100000000110000000000001000
+01011001011000100000001110111000
+01011001011000010000001110111100
+00110101100000100000000000010100
+01011001011000000000001110110000
+01011001011000000000001110110100
+10111001101000000000100000000000
+11111000000000000011110110010111
+00101101100000010000000000011100
+00001101011000010000001111001000
+00101101100000010000000000011110
+00001101011000010000001111001010
+01000001100000010000000000100001
+00110001011000010000001111001100
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101100001000100000000000001000
+01000100010000000000000000001010
+10111001101000000001000000000000
+00110100000000110000000000001000
+11111000000000000011110101101001
+01011100001000000000000000001001
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101100001000100000000000001000
+00101101011000010000001111001000
+01011100010000010000000000000100
+01000001011000010000000000100000
+00111000001000010000000000000001
+11100000000000000000000000000011
+01000001011000010000000000100000
+00100000001000010000000011111110
+00110001011000010000000000100000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000110000000000100010
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000010000000000100000000000
+00110100000000100000000000000000
+11111000000000000011110111101011
+00101001011000010000001101011000
+00110100000000110000000000001000
+01000000001000010000000000001110
+00110001100000010000000000000001
+00101001011000010000000000110000
+00101000001000010000000000001100
+01000000001000010000000000011110
+00110001100000010000000000000100
+00101001011000100000001101011000
+00110101100000010000000000010100
+11111000000000000011110101100010
+00101001011000010000001101011000
+00101100001000010000000000001000
+00001101100000010000000000011100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110100000000100000000000000000
+00101000001011010000000001001100
+10111000001000000110000000000000
+11111011111111111111111101100010
+00101101100000100000001101111110
+00110100010000100000000000000001
+00001101100000100000001101111110
+00110100000000100000000000000010
+00110001101000100000000000000110
+00101101100000100000001101111110
+00001101101000100000000000011110
+00101001011000110000000000000000
+00101001011000100000000000000100
+00001101101000110000000000100010
+01011001101000100000000000100100
+00101001011000110000000000001000
+00101101011000100000000000001100
+00111100011000110000000000010000
+10111000011000100001000000000000
+01011001101000100000000000101000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000110000000000101000
+00101100001001000000000000100010
+00101000001000010000000000100100
+01011000010001000000000000000000
+01011000010000010000000000000100
+00000000011000010000000000010000
+00111100011000110000000000010000
+01011000010000010000000000001000
+01011000010000110000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101100001000010000000000100010
+10111000010000000110000000000000
+00110100000000110000000000001000
+00001100010000010000000000000100
+00101001011000010000000000100100
+01011000010000010000000000000000
+00101001011000010000000000101000
+01011000010000010000000000001000
+00101101011000010000000000101100
+00001100010000010000000000001100
+01000001011000010000000000101111
+00110000010000010000000000001110
+01000001011000010000000000110000
+01011000010000010000000000010000
+01000001011000010000000000110001
+01011000010000010000000000010100
+00101101011000010000000000110010
+01011000010000010000000000011000
+01000001011000010000000000110100
+00110000010000010000000000011100
+00110100010000010000000000011101
+00110101011000100000000000110101
+11111000000000000011110100010100
+00101101011000010000000000111101
+00001101100000010000000000100110
+01000001011000010000000000111111
+00110001100000010000000000101000
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001000110000000000111000
+01000100011000000000000000000100
+10111001011000000000100000000000
+10111001100000000001000000000000
+11011000011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001000110000000000101000
+00101100001001000000000000100010
+00101000001000010000000000100100
+01011000010001000000000000000000
+01011000010000010000000000000100
+00000000011000010000000000010000
+00111100011000110000000000010000
+01011000010000010000000000001000
+01011000010000110000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+10111000001000000101100000000000
+00101100001000100000000000100010
+00101000001000010000000000101000
+00101001011000110000000000100100
+01011001100000100000000000000000
+00000000001000100000000000010000
+00111100001000010000000000010000
+01011001100000110000000000000100
+01011001100000100000000000001000
+01011001100000010000000000001100
+00110101011000100000000000101100
+00110101100000010000000000010000
+00110100000000110000000000001000
+11111000000000000011110011100111
+00101101011000010000000000110100
+00001101100000010000000000011000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000000100000000000001011
+10111000001000000101100000000000
+00101000001011000000000001001100
+11111011111111111111111011101001
+10111000001000000110100000000000
+00101101011000010000001110010100
+00110101100001010000000000000111
+00110111100001000000000000010100
+00110100001000010000000000000001
+00001101011000010000001110010100
+00101001011000010000000000110000
+00110100000000100000000000000001
+00101000001000110000000000011000
+00110100011000010000000000001100
+01011011100000010000000000010100
+00110100011000010000000000001000
+01011011100000010000000000011000
+00110100011000010000000000000100
+01011011100000010000000000011100
+00110100011000010000000000011000
+01011011100000010000000000100000
+00110100011000010000000000010000
+00110100011000110000000000010100
+01011011100000010000000000100100
+01011011100000110000000000101000
+00110001100000000000000000000110
+00110001100000000000000000000111
+00110100000000110000000000000000
+00110100000000010000000000000110
+00101000100001100000000000000000
+00101000110001100000000000000000
+01000100110000000000000000000101
+01000000101001110000000000000000
+10111100010000110011000000000000
+10111000110001110011000000000000
+00110000101001100000000000000000
+00110100011000110000000000000001
+00110100100001000000000000000100
+01011100011000011111111111110111
+00101101011000010000001110010100
+00110100000000100000000000000000
+00110100000000110000000000001010
+00001101100000010000000000011110
+00110101100000010000000000100010
+11111000000000000011110100101100
+00101001011000010000000000110000
+00101000001000100000000000011000
+00101000001000010000000000010100
+00101100010000100000000000000000
+00001101100000100000000000101100
+01000000001000010000000000100100
+00110001100000010000000000101111
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101000001000010000000000011000
+00110001100000010000000000110000
+00101001011000010000000000110000
+00101000001000010000000000010100
+00101000001000010000000000011100
+00110001100000010000000000110001
+00101001011000010000000000110000
+00101000001000110000000000010100
+00101000011000010000000000100000
+00001101100000010000000000110010
+01000000011000010000000000100101
+00110100000000110000000000001000
+00110001100000010000000000110100
+00101001011000010000000000110000
+00101000001000100000000000010100
+00110101100000010000000000110101
+00110100010000100000000000010000
+11111000000000000011110010010011
+00101001011000010000000000110000
+01111000000000110000000000000001
+00111000011000111001111100000100
+00101000001000100000000000010000
+00101000001000010000000000011000
+00101100010000100000000000000000
+00001101100000100000000000111101
+01000000001000010000000000011100
+00110001100000010000000000111111
+00101000011000110000000000110100
+01000100011000000000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111000001000000110100000000000
+10111001011000000000100000000000
+10111001101000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110001101001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000111000
+00110111100011000000000000010000
+10111000001000000101100000000000
+00101000010000110000000000000000
+10111001100000000001000000000000
+11011000011000000000000000000000
+10111001100000000001000000000000
+10111001011000000000100000000000
+11111011111111111111111100010101
+10111000001000000001000000000000
+00110100000000110000000000000001
+10111001011000000000100000000000
+11111011111111111111110001010010
+01011100001000000000000000010111
+00110100000000100000000000001000
+10111001011000000000100000000000
+00101001011011000000000001001100
+11111011111111111111111001110111
+10111000001000000001000000000000
+00101101011000010000001101111110
+00001101100000010000000000011110
+00101001011000110000000100010000
+00101001011000010000000100010100
+00001101100000110000000000100010
+01011001100000010000000000100100
+00101001011000010000000100011100
+00101001011001000000000100011000
+00000000001000110000000000010000
+00111100100001000000000000010000
+00100000001000011111111111111111
+10111000100000110001100000000000
+01011001100000110000000000101000
+01011001100000010000000000001100
+00110100000000110000000000000000
+10111001011000000000100000000000
+11111011111111111111110000111011
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000111000
+10111000001000000101100000000000
+00101000010000110000000000000000
+00110111100000100000000000010000
+11011000011000000000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000001
+00101001011011000000000001001100
+11111011111111111111111001010011
+10111000001000000001000000000000
+00101101011000010000001110000000
+00110100001000010000000000000001
+00100000001000011111111111111111
+00001101011000010000001110000000
+00001101100000010000000000011110
+00101011100000010000000000010100
+00101011100000110000000000010000
+01011001100000010000000000100100
+00001101100000110000000000100010
+00101011100000010000000000011000
+00101111100000110000000000011100
+00111100001000010000000000010000
+10111000001000110001100000000000
+01011001100000110000000000101000
+10111001011000000000100000000000
+00110100000000110000000000000001
+11111011111111111111110000010111
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000001010110000000001001100
+10111000010000000110100000000000
+00110100000000100000000000001001
+10111000001000000110000000000000
+11111011111111111111111000110001
+01011001011000000000000000001000
+00101001101000110000000000001100
+10111000001000000111000000000000
+00101001101000010000000000001000
+00100000011000101111111111111111
+01011001011000100000000000001100
+00101101100000100000001111001010
+00111100001000010000000000010000
+00000000011000110000000000010000
+00001101011000100000000000011110
+00101001101000100000000000000000
+00101001101001000000000000000100
+10111000001000110001100000000000
+00001101011000100000000000100010
+01011001011001000000000000100100
+01011001011000110000000000101000
+00110101100000100000001111000000
+00110101011000010000000000101100
+00110100000000110000000000001000
+11111000000000000011110000001011
+00101101100000010000001111001000
+10111001110000000001000000000000
+00110100000000110000000000000000
+00001101011000010000000000110100
+10111001100000000000100000000000
+11111011111111111111101111101101
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001000110000000000000000
+10111000001000000101100000000000
+00101000001001000000000000000100
+01001000000000110000000000000110
+10111000011001000000100000000000
+00110100000011010000000000000000
+00110100000011000000000000000001
+01000100001000000000000000001001
+11100000000000000000000000001110
+00010100011000100000000000011000
+00110100000000010000000010000000
+00100000010000100000000011000000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01011100010000010000000000001000
+11100000000000000000000000000101
+00101001011000100000000000001000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01001000001000100000000000000011
+00110100000011010000000000000000
+00110100000011000000000000000001
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101011101011
+00101001011001000000000000001100
+00101001011000110000000000001000
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101011100100
+01011001011000010000000000001000
+01011001011000100000000000001100
+01111000000001001100101000000000
+11100000000000000000000000001111
+00101001011001100000000000000100
+00101001011001010000000000000000
+00110100001000010011101110011010
+00110100110000111111111111111111
+11110100110000110011000000000000
+01011001011000110000000000000100
+10110100010001000001100000000000
+11110100010000110001000000000000
+00110100101001011111111111111111
+10110100110001010010100000000000
+10110100010000010000100000000000
+01011001011001010000000000000000
+01011001011000010000000000001000
+01011001011000110000000000001100
+00101001011000010000000000001000
+00101001011000100000000000001100
+01001000000000011111111111110000
+11100000000000000000000000001111
+00101001011001010000000000000100
+00101001011001100000000000000000
+00110101111011111100010001100101
+00110100101000100000000000000001
+11110100101000100010100000000000
+01011001011000100000000000000100
+10110101110000110001000000000000
+11110101110000100111000000000000
+10110100101001100010100000000000
+10110101110011110111000000000000
+01011001011001010000000000000000
+01011001011011100000000000001000
+01011001011000100000000000001100
+11100000000000000000000000000100
+00110100000000010011101110011010
+01111000000001001100101000000000
+01111000000000110011011000000000
+00101001011011110000000000001000
+00101001011011100000000000001100
+01001001111000011111111111101101
+01011101111000010000000000000010
+01010101110001001111111111101011
+00101001011000110000000000000000
+00101001011001000000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000011101010110011
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001111000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001100000000010000000000000
+11111000000000000011101010101100
+01011001011000010000000000001000
+01011001011000100000000000001100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001100000000000000100
+00101000001001000000000000000100
+00101000010001110000000000000000
+00101000001001010000000000000000
+10110100110001000010000000000000
+11110100110001000011000000000000
+10110100111001010010100000000000
+10110100110001010010100000000000
+01011000001001010000000000000000
+01011000001001000000000000000100
+00101000010001000000000000001100
+00101000010001010000000000001000
+00101000001000100000000000001100
+00101000001001100000000000001000
+10110100100000100001000000000000
+11110100100000100010000000000000
+10110100101001100010100000000000
+10110100100001010010000000000000
+01011000001001000000000000001000
+01011000001000100000000000001100
+11111011111111111111111110000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000000100
+00101000001001100000000000000100
+00101000010001010000000000000000
+00101000001001110000000000000000
+11001000110001000010000000000000
+11110100100001100011000000000000
+11001000111001010010100000000000
+11001000101001100010100000000000
+01011000001001010000000000000000
+01011000001001000000000000000100
+00101000010001100000000000001000
+00101000001001010000000000001100
+00101000010000100000000000001100
+00101000001001000000000000001000
+11001000101000100001000000000000
+11110100010001010010100000000000
+11001000100001100010000000000000
+11001000100001010010000000000000
+01011000001001000000000000001000
+01011000001000100000000000001100
+11111011111111111111111101100111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001011110000000000001000
+00101001011011000000000000001100
+00101000001011010000000000000000
+00101000001011100000000000000100
+00000001100011000000000000000001
+00111101111000010000000000011111
+00010101111011110000000000000001
+10111000001011000110000000000000
+00010101101000100000000000011111
+01011001011011110000000000001000
+01011001011011000000000000001100
+00100001110000010000000000000001
+00111000010000100000000000000001
+01000100001000000000000000001011
+00010100010000010000000000011111
+00110100000000110001110111001101
+01111000000001000110010100000000
+11111000000000000011101001010100
+10110100010011000110000000000000
+11110100010011000001000000000000
+10110100001011110000100000000000
+10110100010000010000100000000000
+01011001011000010000000000001000
+01011001011011000000000000001100
+00111101101000100000000000011111
+00000001110000010000000000000001
+00010101101011010000000000000001
+10111000010000010000100000000000
+01011001011011010000000000000000
+01011001011000010000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000000100
+00101000001001010000000000000000
+01111000000000110000000000000001
+11001000000000100010000000000000
+00111000011000110111100101001000
+01001000000001010000000000001100
+01111000000000110000000000000001
+10111000101000100010000000000000
+00111000011000110111110001011000
+01011100100000000000000000000111
+00101000001001010000000000001000
+01111000000000110000000000000001
+00111000011000110111100101001000
+01001000100001010000000000000011
+01111000000000110000000000000001
+00111000011000110111110001011000
+10111000010000000010000000000000
+00101000001000100000000000001000
+00101000001000010000000000001100
+00111100010001100000000000010000
+00000000001001010000000000010000
+10111000110001010010100000000000
+00010100010001100000000000010000
+01001000000001100000000000000010
+11100000000000000000000000001000
+11001000000000010000100000000000
+01111100001001010000000000000000
+11001000000000100001000000000000
+11001000010001010010100000000000
+00111100101001010000000000010000
+00000000001000010000000000010000
+10111000101000010010100000000000
+01111000000010110000000000000001
+00111001011010111011010111110000
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000100111100101001100
+11111000000000000001101101000100
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000101100
+01011011100011000000000000101000
+01011011100011010000000000100100
+01011011100011100000000000100000
+01011011100011110000000000011100
+01011011100100000000000000011000
+01011011100100010000000000010100
+01011011100100100000000000010000
+01011011100100110000000000001100
+01011011100101000000000000001000
+01011011100111010000000000000100
+00101000010011010000000000010000
+10111000001000000111000000000000
+10111000010000000101100000000000
+10111000011000000110000000000000
+00101000010100110000000000010100
+01001001101000000000000000001100
+01011101101000000000000000000010
+01011110011011010000000000001010
+00101001100000010000000000000000
+01011001011000010000000000001000
+00101001100000010000000000000100
+01011001011000010000000000001100
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001011000000000000000001000
+01011001011000000000000000001100
+00101001110000010000000000110000
+00101001011100100000000000001000
+00101001011100010000000000001100
+00101000001000010000000000001000
+00110100000011110000000000111111
+00011100001000010000000000011000
+00110100001100001111111111111111
+11001001111000010111100000000000
+10111001111000000001100000000000
+10111010010000000000100000000000
+10111010001000000001000000000000
+11111000000000000011101000011111
+10111000001000100000100000000000
+00110110000101000000000000000001
+00110101111011110000000000000001
+00110110000100001111111111111111
+01011100001000001111111111111000
+10111010100000000001100000000000
+00110100000000100000000000000001
+11111000000000000011101000001000
+10111000001000000001100000000000
+01001001101000110000000000000100
+01011101101000110000000000000101
+01010110011000100000000000000010
+11100000000000000000000000000011
+01011001011000110000000000010000
+01011001011000100000000000010100
+00101001011001000000000000010000
+00101001011001010000000000010100
+01001000011001000000000000000100
+01011100011001000000000000001000
+01010100010001010000000000000010
+11100000000000000000000000000110
+00110100101000010000000000000001
+11110100101000010010100000000000
+01011001011000010000000000010100
+10110100101001000010000000000000
+01011001011001000000000000010000
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001100100100000000000000000
+01011001100100010000000000000100
+00101001100000010000000000000000
+01001000000000010000000000000010
+11100000000000000000000000000011
+01011001100000000000000000000000
+01011001100000000000000000000100
+00101001011000110000000000001100
+00101001011001100000000000001000
+00101001100000010000000000000000
+00111100011000100000000000000001
+00111100110001010000000000000001
+11110100011000100011100000000000
+10110100010000110001100000000000
+10110100111001010010100000000000
+11110100010000110001000000000000
+10110100101001100010100000000000
+10110100010001010001000000000000
+00101001100001000000000000000100
+01001000001000100000000000000100
+01011100001000100000000000011101
+01010100100000110000000000000010
+11100000000000000000000000011011
+00111100001001100000000000010000
+00000000100001010000000000010000
+01111000000001000000000000000001
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100101011000
+10111000110001010010100000000000
+11111011111111111110010110100010
+00101001011001000000000000010100
+00101001011000110000000000010000
+00101001011001010000000000001100
+00110100100000010000000000000001
+11110100100000010010000000000000
+00111100101000100000000000000001
+10110100100000110010000000000000
+00101001011000110000000000001000
+11110100101000100010100000000000
+10110100001000100001000000000000
+00111100011000110000000000000001
+11110100001000100000100000000000
+10110100101000110001100000000000
+10110100100000110001100000000000
+10110100001000110000100000000000
+01011001100000010000000000000000
+01011001100000100000000000000100
+00101001011011010000000000010100
+00101001011000010000000000010000
+00101001011001000000000000001100
+00110101101000101111111111111111
+11110101101000100001100000000000
+00110100001000011111111111111111
+10110100011000010000100000000000
+00101001011000110000000000001000
+11111000000000000011100110010010
+00101001100000110000000000000100
+00101001100001000000000000000000
+10110100011000100001000000000000
+11110100011000100001100000000000
+10110100100000010000100000000000
+10110100011000010000100000000000
+01011011100000010000000000110000
+01011011100000100000000000110100
+00110111100000010000000000110000
+10111001101000000001000000000000
+11111011111111111110101100010010
+00101011100000010000000000110100
+00101011100001100000000000110000
+01111000000001000000000000000001
+01011001011000010000000000001100
+01011001011001100000000000001000
+01011001100001100000000000000000
+01011001100000010000000000000100
+00000000001001110000000000010000
+00101001011001010000000000010100
+00111100110001100000000000010000
+10111001110000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100101110000
+10111000110001110011000000000000
+11111011111111111110010101101101
+00101011100111010000000000000100
+00101011100010110000000000101100
+00101011100011000000000000101000
+00101011100011010000000000100100
+00101011100011100000000000100000
+00101011100011110000000000011100
+00101011100100000000000000011000
+00101011100100010000000000010100
+00101011100100100000000000010000
+00101011100100110000000000001100
+00101011100101000000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00101000001011100000000000000000
+10111000001000001000000000000000
+00101000010000010000000000000100
+00101001110010110000000000000100
+00101000010011010000000000000000
+10111000010000000110000000000000
+00101001011011110000000000100100
+00101001011000100000000000100000
+01111000000001010000000000000001
+10110100001011110111100000000000
+11110100001011110000100000000000
+10110101101000100110100000000000
+10110100001011010110100000000000
+00101001110000010000000000001000
+00111000101001011000111011100100
+00101000101001000000000000000000
+00011100001000100000000000010110
+00110100000000110000000000000000
+01011001011011010000000000100000
+00010100010000010000000000011111
+01011001011011110000000000100100
+11111000000000000011100101001100
+00000000010001000000000000010000
+00111100001000110000000000010000
+00111100010000100000000000010000
+10111000100000110001100000000000
+01001001101000110000000000001011
+01011101101000110000000000000010
+01010101111000100000000000001001
+11001000000000100001000000000000
+01111100010000010000000000000000
+11001000000000110001100000000000
+11001000011000010001100000000000
+01001000011011010000000000000100
+01011100011011010000000000000101
+01010100010011110000000000000010
+11100000000000000000000000000011
+01011001011000110000000000100000
+01011001011000100000000000100100
+00101001011000100000000000100000
+00101001011000110000000000100100
+01001000010000000000000000000011
+01011100010000000000000000000100
+01000100011000100000000000000011
+00110100000010110000000000000000
+11100000000000000000000000000010
+00110100000010111111111111111111
+01011011100000100000000000101000
+01011011100000110000000000101100
+01000101011000000000000000000111
+11001000000000110001100000000000
+01111100011000010000000000000000
+11001000000000100001000000000000
+11001000010000010001000000000000
+01011011100000100000000000101000
+01011011100000110000000000101100
+00101001110000100000000000001000
+00110111100000010000000000101000
+00011100010000100000000000010110
+11111011111111111110101010110001
+01000101011000000000000000001001
+00101011100000010000000000101100
+00101011100000100000000000101000
+11001000000000010000100000000000
+01111100001000110000000000000000
+11001000000000100001000000000000
+11001000010000110001000000000000
+01011011100000100000000000101000
+01011011100000010000000000101100
+00101001100000100000000000000000
+00101001100000110000000000000100
+01001000010000000000000000000011
+01011100010000000000000000000100
+01000100011000100000000000000011
+00110100000010110000000000000000
+11100000000000000000000000000010
+00110100000010111111111111111111
+01011011100000100000000000100000
+01011011100000110000000000100100
+01000101011000000000000000000111
+11001000000000110001100000000000
+01111100011000010000000000000000
+11001000000000100001000000000000
+11001000010000010001000000000000
+01011011100000100000000000100000
+01011011100000110000000000100100
+00101010000000010000000000000000
+00101000001000100000000000001000
+00110111100000010000000000100000
+00011100010000100000000000010100
+11111011111111111110101010010010
+01000101011000000000000000001001
+00101011100000010000000000100100
+00101011100000100000000000100000
+11001000000000010000100000000000
+01111100001000110000000000000000
+11001000000000100001000000000000
+11001000010000110001000000000000
+01011011100000100000000000100000
+01011011100000010000000000100100
+00101011100000110000000000101100
+00101011100000100000000000100100
+00101011100000010000000000100000
+00101011100001000000000000101000
+10110100011000100001000000000000
+11110100011000100001100000000000
+10110100100000010000100000000000
+10110100011000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+00101000001001000000000000111000
+10111000001000000101100000000000
+00101000010000110000000000000100
+01011000011000000000000000111000
+01011000011000000000000000111100
+00101000010000110000000000010100
+00001100001000000000000100100000
+00001100011000000000000000001000
+00101000100000110000000000010100
+01000100011000000000000000010011
+11011000011000000000000000000000
+00110100000000101111111111111111
+01011100001000100000000000001000
+01111000000001000000000000000001
+10111001011000000000100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111100110010100
+11111011111111111110010011001100
+00110100000000010000000000000000
+00101001011000100000000000110000
+11001000000000010000100000000000
+00111100001000010000000000001010
+00101000010000100000000000000100
+00010100001000110000000000011111
+01011000010000010000000000100100
+01011000010000110000000000100000
+11100000000000000000000000001101
+00101000010000100000000000001000
+00101000010000100000000000010000
+00100000010000100000000000000001
+01011100010000110000000000000101
+00101000100001000000000000001000
+00110100000000100000000000000000
+00110100000000110000000000000000
+11011000100000000000000000000000
+00101001011000010000000000110000
+00101000001000010000000000000100
+01011000001000000000000000100000
+01011000001000000000000000100100
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111011111111111110010100110100
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000100
+00101000001001100000000000000100
+00110100000000110000000000000001
+10111001011000000000100000000000
+00101000110001010000000000100000
+00101000110001100000000000100100
+00111000100001000111100110110000
+11111011111111111110010010101010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000011000000110000000000000
+00101000100001010000000000000000
+00101000100000110000000000000100
+10111000001000000101100000000000
+00101000100000010000000000001000
+00101000100001000000000000001100
+01011001100001010000000000000000
+01011001100000110000000000000100
+01011001100001000000000000001100
+01011001100000010000000000001000
+10111001100000000000100000000000
+11111011111111111111111000011000
+10111001100000000000100000000000
+11111011111111111111111001011110
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111100111010000
+11111011111111111110010010001100
+00101001100000010000000000000100
+00101001100000100000000000000000
+10111000010000010001000000000000
+00110100000000010000000000000000
+01000100010000000000000000010111
+00101001011000100000000000110000
+00101000010000100000000000001000
+00101000010000100000000000010000
+00100000010000100000000000000001
+01011100010000000000000000010010
+00101001011000010000000000111000
+00110111100011010000000000010100
+10111001101000000001000000000000
+00101000001000110000000000000000
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111011111111111111110111111100
+00101001011000010000000000111000
+10111001101000000001000000000000
+00101000001000110000000000000100
+10111001011000000000100000000000
+11011000011000000000000000000000
+10111001011000000000100000000000
+11111011111111111111111110010000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00101000001000010000000000110000
+00101000010001100000000010101000
+00101000010001010000000010101100
+00101000010001000000000010110000
+00101000010000110000000010110100
+00101000001000010000000000000100
+00110100010000100000000010011000
+01011000001001100000000000000000
+01011000001001010000000000000100
+01011000001001000000000000001000
+01011000001000110000000000001100
+11111011111111111111110111011111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000110000
+00101000001000110000000010011100
+10111000001000000101100000000000
+00101000010011010000000000000100
+00101000010011000000000000010000
+00101000001000100000000010011000
+10111000010000110001000000000000
+01011100010000000000000000001011
+00101000001000110000000010100000
+00101000001001000000000010100100
+10111000011001000001100000000000
+01011100011000100000000000000111
+01111000000001000000000000000001
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000010100
+11111011111111111110010001000000
+11100000000000000000000010001000
+00101001011001000000000011001000
+00101001011000110000000011001100
+00101001011000100000000011010000
+00101001011000010000000011010100
+00110101101011100000000000010000
+00110101011100000000000010111000
+01011001101001000000000000010000
+01011001101000110000000000010100
+01011001101000100000000000011000
+01011001101000010000000000011100
+10111010000000000001000000000000
+10111001110000000000100000000000
+11111011111111111111110110110101
+00110101011000010000000010011000
+11111011111111111111110111111011
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111100111101100
+10111001011000000000100000000000
+11111011111111111110010000101001
+00110101011000010000000010101000
+11111011111111111111110111110010
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111100111110100
+10111001011000000000100000000000
+11111011111111111110010000100000
+10111010000000000000100000000000
+11111011111111111111110111101001
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000110100
+10111001011000000000100000000000
+11111011111111111110010000010111
+00110101011000010000000011001000
+11111011111111111111110111100000
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000010
+00111000100001000111101000111100
+10111001011000000000100000000000
+11111011111111111110010000001110
+10111001101000000000100000000000
+11111011111111111111110111010111
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+00110100000000110000000000000001
+00111000100001000111101001000100
+10111001011000000000100000000000
+11111011111111111110010000000101
+10111001110000000000100000000000
+11111011111111111111110111001110
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111101001011100
+11111011111111111110001111111100
+00101001011000010000000000110000
+00110101100011110000000000011000
+00101000001000110000000000000100
+00101000011001010000000000000000
+00101000011001000000000000000100
+00101000011000100000000000001000
+00101000011000010000000000001100
+01011001100001010000000000011000
+01011001100001000000000000011100
+01011001100000100000000000100000
+01011001100000010000000000100100
+00110100011000100000000000010000
+10111001111000000000100000000000
+11111011111111111111110101010111
+10111001111000000000100000000000
+11111011111111111111110110001001
+10111001111000000000100000000000
+11111011111111111111110110110101
+01111000000001000000000000000001
+10111000001000000010100000000000
+00110100000000100000000000000100
+10111001011000000000100000000000
+00110100000000110000000000000001
+00111000100001000111101001110100
+11111011111111111110001111100011
+00101001100000010000000000011100
+00101001100011100000000000011000
+10111001110000010111000000000000
+01011101110000000000000000101000
+00110101101000100000000000101000
+10111001011000000000100000000000
+00110101100000110000000000100000
+11111011111111111111110111010100
+10111001101000000010000000000000
+10111001011000000000100000000000
+10111001111000000001000000000000
+00110101100000110000000000001000
+11111011111111111111111100110001
+10111000001000000110100000000000
+01011100001011100000000000011101
+00110101011000010000000000110000
+00110101100000100000000000010000
+11111011111111111111111001110010
+00101001011000110000000000110000
+00101000011000110000000000001000
+00101000011001000000000000010000
+00100000100001000000000000000001
+01011100100011010000000000001011
+00111100001000010000000000010000
+00000000010000100000000000010000
+10111000001000100001000000000000
+00101001011000010000000000111000
+11001000000000100001000000000000
+00101000001000110000000000010000
+01011100011001000000000000000010
+00101000001000110000000000001100
+10111001011000000000100000000000
+11011000011000000000000000000000
+00101001011000010000000000110000
+01111000000001000000000000000001
+00110100000000100000000000000100
+00101000001000010000000000000100
+00110100000000110000000000000010
+00111000100001000111100111111100
+00101000001001010000000000100100
+10111001011000000000100000000000
+00010100101001010000000000001010
+11111011111111111110001110111000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001010110000000000001100
+10111000001000000110000000000000
+00110100000000010000000000000001
+01011001011000010000000000000000
+00101001100000010000000000100100
+01001000001000000000000000000010
+00110100000000010000000000000001
+00001101011000010000000000001100
+00101001100000010000000000001000
+01011100001000000000000000000010
+01011001100000100000000000001000
+00101001100011010000000000001000
+00110101011000010000000000010000
+00110100000000110000000000001100
+10111001101000000001000000000000
+11111000000000000011100010010111
+00101101011000100000000000001100
+00110100000000010000000000000001
+01011100010000010000000000000100
+00101001100000010000000000000000
+00101000001000010000000000100100
+01100100001000010000000000000010
+01011001011000010000000000100000
+00101001101000010000000000100000
+00101101011001110000000000001100
+00110100000000100000000000000000
+00110001011000010000000000011100
+00101001101000010000000000100100
+00110100000001100000000000000010
+00110100000001010000000000000001
+00110001011000010000000000011101
+00101001101000010000000000101000
+00110100000001001111111111111111
+00110001011000010000000000011110
+11100000000000000000000000001101
+00001000010000010000010000011000
+00101001100010000000000000000000
+10110101000000010000100000000000
+01000100011000000000000000000100
+00101000001000110000000000100100
+01000100011001100000000000000010
+01011001011000000000000000100000
+01011000001000100000001111011000
+01011000001001010000000000000000
+01011000001000000000000000010000
+00001100001001000000000100100010
+00110100010000100000000000000001
+00101001011000110000000000100000
+01001000111000101111111111110011
+01000100011000000000000000000111
+00110100000000010000000011111111
+01011001011000010000000000010000
+01111000000000010000000000000001
+00111000001000010111101010011000
+00110100000000100000000011111111
+11111000000000000001100010110111
+01111000000000010000000000000001
+00111000001000011001111100000100
+00101000001000110000000000000100
+00110100000000010000000000000000
+01000100011000000000000000000100
+10111001100000000000100000000000
+10111001101000000001000000000000
+11011000011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101001111100000100
+00101000010000110000000000001000
+00110100000000100000000000000000
+01000100011000000000000000000011
+11011000011000000000000000000000
+10111000001000000001000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111101110100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011001110110101000
+11100000000000000000000000000100
+00101000010001000000000000000000
+01000100011001000000000000000100
+00110100001000010000000000001100
+00101000001000110000000000000000
+01011100011000001111111111111100
+00101000001000010000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100000010000000000001100
+01011011100000100000000000010000
+10111000011000000101100000000000
+10111000010000000001100000000000
+01011100001000000000000000001110
+01111000000000100000000000000001
+00111000010000101000111011101000
+00101000010000010000000000000000
+01010100011000010000000000001010
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011011000001100
+00111000010000100111101010111100
+01011101011000000000000000000011
+01111000000000100000000000000001
+00111000010000100111101011000100
+11111000000000000001100001101101
+11100000000000000000000000010000
+01111000000000110000000000000001
+00111000011000111000111011001000
+00101000011000100000000000000000
+00110111100000010000000000001100
+11111011111111111110100011000101
+10111000001000000010000000000000
+01111000000000100000000000000001
+01111000000000010000000000000001
+00101011100000110000000000010000
+00111000001000011011011000001100
+00111000010000100111101011001000
+01011101011000000000000000000011
+01111000000000100000000000000001
+00111000010000100111101011010100
+11111000000000000001100001011101
+01111000000000010000000000000001
+00111000001000011011011000001100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111100010000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001111101110100
+00101000001000010000000000000000
+00101000001010110000000000011000
+01111000000000010000000000000001
+00111000001000011100001010010100
+00101000001000100000000000000000
+00110100000000010000000000000000
+01000100010000000000000011011011
+01111000000011000000000000000001
+00111001100011001011011000001000
+00101001100000010000000000000000
+01011100001000000000000000001000
+11111000000000000001111000111110
+01111000000000100000000000000001
+00111000010000101001011011111000
+00101000010000100000000000000000
+10100100010000000001000000000000
+10110100010000010000100000000000
+01011001100000010000000000000000
+01111000000000010000000000000001
+00111000001000011011111110110100
+00101000001000010000000000000000
+00101001011000100000000001011000
+01011100001000100000000000000111
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000110000000000000000
+00110100000000100000000000000011
+00110100000000010000000000000000
+01000100011000100000000011000101
+11111000000000000001111000101100
+01111000000000110000000000000001
+01111000000000100000000000000001
+00111000011000111001011011111000
+00111000010000101011011000001000
+00101000011000110000000000000000
+00101000010000100000000000000000
+10110100011000100001000000000000
+11001000001000100000100000000000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000110000000000000000
+00110100000000100000000000000011
+00110100000000010000000000000000
+01011100011000100000000010110101
+11111000000000000001111000011100
+01111000000000100000000000000001
+00111000010000101011011000001000
+01011000010000010000000000000000
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000011011111110110100
+01011000001000100000000000000000
+00110111100000010000000011011100
+00110111100000100000000011101000
+11111000000000000010001100010111
+00110100000000100000000000000000
+00110111100000010000000000010100
+11111000000000000000001100100110
+00110111100000010000000011110000
+00110111100000100000000011101100
+11111000000000000001110111011000
+00101011100000110000000011101100
+00101011100001000000000011110000
+00101011100000100000000001000000
+01111000000000010000000000000001
+00111000001000010111101011011100
+11111000000000000001100000011010
+00101011100000100000000001001000
+01111000000000010000000000000001
+00111000001000010111101011110000
+01111100010000100000000000000000
+11111000000000000001100000010101
+11111011111111111111111101111001
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101011111100
+11111000000000000001100000010000
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000000001010
+00101001011000100000000000010000
+01111000000000010000000000000001
+00111000001000010111101100000100
+00100000010000100000000000000001
+11111000000000000001100000000110
+01111000000000010000000000000001
+00111000001000010111101100001100
+00110101011000100000000001100000
+11111000000000000001100000000010
+00110100000000010000000000000000
+00110111100000100000000011100100
+01111000000011010000000000000001
+11111000000000000011001111100010
+00110100000011000000000000000000
+00111001101011010111101100011000
+11100000000000000000000000001000
+10111001100000000000100000000000
+11111000000000000011010001000010
+10111000001000000001100000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000001011111110101
+00110101100011000000000000000001
+00101011100000010000000011100100
+01001000001011001111111111111000
+00101011100000100000000011100000
+00101011100000110000000011101000
+01111000000000010000000000000001
+00111000001000010111101100100100
+11111000000000000001011111101101
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000001001110
+00101001011000100000000001000100
+00101001011000010000000001000000
+00110100000000110000000000000000
+11111011111111111111111101010110
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101100110100
+11111000000000000001011111100000
+00101001011000100000000001010100
+00101001011000010000000001010000
+00110100000000110000000000000000
+11111011111111111111111101001110
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101100111100
+11111000000000000001011111011000
+00101001011000100000000000011000
+00101001011000110000000000011100
+01111000000000010000000000000001
+00111000001000010111101101000100
+11111000000000000001011111010011
+00101001011000100000000000100000
+00101001011000110000000000100100
+01111000000000010000000000000001
+00111000001000010111101101011000
+11111000000000000001011111001110
+00101001011000100000000001010100
+00101001011000110000000001000100
+01111000000000010000000000000001
+00111100010000100000000000000001
+00111000001000010111101101101100
+11001000011000100001000000000000
+11111000000000000001011111000111
+00101001011000100000000000011000
+00101001011000010000000001000100
+00101001011000110000000001000000
+00010100010001000000000000011111
+11001000001000100001000000000000
+11110100010000010000100000000000
+11001000011001000001100000000000
+11001000011000010001100000000000
+00101001011000010000000000011100
+00010100001001000000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001000011001000001100000000000
+11001000011000100001000000000000
+00101001011000110000000000100000
+00010100011001000000000000011111
+11001000001000110001100000000000
+11110100011000010000100000000000
+11001000010001000001000000000000
+11001000010000010000100000000000
+00101001011000100000000000100100
+00010100010001000000000000011111
+11001000011000100001000000000000
+11110100010000110001100000000000
+11001000001001000000100000000000
+11001000001000110000100000000000
+00110100000000110000000000000000
+11111011111111111111111100011101
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111101101111000
+11111000000000000001011110100111
+00101001011000100000000010001100
+01111000000000010000000000000001
+00111000001000010111101110000100
+11111000000000000001011110100011
+00101001011000100000000001001000
+01111000000000010000000000000001
+00111000001000010111101110001100
+11111000000000000001011110011111
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000010111101110011000
+11111000000000000001011110011011
+00110100000000011111111111111111
+11111000000000000011001111101101
+10111000001000000110000000000000
+00110100000000010000000000000000
+11111000000000000011001111101010
+10111000001000000101100000000000
+00110100000000010000000000000001
+11111000000000000011001111100111
+01111000000001010000000000000001
+10111000001000000010000000000000
+10111000101000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+00111000001000010111101110100100
+11111000000000000001011110001100
+01111000000000010000000000000001
+00111000001000010111101110111000
+11111000000000000010000101110101
+00100000001000111111111111111111
+00001000011000110010011100010000
+10111000001000000001000000000000
+00010100010000100000000000010000
+00010100011000110000000000010000
+01111000000000010000000000000001
+00111000001000010111101110111100
+11111000000000000001011110000001
+01111000000000010000000000000001
+00111000001000011000011110011000
+11111000000000000001011101111110
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000011110000
+11000011101000000000000000000000
+00110111100111001111111100001100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100111010000000000001100
+11111000000000000001110111110110
+10111000001000000101100000000000
+11111000000000000001110111111010
+10100000001010110001000000000000
+00110100000000010000000000000000
+01011100010000000000000001011111
+01111000000010110000000000000001
+00111001011010111011011000100100
+00101001011000010000000000000000
+01011100001000100000000000000100
+11111000000000000001110101010100
+00110100001000011111110000010111
+01011001011000010000000000000000
+01111000000010110000000000000001
+11111000000000000001110101010000
+00111001011010111011011000100100
+00101001011000100000000000000000
+11001000001000100000100000000000
+00110100001000101111110000011000
+00110100000000010000000000000000
+01001000000000100000000001010000
+11111000000000000001110101001001
+01011001011000010000000000000000
+00110100000000010000000000000000
+11111000000000000001110111001100
+00110111100000010000000011110100
+00110111100000100000000011110000
+11111000000000000001110100001111
+00101011100000010000000011110100
+00101011100000100000000011110000
+01111000000010110000000000000001
+00111001011010111001111101110100
+11111000000000000001111000001101
+00110111100000010000000011100000
+00110111100000100000000011101100
+11111000000000000010001001000000
+00101011100000110000000011101100
+00101011100000010000000011100000
+00101011100000100000000011100100
+11111000000000000001111000001100
+00110100000000100000000000000000
+00110111100000010000000000011000
+11111000000000000000001001001011
+00101011100000010000000001000100
+00101011100000100000000001001100
+01111100001000010000000000000000
+01111100010000100000000000000000
+11111000000000000001110111101001
+00101001011000010000000000000000
+01000000001000010000000000000011
+11111000000000000001110111101111
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000100000000000000000
+00110100000000010000000000000011
+01011100010000010000000000010010
+00101001011000010000000000000000
+00101000001010010000000000011000
+00101001001010100000000001001000
+00101001001001100000000001010100
+00101001001001000000000001000100
+00101001001000010000000000010000
+00101001001000110000000001000000
+00101001001001010000000001010000
+01000001001000100000000000010111
+00101001001010000000000010001100
+01011011100010100000000000000100
+00111100110001110000000000000001
+00101001001010010000000001011000
+00100000001000010000000000000001
+11001000100001110011100000000000
+01011011100010010000000000001000
+11111000000000000001110110111011
+00110100000000010000000000000000
+00110111100000100000000011101000
+11111000000000000011001100001011
+00101011100000100000000011101000
+00110100000000010000000000001000
+01001100001000100000000000000010
+01011011100000010000000011101000
+00110100000010110000000000000000
+00110100000011000000000000000000
+11100000000000000000000000000111
+10111001011000000000100000000000
+11111000000000000011001101100111
+00100000001000010000000000000001
+10111100001010110000100000000000
+00110101011010110000000000000001
+10111001100000010110000000000000
+00101011100000010000000011101000
+01001000001010111111111111111001
+10111001100000000000100000000000
+11111000000000000001110111001011
+01111000000000010000000000000001
+00111000001000010111101110111000
+11111000000000000010000011111111
+11111000000000000001110111011010
+00110100000000010000000000000001
+11111000000000000001110110000010
+00110100000000010000000000000001
+00101011100111010000000000001100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00110111100111000000000011110100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111001111101110100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000100111101111001100
+00101000001011000000000000011000
+00110100000000010000000000000100
+11111000000000000000101011001000
+11111011111111111111111001100010
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000100111101111011100
+00110100000000010000000000000111
+11111000000000000000101011000010
+00101001100000010000000000010000
+01000100001000000000000000000101
+00101001011000010000000000000000
+00101000001000100000000000000000
+00110100000000010000000000001001
+01000100010000010000000000000111
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111101111100000
+11111000000000000000101010111000
+00110100000000010000000000000000
+11100000000000000000000000000110
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111101111111000
+11111000000000000000101010110010
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111011100100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001111101110100
+00101000001000010000000000000000
+01111000000011000000000000000001
+00111001100011001011011000101100
+00101000001010110000000000011000
+00101001100000010000000000000000
+01011100001000000000000000001000
+11111000000000000001110010111100
+01111000000000100000000000000001
+00111000010000101001011011111000
+00101000010000100000000000000000
+10100100010000000001000000000000
+10110100010000010000100000000000
+01011001100000010000000000000000
+11111000000000000001110010110101
+01111000000000110000000000000001
+01111000000000100000000000000001
+00111000011000111001011011111000
+00111000010000101011011000101100
+00101000011000110000000000000000
+00101000010000100000000000000000
+10110100011000100001000000000000
+11001000001000100000100000000000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011011000101000
+00101000001000010000000000000000
+00101001011000100000000001011000
+00110100000011000000000000000000
+01000100001000100000000110110010
+11111000000000000001110010100101
+01111000000000100000000000000001
+00111000010000101011011000101100
+01011000010000010000000000000000
+00101001011000100000000001011000
+01111000000000010000000000000001
+00111000001000011011011000101000
+01011000001000100000000000000000
+11111000000000000000101010011010
+01111000000000110000000000000001
+00111000011000111001011011101000
+00101000011000110000000000000000
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110000010100
+11111000000000000000101001110100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110000110000
+11111000000000000000101001110000
+00110111100000010000000100000100
+00110111100000100000000100010100
+11111000000000000010000110010100
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110000111100
+11111000000000000000101001101001
+00101011100000100000000100001000
+00101011100000010000000100000100
+00110100000000110000000000000000
+11111000000000000000100110110100
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000100111101111011100
+00110100000000010000000000000111
+11111000000000000000101001100000
+00110100000000100000000000000000
+00110111100000010000000000101000
+11111000000000000000000110010110
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111110001011100
+11111000000000000000101001011001
+01111000000000100000000000000001
+01111000000000110000000000000001
+00110100000000010000000000000111
+00111000010000100111110001101100
+00111000011000110111110001110100
+11111000000000000000101001010011
+00101011100000010000000001010100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110001111100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110010001000
+11111000000000000000101001001001
+00110111100000010000000100011100
+00110111100000100000000100011000
+11111000000000000001110000110100
+00101011100000110000000100011000
+00101011100001000000000100011100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110010010100
+11111000000000000000101001000000
+00101011100000010000000001010100
+00110100000011000000000000000001
+01000100001000000000000101101011
+01111000000000100000000000000001
+00111000010000100111110010101000
+00110100000000010000000000000111
+11111000000000000000101000111001
+00110111100011010000000100001100
+10111001101000000000100000000000
+11111000000000000000110100001110
+00110111100000110000000011110000
+10111000011000000000100000000000
+10111001101000000001000000000000
+01011011100000110000000000100100
+11111000000000000000100001010110
+01111000000000010000000000000001
+00111000001000011011100011111000
+00101000001000010000000000000000
+00101011100000110000000000100100
+01000100001011000000000000001010
+01000100001000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000001111
+11100000000000000000000000001010
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110010110000
+11111000000000000000101000100100
+11100000000000000000000000001001
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110011000000
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110011010000
+11111000000000000000101000011011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110011101000
+01111000000011010000000000000001
+11111000000000000000101000010110
+00111001101011011001111101110100
+00101001101000010000000000000000
+00101000001000010000001101011000
+00101000001000010000000000010000
+00101000001011100000000000001000
+01011101110000000000000001001011
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110011110000
+11111000000000000000101000001100
+11111011111111111111111100111000
+00110100000011000000000000000001
+01000100001011100000000100110111
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110011111000
+11111000000000000000101000000101
+00101001101000010000000000000000
+00101000001000010000000000110000
+00101000001000010000000000010000
+00101000001001010000000000001000
+00101000001000110000000000001100
+00101000001000100000000000010000
+00101000001001000000000000010100
+10111000101000110010100000000000
+01000100101000000000000000010100
+00111100010000100000000000010000
+00000000100001000000000000010000
+10111000010001000010000000000000
+01001000011000000000000000000101
+01101100100000100000000000000000
+01100100011000010000000000000000
+10100000010000010000100000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110100011000
+11111000000000000000100111110000
+11100000000000000000000100011100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110100100100
+11001000000001000010000000000000
+11111000000000000000100111101010
+11100000000000000000000100010111
+00000000100001000000000000010000
+00111100010000110000000000010000
+01111000000010110000000000000001
+00111001011010110111110100110000
+10111000011001000001100000000000
+10111001011000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100111100001
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110100111000
+11111000000000000000100111011101
+00101001101000010000000000000000
+10111001011000000001000000000000
+00101000001000010000000000110000
+00101000001000010000000000010000
+00101000001001000000000000100000
+00101100001000110000000000100100
+00110100000000010000000000000111
+00111100100001000000000000010000
+10111000100000110001100000000000
+11111000000000000000100111010011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110101011000
+11111000000000000000100111001111
+00101001101000010000000000000000
+10111001011000000001000000000000
+00101000001000010000000000110000
+00101000001001000000000000000100
+00110100000000010000000000000111
+00101000100000110000000000100000
+00101000100001000000000000100100
+11111000000000000000100111000111
+11100000000000000000000011110100
+01111000000000010000000000000001
+00111000001000011011000011011000
+00101000001000010000000000000000
+00110100000000100000000000000001
+01001000010000010000000000001110
+00110100000000100000000000000010
+01001100010000010000000000000100
+00110100000000100000000000000011
+01011100001000100000000000001010
+11100000000000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110101111000
+11100000000000000000000000001000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111110110000100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110010000
+11111000000000000000100110110000
+00101011100000010000000001011100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110110011100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110100100
+11111000000000000000100110100110
+00101011100000010000000001111000
+01000100001000000000000000000111
+00101011100000010000000001111100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111110110101100
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111110110111000
+11111000000000000000100110011010
+11111011111111111111111011000110
+00110100000011000000000000000001
+01000100001000000000000011000101
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110111001000
+11111000000000000000100110010011
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111100111101000
+00110101011000110000000001100000
+11111000000000000000100110001110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111110111100100
+11111000000000000000100110001010
+00101001011000010000000001011100
+01000100001000000000000000000101
+01111000000000100000000000000001
+00110100000000010000000000000010
+00111000010000100111111000000000
+11100000000000000000000000000100
+01111000000000100000000000000001
+00110100000000010000000000000001
+00111000010000100111111000000100
+11111000000000000000100110000000
+00110100000000010000000000000000
+00110111100000100000000100010000
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+11111000000000000011000110010011
+00110100000011000000000000000000
+00111010000100000111111000001100
+00111001111011110111111000101100
+00111001110011100111111000110100
+00111001101011011000011110011000
+11100000000000000000000000010101
+00110100000000010000000010000111
+10111010000000000001000000000000
+10111001100000000001100000000000
+11111000000000000000100101101111
+10111001100000000000100000000000
+11111000000000000011000111101100
+10111000001000001000100000000000
+00100000001000010000000000000001
+01000100001000000000000000000100
+00110100000000010000000000000010
+10111001111000000001000000000000
+11111000000000000000100101100111
+00100010001100010000000000000010
+01000110001000000000000000000100
+00110100000000010000000000000010
+10111001110000000001000000000000
+11111000000000000000100101100010
+10111001101000000000100000000000
+11111000000000000001010110010110
+00110101100011000000000000000001
+00101011100000010000000100010000
+01001000001011001111111111101011
+01111000000000100000000000000001
+00110100000000010000000000000100
+00111000010000100111111001000000
+11111000000000000000100101011001
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111001011000
+11111000000000000000100101010101
+00101001011000100000000001000100
+00101001011000010000000001000000
+00110100000000110000000000000001
+01111000000011000000000000000001
+11111011111111111111110011111000
+00111001100011000111111001110000
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100101001011
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111001111000
+11111000000000000000100101000111
+00101001011000100000000001010100
+00101001011000010000000001010000
+00110100000000110000000000000001
+01111000000011010000000000000001
+11111011111111111111110011101010
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100111110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111010010000
+11111000000000000000100100111010
+00101001011000110000000000011000
+00101001011001000000000000011100
+00111001101011010111111010110000
+10111001101000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100110100
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111011001000
+11111000000000000000100100110000
+00101001011001000000000000100100
+00101001011000110000000000100000
+10111001101000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100100101011
+00101001011011010000000001010100
+00101001011000010000000001000100
+01111000000000100000000000000001
+00111101101011010000000000000001
+00111000010000100111111011101000
+11001000001011010110100000000000
+00110100000000010000000010000111
+11111000000000000000100100100011
+01111000000000100000000000000001
+10111001101000000001100000000000
+00110100000000010000000000000111
+00111000010000100111111100000000
+11111000000000000000100100011110
+00101001011000010000000000011000
+00101001011000100000000001000100
+00101001011011100000000001000000
+00010100001000110000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001001110000110111000000000000
+11001001110000100111000000000000
+00101001011000100000000000011100
+00101001011011010000000000100100
+00010100010000110000000000011111
+11001000001000100001000000000000
+11110100010000010000100000000000
+11001001110000110111000000000000
+11001001110000010111000000000000
+00101001011000010000000000100000
+00010100001000110000000000011111
+11001000010000010000100000000000
+11110100001000100001000000000000
+11001001110000110111000000000000
+00010101101000110000000000011111
+11001000001011010110100000000000
+11001001110000100111000000000000
+11110101101000010000100000000000
+11001001110000110111000000000000
+01111000000000100000000000000001
+11001001110000010111000000000000
+00111000010000100111111100001100
+00110100000000010000000010000111
+11111000000000000000100100000000
+10111001101000000001000000000000
+00110100000000110000000000000001
+10111001110000000000100000000000
+11111011111111111111110010100100
+10111000001000000001100000000000
+10111001100000000001000000000000
+00110100000000010000000000000111
+11111000000000000000100011111000
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111100100100
+11111000000000000000100011110100
+00101001011000110000000010001100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111100110100
+11111000000000000000100011101111
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111101000000
+11111000000000000000100011101011
+00101001011000110000000001001000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111101010000
+11111000000000000000100011100110
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111101011100
+11111000000000000000100011100010
+00101001011000110000000010000100
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111101101000
+11111000000000000000100011011101
+01111000000000100000000000000001
+00110100000000010000000010000111
+00111000010000100111111101110100
+11111000000000000000100011011001
+00101001011000110000000001011000
+01111000000000100000000000000001
+00110100000000010000000000000111
+00111000010000100111111110000100
+11111000000000000000100011010100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000100011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+11111011111111111110000111110100
+00110100000000100000000000000011
+01011100001000100000000000000011
+00110100000000010000000000000010
+11100000000000000000000000000010
+00110100000000010000000000000001
+01011001011000010000000000101000
+00110101011000100000000001001100
+00110101011000010000000001001000
+11111000000000000001011010100100
+00110100000000010000000000000000
+01011001011000000000000001000000
+01011001011000000000000001000100
+01011001011000000000000010001000
+01011001011000000000000010001100
+00110111100000100000000000001100
+00110100000000110000000000000000
+11111000000000000011000010011000
+01000100001000000000000000000110
+00101011100000010000000000001100
+01011001011000010000000010100000
+00110100000000010000000000000001
+01011001011000010000000010100100
+11100000000000000000000000000011
+01011001011000000000000010100000
+01011001011000000000000010100100
+00110100000000010000000000000000
+11111000000000000001011001101010
+01011001011000010000000000101100
+00110100000000010000000000000001
+01011001011000010000000001010100
+01011001011000010000000001010000
+00110100000000010000000000000000
+11111000000000000011000000100011
+01011001011000010000000000110100
+00110100000000010001111101000000
+01011001011000010000000010110100
+01111000000000010000000000000001
+00111000001000011001011100000000
+00101000001000010000000000000000
+01011001011000010000000010111000
+01011001011000010000000010111100
+00110101011000010000000000010100
+11111000000000000001011000001111
+00110100000000010000000000000000
+01011001011000000000000000011100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111111110100100
+11111000000000000001010011000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011011010000100
+00101001011001010000000000000000
+01111000000000100000000000000001
+00110100001001000000000000000001
+10111000001000000001100000000000
+00111000010000101011011000110000
+10110100001000100000100000000000
+11001000101000110001100000000000
+10110100100000100001000000000000
+11111000000000000011010010100001
+00101001011000010000000000000000
+00110100001000011111111111111111
+01011001011000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110111100010110000000000010100
+00110100000000100000000000000000
+00110100000000110000000000100100
+10111001011000000000100000000000
+11111000000000000011010011010101
+01111000000000110000000000000001
+10111001011000000000100000000000
+00110100000001000000000000000000
+00110100000000100000000000000000
+00111000011000111011011000110000
+00110100000010000000000000100000
+00110100000001110000000000001000
+11100000000000000000000000000100
+00110100100001000000000000000001
+00110100001000010000000000000100
+01000100100001110000000000010111
+10110100010000110010100000000000
+11100000000000000000000000000100
+00110000101000000000000000000000
+00110100010000100000000000000001
+00110100101001010000000000000001
+01000000101001100000000000000000
+01000100110010001111111111111100
+01000100110000000000000000001101
+10110100010000110010100000000000
+01011000001001010000000000000000
+11100000000000000000000000000010
+00110100010000100000000000000001
+10110100010000110010100000000000
+01000000101001010000000000000000
+01111100101010010000000000000000
+01111100101001100000000000100000
+10100001001001100011000000000000
+01011100110000001111111111111010
+01011100101001101111111111101011
+11100000000000000000000000000011
+00110100000011000000000000000000
+01000100100011000000000000100001
+00101011100000010000000000010100
+00110100000011000000000000000000
+01000000001000100000000000000000
+00110100000000010000000000100011
+01000100010000010000000000011100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111010111000011000
+00111001100011001010111011100000
+11100000000000000000000000010001
+00101001011000010000000000000000
+11111000000000000011010011101001
+10111000001000000110100000000000
+01011100001000000000000000001100
+00101001011000100000000000000100
+00110111100000010000000000011000
+11011000010000000000000000000000
+10111000001000000110000000000000
+01001100001011010000000000001110
+00101001011000100000000000000000
+01111000000000010000000000000001
+10111001100000000001100000000000
+00111000001000010111111110101100
+11111000000000000001010001100110
+11100000000000000000000000001000
+00110101011010110000000000001000
+00101011100000100000000000010100
+01010101100010111111111111101111
+01111000000000010000000000000001
+00111000001000010111111111000100
+11111000000000000001010001011111
+00110100000011001111111111101010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011001111110101100
+01111000000000100000000000000001
+00101000001001100000000000000000
+00110100000001010000000000111011
+00110100000000010000000000000000
+00111000010000101011011000110000
+00110100000001000000000001010000
+11100000000000000000000000000101
+10110100001000100011100000000000
+00110000111000110000000000000000
+00110100001000010000000000000001
+01000100001001000000000000000101
+10110100110000010001100000000000
+01000000011000110000000000000000
+01000100011000000000000000000010
+01011100011001011111111111111001
+01111000000000100000000000000001
+00111000010000101011011000110000
+10110100010000010001000000000000
+00110000010000000000000000000000
+01111000000000100000000000000001
+00111000010000101001111110101100
+00101000010000110000000000000000
+00110100000001000000000000111011
+10110100011000010001100000000000
+01011000010000110000000000000000
+01000000011001010000000000000000
+01011100101001000000000000000011
+00110100011000110000000000000001
+01011000010000110000000000000000
+01011100001000000000000000000110
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101001111110101100
+00111000011000111001111101111000
+01011000010000110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011011011000110000
+01000100010000010000000000000011
+00110100000000110000000001010000
+11111000000000000011010110010000
+01111000000000010000000000000001
+00111000001000011011011000110000
+11111000000000000011010100010001
+01111000000000100000000000000001
+00111000010000101011011010000100
+01111000000010110000000000000001
+01011000010000010000000000000000
+00111001011010111011111111010000
+00110100000000010000000000000001
+01011001011000010000000000000000
+11111011111111111111111101110101
+01011001011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011010001100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011010000100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011010001000
+01011000001000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011011010001000
+00101001011000010000000000000000
+00110100000011000000000000000001
+01000100001011000000000000010000
+00110100000000100000000000000010
+01000100001000100000000010011101
+00110100000000100000000000000000
+01011100001000000000000010100101
+01111000000000010000000000000001
+00111000001000010111111111100000
+11111000000000000001001111111110
+01111000000000010000000000000001
+00111000001000011011011010001100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011011010000100
+01011000001000000000000000000000
+01011001011011000000000000000000
+11100000000000000000000010001110
+11111000000000000001010011111110
+00110100000000100000000000000000
+01001000000000010000000010010111
+00110100000000100000000000011011
+01000100001000100000000000001000
+01111000000000100000000000000001
+00111000010000101011011010010000
+00101000010000110000000000000000
+01100100001001000000000001011011
+00000000011001010000000000010000
+10100000101001000010000000000000
+01000100100000000000000000000110
+01111000000000010000000000000001
+00111000001000011011011010010000
+01111000000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000000011
+10111000001000110000100000000000
+01011000010000010000000000000000
+01111000000000010000000000000001
+00111000001000011011011010010000
+00101000001010110000000000000000
+00110100000000100000000000000001
+00100001011000010000000011111111
+01000100001000000000000010000001
+00110100000000010000000001111110
+01000101011000010000000000101110
+01001001011000010000000000000110
+00110100000000010000000000001001
+01000101011000010000000001101101
+00110100000000010000000000001101
+01011101011000010000000001000010
+11100000000000000000000000100000
+01111000000000100000000000000001
+00111000010000101000111011101100
+00101000010000010000000000000000
+01000101011000010000000000010000
+01111000000000100000000000000001
+00111000010000101000111011110000
+00101000010000010000000000000000
+01000101011000010000000000000100
+00110100000000010000000001111111
+01011101011000010000000000110111
+11100000000000000000000000100111
+01111000000000010000000000000001
+00111000001000011011011010001100
+00101000001000100000000000000000
+01001100000000100000000001011011
+00110100010000101111111111111111
+01011000001000100000000000000000
+00110100000000010000000001000100
+11100000000000000000000000001011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011011010001100
+00111000010000101011011010000100
+00101000001000110000000000000000
+00101000010000100000000000000000
+01001100011000100000000001010000
+00110100011000110000000000000001
+01011000001000110000000000000000
+00110100000000010000000001000011
+11111011111111111111111011110001
+11100000000000000000000001001011
+01111000000000010000000000000001
+00111000001000011000011110011000
+11111000000000000001001110110011
+01111000000000010000000000000001
+00111000001000011011011010001000
+00110100000000100000000000000010
+01011000001000100000000000000000
+11100000000000000000000001000011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011011010001100
+00111000010000101011011010000100
+00101000001000010000000000000000
+00101000010000100000000000000000
+01000100001000100000000000111100
+11111011111111111111111011101001
+00110100000000010000000001010000
+11100011111111111111111111101101
+01111000000010110000000000000001
+00111001011010111011011010001100
+00101001011000010000000000000000
+01001100000000010000000000110101
+00110100000000010000000001000100
+11111011111111111111111011011000
+00110100000000010000000001010000
+11111011111111111111111011010110
+00101001011000010000000000000000
+00110100001000011111111111111111
+11111011111111111111111011011100
+00101001011000010000000000000000
+00110100001000011111111111111111
+01011001011000010000000000000000
+11100000000000000000000000101010
+01111000000000010000000000000001
+10100001011000010000100000000000
+01011100001000000000000000100111
+01111000000000010000000000000001
+00111000001000011011011010000100
+00101000001001000000000000000000
+00110100000000010000000001001111
+01001000100000010000000000100010
+01111000000000010000000000000001
+00111000001000011011011010001100
+00101000001000110000000000000000
+01000100011001000000000000001000
+01111000000000100000000000000001
+00110100011000010000000000000001
+00111000010000101011011000110000
+10110100001000100000100000000000
+10110100011000100001000000000000
+11001000100000110001100000000000
+11111000000000000011001101110011
+01111000000000010000000000000001
+00111000001000011011011010001100
+00101000001000110000000000000000
+01111000000000100000000000000001
+00111000010000101011011000110000
+10110100010000110001000000000000
+00110000010010110000000000000000
+00110100011000100000000000000001
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011011010000100
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000001000000
+11111011111111111111111010101100
+01111000000000100000000000000001
+00111000010000101011011010010000
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000010111111111101000
+11111000000000000001001101101100
+01111000000000010000000000000001
+00111000001000011011011010010000
+01011000001000000000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001011
+01111000000000100000000000000001
+00111000010000101011011010000100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011011011000110000
+10110100001000100000100000000000
+00110000001000000000000000000000
+11111011111111111111111010110111
+01011001011000000000000000000000
+11100011111111111111111111110101
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000001000000000000000001
+10111000001000000101100000000000
+10111000010000000110000000000000
+01000100001000000000000000000110
+01000000001000100000000000000000
+00110100000000010000000000101101
+01011100010000010000000000000011
+00110101011010110000000000000001
+00110100000001001111111111111111
+00110100000000010000000000000000
+00110100000000100000000000000000
+00110100000010000000000000001001
+00110100000001110000000000000101
+11100000000000000000000000101000
+00110100011001011111111111010000
+00100000101001100000000011111111
+01010100110010000000000000001011
+00000000010001100000000000011100
+00111100001000110000000000000100
+00010100101000010000000000011111
+10111000110000110001100000000000
+00111100010001100000000000000100
+10110100011000010001100000000000
+10110100110001010001000000000000
+11110100110000100011000000000000
+10110100110000110000100000000000
+11100000000000000000000000011010
+00110100011001101111111110111111
+00100000110001010000000011111111
+01010100101001110000000000001000
+00000000010010010000000000011100
+00111100001001010000000000000100
+00111100010000100000000000000100
+10111001001001010010100000000000
+00010100110000010000000000011111
+00110100011000111111111111001001
+11100000000000000000000000001010
+00110100011001101111111110011111
+00100000110001010000000011111111
+01010100101001110000000000010001
+00000000010010010000000000011100
+00111100001001010000000000000100
+00111100010000100000000000000100
+00010100110000010000000000011111
+10111001001001010010100000000000
+00110100011000111111111110101001
+11110100110000110011000000000000
+10110100011000100001000000000000
+10110100110000010011000000000000
+11110100011000100001100000000000
+10110100110001010010100000000000
+10110100011001010000100000000000
+00110101011010110000000000000001
+01000101011000000000000000000011
+01000001011000110000000000000000
+01011100011000001111111111010111
+00010100100000110000000000011111
+11111000000000000011000111011110
+01011001100000010000000000000000
+10111001011000000000100000000000
+01011001100000100000000000000100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110111100000100000000000001100
+11111011111111111111111110110101
+00101011100000100000000000010000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110100000001000000000000000001
+01000100001000000000000000000110
+01000000001001010000000000000000
+00110100000000110000000000101101
+01011100101000110000000000000011
+00110100001000010000000000000001
+00110100000001001111111111111111
+00110100000000110000000000000000
+00110100000001100000000000001001
+11100000000000000000000000000111
+00110100101001011111111111010000
+00100000101001110000000011111111
+01010100111001100000000000000111
+00001000011000110000000000001010
+00110100001000010000000000000001
+10110100101000110001100000000000
+01000100001000000000000000000011
+01000000001001010000000000000000
+01011100101000001111111111111000
+10001000011001000001100000000000
+01011000010000110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111101110100
+01000000001000010000000000000000
+01000100001000000000000000101100
+01111000000011010000000000000001
+01111000000011000000000000000001
+01111000000010110000000000000001
+00111001101011011011011010000100
+00111001100011000111111111101100
+00111001011010111011011000110000
+11111011111111111111111010001000
+01011001101000010000000000000000
+01011100001000000000000000001001
+01111000000010110000000000000001
+01111000000011100000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001011010111011011000110000
+00111001110011101011011010000100
+00111001101011010111111111101100
+11100000000000000000000000000111
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111000000000000001001011010001
+10111001011000000000100000000000
+11111011111111111111111010011111
+11100011111111111111111111110000
+10111001011000000000100000000000
+00110100000000100000000001010000
+10111001100000000001100000000000
+11111000000000000010001100100010
+01011001110000010000000000000000
+01001000001000000000000000000110
+01011101100000000000000000001110
+01111000000000010000000000000001
+00111000001000010111111111111100
+11111000000000000001001011000100
+11100000000000000000000000001010
+10110101011000010000100000000000
+00110000001000001111111111111111
+10111001011000000001000000000000
+10111001101000000000100000000000
+11111000000000000001001010111110
+10111001011000000000100000000000
+11111011111111111111111010001100
+00110100000011000000000000000001
+11100011111111111111111111101101
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000000000010100
+01111000000011100000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001001010100111
+00110100000010110000000000000000
+00111001110011101011011010000100
+00111001101011010111100111101000
+00111001100011001011011000110000
+11111011111111111111111001001100
+01011001110000010000000000000000
+01000100001000000000000000000111
+10111001101000000000100000000000
+10111001100000000001000000000000
+00110101011010110000000000000001
+11111000000000000001001010011100
+00100001011010110000000011111111
+11100011111111111111111111111000
+01011101011000010000000000000100
+01111000000000010000000000000001
+00111000001000011000000000101100
+11111000000000000001001010010110
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+01111000000000110000000000000001
+00111000011000111001011011101000
+00101000011000100000000000000000
+00101000001010110000000000001100
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000011000111000000011100000
+00111000001000011000000000111000
+11111000000000000001001010000000
+01111000000001010000000000000001
+01111000000000110000000000000001
+01111000000001000000000000000001
+00111000101001011001011011101100
+00111000011000111001011011110000
+00111000100001001001011011110100
+00101000101000100000000000000000
+00101000011000110000000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000000001010000
+11111000000000000001001001110100
+00100001011010110000000000001111
+00110101011010110000000000000001
+01111000000000010000000000000001
+00110100000000100000000010000000
+00111101011010110000000000000100
+00111000001000011000000001100100
+00110100000000110000100000000000
+11111000000000000001001001101100
+00110101011000011111111110000000
+00110100000000100000000000001111
+01010000010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000000010001100
+10111001011000000001000000000000
+00110101011000110000000000010000
+11111000000000000001001001100100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+00101000001000100000000000000000
+01000100010000000000000000000110
+01111000000011100000000000000001
+10111000001000000101100000000000
+00111001110011101001111110110000
+00110100000011110000000000001000
+11100000000000000000000000110011
+00110100000000011111111111111111
+11111011111111111110000000100101
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101001001010011000
+10110100010000010001000000000000
+00110100000000011111111111111111
+00101000010011000000000000000000
+11111011111111111101111101000101
+00111100001000010000000000000010
+01111000000000110000000000000001
+00111000011000111001001010100000
+10110100011000010001100000000000
+00101000011010110000000000000000
+11111011111111111101111100111011
+00111100001000010000000000000010
+01111000000001000000000000000001
+00111000100001001001001010101000
+10110100100000010010000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000000010111100
+10111001100000000001000000000000
+10111001011000000001100000000000
+11111000000000000001001000110110
+00110100000000010000000000000000
+11100000000000000000000000011011
+10111001110000000110000000000000
+00110100000011010000000000000000
+00101001011000010000000000000000
+00101001100000100000000000000000
+11111000000000000011001010100110
+10111000001000001000000000000000
+01011100001000000000000000000110
+00101001100000100000000000000100
+00101001100000010000000000001000
+11011000010000000000000000000000
+01001010000000010000000000010000
+11100000000000000000000000000100
+00110101101011010000000000000001
+00110101100011000000000000001100
+01011101101011111111111111110100
+00110101011010110000000000000100
+01011101101011110000000000000111
+00101010001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000000011001000
+11111000000000000001001000011111
+00110100000000011111111111101010
+11100000000000000000000000000100
+00101001011000010000000000000000
+10111001011000001000100000000000
+01011100001000001111111111100111
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000000100101000
+01111000000010110000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001001000000101
+00111001011010111010111000011000
+00111001101011011010111011100000
+00111001100011001000000101000000
+11100000000000000000000000000101
+00101001011000100000000000000000
+10111001100000000000100000000000
+00110101011010110000000000001000
+11111000000000000001000111111101
+01010101101010111111111111111100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000110
+00110111100000100000000000010100
+11111011111111111111111011011011
+00101011100000110000000000010100
+10110101101010110001000000000000
+00110101011010110000000000000001
+00110000010000110000000000000000
+01000000001000100000000000000000
+01100100010000100000000000111010
+10110100001000100000100000000000
+01011101011011001111111111110111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000100000000000000
+01000001000000110000000000000000
+01000001000001000000000000000001
+01000001000001010000000000000010
+01000001000001100000000000000011
+01000001000001110000000000000100
+01000001000010000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101010000
+10111000001000000101100000000000
+11111000000000000001000111000001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101110000
+11111000000000000011001000111000
+01011100001000000000000000000100
+00110111100000010000000000101100
+11111000000000000001001011111111
+11100000000000000000000000101011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101110100
+11111000000000000011001000110000
+01011100001000000000000000001000
+00110111100010110000000000101100
+10111001011000000000100000000000
+11111000000000000001001011110110
+10111001011000000001000000000000
+00110100000000010000000000000000
+11111000000000000001111100100011
+11100000000000000000000000011111
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101111100
+11111000000000000011001000100100
+01011100001000000000000000001011
+00101001011000110000000000000100
+01000100011000010000000000001001
+00110111100010110000000000101100
+10111000011000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111110110010
+10111001011000000000100000000000
+11111000000000000001001011010001
+11111000000000000001001111001100
+11100000000000000000000000010000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000110000000
+11111000000000000011001000010101
+10111000001000000001100000000000
+00110100000000101111111111101010
+01011100001000000000000000010001
+00101001011000010000000000000100
+01000100001000110000000000001111
+00110111100010110000000000101100
+10111001011000000001000000000000
+11111011111111111111111110100010
+00110100000000010000000000000000
+10111001011000000001000000000000
+11111000000000000001111101101101
+00110111100000100000000000101100
+00110111100000010000000000001100
+11111011111111111111111110110100
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000000110001000
+11111000000000000001000110001100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000100100
+01111000000000100000000000000001
+00111000010000101000000110100000
+11111000000000000011000111110000
+01011100001000000000000000001101
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011010111011101100
+00111000010000101011000010101100
+11100000000000000000000000000110
+01011000001000000000000000011100
+01011000001000000000000000011000
+01011000001000000000000000010100
+01011000001000000000000000010000
+00110100001000010000000000100000
+01010100010000011111111111111011
+11100000000000000000000000101100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000110101000
+11111000000000000011000111011111
+10111000001000000001000000000000
+01011100001000000000000000001110
+00101001011000010000000000000100
+01000100001000100000000000000101
+11111000000000000000010101010100
+01111000000000100000000000000001
+00111000010000101011000010110100
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000010110100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000000110101100
+11111000000000000001000101011010
+11100000000000000000000000011001
+01111000000000010000000000000001
+00111000001000011000000111001100
+01111000000010110000000000000001
+01111000000011010000000000000001
+01111000000011000000000000000001
+11111000000000000001000101010011
+00111001011010111010111011101100
+00111001101011011011000010101100
+00111001100011001000000111111100
+11100000000000000000000000001110
+00101001011000010000000000011000
+00110100000000100000001111101000
+00101001011011110000000000010000
+11111000000000000011000010100010
+00101001011011100000000000010100
+00101001011001010000000000011100
+00101001011001100000000000000000
+10111000001000000010000000000000
+10111001111000000001000000000000
+10111001100000000000100000000000
+10111001110000000001100000000000
+11111000000000000001000101000011
+00110101011010110000000000100000
+01010101101010111111111111110011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000000
+00111000010000100000000010100000
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000001000100000
+11111000000000000001000100110000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+10111000001000000001000000000000
+00101000001000010000000000000000
+01000100001000000000000000001101
+00101000010000100000000000000100
+01011100010000000000000000001011
+00110111100000100000000000001000
+11111011111111111111111000011111
+00101011100000100000000000001000
+01111000000000010000000000000001
+00111000001000011001011011111000
+00001000010000100000001111101000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000011110011000
+11100000000000000000000000000011
+01111000000000010000000000000001
+00111000001000011000001000100100
+11111000000000000001000100011000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000010001
+01111000000000010000000000000001
+00111000001000011100001010010100
+00101000001000100000000000000000
+00110100000010110000000000000000
+01100100010000100000000000000000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111110110100
+00101000001000110000000000000000
+00110100011000111111111111111111
+01011000001000110000000000000000
+01011100010010110000000000101011
+01111000000000010000000000000001
+00111000001000011000001001001000
+11111000000000000001000011111111
+11100000000000000000000000100111
+01111000000000100000000000000001
+00111000010000101000001001011100
+11111000000000000011000101110010
+01011100001000000000000000000111
+11111000000000000001001010100011
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000101000100100
+11111000000000000001000011110101
+11100000000000000000000000011100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000100111000100101100
+11111000000000000011000101100111
+01011100001000000000000000001011
+01111000000000010000000000000001
+00111000001000011100001010010100
+00110100000000100000000000000001
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111110110100
+00101000001000100000000000000000
+00110100010000101111111111111111
+01011000001000100000000000000000
+11100000000000000000000000001101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001100000
+11111000000000000011000101011000
+00110100000010111111111111101010
+01011100001000000000000000001000
+01111000000000010000000000000001
+00111000001000011100001010010100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011000001001001000
+11111000000000000001000011011001
+00110100000010110000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111110111000
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000011001000
+01111000000000100000000000000001
+00111000010000101000001010000000
+11111000000000000011000100111001
+01011100001000000000000000001000
+11111000000000000001111011001010
+00110100000000111111111111111111
+00110100000000100000000000000000
+01011100001000110000000011000100
+01111000000000010000000000000001
+00111000001000011000001010001000
+11100000000000000000000000111100
+00101001011000010000000000010000
+01000100001000000000000001000101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001010011100
+11111000000000000011000100101011
+01011100001000000000000001000000
+00101001011000010000000000000100
+00110100000000100000000000010000
+00110101011011000000000000000100
+11111000000000000011001001001010
+00111100001000010000000000011000
+00110100000000110000000000000000
+00010100001000010000000000011000
+00110111100001000000000000101100
+11100000000000000000000000000111
+00101001100000100000000000000000
+10110100100000110010100000000000
+10110100010000110001000000000000
+01000000010000100000000000000000
+00110100011000110000000000000001
+00110000101000100000000000000000
+10110000011000000001000000000000
+01001000001000101111111111111001
+10110100100000100000100000000000
+00110100000000110000000000100000
+00110100000001000000000000001111
+11100000000000000000000000000101
+00110100010000100000000000000001
+00110000001000110000000000000000
+10110000010000000001000000000000
+00110100001000010000000000000001
+01001100100000101111111111111100
+00101001011000010000000000001000
+11111000000000000000010010001000
+01011011100000010000000001000000
+00101001011000010000000000001100
+11111000000000000000010010000101
+01011011100000010000000001000100
+00101001011000010000000000010000
+11111000000000000000010010000010
+01011011100000010000000000111100
+00110100000000100000000000000001
+00110111100000010000000000101100
+00110100000000110000000000000000
+11111000000000000001111011110110
+00111100001000100000000000011000
+00110100000000011111111111111110
+00010100010000100000000000011000
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001010100000
+11111000000000000001000010000101
+00110100000000101111111111100100
+11100000000000000000000010001010
+00110100000000011111111111111111
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001010110000
+11111000000000000001000001111110
+00110100000000101111111111111011
+11100000000000000000000010000011
+01001100010000000000000000000100
+01111000000000010000000000000001
+00111000001000011000001010111100
+11100000000000000000000000100011
+01111000000000010000000000000001
+00111000001000011000001011011000
+11111000000000000001000001110101
+11100000000000000000000001110101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001011101000
+11111000000000000011000011100111
+01011100001000000000000000110000
+01111000000100000000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+00110100000011000000000000000000
+00110100000100010000000000000000
+00110111100100100000000000101100
+00111010000100001000001100000100
+00110111100100110000000000111100
+00111001111011110111111111101000
+00111001110011101000001100001100
+10111010010000000000100000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+11111000000000000001111011001011
+00111100001010110000000000011000
+00010101011010110000000000011000
+01011101011000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001011110000
+11111000000000000001000001011011
+11100000000000000000000001011011
+01001101011000000000000000000111
+01111000000000010000000000000001
+00111000001000011000001010111100
+10111001011000000001000000000000
+11111000000000000001000001010101
+00110100000000101111111111110010
+11100000000000000000000001011010
+00110101100011000000000000000001
+10111010000000000000100000000000
+10111001100000000001000000000000
+11111000000000000001000001001111
+10111010010000000110100000000000
+01000001101000100000000000000000
+10111001111000000000100000000000
+00110101101011010000000000000001
+11111000000000000001000001001010
+01011101101100111111111111111100
+00101011100000100000000001000000
+00101011100000110000000001000100
+00101011100001000000000000111100
+00110110001100010000000000000001
+10111001110000000000100000000000
+10110010001000001000100000000000
+11111000000000000001000001000010
+01001001011100011111111111011101
+11100000000000000000000001000001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001100101100
+11111000000000000011000010110011
+01011100001000000000000000110010
+11111000000000000001011100000111
+00111100001011000000000000011000
+00110100000000011111111111101101
+00010101100011000000000000011000
+01011101100000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001100110100
+11111000000000000001000000110011
+00110100000000101111111111101101
+11100000000000000000000000111000
+01111000000010110000000000000001
+00111001011010111011111110111100
+01111000000011010000000000000001
+00110100000000011111111111111011
+00110101011011100000000000010000
+00111001101011010111111111101000
+01011101100000010000000000000100
+01111000000000010000000000000001
+00111000001000011000001101000000
+11100011111111111111111110101001
+01000001011000100000000000000000
+10111001101000000000100000000000
+00110101011010110000000000000001
+11111000000000000001000000100011
+01011101011011101111111111111100
+01111000000000010000000000000001
+00111000001000011000011110011000
+11111000000000000001000000011111
+00110100000000011111111111111010
+01011101100000010000000000000110
+01111000000000010000000000000001
+00111000001000011000001101010000
+11111000000000000001000000011010
+00110100000000101111111111111010
+11100000000000000000000000011111
+01111000000000100000000000000001
+01111000000000110000000000000001
+01111000000001000000000000000001
+00111000010000101011111101000000
+00111000011000111011111101000100
+00111000100001001010100000001000
+00101000010000100000000000000000
+00101000011000110000000000000000
+00101000100001000000000000000000
+01111000000000010000000000000001
+00111000001000011000001101101000
+11111000000000000001000000001100
+10111001100000000001000000000000
+11100000000000000000000000010001
+00101001011000010000000000000100
+01000100001000000000000000001011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110010000
+11111000000000000011000001111011
+01011100001000000000000000000110
+00101001011000010000000000000100
+11111000000000000000001111110010
+11111000000000000001000111110111
+00110100000000100000000000000000
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001001101100
+11111000000000000000111111111011
+00110100000000101111111111101010
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000001001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110011000
+11111000000000000011000001011010
+01011100001000000000000000010001
+00101001011000110000000000001100
+00110100000000101111111111101010
+01000100011000010000000010000110
+00101001011000010000000000000100
+11111000000000000000001111001110
+10111000001000000110100000000000
+00101001011000010000000000001000
+11111000000000000000001111001011
+10111000001000000110000000000000
+00101001011000010000000000001100
+11111000000000000000001111001000
+10111000001000000001100000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000010101001010100
+11100000000000000000000001111000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110100000
+11111000000000000011000001000101
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000001110000
+11111000000000000000001110111001
+11111000000000000010101100010010
+11100000000000000000000001100000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001100100
+11111000000000000011000000111001
+01011100001000000000000000000011
+11111000000000000010101110101111
+11100000000000000000000001100101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110100100
+11111000000000000011000000110010
+01011100001000000000000000001101
+00101001011000110000000000001000
+00110100000000101111111111101010
+01000100011000010000000001011110
+00101001011000010000000000000100
+11111000000000000000001110100110
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001110100011
+10111000001000000001000000000000
+10111001100000000000100000000000
+11111000000000000010101100001011
+11100000000000000000000001010100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110101000
+11111000000000000011000000100001
+10111000001000000001100000000000
+01011100001000000000000000001110
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000001001100
+11111000000000000000001110010101
+00110111100000100000000000011000
+00110111100000110000000000010100
+11111000000000000010101100100101
+00101011100000100000000000011000
+00101011100000110000000000010100
+01111000000000010000000000000001
+00111000001000011000001110101100
+11111000000000000000111110011100
+11100000000000000000000001000001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000011100100
+11111000000000000011000000001110
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000111001
+11111000000000000000001110000010
+11111000000000000010101010111101
+11100000000000000000000000110101
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000011101100
+11111000000000000011000000000010
+10111000001000000001100000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000101101
+11111000000000000000001101110110
+11111000000000000010101011000010
+11100000000000000000000000101001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110110100
+11111000000000000010111111110110
+01011100001000000000000000001101
+00101001011000110000000000001000
+00110100000000101111111111101010
+01000100011000010000000000100010
+00101001011000010000000000000100
+11111000000000000000001101101010
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001101100111
+10111000001000000001000000000000
+10111001100000000000100000000000
+11111000000000000010101111010110
+11100000000000000000000000011000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001110111100
+11111000000000000010111111100101
+10111000001000000001100000000000
+01011100001000000000000000001011
+00101001011000010000000000000100
+00110100000000101111111111101010
+01000100001000110000000000010000
+11111000000000000000001101011001
+11111000000000000010101110111011
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000010111111111000000
+11111000000000000000111101100011
+11100000000000000000000000001000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001111000100
+11111000000000000010111111010101
+00110100000000101111111111101010
+01011100001000000000000000000011
+11111000000000000010110001101101
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101000001111010100
+11111000000000000010111111000000
+10111000001000000110000000000000
+01011100001000000000000000000110
+00110111100000010000000000010000
+11111000000000000001011110010110
+00110100000010111111111111111111
+01001001100000010000000000100001
+11100000000000000000000000011100
+00101001011000010000000000000000
+00110100000010110000000000000000
+01011100001000000000000000011101
+00110111100000010000000000010000
+00110100000000100000000000000000
+11111000000000000001111001111000
+01001101011000010000000000001010
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011000001111011100
+11111000000000000000111100110111
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011001011100000000
+01011000001000100000000000000000
+11100000000000000000000000010000
+01111000000000010000000000000001
+00111000001000011000010000000100
+11111000000000000000111100101111
+00110111100000010000000000010000
+11111000000000000001011101111110
+00110100000010111111111111111111
+01001000000000010000000000001001
+00101011100000100000000000010000
+01111000000000010000000000000001
+00111000001000011001011100000000
+01011000001000100000000000000000
+00110111100000010000000000010000
+00110100000000100000000000000001
+11111000000000000001111001100000
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110111100000100000000000011000
+00110111100000010000000000010000
+11111000000000000001101000000110
+00101001011000010000000000001000
+01000100001000000000000000010100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101111100
+11111000000000000010111110000110
+01011100001000000000000000001111
+11111011111111111101110000001000
+00110100000000110000000000000011
+00110100000000101111111111110000
+01000100001000110000000001000000
+00101001011000010000000000000100
+11111000000000000000001011111001
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001011110110
+10111000001000000001100000000000
+10111001100000000001000000000000
+00010101100000010000000000011111
+00110100000001000000000000000011
+11100000000000000000000000100000
+00101001011000010000000000000000
+01000100001000000000000000001111
+01111000000000100000000000000001
+00111000010000101000010000111000
+11111000000000000010111101110010
+01011100001000000000000000001011
+11111011111111111101101111110100
+00110100000000100000000000000011
+01000100001000100000000000100011
+00101001011000010000000000000100
+11111000000000000000001011100110
+10111000001000000001000000000000
+00110100000000110000000000000000
+00010100001000010000000000011111
+00110100000001000000000000000001
+11100000000000000000000000010000
+00101001011000010000000000000000
+01000100001000000000000000010000
+01111000000000100000000000000001
+00111000010000101000010001000000
+11111000000000000010111101100010
+01011100001000000000000000001100
+11111011111111111101101111100100
+00110100000000100000000000000011
+01000100001000100000000000010011
+00101001011000010000000000000100
+11111000000000000000001011010110
+10111000001000000001100000000000
+00110100000000100000000000000000
+00110100000000010000000000000000
+00110100000001000000000000000010
+11111000000000000001100110110001
+11100000000000000000000000010100
+00101001011000010000000000000000
+01000100001000000000000000001001
+01111000000000100000000000000001
+00111000010000101000010001001000
+11111000000000000010111101010001
+01011100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011000001110101100
+00101011100000100000000000010100
+11100000000000000000000000001000
+00101011100000100000000000010100
+00101011100000010000000000010000
+00110100000000110000000000000000
+11111000000000000000000111101010
+10111000001000000001000000000000
+01111000000000010000000000000001
+00111000001000011000010001001100
+00101011100000110000000000011000
+11111000000000000000111011001100
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011000010110000
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000000011
+11111000000000000001010111101111
+11100000000000000000000001010111
+00101001011000010000000000000100
+00110100000011001111111111101010
+01000100001000000000000001010101
+00101001011000100000000000001100
+01000100010000000000000000001000
+11111000000000000000001010011111
+01011100001000000000000000000110
+00101001011000010000000000001100
+00110100000011010000000001010000
+11111000000000000000001010011011
+00111100001011100000000000001010
+11100000000000000000000000000111
+00101001011000010000000000001100
+00110100000011100000000000000001
+00110100000011010000000001010000
+01000100001000000000000000000011
+11111000000000000000001010010100
+00100000001011010000000011111111
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001110000
+11111000000000000010111100010101
+01011100001000000000000000001101
+00101001011000100000000000001000
+01000100010000010000000000001011
+00101001011000010000000000000100
+11111000000000000000001010001010
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001010000111
+10111000001000000001000000000000
+10111001110000000001100000000000
+10111001100000000000100000000000
+10111001101000000010000000000000
+11100000000000000000000000010000
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001110000
+11111000000000000010111100000100
+01011100001000000000000000001101
+01111000000011000000000000000001
+00111001100011001011111110100100
+00101001100000100000000000000100
+01000100010000010000000000001001
+00101001011000010000000000000100
+11111000000000000000001001110111
+01011100001000000000000000000110
+00101001100000100000000000001100
+00101001100000110000000000001000
+00110100000001000000000000000000
+11111000000000000001111101111100
+11100000000000000000000000100011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001110100
+11111000000000000010111011110011
+01011100001000000000000000001101
+00101001011000100000000000001000
+01000100010000010000000000001011
+00101001011000010000000000000100
+11111000000000000000001001101000
+10111000001000000110000000000000
+00101001011000010000000000001000
+11111000000000000000001001100101
+10111000001000000001000000000000
+10111001110000000001100000000000
+10111001100000000000100000000000
+10111001101000000010000000000000
+11100000000000000000000000010001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010001110100
+11111000000000000010111011100010
+00110100000011001111111111101010
+01011100001000000000000000001101
+01111000000011010000000000000001
+00111001101011011011111110100100
+00101001101000100000000000000100
+01000100010000010000000000001001
+00101001011000010000000000000100
+11111000000000000000001001010100
+01011100001000000000000000000110
+00101001101000100000000000001100
+00101001101000110000000000001000
+00110100000001000000000000000000
+11111000000000000001111100011001
+00110100000011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001100
+01111000000000100000000000000001
+00111000010000101000010010000100
+11111000000000000010111011000011
+01011100001000000000000000001000
+00110100000000010000000000000001
+11111011111111111110011010010101
+01111000000000010000000000000001
+00111000001000011001011011111100
+00110100000000100000000000000001
+01011000001000100000000000000000
+11100000000000000000000000001011
+00101001011000010000000000000000
+01000100001000000000000000001001
+01111000000000100000000000000001
+00111000010000101000010010001100
+11111000000000000010111010110110
+01011100001000000000000000000101
+11111011111111111110011010001001
+01111000000000010000000000000001
+00111000001000011001011011111100
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011001011011111100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000010010000000
+01000100001000000000000000000011
+01111000000000100000000000000001
+00111000010000101000010001111100
+01111000000000010000000000000001
+00111000001000011000010010010100
+11111000000000000000111000101111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000100
+00110111100000100000000000010100
+11111011111111111111101100011100
+00101011100000110000000000010100
+10110101101010110001000000000000
+00110101011010110000000000000001
+00110000010000110000000000000000
+01000000001000100000000000000000
+01100100010000100000000000101110
+10110100001000100000100000000000
+01011101011011001111111111110111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000011000000000000
+01000000110000110000000000000000
+01000000110001000000000000000001
+01000000110001010000000000000010
+01000000110001100000000000000011
+01111000000000100000000000000001
+00111000010000101000010010110000
+10111000001000000101100000000000
+11111000000000000000110111111000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000000101
+01111000000000100000000000000001
+00111000010000101000000101110000
+11111000000000000010111001101111
+01011100001000000000000000000100
+00110111100000010000000000100000
+11111000000000000000010010010111
+11100000000000000000000000010010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101111100
+11111000000000000010111001100111
+10111000001000000001100000000000
+00110100000000101111111111101010
+01011100001000000000000000100100
+00101001011000010000000000000100
+01000100001000110000000000100010
+01111000000000100000000000000001
+00111000010000101011100011111000
+00110100000000110000000000000010
+01011000010000110000000000000000
+00110111100000100000000000100000
+11111011111111111111111110111100
+00110111100000010000000000100000
+11111000000000000000010010001110
+00110111100010110000000000001100
+00110111100000100000000000100000
+10111001011000000000100000000000
+11111011111111111111111111001110
+01111000000000010000000000000001
+00111000001000011011100011111000
+00101000001000010000000000000000
+00110100000000100000000000000001
+01000100001000100000000000001001
+01000100001000000000000000000100
+00110100000000100000000000000010
+01011100001000100000000000001101
+11100000000000000000000000001000
+01111000000000010000000000000001
+00111000001000011000010010111100
+11111000000000000000110111010011
+11100000000000000000000000001000
+01111000000000010000000000000001
+00111000001000011000010011011000
+11100000000000000000000000000011
+01111000000000010000000000000001
+00111000001000011000010011111000
+10111001011000000001000000000000
+11111000000000000000110111001011
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000000
+01000100001000000000000000000101
+11111011111111111101100010100001
+01111000000000100000000000000001
+00111000010000101011000011001100
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101011000011001100
+00101000010000100000000000000000
+01111000000000010000000000000001
+00111000001000011000010100100000
+11111000000000000000110110110111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101000001010000000
+11111000000000000010111000100000
+10111000001000000110000000000000
+01011100001000000000000000000110
+11111000000000000001110100100100
+01001100001011000000000000100110
+01111000000000010000000000000001
+00111000001000011000010101000000
+11100000000000000000000000001110
+00101001011000010000000000000100
+01000100001000000000000000010001
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001010011100
+11111000000000000010111000010011
+10111000001000000110000000000000
+01011100001000000000000000001011
+10111001011000000000100000000000
+11111000000000000001110100111100
+01001100001011000000000000000101
+01111000000000010000000000000001
+00111000001000011000010101100000
+11111000000000000000110110010100
+11100000000000000000000000010100
+01111000000000010000000000000001
+00111000001000011000010101111100
+11100011111111111111111111111100
+00101001011000010000000000000000
+01000100001000000000000000001000
+01111000000000100000000000000001
+00111000010000101000001011101000
+11111000000000000010111000000010
+01011100001000000000000000000100
+11111011111111111111101011010111
+11111000000000000001110110100000
+11100000000000000000000000001000
+00101001011000010000000000000000
+01000100001000000000000000000110
+01111000000000100000000000000001
+00111000010000101000010110000100
+11111000000000000010110111111001
+01011100001000000000000000000010
+11111011111111111111101010010010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01000100001000000000000000100111
+01111000000000100000000000000001
+00111000010000101000000101110000
+11111000000000000010110111101000
+01000100001000000000000000100011
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000000101111100
+11111000000000000010110111100011
+10111000001000000001000000000000
+01011100001000000000000000010011
+00101001011000010000000000000100
+01000100001000100000000000010001
+00110111100000100000000000001100
+11111011111111111111101001100010
+00101011100000100000000000001100
+00110100000000110000111111111110
+00110100010000011111111111111111
+01010000011000010000000000000111
+00101001011000110000000000000100
+01111000000000010000000000000001
+00111000001000011000010110001100
+11111000000000000000110101011110
+00110100000000101111111111101010
+11100000000000000000000000010111
+01111000000000010000000000000001
+00111000001000011001011100000100
+01011000001000100000000000000000
+11100000000000000000000000001010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000001001100000
+11111000000000000010110111001011
+00110100000000101111111111101010
+01011100001000000000000000001101
+01111000000000010000000000000001
+00111000001000011001011100000100
+01011000001000000000000000000000
+11111000000000000000111101110111
+01111000000000010000000000000001
+00111000001000011001011100000100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011000010110100100
+10111000010000000001100000000000
+11111000000000000000110101000111
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+01011100001000000000000000010010
+00110111100000100000000000100000
+00110111100000110000000000011100
+00110111100001000000000000011000
+00110111100000010000000000100100
+11111000000000000001001100101110
+01111000000000010000000000000001
+00111000001000011000010111001000
+11111000000000000000110100110001
+00101011100000100000000000100100
+00101011100000110000000000100000
+00101011100001000000000000011100
+00101011100001010000000000011000
+01111000000000010000000000000001
+00111000001000011000010111100000
+11111000000000000000110100101010
+00110100000011000000000000000000
+11100000000000000000000000111010
+01111000000000100000000000000001
+00111000010000101000011000001100
+11111000000000000010110110011100
+10111000001000000001000000000000
+01011100001000000000000000000111
+00101001011000010000000000000100
+01000100001000100000000000000101
+11111000000000000000000100010001
+10111000001000000101100000000000
+00110100000000100000000000000001
+11100000000000000000000000001100
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000011000100100
+11111000000000000010110110010000
+10111000001000000001000000000000
+01011100001000000000000000001111
+00101001011000010000000000000100
+01000100001000100000000000001101
+11111000000000000000000100000101
+10111000001000000101100000000000
+00110100000000100000000000000000
+00110111100000110000000000010100
+11111000000000000001001100100100
+10111000001000000110000000000000
+01011100001000000000000000100000
+01111000000000010000000000000001
+00111000001000011000011000010000
+10111001011000000001000000000000
+00101011100000110000000000010100
+11100000000000000000000000011010
+00101001011000010000000000000000
+01111000000000100000000000000001
+00111000010000101000011000101000
+11111000000000000010110101111100
+10111000001000000001000000000000
+00110100000011001111111111101010
+01011100001000000000000000010100
+00101001011000010000000000000100
+01000100001000100000000000010010
+00101001011000100000000000001000
+01000100010000000000000000010000
+11111000000000000000000011101110
+10111000001000000110100000000000
+00101001011000010000000000001000
+11111000000000000000000011101011
+10111000001000000001000000000000
+01011011100000010000000000010100
+10111001101000000000100000000000
+11111000000000000001001101010001
+10111000001000000110000000000000
+01011100001000000000000000000110
+00101011100000100000000000010100
+01111000000000010000000000000001
+00111000001000011000011000101100
+10111001101000000001100000000000
+11111000000000000000110011101111
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100111010000000000001000
+10111000011000001001000000000000
+01111000000000110000000000000001
+00111000011000111000111011110100
+10111000010000000110000000000000
+10111000010000000000100000000000
+00101000011000100000000000000000
+11111000000000000010110000111100
+01111000000000110000000000000001
+00111000011000111000111011110100
+00101000011000100000000000000000
+10111000001000000101100000000000
+10111001100000000000100000000000
+11111000000000000010110000100110
+10111000001000001010000000000000
+00110100000000100000000000111100
+10111001011000000000100000000000
+11111000000000000010110000110010
+00110100000000100000111000010000
+10111000001000000111100000000000
+10111001011000000000100000000000
+11111000000000000010110000101110
+00110100000000100000000000111100
+11111000000000000010110000011100
+10111000001000001000000000000000
+00110100000000100000111000010000
+10111001011000000000100000000000
+11111000000000000010110000011000
+10111000001000001000100000000000
+10111010100000000111000000000000
+00110100000010110000011110110010
+11100000000000000000000000001111
+00110100000000100000000101101101
+01011101100000000000000000001011
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111101111
+00110100000000100000000101101110
+01011100001011000000000000000110
+00110100000000100000000110010000
+10111001011000000000100000000000
+11111000000000000010101111101010
+01100100001000100000000000000000
+00110100010000100000000101101101
+11001001110000100111000000000000
+00110101011010110000000000000001
+00100001011011000000000000000011
+00110100000000100000000101101101
+01011101100000000000000000001011
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111100000
+00110100000000100000000101101110
+01011100001011000000000000000110
+00110100000000100000000110010000
+10111001011000000000100000000000
+11111000000000000010101111011011
+01100100001000100000000000000000
+00110100010000100000000101101101
+01010001110000101111111111100101
+00110100000000100000000001100100
+10111001011000000000100000000000
+11111000000000000010101111010101
+00110100000000100000000110010000
+10111000001000001001100000000000
+10111001011000000000100000000000
+11111000000000000010101111010001
+01111000000000100000000000000001
+00110100000011010000000000000000
+01100100001001010000000000000000
+00111000010000101001001010111100
+11100000000000000000000000001101
+00110100000001000000000000000000
+01011101100000000000000000000100
+00110100000001000000000000000001
+01011110011011000000000000000010
+10111000101000000010000000000000
+00001000100001000000000000001100
+10110100100011010010000000000000
+00111100100001000000000000000010
+00110101101011010000000000000001
+10110100010001000010000000000000
+00101000100000010000000000000000
+11001001110000010111000000000000
+00110100000001000000000000000000
+01011101100000000000000000000100
+00110100000001000000000000000001
+01011110011011000000000000000010
+10111000101000000010000000000000
+00001000100001000000000000001100
+10110100100011010010000000000000
+00111100100001000000000000000010
+10110100010001000010000000000000
+00101000100000010000000000000000
+01010001110000011111111111101010
+00110100000000010000000000000001
+00110101110011100000000000000001
+01000110010000010000000000011101
+01111000000011000000000000000001
+00110100000000010000000000000010
+00111001100011001011011010010100
+01000110010000010000000000101000
+00110110100000010000000000000100
+00110100000000100000000000000111
+11111000000000000010101111011011
+00111100001000010000000000000010
+01111000000100110000000000000001
+01111000000000100000000000000001
+00111101101011010000000000000010
+00111000010000101001001100111000
+00111010011100111001001100011100
+10110110011000011001100000000000
+10110100010011010110100000000000
+01111000000100100000000000000001
+00101010011000110000000000000000
+00101001101001000000000000000000
+00111010010100101000011001011100
+10111001100000000000100000000000
+10111010010000000001000000000000
+10111001110000000010100000000000
+10111001011000000011000000000000
+10111010001000000011100000000000
+10111010000000000100000000000000
+01011011100011110000000000000100
+11111000000000000000110001010010
+11100000000000000000000000011010
+01111000000000010000000000000001
+00111101101011010000000000000010
+00111000001000011001001100111000
+10110100001011010110100000000000
+00101001101000110000000000000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101000011001111100
+10111001110000000010000000000000
+10111010001000000010100000000000
+10111010000000000011000000000000
+10111001111000000011100000000000
+00111000001000011011011010010100
+11111000000000000000110001000011
+11100000000000000000000000001011
+01111000000000100000000000000001
+10111001100000000000100000000000
+00111000010000101000011010010100
+10111001011000000001100000000000
+00110101101001000000000000000001
+10111001110000000010100000000000
+10111010001000000011000000000000
+10111010000000000011100000000000
+10111001111000000100000000000000
+11111000000000000000110000111000
+01111000000000010000000000000001
+00111000001000011011011010010100
+00101011100111010000000000001000
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100001000000000000010100
+00100000001001000000000010000000
+01100100100001000000000000000000
+01011011100000110000000000010000
+01111000000000110000000000000001
+10111000001000000100100000000000
+10111000011000000000100000000000
+00110100000000110000000000000010
+01011011100000100000000000001100
+10111000010000000101100000000000
+00111000001000011000011010110100
+11001000011001000001000000000000
+00100001001000110000000001111111
+01011011100001010000000000011000
+01011011100001100000000000011100
+01011011100001110000000000100000
+01011011100010000000000000100100
+11111000000000000000110000100010
+00110111100000100000000000010000
+10111001011000000000100000000000
+11111000000000000000101111111101
+01111000000000010000000000000001
+00111000001000011000011011000000
+11111000000000000000110000011100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011000011011010000
+11111000000000000000110000010011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01000000001001000000000000000000
+00110100000000100000000000101101
+00110100000000110000000000000001
+01011100100000100000000000000011
+00110100001000010000000000000001
+00110100000000111111111111111111
+00110100000000100000000000000000
+00110100000001010000000000001001
+11100000000000000000000000000100
+00001000010000100000000000001010
+00110100001000010000000000000001
+10110100100000100001000000000000
+01000000001001000000000000000000
+00110100100001001111111111010000
+00100000100001100000000011111111
+01010000101001101111111111111010
+10001000010000110000100000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+11111000000000000001000111100100
+00110100001010110000000000000001
+11111000000000000001000111100010
+01011100001010111111111111111111
+10111001100000000000100000000000
+11100000000000000000000000000010
+00110100001000011111111111111111
+01001000001000001111111111111111
+11111000000000000001000111011100
+11001000001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00110100000010110000010000000000
+00110100000011000000010000000000
+11100000000000000000000000000011
+10110101100010110110000000000000
+00111101011010110000000000000001
+10111001100000000000100000000000
+11111011111111111111111111100001
+01000100001000001111111111111100
+00010101100011000000000000000001
+00010101011010110000000000000010
+11100000000000000000000000001001
+10110101011011000110100000000000
+10111001101000000000100000000000
+11111011111111111111111111011010
+01011100001000000000000000000010
+10111001101000000110000000000000
+00000001011000010000000000011111
+10110100001010110101100000000000
+00010101011010110000000000000001
+01011101011000001111111111111000
+01111000000000010000000000000001
+00111000001000011011011011010100
+01011000001011000000000000000000
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011000011100101000
+11111000000000000000101111001010
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011011011010100
+00101000010000110000000000000000
+00110100000001000010011100010000
+00001000011001010000000000001010
+11100000000000000000000000000100
+00110100010000101111111111111111
+01001000010000001111111111111111
+00110100001000011101100011110000
+01010000100000010000000000000011
+10111000101000000001000000000000
+11100011111111111111111111111100
+10001000001000110000100000000000
+00110100000000100000001111101000
+11111000000000000010101100001010
+11100000000000000000000000000010
+00110100001000011111111111111111
+01001000001000001111111111111111
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10111000001000000010100000000000
+01011100100000000000000000000010
+10111000011000000010000000000000
+10111000100000000011000000000000
+01010000011001000000000000000010
+10111000011000000011000000000000
+10110100001001100000100000000000
+11100000000000000000000000001110
+00101100010001100000000000000010
+00101000010001110000000000001100
+10110100111001100011100000000000
+01000000111001100000000000000000
+00110000101001100000000000000000
+00101100010001110000000000000010
+00101100010001100000000000000110
+00110100101001010000000000000001
+00110100111001110000000000000001
+00100000111001111111111111111111
+00001100010001110000000000000010
+01011100110001110000000000000010
+00001100010000000000000000000010
+01011100101000011111111111110011
+01010000100000110000000000001011
+00101100010000010000000000000010
+10110100011000010000100000000000
+11001000001001000010000000000000
+00001100010001000000000000000010
+00101100010000010000000000000110
+11100000000000000000000000000011
+11001000100000010010000000000000
+00001100010001000000000000000010
+00101100010001000000000000000010
+01010100100000011111111111111101
+10111000011000000000100000000000
+11000011101000000000000000000000
+10110100010000110010100000000000
+11100000000000000000000000001101
+00101100001001000000000000000000
+00101000001001100000000000001100
+01000000010001110000000000000000
+00110100010000100000000000000001
+10110100110001000011000000000000
+00110000110001110000000000000000
+00110100100001000000000000000001
+00101100001001100000000000000110
+00100000100001001111111111111111
+00001100001001000000000000000000
+01011100110001000000000000000010
+00001100001000000000000000000000
+01011100010001011111111111110100
+10111000011000000000100000000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111011100011101000
+00111001100011001011011100001000
+10111001011000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000111100000
+00110111100001000000000000100000
+11111000000000000000111111000000
+10111000001000000110100000000000
+00110100000011110000000000000000
+01001100000000010000000001100001
+00101101011000100000000000001100
+00001111100000000000000000111000
+00111000000000011000000100000000
+01011100010000010000000000001110
+10111001100000000001000000000000
+00110100000000110000000000000010
+00110111100000010000000000111000
+11111000000000000010101100010100
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011100011110100
+00111000010000101011011100001010
+00110100000000110000000000000010
+01111000000011000000000000000001
+11111000000000000010101100001101
+00110101101011011111111111111100
+00111001100011001011011100001100
+01111000000000010000000000000001
+00101111100000100000000000111000
+00111000001000011001011100000100
+00101000001000010000000000000000
+00100000010000100000111111111111
+00110100000011110000000000000000
+01011100010000010000000001001001
+01000001100000100000000000000000
+00110100000000010000000001000101
+00110100000000110000000000000000
+01011100010000010000000000001000
+01000001100000100000000000001001
+00110100000000010000000000010001
+01011100010000010000000000000101
+01000001100000110000000000010110
+01000001100000010000000000010111
+00111100011000110000000000001000
+10111000011000010001100000000000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011100011101000
+00111000010000101011011011011000
+00101100001001110000000000001100
+00110100010001100000000000110000
+00110100000001000000000000000000
+00110100000010110000000000000000
+11100000000000000000000000001100
+00101000010000010000000000000000
+01000100001000000000000000001001
+00101100001001010000000000001100
+01011100101001110000000000000111
+00101100001001010000000000001110
+01011100011000000000000000000011
+01000100101000110000000000111000
+11100000000000000000000000000011
+01011100101000110000000000000010
+10111000001000000010000000000000
+00110100010000100000000000000100
+01011100010001101111111111110101
+01000100100000000000000000000010
+10111000100000000101100000000000
+00110100000011110000000000000001
+01000101011000000000000000100101
+00101101011100000000000000101000
+00110101101000010000000000101000
+01001000001100000000000000100010
+00110101011011100000000000100100
+00110111100000100000000000111010
+00110100000000110000000000000010
+10111001110000000000100000000000
+00001111100011010000000000111010
+11111011111111111111111110010111
+11001010000000010110100000000000
+00100001101011011111111111111111
+00001101011011010000000000101000
+00110111100000100000000000100000
+00110100000000110000000000011000
+10111001110000000000100000000000
+11111011111111111111111110010000
+11001001101000010110100000000000
+00100001101011011111111111111111
+01111000000000100000000000000001
+00001101011011010000000000101000
+00111000010000101011100011101000
+00110100000000110000000000001110
+10111001110000000000100000000000
+11111011111111111111111110001000
+11001001101000010110100000000000
+00101111100000110000000000111010
+00100001101011011111111111111111
+00001101011011010000000000101000
+10111001110000000000100000000000
+10111001100000000001000000000000
+11111011111111111111111110000001
+11001001101000010000100000000000
+00001101011000010000000000101000
+00101101011000010000000000101100
+00110100001000010000000000000001
+00001101011000010000000000101100
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+10111000001000000101100000000000
+11100011111111111111111111001011
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+11111000000000000000110000110101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011011011011000
+00110100010000110000000000110000
+11100000000000000000000000000100
+00101000010001000000000000000000
+00110100010000100000000000000100
+01011000100000010000000000011100
+01011100010000111111111111111101
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000001010000000000000001
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+00111000101001011011011011011000
+00110100000000010000000000000000
+00110100000000100000000000001100
+00101000101000110000000000000000
+00110100101001010000000000000100
+01011100011000000000000000001001
+00111100001000100000000000000010
+01111000000001010000000000000001
+00111000101001011011011011011000
+10110100101000100010100000000000
+01011000101010110000000000000000
+00110100000000100000000000001100
+01011100001000100000000000001010
+11100000000000000000000000000011
+00110100001000010000000000000001
+01011100001000101111111111110100
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001001101101000
+00111000001000011000011101000000
+11111000000000000000101011000111
+11100000000000000000000000100000
+01111000000000100000000000000001
+00110111100000010000000000011000
+00111000010000101000011101011100
+11111011111111111111010111000101
+01001000000000010000000000011011
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010101011110011
+01000101100000000000000000000101
+10111001011000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000000010010
+11111000000000000010101001110000
+00001101011000000000000000001110
+01011101110000000000000000000100
+00110100000000010000100000000000
+00001101011000010000000000001100
+00001101011011010000000000001110
+00110101011000010000000000010010
+11111000000000000000101111110010
+00101011100000010000000011010000
+00001101011000000000000000100110
+00001101011000000000000000100100
+01011001011000010000000000011100
+00101011100000010000000010111000
+00001101011000000000000000101100
+01011001011000010000000000100000
+00101101011000010000000000101010
+00001101011000010000000000101000
+11100000000000000000000000000010
+00110100000010110000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011011011011000
+00110100010000110000000000110000
+11100000000000000000000000000101
+00101000010001000000000000000000
+01011100100000010000000000000010
+01011000010000000000000000000000
+00110100010000100000000000000100
+01011100010000111111111111111100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011001011000100000000000010000
+10111000010000000111000000000000
+10111000100000000111100000000000
+10111000101000000110000000000000
+00101000001011010000000000001000
+01000100011000000000000000000101
+10111000101000000000100000000000
+00110100000000101111110000011000
+11111000000000000010100110001100
+10110100001011010110100000000000
+11001001110011110010000000000000
+10111000100000000001100000000000
+01001100100000000000000000000010
+10110100100011000001100000000000
+00000001100000010000000000011111
+10110100001011000000100000000000
+00010100001000010000000000000001
+10110100001001000010000000000000
+01001100100000000000000000000010
+10110100100011000010000000000000
+01001001100001000000000000000010
+11001000100011000010000000000000
+00001001100000100000000000000011
+00010100010001010000000000011111
+00000000101001010000000000011110
+10110100101000100001000000000000
+00010100010000100000000000000010
+01001000011000100000000000000110
+00010101100000100000000000011111
+00000000010000100000000000011110
+10110100010011000001000000000000
+00010100010000100000000000000010
+01001100011000100000000000001101
+10110100100000010010000000000000
+01011001011011010000000000001000
+01011001011001000000000000001100
+01001001100001000000000000001010
+11001000100011000010000000000000
+01011001011001000000000000001100
+10111001100000000000100000000000
+00110100000000100000001111101000
+11111000000000000010100101101011
+10110101101000010000100000000000
+01011001011000010000000000001000
+11100000000000000000000000000010
+01011001011000110000000000001100
+01111000000000110000000000000001
+00111000011000111000111011101000
+00101001011000010000000000001000
+00101000011000100000000000000000
+01001100010000010000000000001101
+01111000000000110000000000000001
+00111000011000111000111011011100
+00101000011000100000000000000000
+00101001011000110000000000000000
+10110100001000100000100000000000
+00101001011000100000000000000100
+01011001011000010000000000001000
+00110100010000010000000000000001
+11110100010000010001000000000000
+01011001011000010000000000000100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101100001000100000000000101100
+10111000101000000101100000000000
+10111000001000000110000000000000
+10111000011000001001000000000000
+10111000100000000111100000000000
+00110100000001010000000000000000
+01000100010000000000000001010110
+00110100001011100000000000100100
+00101100001100010000000000101000
+00110100010000101111111111111111
+00001100001000100000000000101100
+00110100000000110000000000000010
+10111001110000000001000000000000
+00110100000001000000000000000000
+00110111100000010000000001001110
+11111011111111111111111001111110
+10110110001000011000100000000000
+00100010001100011111111111111111
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000011000
+00110100000001000000000000000000
+00110111100000010000000000101000
+11111011111111111111111001110110
+10110110001000011000100000000000
+00100010001100011111111111111111
+00110111100100000000000001000000
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000001110
+00110100000001000000000000000000
+10111010000000000000100000000000
+11111011111111111111111001101101
+10110110001000011000100000000000
+00101111100000110000000001001110
+00100010001100011111111111111111
+10111001110000000001000000000000
+10111001111000000010000000000000
+00001101100100010000000000101000
+10111010010000000000100000000000
+11111011111111111111111001100101
+10110110001000010000100000000000
+00001101100000010000000000101000
+00101111100000010000000001001100
+01111000000000110000000000000001
+00111000011000111001011100000100
+00001101101000010000000000001100
+00101000011000010000000000000000
+00110111100000100000000001000110
+00110100000000110000000000000110
+00001101101000010000000000010000
+10111001101000000000100000000000
+11111000000000000010100110111100
+00110101101000010000000000000110
+10111010000000000001000000000000
+00110100000000110000000000000110
+11111000000000000010100110111000
+01000101011000000000000000011111
+00101011100000010000000000111000
+01011001011000010000000000010100
+00101011100000010000000000101100
+01011001011000010000000000011000
+00110100000000010000000000000000
+11111000000000000010011000001100
+10111000001000000110100000000000
+00110101011000100000000000010000
+00110100000000110000000000000000
+00110100000000010000000000000000
+11111000000000000010010110100100
+00101011100000010000000000110000
+01000011100000100000000000101000
+00101011100000110000000000101100
+01011001011000010000000000000000
+00101011100000010000000000110100
+01111100010000100000000000000000
+00101001100001000000000000011100
+01011001011000010000000000000100
+00101011100000010000000000111000
+01011001011000000000000000001100
+00110100000001010001111101000000
+01011001011000010000000000001000
+00100001101000010000000011111111
+01100100001000010000000000000000
+10100000001000100000100000000000
+00101001011000100000000000010000
+01011001011000010000000000011100
+10111001011000000000100000000000
+11111011111111111111111101001111
+00101111100000010000000001001110
+10111001111000000010100000000000
+01010000001011110000000000000010
+10111000001000000010100000000000
+10111000101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000001001100
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000011000000111000000000000
+00110111100000010000000000110000
+00110100000000110000000000000110
+10111000101000000101100000000000
+10111000100000000110100000000000
+11111000000000000010100101111100
+00110111100000010000000000110110
+00110101100000100000000000010010
+00110100000000110000000000000110
+11111000000000000010100101111000
+01111000000000010000000000000001
+00111000001000011001011100000100
+00101000001001010000000000000000
+00101101100000010000000000001100
+01000100101000000000000000001001
+00110100000000101000000100000000
+00001111100000100000000000111100
+00101101100000100000000000011000
+00001111100000010000000001000000
+00111100010000100000000000001101
+10111000010001010010100000000000
+00001111100001010000000000111110
+11100000000000000000000000000010
+00001111100000010000000000111100
+00110111100000010000000000110000
+10111001110000000001000000000000
+10111001101000000001100000000000
+00110111100001000000000000011000
+11111000000000000000111011000000
+01000101011000000000000000001010
+00101011100000100000000000100000
+01011001011000000000000000001100
+01011001011000100000000000000000
+00101011100000100000000000100100
+01011001011000100000000000000100
+00101011100000100000000000101000
+01011001011000100000000000001000
+01000011100000100000000000011000
+01011001011000100000000000011100
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000000000000
+00110100000001000000000001000100
+00111000001000011010000000010000
+11111011111111111111111010101100
+01111000000000100000000000000001
+00111000010000101011100011111100
+01011000010000010000000000000000
+01111000000000010000000000000001
+00110100000001000000000000100101
+00110100000000100000000000000000
+00110100000000110000000000000000
+00111000001000011010000001000100
+11111011111111111111111010100011
+01111000000000100000000000000001
+00110111100010110000000000001100
+00111000010000101011100100001100
+01011000010000010000000000000000
+00110100000000110000000000010010
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000010100110110111
+00110100000000010000100000000000
+00001111100000010000000000011000
+01111000000000010000000000000001
+10111001011000000001000000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+00111000001000011010000001111000
+11111011111111111111111010010011
+01111000000000100000000000000001
+00111000010000101011100100001000
+01011000010000010000000000000000
+11111011111111111111111111011010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110100000000110000000000000000
+00110100000001000000000000000000
+11100000000000000000000000000101
+00101100001001010000000000000000
+00110100100001000000000000000001
+00110100001000010000000000000010
+10110100011001010001100000000000
+01001000010001001111111111111100
+00000000011000010000000000010000
+00100000011000111111111111111111
+10110100011000010001100000000000
+00000000011000010000000000010000
+10110100001000110001100000000000
+10100100011000000000100000000000
+00100000001000011111111111111111
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011100100010000
+00110100000000110000000000000100
+11111000000000000010100100010001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000010110000000000000001
+00111001011010111011100100010000
+00111000011000111100001010111000
+10111000001000000001000000000000
+00101000011011000000000000000000
+10111001011000000000100000000000
+00110100000000110000000000000100
+11111000000000000010100100000001
+01000001011000100000000000000000
+01000001011000010000000000000001
+00110101100011000000000000011000
+00111100010000100000000000011000
+00111100001000010000000000010000
+10111000010000010000100000000000
+01000001011000100000000000000011
+10111000001000100000100000000000
+01000001011000100000000000000010
+00111100010000100000000000001000
+10111000001000100000100000000000
+11100000000000000000000000000010
+01011001100000010000000000000000
+00101001100000100000000000000000
+01011100010000011111111111111110
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011011100011111000
+01011000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011100100000100
+01011000001000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00110100000000011111111111111111
+01000100010000000000000000000110
+00110100010000010000000000010000
+01111000000000100000000000000001
+00111000010000101011100100010000
+00110100000000110000000000000100
+11111000000000000010100010111011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111000110000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010100100
+00101000001000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000000110
+01111000000000010000000000000001
+00111000001000011011100011111000
+00101000001000110000000000000000
+01011100011000100000000000000010
+01011000001000000000000000000000
+01111000000000100000000000000001
+00111000010000101011100011111100
+00101000010000010000000000000000
+00110111100011000000000000100100
+00110111100000100000000110110100
+00110100000001000000000110010000
+10111001100000000001100000000000
+00110100000001010000000000000000
+11111011111111111111111011000010
+01111000000001000000000000000001
+00111000100001001011100011111000
+10111000001000000001000000000000
+00101000100000010000000000000000
+00110100000010110000000000000000
+01011100001000000000000000100011
+01001101011000100000000000000100
+10111001100000000000100000000000
+11111000000000000000001000110101
+10111000001000000101100000000000
+11111000000000000000111011100110
+01111000000000100000000000000001
+00111000010000101011100100000000
+00101000010000110000000000000000
+01011100011000000000000000000011
+01011000010000010000000000000000
+11100000000000000000000000000101
+00110100011000110000001111101000
+11001000001000110000100000000000
+01001000000000010000000000010101
+01011000010000110000000000000000
+01111000000000010000000000000001
+00111000001000011011100100000100
+00101000001000110000000000000000
+00110111100010110000000000100100
+00110111100011000000000110110100
+00110100011000110000000000000001
+01011000001000110000000000000000
+10111001011000000001000000000000
+10111001100000000000100000000000
+11111000000000000000000110111011
+01111000000001010000000000000001
+00111000101001011011100011111100
+10111000001000000010000000000000
+00101000101000010000000000000000
+10111001011000000001100000000000
+10111001100000000001000000000000
+00110100000001010000000000000000
+11111011111111111111111100001110
+00110100000010110000000000000001
+01111000000011010000000000000001
+00111001101011011011100100001000
+00101001101000010000000000000000
+00110111100011100000000110110100
+00110111100011000000000000100100
+10111001110000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000010000000
+00110100000001010000000000000000
+11111011111111111111111010010000
+10111000001000001000100000000000
+00110100000011110000000000000000
+01001100000000010000000000010100
+01111000000000110000000000000001
+00111000011000111011100011111000
+00101000011000010000000000000000
+01000100001000000000000000010000
+10111001100000000000100000000000
+11111011111111111111111110011101
+10111000001000001000000000000000
+01011100001000000000000000001100
+10111001100000000000100000000000
+10111010001000000001000000000000
+11111000000000000000000010111101
+10111000001000000010000000000000
+00110100000011110000000000000001
+01001110000000010000000000000110
+00101001101000010000000000000000
+10111001110000000001000000000000
+10111001100000000001100000000000
+00110100000001010000000000000000
+11111011111111111111111011101101
+01111000000011010000000000000001
+00111001101011011011100100001100
+00101001101000010000000000000000
+00110111100100000000000110110100
+00110111100011000000000000100100
+10111010000000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000000100000
+00110100000001010000000000000000
+11111011111111111111111001110000
+00110100000011100000000000000000
+01001100000000010000000000011100
+10111001100000000000100000000000
+11111011111111111111111110000010
+01011100001000000000000000011001
+00110111100000010000000111001000
+00110100000000100000000000000000
+11111000000000000001001110011100
+01111000000000100000000000000001
+00111000010000101000111011111000
+00101000010000010000000000000000
+00101011100000100000000111001100
+00110100000000110000000000000100
+00110100000011100000000000000001
+10110100010000010000100000000000
+01011011100000010000000111010000
+00110111100000100000000111010000
+00110111100000010000000001000000
+11111000000000000010100001011000
+10111001100000000000100000000000
+00110100000000100000000000100000
+00110100000000110000000000000000
+11111000000000000000000011110101
+00101001101000010000000000000000
+10111010000000000001000000000000
+10111001100000000001100000000000
+00110100000001000000000000100000
+00110100000001010000000000000000
+11111011111111111111111011000110
+11111011111111111111111100100101
+10110101111010110101100000000000
+10110101011000010000100000000000
+10110100001011100111000000000000
+01111101110000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000111010000
+11000011101000000000000000000000
+00110111100111001111111100110100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011100011111000
+00101000001000010000000000000000
+00110100000010110000000000000000
+01000100001000000000000001000111
+01111000000011000000000000000001
+00111001100011001011101111110100
+00101001100000010000000000000000
+00110111100011110000000010101100
+00110111100011100000000000101100
+10111001111000000001000000000000
+10111001110000000001100000000000
+00110100000001000000000010000000
+00110100000001010000000000000000
+11111011111111111111111000101010
+01001100000000010000000000111100
+00110100000000100000000000011011
+00110100000010110000000000000001
+01001100010000010000000000111001
+00110111100011010000000011001000
+10111001101000000000100000000000
+11111011111111111111111100001000
+01000011100000010000000000110010
+01011100001000000000000000110100
+01000011100000010000000000110011
+01011100001010110000000000110010
+00110111100100000000000001000100
+10111010000000000000100000000000
+10111001101000000001000000000000
+00110100000000110000000000000100
+11111000000000000010011111110100
+01011100001000000000000000101100
+00110111100100010000000011000000
+00110111100100110000000000110100
+10111010011000000001000000000000
+00110100000000110000000000000110
+10111010001000000000100000000000
+11111000000000000010100000001110
+00110111100100100000000000111010
+10111010010000000001000000000000
+00110100000000110000000000000100
+00110111100000010000000011001100
+11111000000000000010100000001001
+00110100000000010000000000001000
+00110011100000010000000000101110
+00110100000000010000000000000110
+00110011100000010000000000110000
+00110100000000010000000000000100
+00110011100000010000000000110001
+00110100000000010000000000000010
+00110011100000010000000000110011
+10111010011000000000100000000000
+00110011100000000000000000101100
+00110011100010110000000000101101
+00110011100000000000000000101111
+00110011100000000000000000110010
+11111000000000000000100110000100
+10111001101000000001000000000000
+00110100000000110000000000000100
+10111010010000000000100000000000
+11111000000000000010011111110111
+10111010001000000001000000000000
+00110100000000110000000000000110
+00110111100000010000000000111110
+11111000000000000010011111110011
+00110111100000100000000011001100
+00110100000000110000000000000100
+10111010000000000000100000000000
+11111000000000000010011111101111
+00101001100000010000000000000000
+10111001111000000001000000000000
+10111001110000000001100000000000
+00110100000001000000000000011100
+00110100000001010000000000000000
+11111011111111111111111001100001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000011001100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010100001010010
+10111001011000000000100000000000
+00110100000000100000000011111111
+00110100000000110000000000000110
+11111000000000000010100001001110
+00110100000000010000100000000110
+00001111100000010000000000011000
+01111000000000010000000000000001
+10111001011000000001000000000000
+00110100000000110000000000000001
+00110100000001000000000000000000
+00111000001000011010000010101100
+11111011111111111111110100101010
+01111000000000100000000000000001
+00111000010000101011101111110100
+01011000010000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110111100011010000000000011100
+10111000001000000101100000000000
+10111001101000000000100000000000
+11111011111111111111111010100000
+01000001011000100000000000000000
+00110100000000010000000001000101
+00110100000011000000000000000000
+01011100010000010000000001001010
+00110101011011100000000000010000
+10111001101000000001000000000000
+10111001110000000000100000000000
+00110100000000110000000000000100
+11111000000000000010011110001100
+10111000001000000001000000000000
+01011100001000000000000001000011
+01000001011001000000000000001001
+00110100000000110000000000000001
+01000001011011010000000000000010
+01000001011000010000000000000011
+10111000010000000110000000000000
+01011100100000110000000000111101
+01000001011000110000000000010100
+00110100000000100000000000001000
+01011100011000100000000000111010
+00111101101011010000000000001000
+10111001101000010110100000000000
+00110101101011011111111111101000
+00110100000000010000000001000000
+01001100001011010000000000000010
+00110100000011010000000001000000
+00110101011011110000000000001100
+10111001111000000001000000000000
+00110100000000110000000000000100
+00110111100000010000000000100000
+11111000000000000010011110010111
+00110101101011000000000000011000
+00110100000000010000000001000101
+00110001011000010000000000000000
+00010101100000010000000000001000
+00110111100000100000000000011100
+00110001011000010000000000000010
+00110100000000010000000000111111
+00110001011000010000000000001000
+00110100000000010000000000000001
+00110001011000010000000000001001
+00110100000000110000000000000100
+00110001011000000000000000000001
+00110001011011000000000000000011
+00110001011000000000000000000100
+00110001011000000000000000000101
+00110001011000000000000000000110
+00110001011000000000000000000111
+00110001011000000000000000001010
+00110001011000000000000000001011
+10111001111000000000100000000000
+11111000000000000010011110000010
+00110100000000110000000000000100
+00110111100000100000000000100000
+10111001110000000000100000000000
+11111000000000000010011101111110
+00110101101011010000000000000101
+00000001101000010000000000011111
+00110001011000000000000000010100
+10110100001011010110100000000000
+00010101101000100000000000000001
+00110001011000000000000000010101
+00110001011000000000000000010110
+00110001011000000000000000010111
+00110101011000010000000000010100
+11111011111111111111111001001110
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000010111
+00110001011000100000000000010110
+10111001011000000000100000000000
+00110100000000100000000000001010
+11111011111111111111111001000111
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000001011
+00110001011000100000000000001010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+10111000011000000110000000000000
+01011100011000000000000000010010
+00110101011000100000000000001100
+00110100000000110000000000000100
+00110111100000010000000000110000
+11111000000000000010011101001101
+00110111100011000000000000101100
+00110101011000100000000000010000
+00110100000000110000000000000100
+10111001100000000000100000000000
+11111000000000000010011101001000
+00110101011000100000000000010100
+00110100000000110000000000000010
+00110111100000010000000000110110
+11111000000000000010011101000100
+00110111100000010000000000110100
+00110101011000100000000000010110
+00110100000000110000000000000010
+11111000000000000010011101000000
+00110101011100010000000000001000
+10111001100000000001000000000000
+00110100000000110000000000000100
+10111010001000000000100000000000
+11111000000000000010011100111011
+00110101101011101111111111101100
+00110101011100000000000000001100
+00110101100011110000000000000100
+10111001111000000001000000000000
+00110100000000110000000000000100
+00010101110100100000000000001000
+10111010000000000000100000000000
+11111000000000000010011100110011
+00100010010100100000000011111111
+00100001110011100000000011111111
+00110100000000010000000000010001
+00110001011000010000000000010001
+00110001011100100000000000010010
+00110001011011100000000000010011
+00110101100000100000000000001000
+00110100000000110000000000000010
+00110001011000000000000000010000
+00110101011000010000000000010100
+11111000000000000010011100101000
+00110100000000110000000000000010
+00110101100000100000000000001010
+00110101011000010000000000010110
+11111000000000000010011100100100
+00110101101000101111111111111001
+00000000010000010000000000011111
+00110001011011100000000000011001
+00110001011100100000000000011000
+00110001011000000000000000011010
+00110001011000000000000000011011
+10110101011011010111000000000000
+10110100001000100001000000000000
+01000001110100100000000000000000
+00010100010000100000000000000001
+00110001110000000000000000000000
+10111010001000000000100000000000
+11111011111111111111110111110001
+00100000001000111111111111111111
+00110001110100100000000000000000
+00110101011100110000000000010000
+01011100011000000000000000000010
+00111000000000111111111111111111
+00000000011000010000000000001000
+00110001011000110000000000011011
+00110001011000010000000000011010
+00110100000000010000000001000101
+00110001011000010000000000000000
+00010101101000010000000000001000
+10111001100000000001000000000000
+00110001011000010000000000000010
+00110100000000010000000000111111
+00110001011000010000000000001000
+00110100000000010000000000010001
+00110001011000010000000000001001
+00110001011000000000000000000001
+00110001011011010000000000000011
+00110001011000000000000000000100
+00110001011000000000000000000101
+00110001011000000000000000000110
+00110001011000000000000000000111
+00110001011000000000000000001010
+00110001011000000000000000001011
+10111010000000000000100000000000
+00110100000000110000000000000100
+11111000000000000010011011111011
+10111001111000000001000000000000
+00110100000000110000000000000100
+10111010011000000000100000000000
+11111000000000000010011011110111
+10111001011000000000100000000000
+00110100000000100000000000001010
+11111011111111111111110111001110
+00100000001000011111111111111111
+00000000001000100000000000001000
+00110001011000010000000000001011
+00110001011000100000000000001010
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110100000000000
+00110100000000100000000000000001
+00110100000000010000000000000110
+00110001011000100000000000011100
+00110001011000100000000000011101
+00110001011000010000000000011110
+00110001011000000000000000011111
+00110101011000010000000000100000
+10111000011000000110000000000000
+11111000000000000000100001011101
+01000001011000100000000000100100
+01000001011000010000000000100000
+00110100000000110000000000000010
+10011000010000010000100000000000
+00110001011000010000000000100000
+01000001011000100000000000100101
+01000001011000010000000000100001
+00110001011011000000000000100101
+10011000010000010000100000000000
+00110001011000010000000000100001
+01000001011000010000000000100010
+00010101100000100000000000001000
+10011000010000010000100000000000
+00110001011000010000000000100010
+01000001011000010000000000100011
+00110001011000100000000000100100
+00110100000000100000000000000000
+10011000001011000000100000000000
+00110001011000010000000000100011
+00110101011000010000000000100110
+11111000000000000010011100111101
+00110101011000010000000000101000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100111001
+00110101011000010000000000101100
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100110101
+00110101011000010000000000110000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100110001
+00110101011000010000000000110100
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100101101
+00110101011011000000000000111000
+00110100000000100000000000000000
+00110100000000110000000000010000
+10111001100000000000100000000000
+11111000000000000010011100101000
+10111001100000000000100000000000
+11111000000000000000100000110001
+00110101011000010000000001001000
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000010011100100010
+00110101011000010000000010001000
+00110100000000100000000000000000
+00110100000000110000000010000000
+11111000000000000010011100011110
+00110101011000010000000100001000
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000010011100011010
+00110111100011000000000000010100
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000000100
+11111000000000000010011100010101
+00110111100000010000000000011000
+00110100000000100000000011111111
+00110100000000110000000000000100
+11111000000000000010011100010001
+00110100000000010000000001000100
+00001111100000010000000000011100
+00110100000000010000000001000011
+00001111100000010000000000011110
+10111001100000000001100000000000
+10111001011000000000100000000000
+00110100000000100000000101001000
+11111011111111111111111100101100
+10111001101000000000100000000000
+00110100000000100000000011111111
+00110100000000110000000000000110
+11111000000000000010011100000101
+00110100000000010000000101001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110111100011010000000000011000
+10111000001000000101100000000000
+10111001101000000000100000000000
+10111000010000000111000000000000
+11111000000000000000011111111110
+00110100000000010000000101001000
+00110100000011000000000000000000
+01011101110000010000000000011011
+01000001011000010000000000010100
+01011100001000000000000000011001
+01000001011000100000000000010101
+00110100000000010000000001000011
+01011100010000010000000000010110
+00110101011000010000000000111000
+10111001101000000001000000000000
+00110100000000110000000000000110
+11111000000000000010011001001000
+01011100001000000000000000010001
+01111000000000010000000000000001
+00110100000000100000000000000001
+00111000001000011011100011111000
+01011000001000100000000000000000
+00110101011000010000000000101100
+11111011111111111111110101010101
+00110111100000010000000000100000
+11111011111111111111110101001010
+01000011100000100000000000100000
+01000011100000110000000000100001
+01000011100001000000000000100010
+01000011100001010000000000100011
+01111000000000010000000000000001
+00111000001000011000011101110100
+11111000000000000000011010100001
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00100000100001000000000011111111
+00100000100100000000000000001000
+00100000010000100000000011111111
+01111110000100000000000000000000
+10111000001000000111100000000000
+00110100010010110000000000000001
+00100000100011010000000000000100
+10111000011000000110000000000000
+01000000001000010000000000000000
+10110101111010110101100000000000
+01111101101011010000000000000000
+01011110000000000000000000000111
+11001000001000100001000000000000
+00110100000000010000000000000001
+11101100001000100000100000000000
+10111001101000000111000000000000
+10100001101000010000100000000000
+01000100001100000000000000000111
+00110100000000010000000000000010
+00110001011000010000000000000000
+00110100000000010000000000000001
+00110001011000010000000000000001
+00110100000011100000000000000000
+00110100000000100000000000000010
+01100101101000010000000000000000
+01111100010000110000000000000010
+10100000011000010001100000000000
+00110100000000010000000000000000
+01011100011000000000000000110101
+01101000010000100000000000000010
+10100000010011010001000000000000
+01000100010000110000000000000010
+00110100000011100000000000000001
+00110100000000010000000000000010
+00110011100000010000000000110000
+01000001100000010000000000010001
+01011011100010110000000000100000
+00110011100000010000000000110001
+00101001100000010000000000001100
+01011011100000010000000000101100
+01000101110000000000000000000100
+01000001011000010000000000000001
+00110100001000010000000000000001
+00110001011000010000000000000001
+00100000100001000000000000000001
+01000100100000000000000000001001
+00101001100000110000000000001000
+00110100000000011111111111111100
+01000100011000000000000000100001
+00110101011000010000000000000010
+00110111100000100000000000100000
+11011000011000000000000000000000
+01001000000000010000000000011101
+11100000000000000000000000000101
+00101001100000110000000000000100
+00110101011000010000000000000010
+00110111100000100000000000100000
+11011000011000000000000000000000
+01100100001000100000000000000000
+10100000010011100111000000000000
+01000101110000000000000000001100
+01000001011000010000000000000000
+00110111100000100000000000100000
+00110100001000010000000000000001
+00110001011000010000000000000000
+00110100000000010000000000000001
+00110001011000010000000000000001
+00101001100000110000000000000100
+00110101011000010000000000000010
+11011000011000000000000000000000
+01011100001000000000000000000011
+11100000000000000000000000001010
+01011100010011100000000000001000
+01001000000000010000000000001000
+10111010000011010110100000000000
+00110100001000010000000000000010
+01000101101000000000000000000101
+00110100000000100000000000000010
+00110001111000100000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100010110000000000000100
+01111000000001000000000000000001
+00111000100001001001001110100000
+00110100010000101111111111111111
+00110100100010100000000000011100
+00110100000000110000000000000000
+00110100000010010000000011111101
+00110100000010000000000011111001
+00110100000001110000000011111111
+00110100000001101111111110100010
+11100000000000000000000000010001
+01000000100001010000000000000000
+01011100101010010000000000000100
+10110100001000110010100000000000
+00110000101001100000000000000000
+11100000000000000000000000001010
+01011100101010000000000000000101
+10110100001000110010100000000000
+01000000101001010000000000000000
+10110100011001010001100000000000
+11100000000000000000000000000101
+01011100101001110000000000000100
+10110100001000110010100000000000
+11001000010000110101100000000000
+00110000101010110000000000000000
+00110100011000110000000000000001
+00110100100001000000000000000001
+01011100100010101111111111110000
+00101011100010110000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000000001000110000000000000110
+00110100000001000000000000100000
+01001100100000110000000000000010
+00110100000000110000000000100000
+00100000011010110000000011111111
+10110100001010110001100000000000
+00110100000001001111111110100010
+00110000011001000000000000000111
+01000000011000110000000000001010
+00110100000001000000000000000100
+01001100100000110000000000000010
+00110100000000110000000000000100
+10110101011000110101100000000000
+00100001011010110000000011111111
+10110100001010110001100000000000
+00110000011000100000000000001101
+00110100000000100000000000000001
+00110000011000100000000000010000
+01000000011000100000000000010110
+00110100000000110000000000101000
+01001100011000100000000000000010
+00110100000000100000000000101000
+10110101011000100001000000000000
+00100000010000100000000011111111
+10110100001000100001100000000000
+00110100010000100000000000011001
+00110100000001000000000000000101
+00100000010010110000000011111111
+00110000011001000000000000010111
+00110000011000000000000000011000
+10111001011000000001000000000000
+11111011111111111111111110111110
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111011111100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011110001111000
+00101000001000010000000000000000
+00110111100010110000000000101100
+00110111100000100000000011110100
+10111001011000000001100000000000
+00110100000001000000000011001000
+00110100000001010000000000000000
+11111011111111111111101110010111
+00110100000000100000000000111000
+00110100000011000000000000000000
+01010000010000010000000010100110
+10111001011000000000100000000000
+11111011111111111111110010101000
+01011100001000000000000010100011
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011100001010011100
+00111000010000101001001110100000
+01111000000000110000000000000001
+01000000001001010000000000000000
+00110100010011100000000000011100
+10111001011000000000100000000000
+00110100000001000000000000000000
+00110100000011010000000000000110
+00111000011000111001001110000100
+00110100000010110000000010100000
+00110100000010100000000010100001
+00110100000010010000000010100011
+00110100000010000000000000000001
+11100000000000000000000000101000
+01000000010001100000000000000000
+00110100110001110000000000000111
+00100000111001110000000011111111
+01010100111011010000000000010100
+00111100111001110000000000000010
+10110100011001110011100000000000
+00101000111001100000000000000000
+11000000110000000000000000000000
+10110100100000010011000000000000
+01000000110001100000000000011100
+10110100100001100010000000000000
+11100000000000000000000000011010
+10110100100000010010100000000000
+01000000101001010000000000011100
+01010001000001010000000000010111
+11100000000000000000000000001011
+10110100100000010011000000000000
+01000000110001100000000000011100
+01000100110010110000000000001110
+01000100110010100000000000001111
+01000100110010010000000000010000
+01011101100000000000000000010000
+11100000000000000000000000000100
+10110100100000010011100000000000
+01000000111001110000000000011100
+01000100111001100000000000001100
+01111000000000010000000000000001
+00111000001000011100001010011100
+00110000001001010000000000000000
+00110100000000100000000000000101
+00110111100000010000000001001000
+11100000000000000000000001011011
+00110100000011000000000000000010
+11100000000000000000000000000100
+00110100000011000000000000000100
+11100000000000000000000000000010
+00110100000011000000000000000001
+00110100100001000000000000000001
+00110100010000100000000000000001
+01011100010011101111111111011001
+01111000000000010000000000000001
+00111000001000011100001010011100
+00110000001001010000000000000000
+00110111100000010000000001001000
+10110100001001000110100000000000
+01111000000010110000000000000001
+00110100100001000000000000000001
+10110100001001000111100000000000
+00111001011010111010000011100000
+00100001100100110000000000000011
+00100001100100000000000000000100
+00111001100100100000000000001000
+11100000000000000000000000111111
+01000001101100010000000000000000
+01000110011000000000000000000010
+01010100001100010000000000111011
+00100010001000100000000011111111
+01010000001000100000000000000010
+10111000001000001000100000000000
+00101001011000010000000000000000
+00100010001100010000000011111111
+10111001111000000001000000000000
+10111010001000000001100000000000
+11111000000000000010010100011011
+00111100001001010000000000011000
+10111001100000000111000000000000
+00010100101001010000000000011000
+01000110000000000000000000001010
+01001000101000000000000000000111
+01000001011000110000000000001100
+01000001101000010000000000000000
+01100100101000100000000000000000
+11110000011000010000100000000000
+10100000010000010000100000000000
+01000100001000000000000000000011
+01000001011100010000000000001100
+10111010010000000111000000000000
+01000001011000110000000000001100
+01100100101000010000000000000000
+11100100011100010001000000000000
+10100000010000010001000000000000
+01011100010000000000000000000011
+00100001110000010000000000001000
+01000100001000100000000000011110
+01011110000000000000000000000011
+00100001110000010000000000001000
+01000100001100000000000000000100
+00101001011000100000000000000000
+10111001111000000000100000000000
+11111000000000000010010100100010
+00101001011001010000000000000100
+00101001011000110000000000001000
+10111001101000000000100000000000
+10111010001000000001000000000000
+10111001110000000010000000000000
+11011000101000000000000000000000
+01001100000000010000000000001100
+01011110000000000000000000000011
+00100001110011100000000000001000
+01000101110100000000000000000101
+01000001101000110000000000000000
+01000001011000100000000000001100
+10110100011000100001000000000000
+00110001101000100000000000000000
+01000001011001000000000000001100
+10110101111001000111100000000000
+10110101111000010111100000000000
+11100000000000000000000000001010
+01000100001000000000000000000110
+11001000000000010001000000000000
+00100000010000100000000011111111
+00110111100000010000000001001000
+11100000000000000000000000001010
+01001000101000010000000000000111
+00110101011010110000000000010000
+01000001011000010000000000001100
+01011100001000001111111111000001
+01000101011000000000000000000011
+01000001011000010000000000001100
+01011100001000000000000000000110
+00110111100000010000000001001000
+00110100000000100000000000000010
+11111011111111111111111100110100
+10111000001000000101100000000000
+11100000000000000000000000000111
+00110111100000010000000001001000
+11001001111000010101100000000000
+10111001011000000001000000000000
+11111011111111111111111100001110
+00110100000011000000000000000000
+01001000000010110000000000010000
+00110111100011000000000000101100
+00110101011010110000000000011100
+10111001100000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110110010100
+01111000000001010000000000000001
+00111000101001011011110001111000
+00101000101000010000000000000000
+10111001100000000001100000000000
+00110111100000100000000011110100
+10111001011000000010000000000000
+00110100000001010000000000000000
+11111011111111111111101101100011
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000100000100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000011000000000000
+01000000110001010000000000010001
+01000000001000100000000000000000
+10111000011000000110000000000000
+01000000001010110000000000000001
+00110100000001001111111111111101
+01011100101000100000000000011110
+00110100001000100000000000000010
+00110100000000010000000000000100
+01000100101000010000000000010011
+00110100000000010000000001000010
+01000100101000010000000000000100
+00110100000000010000000000000010
+00110100000001000000000000000000
+01011100101000010000000000010110
+00110100000011010000000000000100
+00110100000001001111111111111101
+01010101011011010000000000010011
+00110111100000010000000000010100
+10111001011000000001100000000000
+01011011100000000000000000010100
+11111000000000000010010011000010
+00101011100000010000000000010100
+11001001101010110110100000000000
+00111101101011010000000000000011
+10000000001011010110100000000000
+01011001100011010000000000000000
+11100000000000000000000000001000
+01000000110000010000000000010011
+01010101011000010000000000000111
+10111000011000000000100000000000
+10110101100010110110000000000000
+10111001011000000001100000000000
+11111000000000000010010010110110
+00110001100000000000000000000000
+00110101011001000000000000000010
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000000010000110000000000010010
+00101000010001000000000000001100
+10110100100000110001100000000000
+11111011111111111111111111001011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01000000001011100000000000000000
+00100000010000100000000011111111
+00100000100001000000000011111111
+00110100010011000000000000000001
+11001001110000100111000000000000
+00100000100000100000000000000001
+10111000001000000111100000000000
+10110100001011000110000000000000
+00110100000000011111111111111100
+01011100010000000000000001101000
+00100000100011010000000000000100
+01111101101011010000000000000000
+00100000100100000000000000001000
+01111110000100000000000000000000
+10111000011000000101100000000000
+00100001101100010000000011111111
+11100000000000000000000000100011
+10111001110000000001100000000000
+01001100001011100000000000000010
+10111000001000000001100000000000
+00101001011000010000000000000000
+10111001100000000001000000000000
+00100000011000110000000011111111
+11111000000000000010010001100010
+01011110000000000000000000001010
+10110000001000000000100000000000
+01100100001000100000000000000000
+10100000010100010001100000000000
+01000100011100000000000000000011
+01000001011000110000000000010000
+01001100011011100000000000000100
+01101000001000010000000000000000
+10100010001000010000100000000000
+01000100001000000000000000001011
+00101001011000100000000000000000
+01000001011000110000000000010000
+10111001100000000000100000000000
+00110100000011100000000000000000
+11111000000000000010010001110100
+01000001011000010000000000010000
+00110100000000100000000000000001
+10110101100000010000100000000000
+00110000001000100000000000000000
+11100000000000000000000000001101
+01000100010000010000000000000110
+01000001011000010000000000010000
+00110100001000010000000000000001
+01000101110000010000000000000110
+01000101101000000000000000000010
+01001001110000010000000000000110
+00110101011010110000000000010100
+01000001011000010000000000010000
+01011100001000001111111111011101
+10111001101000000111000000000000
+11100000000000000000000000000010
+00110100000011100000000000000001
+01000001011000100000000000010000
+00110100000000010000000000000000
+01000100010000000000000000110111
+01000001011000010000000000010001
+00110011100000100000000000110100
+01011011100011000000000000100100
+00110011100000010000000000110101
+00101001011000010000000000001100
+01011011100000010000000000110000
+01000101110000000000000000000100
+01000001100000010000000000000001
+00110100001000010000000000000001
+00110001100000010000000000000001
+01000001011000010000000000010000
+00101001011000110000000000000100
+00110111100100010000000000100100
+00110100001000010000000000000001
+10110101100000010000100000000000
+10111010001000000001000000000000
+11011000011000000000000000000000
+01100100001000110000000000000000
+10100000011011100111000000000000
+01000101110000000000000000011001
+00110101011010110000000000010100
+01000001011000110000000000010000
+00110100000000010000000000000000
+01000100011000000000000000011111
+00101001011000100000000000000000
+10111001100000000000100000000000
+11111000000000000010010001000101
+01000001011000010000000000010000
+00110100000000100000000000000001
+10110101100000010000100000000000
+00110000001000100000000000000000
+01000001011000100000000000010001
+01000001011000010000000000010000
+00101001011000110000000000000100
+00110011100000100000000000110101
+00101001011000100000000000001100
+00110011100000010000000000110100
+00110100001000010000000000000001
+01011011100000100000000000110000
+10110101100000010000100000000000
+10111010001000000001000000000000
+11011000011000000000000000000000
+01011100001000000000000000000011
+11100000000000000000000000001011
+01011100011011100000000000001001
+01001000000000010000000000001001
+01000001011000100000000000010000
+10111010000011010110100000000000
+00110100010000100000000000000001
+10110100001000100000100000000000
+01000101101000000000000000000100
+00110001111000100000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100101010000000000001000
+01011011100111010000000000000100
+00100000100001000000000011111111
+01000000001100010000000000000000
+00100000010000100000000011111111
+00000000100011010000000000000011
+00110100010011100000000000000001
+00100000100011110000000000000100
+10111000001000001000000000000000
+11001010001000101000100000000000
+10110100001011100111000000000000
+00100001101011010000000000000001
+10111000011000000101100000000000
+00110100000011000000000000000000
+00100000100101010000000000000011
+00100000100101000000000000000001
+01111101111100110000000000000000
+11100000000000000000000000110100
+10111000101000001001000000000000
+01011101101000000000000000000101
+10111010001000001001000000000000
+01001100101100010000000000000010
+10111000101000001001000000000000
+00100010010100100000000011111111
+01000110101000000000000000000010
+01011110001001010000000000101011
+01011101101000000000000000001100
+00101001011000010000000000000000
+10111001110000000001000000000000
+10111010010000000001100000000000
+11111000000000000010001111010101
+00111100001011000000000000011000
+00010101100011000000000000011000
+01011101100011010000000000000110
+01000101111011000000000000001001
+01000001011000010000000000010000
+01011100001100100000000000000111
+11100000000000000000000000011111
+01000101100000000000000000000101
+01101001100000010000000000000000
+10100000001100110001000000000000
+01011100010000000000000000000010
+01000101101000100000000000011001
+01000101111000000000000000000111
+00101001011000100000000000000000
+01000001011000110000000000010000
+10111001110000000000100000000000
+11111000000000000010001111100101
+01000001011000010000000000010000
+00110010000000010000000000000000
+01000110100000000000000000001000
+00101001011000110000000000001000
+01000100011000000000000000010100
+01000001011000010000000000010000
+10111001011000000001000000000000
+10110101110000010000100000000000
+11011000011000000000000000000000
+01001000000000010000000000010010
+01000001011000010000000000010000
+00101001011000110000000000000100
+10111001011000000001000000000000
+10110101110000010000100000000000
+11011000011000000000000000000000
+01000100001000000000000000000101
+01000001011000100000000000010000
+10110100001000100000100000000000
+11100000000000000000000000001001
+01011100001011010000000000000111
+00110101011010110000000000010100
+01000001011001010000000000010000
+01011100101000001111111111001100
+11100000000000000000000000000011
+00110100000000011111111111111100
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00101011100101010000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100001011010000000000000010
+00110000001000100000000000000000
+00110100000000010000000001000011
+10111000011000000101100000000000
+01010100010000010000000000001000
+00110100000000010000000001000001
+01010000010000010000000000001001
+00110100000000010000000000000010
+01000100010000010000000000000111
+00110100000000010000000000000100
+01011100010000010000000000101001
+11100000000000000000000000011100
+00110100000000010000000001000110
+01011100010000010000000000100110
+11100000000000000000000000001001
+00101001011000010000000000000000
+00110111100000100000000000011100
+00110100000000110000000000000100
+01011011100000010000000000011100
+10111001101000000000100000000000
+11111000000000000010001110100001
+00110100000000010000000000000100
+11100000000000000000000000001111
+01111000000000010000000000000001
+00111000001000011100001010011100
+01000000001000010000000000000000
+00110100000000100000000000000000
+01000100001000000000000000011001
+00101000011000010000000000000000
+00110111100000100000000000010100
+01011011100000010000000000010100
+00101000011000010000000000000100
+00110100000000110000000000001000
+01011011100000010000000000011000
+10111001101000000000100000000000
+11111000000000000010001110010010
+00110100000000010000000000001000
+00110001100000010000000000000001
+11100000000000000000000000001010
+10111000011000000000100000000000
+00110100000000100000000000011111
+11111000000000000010010101101111
+00100000001000110000000011111111
+00110001100000110000000000000001
+10111001101000000000100000000000
+10111001011000000001000000000000
+00110100011000110000000000000001
+11111000000000000010001110000110
+01000001100000100000000000000001
+00110100010000100000000000000010
+11100000000000000000000000000010
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00101000010011010000000000001100
+10111000001000000111000000000000
+10111000010000000101100000000000
+00110100000000010000000000000001
+01111000000000100000000000000001
+00111000010000101011110010100000
+01000101101000010000000000000101
+00110100000001001111111111111101
+01011101101000000000000000101100
+01111000000000100000000000000001
+00111000010000101011110010100100
+00101001011000010000000000000000
+00110100000001010000000000000001
+00101000010000100000000000000000
+01000000001011000000000000000000
+01000000001000010000000000000001
+00110100000001000000000000000000
+01011100001001010000000000100011
+01001100001011000000000000100010
+00110100010000010000000000000010
+01001001100000010000000000100000
+00110100000000010000000000000010
+01011101100000010000000000000110
+00110100000000010000000010100011
+00110100000001001111111111111100
+01000100011000010000000000011011
+01011011100000100000000000011000
+11100000000000000000000000010100
+00110100000000010000000010100011
+01011100011000010000000000001100
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110111100000110000000000011000
+11111011111111111111111001110111
+10111000001000000010000000000000
+01001100000000010000000000010001
+00101011100000100000000000011000
+00110101100000011111111111111101
+11111000000000000000100111110001
+00110100000001001111111111111011
+01001000000000010000000000001100
+00110101100000011111111111111101
+10111001101000000001000000000000
+00110111100000110000000000011000
+11111000000000000000100110100100
+00110100000001001111111111111011
+01001000000000010000000000000110
+01000001011000100000000000010001
+10111001110000000000100000000000
+00110111100000110000000000011000
+11111011111111111111111110000111
+10111000001000000010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000010100011
+11111011111111111111111110111011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000010100000
+11111011111111111111111110110100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000010000100000000000001100
+00110100000000110000000000000001
+10111000001000000110100000000000
+01000100010000110000000000011001
+00110100000000110000000000000010
+01011100010000110000000000110001
+01111000000000100000000000000001
+00111000010000101011110001111100
+00101000010000110000000000000000
+00101000011001010000000001010100
+00101000011001000000000001010000
+00111100101000100000000000000001
+00111100100001000000000000000001
+11110100101000100010100000000000
+11001000000000100001000000000000
+10110100101001000010000000000000
+01111100010001010000000000000000
+11001000000001000010000000000000
+11001000100001010010000000000000
+00101000011001010000000001000000
+00101000011000110000000001000100
+10110100100001010010000000000000
+10110100010000110001100000000000
+11110100010000110001000000000000
+01011011100000110000000000011100
+10110100010001000001000000000000
+01011011100000100000000000011000
+11100000000000000000000000010111
+01111000000000100000000000000001
+00111000010000101011110001111100
+00101000010000110000000000000000
+01111000000001010000000000000001
+00111000101001011000111011001000
+00101000011011100000000010101000
+00101100011010110000000010101100
+00101000011000100000000010100100
+00111101110000010000000000010000
+00101000101001000000000000000000
+10111000001010110101100000000000
+00101000011000010000000010100000
+00110100000000110000000000000000
+00010101110011100000000000010000
+11111000000000000010001000000110
+10110101011000100001000000000000
+11110101011000100101100000000000
+10110101110000010001100000000000
+10110101011000110001100000000000
+01011011100000110000000000011000
+01011011100000100000000000011100
+10111001101000000000100000000000
+01000001100000100000000000010001
+00110111100000110000000000011000
+11111011111111111111111100110100
+11100000000000000000000000000010
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+00101000010000110000000000001100
+01000000010001010000000000010001
+01000000010000100000000000010010
+00101000011000110000000000000000
+10110100011000100001000000000000
+00101000010001000000000000000000
+00101000010000110000000000000100
+01001000100000000000000000001110
+01011100100000000000000000000101
+01111000000001100000000000000001
+00111000110001101000111011111100
+00101000110000100000000000000000
+01010100011000100000000000001001
+00110100000000101111111111111111
+01001000010001000000000000001011
+01011100100000100000000000001011
+01111000000001000000000000000001
+00111000100001001000111100000000
+00101000100000100000000000000000
+01010100010000110000000000000110
+11100000000000000000000000000110
+01111000000001100000000000000001
+00111000110001101000111011010100
+00101000110000110000000000000000
+11100000000000000000000000000010
+01111000000000111000000000000000
+01011011100000110000000000001000
+10111000101000000001000000000000
+00110111100000110000000000001000
+11111011111111111111111100001011
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000001100
+01000000010000110000000000010010
+01000000010000100000000000010001
+00101000100001000000000000000000
+10110100100000110001100000000000
+11111011111111111111111100000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000001100
+01000000010000110000000000010010
+01000000010000100000000000010001
+10110100100000110001100000000000
+11111011111111111111111011110110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110011000
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+10111000001000001000000000000000
+00101000010000010000000000000000
+10111000010000000111000000000000
+00110100000011010000000000000000
+01000000001101100000000000000001
+01000000001011000000000000000000
+00110100000010110000000000000001
+00110111100011110000000000111000
+00110100000101011111111111111111
+00110100000101000000000000000010
+00110100000100110000000000000011
+00110100000100100000000000000100
+00110100000100010000000000000101
+00100001101000110000000011111111
+10111001111000000000100000000000
+00110100000000100000000000000000
+11111000000000000001000101000001
+10111000001000000001100000000000
+01000100001000000000000000011100
+01000100001101010000000000011011
+01011110110010110000000000001101
+01011101100101000000000000001001
+00110111100010110000000001011000
+00110100000000110000000000010000
+10111001011000000000100000000000
+10111001111000000001000000000000
+11111000000000000010001010000101
+10111001011000000001100000000000
+00110011100000000000000001101000
+11100000000000000000000000001101
+01000101100100110000000000000111
+01000101100100100000000000001000
+01000101100100010000000000001001
+00110101011010110000000000000001
+00110101101011010000000000000001
+01001100011010111111111111101010
+11100000000000000000000000001010
+00110111100000110000000001001100
+11100000000000000000000000000100
+00110111100000110000000001010000
+11100000000000000000000000000010
+00110111100000110000000001001000
+01000001110000100000000000010001
+10111010000000000000100000000000
+11111011111111111111111010111000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000110100
+00101011100011000000000000110000
+00101011100011010000000000101100
+00101011100011100000000000101000
+00101011100011110000000000100100
+00101011100100000000000000100000
+00101011100100010000000000011100
+00101011100100100000000000011000
+00101011100100110000000000010100
+00101011100101000000000000010000
+00101011100101010000000000001100
+00101011100101100000000000001000
+00110111100111000000000001101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00101000010000100000000000001100
+10111000001000000110000000000000
+00110100000000010000000000000001
+01011100010000010000000000001010
+00110100000000010000000000000000
+11111000000000000000010000101011
+00110100001000100000000000000001
+01011011100000100000000000010000
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000010000
+11111011111111111111111010010110
+11100000000000000000000000000010
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000010010110000000000001100
+10111001011000000001100000000000
+11111011111111111111110101100111
+10111000001000000110000000000000
+01001100000000010000000000001010
+00101001011000100000000000000000
+00110100000000010000000000000001
+01011100010000010000000000000101
+11111011111111111100111110101110
+11111011111111111100111110000111
+00110100000000010000000001100100
+11100000000000000000000000000010
+00110100000000010000000011001000
+01011001011000010000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010010110000000000001100
+10111001011000000001100000000000
+11111011111111111111110101001110
+10111000001000000110100000000000
+01001100000000010000000001010000
+00101001011000100000000000000000
+00110100000000010000000000000010
+01000100010000010000000000011110
+01001000010000010000000000000100
+00110100000000010000000000000001
+01011100010000010000000001001000
+11100000000000000000000000100000
+00110100000000010000000000000011
+01000100010000010000000000000100
+00110100000000010000000000110010
+01011100010000010000000001000011
+11100000000000000000000000111101
+01111000000000100000000000000001
+00111000010000101011110010000000
+00101000010000010000000000010100
+01111000000000110000000000000001
+00111000011000111011111101000000
+01011000011000010000000000000000
+00101000010000010000000000011000
+01111000000000110000000000000001
+00111000011000111011111101000100
+01011000011000010000000000000000
+00101000010000010000000000010000
+01111000000000110000000000000001
+00111000011000111010100000001000
+01011000011000010000000000000000
+01111000000000010000000000000001
+00111000001000011000011110011100
+11111000000000000000001001010011
+11111011111111111100111101111011
+11111011111111111100111101010100
+11100000000000000000000000101100
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011011110010000000
+00111000010000101011111110111100
+00110100000000110000000000010000
+11111000000000000010001000000010
+01111000000011000000000000000001
+00111001100011001011110010000000
+01000001100000010000000000000000
+01011100001000000000000000000011
+00110100000000010000000011001011
+11100000000000000000000000100011
+00110100000000100000000000010000
+10111001100000000000100000000000
+11111000000000000010001111011100
+10111000001000000001000000000000
+00110100000000110000000000001111
+00110100000000010000000000100000
+11100000000000000000000000000100
+10110100010011000010000000000000
+00110000100000010000000000000000
+00110100010000100000000000000001
+01001100011000101111111111111101
+00110100000000100000000000000001
+10111001100000000000100000000000
+00110100000000110000000000000000
+11111000000000000001000010011111
+10111000001000000001000000000000
+00110100000000011111111111111110
+01011100010000010000000000000011
+00110100000000010000000011001010
+11100000000000000000000000001111
+00110100000000011111111111111111
+01011100010000010000000000000011
+00110100000000010000000011001001
+11100000000000000000000000001011
+11111000000000000000100011111000
+01000100001000000000000000000110
+00110100000000010000000001100101
+11100000000000000000000000000111
+11111000000000000001000000110001
+00110100000000101111111111111111
+01000100001000100000000000000011
+00110100000000010000000001100100
+11100000000000000000000000000010
+00110100000000010000000011001000
+01011001011000010000000000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+00101000010000010000000000000000
+10111000010000000110100000000000
+00110100000011000000000000000001
+01000000001100100000000000000001
+01000000001011100000000000000000
+00110100000000010000000000000000
+11111000000000000000110000010100
+10111000001000000010000000000000
+00110100000100010000000000000010
+00110100000100000000000000000011
+11100000000000000000000000100101
+01011110010011000000000000100000
+00101000100010110000000000000100
+01011101110100010000000000000111
+00101000100000110000000000000000
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000100111101111011100
+11111000000000000000000111101110
+11100000000000000000000000011111
+01011101110100000000000000010111
+01111000000000011000000000000000
+01011101011000010000000000000110
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000101000011111001000
+11111000000000000000000111100110
+11100000000000000000000000010111
+01001101011000000000000000000110
+01111000000000100000000000000001
+00110111100000010000000000101000
+00111000010000100111100101001000
+11001000000010110101100000000000
+11111000000000000000000111011111
+00100001011001001111111111111111
+00001000100001000010011100010000
+01111000000000100000000000000001
+00010101011000110000000000010000
+00000000100001000000000000010000
+00110111100000010000000000101000
+00111000010000101000011111010000
+11111000000000000000000111010111
+11100000000000000000000000001000
+10111000100000000000100000000000
+11111000000000000000101111101110
+10111000001000000010000000000000
+00110101100011000000000000000001
+01011100100000001111111111011100
+00110100000000010000000000000000
+11100000000000000000000000000101
+01000001101000100000000000010001
+10111001111000000000100000000000
+00110111100000110000000000101000
+11111011111111111111110111010110
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010011010000000000001100
+10111000001000000110000000000000
+10111000010000000101100000000000
+00100001101000010000000000000010
+01000100001000000000000000001001
+11111000000000000000011110101111
+00110100000000100000000000001010
+11111000000000000010000100011000
+01011011100000010000000000011100
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000011100
+11100000000000000000000000010011
+00100001101000100000000000000100
+01000100010000010000000000000100
+00110111100000010000000000010100
+00110100000000100000000000000000
+11111000000000000000110010101000
+00100001101011010000000000000001
+01000101101000000000000000001001
+00101011100000100000000000011000
+00101011100000010000000000010100
+00110100000000110000000000000010
+11111011111111111111010011001010
+10111000001000000001100000000000
+01000001011000100000000000010001
+10111001100000000000100000000000
+11100000000000000000000000000100
+01000001011000100000000000010001
+10111001100000000000100000000000
+00110111100000110000000000010100
+11111011111111111111110110100110
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000000000000
+00110100000001000000000010100001
+00111000001000011010000110101000
+11111011111111111111011010110101
+01111000000000100000000000000001
+00111000010000101011110001111000
+01011000010000010000000000000000
+01111000000000010000000000000001
+00111000001000011001100000101000
+00101000001000010000000000011000
+01111000000000100000000000000001
+00111000010000101011110001111100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01011000010000010000000000000000
+00111000011000111011110010100100
+00110111100000010000000000001100
+00110111100000100000000000001000
+00111000100001001011110010100000
+11111000000000000000011110000101
+01000011100000110000000000001111
+01000011100000100000000000001011
+01111000000000010000000000000001
+00111000001000011010000110010000
+00110000001000110000000000001000
+00110000001000100000000000001001
+01111000000000010000000000000001
+00111000001000011010000110011100
+00110000001000110000000000001000
+00110000001000100000000000001001
+00101011100111010000000000000100
+00110111100111000000000000001100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011110110110100
+00101100011001010000000000000000
+01111000000001000000000000000001
+00111000100001001011110111001100
+00111100001000010000000000000001
+10110100100001010010000000000000
+00110100101001010000000000000010
+00110000100000010000000000000000
+00110000100000100000000000000001
+00001100011001010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110100000000100000000000001000
+01010100001000100000000010111110
+00111100001000010000000000000010
+01111000000000100000000000000001
+00111000010000101001001110111100
+10110100010000010001000000000000
+00101000010000010000000000000000
+01111000000011000000000000000001
+00111001100011001011110110110100
+11000000001000000000000000000000
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111111100010
+11100000000000000000000010101100
+00110100000000010000000000000001
+00110100000000100000000000000111
+11111011111111111111111111011110
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110111001100
+10110100001000100000100000000000
+00110100000000100000000000000100
+11100000000000000000000000001001
+00110100000000010000000000000010
+00110100000000100000000000000111
+11111011111111111111111111010101
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110111001100
+10110100001000100000100000000000
+00110100000000100000000000000011
+00110000001000100000000000000000
+00110100001000010000000000000001
+11111000000000000000001010001011
+00110100000010110000000000000111
+11100000000000000000000010010111
+00110100000000010000000000000011
+00110100000000100000000000000010
+11111011111111111111111111001000
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110111001100
+10110100001000100000100000000000
+00110100000000100000000000101000
+00110000001000000000000000000000
+00110000001000100000000000000001
+00110100000010110000000000000010
+11100000000000000000000010001011
+01111000000011010000000000000001
+00111001101011011000011101011100
+10111001101000000000100000000000
+11111000000000000010001000100100
+00110100001010110000000000000001
+00100001011000100000000011111111
+00110100000000010000000000000100
+11111011111111111111111110110111
+00101101100000100000000000000000
+01111000000000010000000000000001
+00111000001000011011110111001100
+10110100010000010000100000000000
+10111001101000000001000000000000
+11111000000000000010000111110110
+11100000000000000000000001111100
+00110111100000010000000001000000
+11111011111111111111011111001101
+01111000000000100000000000000001
+00110111100000010000000001000000
+00111000010000101000111110010000
+00110100000000110000000000000100
+01111000000011000000000000000001
+01111000000011100000000000000001
+11111000000000000010000010111011
+00111001100011001011110110110100
+00111001110011101011110111001100
+00110111100011010000000000011000
+01000100001000000000000000001101
+00110111100000100000000001000000
+10111001101000000000100000000000
+11111011111111111111001100001100
+10111001101000000000100000000000
+11111000000000000010001000000111
+10111000001000000101100000000000
+00101101100000010000000000000000
+10111001101000000001000000000000
+00110100001000010000000000000010
+10110100001011100000100000000000
+11111000000000000010000111011101
+11100000000000000000000000010100
+00110111100000010000000000111000
+11111000000000000000001001010011
+01000011100000110000000000111000
+01000011100001000000000000111001
+01000011100001010000000000111010
+01000011100001100000000000111011
+01000011100001110000000000111100
+01000011100010000000000000111101
+01111000000000100000000000000001
+00111000010000101000000101010000
+10111001101000000000100000000000
+11111000000000000000000011111010
+00101101100000010000000000000000
+10111001101000000001000000000000
+00110100000000110000000000010001
+00110100001000010000000000000010
+10110100001011100000100000000000
+11111000000000000010001001101010
+00110100000010110000000000010001
+00110100000000010000000000000101
+00100001011000100000000011111111
+11100000000000000000000000100110
+00101101100011100000000000000000
+01111000000011010000000000000001
+00111001101011011011110111001100
+00110101110011100000000000000010
+01111000000010110000000000000001
+10110101110011010111000000000000
+00111001011010111100001010000100
+00110100000000110000000000000100
+10111001011000000001000000000000
+10111001110000000000100000000000
+11111000000000000010001001011011
+10111001011000000000100000000000
+00110100000000100000000000000100
+11111000000000000010001010001011
+10110101110000010101100000000000
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000100111111001101100
+01111000000011100000000000000001
+11111000000000000010000110110010
+00111001110011101001011011101000
+00101001110000100000000000000000
+00110101011010110000000000000010
+10111001011000000000100000000000
+00110100000000110000000000100000
+11111000000000000010001001001100
+00101001110000010000000000000000
+00110100000000100000000000100000
+11111000000000000010001001111100
+10110101011000010000100000000000
+00101101100010110000000000000000
+00110101011010110000000000000010
+10110101011011010101100000000000
+11001000001010110101100000000000
+00100001011010110000000011111111
+00110100000000010000000000000110
+10111001011000000001000000000000
+11111011111111111111111101011011
+11100000000000000000000000100110
+01111000000000100000000000000001
+00110111100000010000000001000000
+00111000010000101000111110010000
+00110100000000110000000000000100
+11111000000000000010000001101001
+00110100000010110000000000000000
+01000100001000000000000000011111
+00110100000000010000000000001000
+00110100000000100000000000001100
+01111000000011000000000000000001
+11111011111111111111111101001111
+00111001100011001011110110110100
+00101101100000010000000000000000
+01111000000010110000000000000001
+00111001011010111011110111001100
+10110101011000010000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000010
+00110000001000100000000000000000
+00110100000000100000000000000001
+00110000001000110000000000000110
+00110000001000100000000000000001
+00110000001000100000000000001010
+00110111100000010000000001000000
+11111011111111111111011101100000
+00110111100000100000000001000000
+00110111100000010000000000011000
+11111011111111111111001010101010
+00101101100000010000000000000000
+00110111100000100000000001000000
+00110100000000110000000000000100
+00110100001000010000000000000010
+10110101011000010000100000000000
+11111000000000000010000001101101
+00110100000010110000000000001100
+11100000000000000000000000000010
+00110100000010110000000000000000
+01111000000000010000000000000001
+00111000001000011011110110110100
+00101100001000100000000000000000
+10110101011000100101100000000000
+00001100001010110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00110100000000100000000000000000
+00110100000000110000000010011110
+00111000001000011011110111001100
+11111000000000000010000011010011
+01111000000000010000000000000001
+00111000001000011011110110110100
+00001100001000000000000000000000
+01111000000000010000000000000001
+00111000001000011000011111111000
+11111000000000000000000010010111
+00110100000010110000000000000001
+00110100000011000000000000001001
+10111001011000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111100100001
+01011101011011001111111111111101
+00110100000000010000000000000000
+11111011111111111111111100011110
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111001111000
+00101000001000100000000000000000
+00110100000000110010011100010000
+01001100011000100000000000110100
+00110111100011000000000000010000
+10111001100000000000100000000000
+11111000000000000000000110111111
+00110111100010110000000000010111
+10111001011000000000100000000000
+11111011111111111111011100011101
+01111000000000100000000000000001
+00110100000000110000000000000110
+10111001100000000000100000000000
+00111000010000101011111001101100
+11111000000000000010000000001101
+10111000001000000001100000000000
+01011100001000000000000000001011
+01111000000000100000000000000001
+00111000010000101011100011111000
+00101000010000010000000000000000
+01000100001000110000000000010010
+01111000000000100000000000000001
+10111001011000000000100000000000
+00111000010000101011111001110100
+00110100000000110000000000000100
+11111000000000000010000000000010
+01000100001000000000000000001100
+11111011111111111111111111000100
+01111000000000010000000000000001
+00110111100000100000000000010000
+00110100000000110000000000000110
+00111000001000011011111001101100
+11111000000000000010000000011100
+01111000000000010000000000000001
+00111000001000011011111001110100
+00110111100000100000000000010111
+00110100000000110000000000000100
+11111000000000000010000000010111
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011011110110110000
+00111000100001001011110110110100
+00101000001000010000000000000000
+00101100100001000000000000000000
+01111000000000100000000000000001
+01111000000000110000000000000001
+00111000010000101011110110111000
+00111000011000111011110111001100
+00110100000001010000000000000000
+11111011111111111111011010000011
+01111000000000010000000000000001
+00111000001000011011111001111000
+01011000001000000000000000000000
+00110100000000010000000000000001
+11100000000000000000000000000100
+00110100010000100000000000000001
+01011000001000100000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000010000001110100
+00110100000000011000100011001100
+00001111100000010000000000011000
+01111000000000010000000000000001
+00110100000001000000000000000000
+10111001011000000001000000000000
+00110100000000110000000000000001
+00111000001000011011111001111100
+11111011111111111111010101010000
+01111000000000100000000000000001
+01111000000010110000000000000001
+00111001011010111011110110111000
+00111000010000101011110110110000
+01011000010000010000000000000000
+00110100000000110000000000010010
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000010000001100011
+01111000000000100000000000000001
+00111000010000101000111110011000
+00110100000000110000000000000110
+10111001011000000000100000000000
+11111000000000000001111111100000
+11111011111111111111111110000010
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000010000000000000
+00111001011010111011111010110000
+10111000010000000001100000000000
+10111001011000000000100000000000
+10111000100000000001000000000000
+11111000000000000000000000100111
+10111000001000000110000000000000
+10111001011000000000100000000000
+11111000000000000000000100001100
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100111010000000000000100
+01011011100000110000000000001100
+00110111100000110000000000001100
+01011011100000100000000000001000
+01011011100001000000000000010000
+01011011100001010000000000010100
+01011011100001100000000000011000
+01011011100001110000000000011100
+01011011100010000000000000100000
+11111000000000000000000000010011
+00101011100111010000000000000100
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100111010000000000000100
+01011011100000100000000000001100
+00110111100000100000000000001100
+01011011100000010000000000001000
+01011011100000110000000000010000
+01011011100001000000000000010100
+01011011100001010000000000011000
+01011011100001100000000000011100
+01011011100001110000000000100000
+01011011100010000000000000100100
+11111011111111111111111111010011
+00101011100111010000000000000100
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111110011100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000101100000000000000001
+10111000001000001100100000000000
+10111000010000001010000000000000
+10111000001000001001100000000000
+00110100000110000000000000100101
+00110100000010010000000001101001
+00110100000010000000000001110000
+00110100000001110000000001011000
+00110100000110110000000000101010
+00110100000010100000000000110000
+00110100000101110000000000010000
+00110111100101010000000001011000
+00111010110101101000100000010000
+11100000000000000000000010010110
+00110100000011110000000000000000
+00110100000100010000000000100000
+00110100000011010000000000001010
+01000100001110000000000000000100
+00110010011000010000000000000000
+11100000000000000000000000111100
+00110100000100010000000000110000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01000100001010010000000001000000
+01010100001010010000000000001111
+01000100001001110000000000111011
+01010100001001110000000000001000
+01000100001110110000000000011010
+01010100001110110000000000000100
+01000100001000000000000010001000
+01011100001110000000000000011010
+11100000000000000000000000101111
+01011100001010100000000000011000
+11100000000000000000000000010110
+00110100000000100000000001100011
+01000100001000100000000000011100
+00110100000001000000000001100100
+01011100001001000000000000010011
+11100000000000000000000000110001
+01000100001010000000000000101101
+01010100001010000000000000000110
+00110100000000100000000001101110
+01000100001000100000000001111000
+00110100000001000000000001101111
+01011100001001000000000000001100
+11100000000000000000000000100100
+00110100000000100000000001110101
+01000100001000100000000000101000
+00110100000001000000000001111000
+01000100001001000000000000100011
+00110100000000100000000001110011
+01011100001000100000000000000101
+11100000000000000000000000010000
+00101000011011010000000000000000
+00110100011000110000000000000100
+01000101111000001111111111011101
+00110100001000011111111111010000
+00100000001000100000000011111111
+00110100000001000000000000001001
+01010100010001001111111111011010
+00001001111011110000000000001010
+10110100001011110111100000000000
+11100011111111111111111111010111
+00101000011000010000000000000000
+00110100011000110000000000000100
+00110010011000010000000000000000
+00110110011100110000000000000001
+11100000000000000000000001011111
+10111000011000000000100000000000
+00101000001000010000000000000000
+00110100011000110000000000000100
+11100000000000000000000000000100
+00110010011000100000000000000000
+00110100001000010000000000000001
+00110110011100110000000000000001
+01000000001000100000000000000000
+01011100010000001111111111111100
+11100000000000000000000001010101
+00110010011110000000000000000000
+00110110011100110000000000000001
+11100000000000000000000001010010
+00110100000000010000000000001010
+01000101101000010000000000000100
+11100000000000000000000000000100
+00110100000011010000000000010000
+11100000000000000000000000000010
+00110100000011010000000000001000
+00101000011001010000000000000000
+00110100011100100000000000000100
+10111000101000000111000000000000
+01011101111000000000000000000010
+00110100000011110000000000000001
+00000000101001100000000000011111
+01100101101000110000000000001010
+00110100000100000000000000000000
+10100000110000110001100000000000
+01000100011000000000000000000011
+11001000000001010111000000000000
+00110100000100000000000000000001
+00110100000011000000000000010000
+11100000000000000000000000010101
+10111001110000000000100000000000
+10111001101000000001000000000000
+01011011100001110000000001001100
+01011011100010000000000001010000
+01011011100010010000000001010100
+01011011100010100000000001001000
+11111000000000000001111011011011
+10110110110000010001100000000000
+01000000011000110000000000000000
+00110101100011001111111111111111
+10110110101011000101100000000000
+10111001110000000000100000000000
+00110001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000001111011000011
+00101011100010100000000001001000
+00101011100010010000000001010100
+00101011100010000000000001010000
+00101011100001110000000001001100
+10111000001000000111000000000000
+01111101100001000000000000000000
+01111101110000110000000000000000
+10100000100000110001100000000000
+01011100011000001111111111101001
+01011101100101110000000000000100
+00110100000000100000000000110000
+00110011100000100000000001100111
+00110100000011000000000000001111
+01100110001000100000000000100000
+10100010000000100001000000000000
+01000100010000000000000000001011
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110100000000110000000000101101
+00110000010000110000000000000000
+00110100000100000000000000000000
+11100000000000000000000000000101
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110000010100010000000000000000
+11100000000000000000000000000011
+11001010111011110000100000000000
+10110100001100000000100000000000
+01001001100000011111111111111010
+01000110000000000000000000000101
+00110101100011001111111111111111
+10110110101011000000100000000000
+00110100000000100000000000101101
+00110000001000100000000000000000
+11001010111011000001100000000000
+10111010011000000000100000000000
+00110100000001000000000000001111
+11100000000000000000000000000110
+10110110101011000001000000000000
+01000000010000100000000000000000
+00110101100011000000000000000001
+00110000001000100000000000000000
+00110100001000010000000000000001
+01001100100011001111111111111011
+10110110011000111001100000000000
+10111010010000000001100000000000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01011100001000001111111101101010
+11001010011110010000100000000000
+00110010011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001100100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010001100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011100001010110100
+01011000001000100000000000000000
+00110100000000010000001111000110
+01011000010000010000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000001010
+01011101011000010000000000000011
+00110100000000010000000000001101
+11111011111111111111111111111001
+01111000000000100000000000000001
+00111000010000101100001010110100
+00101000010000100000000000000000
+00101000010000010000000000000000
+00100000001000010000000000000001
+01011100001000001111111111111110
+01011000010010110000000000001000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000001000000101100000000000
+11100000000000000000000000000100
+10111000010000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111111100100
+01000001011000100000000000000000
+01011100010000001111111111111100
+11001001011011000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010110100
+00101000001000100000000000000000
+00110100000000011111111111111111
+00101000010000110000000000000000
+00100000011000110000000000000010
+01000100011000000000000000000011
+00101000010000010000000000001100
+00100000001000010000000011111111
+11000011101000000000000000000000
+01111000000000100000000000000001
+00010100001000010000000000000010
+00111000010000101100001010110000
+00101000010000100000000000000000
+00100000001000010000000011111111
+00111100001000010000000000010000
+01011000010000010000000000101100
+00101000010000010000000000110000
+01001100001000001111111111111111
+00101000010000010000000000110000
+00100000001000011111111111111111
+11000011101000000000000000000000
+00010100001000010000000000000010
+01111000000000110000000000000001
+00111000011000111100001010110000
+00100000001000010000000011111111
+00101000011000110000000000000000
+00100000010000101111111111111111
+01111000000001001000000000000000
+00111100001000010000000000010000
+10111000010001000001000000000000
+10111000010000010001000000000000
+01011000011000100000000000101100
+00101000011000010000000000110000
+01001100001000001111111111111111
+11000011101000000000000000000000
+01000000001001000000000000000010
+01000000001000110000000000000011
+01111000000000100000000000000001
+00111100100001000000000000011000
+00111100011000110000000000010000
+00111000010000101100001010110000
+10111000100000110001100000000000
+01000000001001000000000000000101
+00101000010000100000000000000000
+10111000011001000001100000000000
+01000000001001000000000000000100
+00111100100001000000000000001000
+10111000011001000001100000000000
+01011000010000110000000000101000
+01000000001000110000000000000001
+01000000001000010000000000000000
+00111100001000010000000000001000
+10111000011000010000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010110000
+00101000010000110000000000000000
+00101000011000110000000000101000
+00110000001000110000000000000101
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000001000
+00110000001000110000000000000100
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000010000
+00110000001000110000000000000011
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000011000
+00110000001000110000000000000010
+00101000010000110000000000000000
+00101000011000110000000000100100
+00110000001000110000000000000001
+00101000010000100000000000000000
+00101000010000100000000000100100
+00000000010000100000000000001000
+00110000001000100000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000010000000110000000000000
+00111001011010111100001010110000
+01011100001000000000000000000100
+00101001011000010000000000000000
+01011000001000000000000000000000
+11100000000000000000000000100010
+00101001011000010000000000000000
+01011000001000000000000000000000
+00101000001000100000000000110100
+01111000000000010000000000000001
+00111000001000011000100000100100
+11111011111111111111111010010110
+11111000000000000000000010111110
+00101001011000010000000000000000
+00110100000000100000000011100000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111100110000
+00110100000000100000100000000000
+01011000001011000000000000000000
+00110100000000010000000000000000
+11111011111111111111111110101011
+00110100000000010000000011001000
+11111000000000000000010001111011
+00110100000000010000000000000000
+00111000000000101000000000000000
+11111011111111111111111110100110
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110100011
+00110100000000010000000000010000
+00110100000000100000000000000000
+11111011111111111111111110100000
+01111101100000100000000000000000
+00110100000000010000000000000000
+11001000000000100001000000000000
+00100000010000100001001000000000
+00110100010000100000000101000000
+11111011111111111111111110011010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111100110000
+00101000010010110000000000000000
+10111000001000000110000000000000
+00110100000000010000000000000100
+11111011111111111111111101111110
+01111101011010110000000000000000
+00001111100000010000000000010010
+00110100000000010000000000000100
+11001000000010110101100000000000
+11111011111111111111111101111001
+00100001011010110000000000100000
+00001111100000010000000000010010
+00110101011010110000000000000100
+01000101100000000000000000000100
+00110100000000010000000000010100
+11111011111111111111111101110011
+00001101100000010000000000000000
+00101111100000010000000000010010
+10100001011000010000100000000000
+11100100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101100110
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+00111000011000111011111101000000
+10111000010000000101100000000000
+00101000011000100000000000000000
+01011000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011011111101000100
+00101000001011000000000000000000
+00110100000000010000000001000000
+11111011111111111111111101010010
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+10110100001011000000100000000000
+01011001011000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101000011
+00111000001000100000000000000001
+00110100000000010000000001000000
+11111011111111111111111101001100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111100111000
+00110100000000101111111111111110
+10100000001000100001000000000000
+00110100000000010000000001000000
+11111011111111111111111101000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111100001010110000
+00101001011000010000000000000000
+00101000001000100000000000000100
+00111000010000100000000000010000
+01011000001000100000000000000100
+00110100000000010000000000000001
+11111000000000000000010000000011
+00101001011000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000100000
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000001000100
+11111011111111111111111100010111
+00111000001000100000000000100000
+01000101011000000000000000000011
+00110100000000101111111111011111
+10100000001000100001000000000000
+00110100000000010000000001000100
+11111011111111111111111100011101
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111110100000
+00101000010000100000000000000000
+01111000000010110000000000000001
+00111001011010111100001010110000
+01011001011000100000000000000000
+11111011111111111111111100011100
+00110100000000010000000000000001
+11111011111111111111111111100100
+01111000000000100000000000000001
+00111000010000101000111100000100
+00101000010000010000000000000000
+01111000000001000000000000000001
+00111000100001001000111100001000
+01011000001000000000000000000000
+00101001011000010000000000000000
+00101000100000110000000000000000
+00110100000000100000000000000011
+01011000001000000000000000000000
+01011000001000100000000000001100
+01011000001000110000000000001000
+01111000000000110000000000000001
+00111000011000111000111100001100
+01011000001000100000000000000100
+00101000011000100000000000000000
+01011000001000100000000000111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011001011100000100
+00101000001000100000000000000000
+01111000000000010000000000000001
+00111000001000011010011111100000
+01000100010000000000000000000011
+01111000000000010000000000000001
+00111000001000011010011111101000
+00101000001010110000000000000000
+01011101011000000000000000000100
+01111000000000010000000000000001
+00111000001000011000100000101100
+11100000000000000000000000110110
+01111000000000110000000000000001
+00111000011000111000111100010000
+00101000001011000000000000000100
+00101001011000100000000000000000
+00101000011000010000000000000000
+01000100010000010000000000010001
+10111001011000000000100000000000
+01111000000001000000000011111111
+11100000000000000000000000001101
+00101000001000110000000000000000
+00111100011001100000000000011000
+00000000011001010000000000011000
+10111000110001010010100000000000
+10100000011001000011000000000000
+00000000110001100000000000001000
+00100000011000111111111100000000
+00111100011000110000000000001000
+10111000101001100010100000000000
+10111000101000110001100000000000
+01011000001000110000000000000000
+00110100001000010000000000000100
+01010101100000011111111111110100
+01111000000001000000000000000001
+00111000100001001000111100010000
+00101001011000110000000000000000
+00101000100000010000000000000000
+01000100011000010000000000000101
+01111000000000010000000000000001
+00111000001000011000100001000100
+11111011111111111111110110101000
+11100000000000000000000010101011
+01111000000000010000000000000001
+00111000001000011011111100110100
+00101000001000100000000000000000
+00110101011010110000000000000100
+01011100010000000000000000010110
+00101001011000110000000000001000
+00110100000000100001001000110100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000001011
+00101001011000110000000000010000
+00110100000000100101011001111000
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000000110
+00101001011000110000000000011000
+00110100010000100100010001000100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01000100011000100000000000000101
+01111000000000010000000000000001
+00111000001000011000100001101100
+11111011111111111111110110010000
+11100000000000000000000010010011
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110111100000010000000000010100
+11111011111111111111111011001100
+01111000000001100000000000000001
+00111000110001101000111100010100
+00101000110001010000000000000000
+00101001011001110000000000001000
+00101001011001100000000000010000
+00101001011000010000000000011000
+10100000111001010011100000000000
+10100000110001010011000000000000
+10100000001001010000100000000000
+01011001011001110000000000001000
+01011001011001100000000000010000
+01011001011000010000000000011000
+01000011100010000000000000010100
+01000011100010010000000000010101
+00110101011001000000000000001000
+00111101000010000000000000001000
+00110101011000110000000000010000
+10111001000010010100000000000000
+00111101000010000000000000001101
+00110101011000100000000000011000
+10111000111010000011100000000000
+01011001011001110000000000001000
+01000011100001110000000000010110
+01000011100010000000000000010111
+00111000000010011100101011111110
+00111100111001110000000000001000
+10111000111010000011100000000000
+00111100111001110000000000001101
+00110100000010000000000000000001
+10111000110001110011000000000000
+01011001011001100000000000010000
+01000011100001100000000000011000
+01000011100001110000000000011001
+00111100110001100000000000001000
+10111000110001110011000000000000
+00111100110001100000000000001101
+10111000001001100000100000000000
+01111000000001100000000000000001
+00111000110001101000111100011000
+01011001011000010000000000011000
+00101000110001110000000000000000
+10111001011000000000100000000000
+11100000000000000000000000001011
+00101000001001100000000000000000
+00000000110010100000000000001101
+00100001010010101111111111111111
+01011101010010010000000000000110
+00100000110010100000000000000111
+01011101010010000000000000000100
+10100000110001010011000000000000
+10111000110001110011000000000000
+01011000001001100000000000000000
+00110100001000010000000000001000
+01010101100000011111111111110110
+01111000000001110000000000000001
+00111000111001111000111100010100
+01111000000001100000000000000001
+10111001011000000000100000000000
+00110100000001010000000000000000
+00110100000010100000101010101010
+00110100000010010000000000000111
+00101000111010000000000000000000
+00111000110001101001011100000100
+11100000000000000000000000010000
+00101000001001110000000000000000
+00000000111011010000000000001101
+00100001101011011111111111111111
+01011101101010100000000000001011
+00000000111011010000000000000111
+00100001101011010000000000011111
+01011101101010010000000000001000
+10100000111010000011100000000000
+01011000001001110000000000000000
+00101000110001010000000000000000
+00111100101001010000000000001101
+10111000101001110011100000000000
+01011000001001110000000000000000
+10111000001000000010100000000000
+00110100001000010000000000001000
+01010101100000011111111111110001
+01111000000000010000000000000001
+00111000001000011100001010110000
+00101000001000010000000000000000
+00110100000001100000000000000000
+01011000001000000000000000010100
+11100000000000000000000000001111
+00101001011001110000000000000000
+00101001011010010000000000000100
+00110101011010110000000000001000
+00100000111010000000111111111111
+00111101001010010000000000010100
+00000000111001110000000000001100
+01011000001010000000000000011000
+10111001001001110011100000000000
+00111100111001110000000000001000
+00100000110010010000000000111111
+00111000111001110000000001000000
+10111000111010010011100000000000
+01011000001001110000000000010100
+00110100110001100000000000000001
+01010101100010111111111111110010
+01000100101000000000000000001011
+01111000000010000000000000000001
+00111001000010001000111100010100
+00101000101001110000000000000000
+00101001000001100000000000000000
+01111000000010000000000000000001
+00111001000010001000111100011100
+10100000111001100011000000000000
+00101001000001110000000000000000
+10111000110001110011000000000000
+01011000101001100000000000000000
+01111000000001110000000000000001
+00111000111001111000111100010100
+00101000100001100000000000000000
+00101000111001010000000000000000
+01111000000010000000000000000001
+00111001000010001000111100100000
+10100000110001010011000000000000
+01011000100001100000000000000000
+00101000011001100000000000000000
+10100000110001010011000000000000
+01011000011001100000000000000000
+00101000010001100000000000000000
+10100000110001010010100000000000
+01011000010001010000000000000000
+00101000100001100000000000000000
+00101001000001010000000000000000
+10111000110001010010100000000000
+01011000100001010000000000000000
+00101000011001010000000000000000
+01111000000001000000101011001111
+10111000101001000010000000000000
+01111000000001010000000000000001
+01011000011001000000000000000000
+00111000101001011000111100100100
+00101000010001000000000000000000
+00101000101000110000000000000000
+10111000100000110001100000000000
+01011000010000110000000000000000
+00110100000000100000000010000000
+01011000001000100000000000010100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+00110100000000100000000000000000
+11100000000000000000000000000011
+00110100000000000000000000000000
+00110100010000100000000000000001
+01011100010000011111111111111110
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111110000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111111011110
+00101001011000010000000000001000
+11111011111111111111111111101110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111111011001
+00101001011000010000000000001000
+11111011111111111111111111101001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111110000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111111001000
+00101001011000010000000000001000
+11111011111111111111111111011000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111111000011
+00101001011000010000000000001000
+11111011111111111111111111010011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110111110
+00101001011000010000000000001000
+11111011111111111111111111001110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110111001
+00101001011000010000000000001000
+11111011111111111111111111001001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111110000
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110101000
+00101001011000010000000000001000
+11111011111111111111111110111000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111110100011
+00101001011000010000000000001000
+11111011111111111111111110110011
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111110011110
+00101001011000010000000000001000
+11111011111111111111111110101110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000110000000000000001
+00111000011000111010011111110000
+00100000010011110000000011111111
+00110100000011100000000000001000
+10110100011010110101100000000000
+00101001011000010000000000000100
+00100001111000100000000010000000
+00110101110011101111111111111111
+11111011111111111111111110000110
+00101001011000010000000000001000
+00111101111011110000000000000001
+00100001110011100000000011111111
+11111011111111111111111110010100
+00101001011000010000000000000000
+00110100000000100000000000000001
+00110101011011010000000000000100
+11111011111111111111111101111110
+00101001011000010000000000001000
+00110101011011000000000000001000
+00100001111011110000000011111111
+11111011111111111111111110001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101110111
+00101001011000010000000000001000
+11111011111111111111111110000111
+01011101110000001111111111101011
+00101001101000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101110001
+00101001100000010000000000000000
+11111011111111111111111110000001
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101101100
+00101001100000010000000000000000
+11111011111111111111111101111100
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101001101011100000000000000000
+00110100000000100000000000000000
+00101000001000010000000000000100
+10100000001011100111000000000000
+00101001011000010000000000000000
+11111011111111111111111101100001
+00101001100000010000000000000000
+11111011111111111111111101110001
+00101001101000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101011100
+00101001100000010000000000000000
+11111011111111111111111101101100
+01111101110000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000001000000000000000001
+00111000100001001010011111110000
+10110100100010110101100000000000
+00101001011000010000000000000100
+10111000010000001000000000000000
+00110100000000100000000000000001
+00100000011100010000000011111111
+11111011111111111111111100111110
+00101001011000010000000000001000
+01111000000011110000000000000001
+00110100000011100000000000001000
+11111011111111111111111101001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000011010000000000000000
+11111011111111111111111100110110
+00101001011000010000000000001000
+00111001111011111100001010101100
+11111011111111111111111101000101
+00101001011000010000000000000000
+00110100000000100000000000000001
+00111101101011010000000000000001
+11111011111111111111111100101111
+00101001011000010000000000001000
+00100001101011010000000011111111
+11111011111111111111111100111110
+00101001111000010000000000000000
+00101001011000100000000000000100
+00101000001000010000000000000100
+10100000001000100000100000000000
+01000100001000000000000000000010
+00111001101011010000000000000001
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110101110011101111111111111111
+11111011111111111111111100100010
+00101001011000010000000000001000
+00110101011011000000000000001000
+11111011111111111111111100110001
+01011101110000001111111111101100
+01000110001011100000000000000100
+00101001011000010000000000000100
+00110100000000100000000000000001
+11100000000000000000000000000011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111100010111
+00101001100000010000000000000000
+11111011111111111111111100100111
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111100010010
+00101001100000010000000000000000
+11111011111111111111111100100010
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111100001101
+00101001100000010000000000000000
+11111011111111111111111100011101
+00110010000011010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000001
+00111000010000101010011111110000
+10110100010010110101100000000000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111011110101
+00101001011000010000000000001000
+11111011111111111111111100000101
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111011110000
+00101001011000010000000000001000
+11111011111111111111111100000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00100000001010110000000011111111
+10111001011000000000100000000000
+00100000010011000000000011111111
+11111011111111111111111011111010
+00111101100000100000000000000001
+10111001011000000000100000000000
+00100000010000100000000011111110
+11111011111111111111111101000111
+10111000001000000110000000000000
+10111001011000000000100000000000
+11111011111111111111111100101001
+01100101100000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00100000001000010000000000000011
+00111100001000010000000000010000
+10111000001000100001000000000000
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001000010000000000000000
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001000010000000000000000
+01111000000010110000000000000001
+00110100000001000000000000000001
+00101000001000110000000000000000
+00111001011010111100001010100000
+00000000011000100000000000011000
+00100000010000100000000000001111
+01000100010001000000000000000110
+01111000000000010000000000000001
+00111000001000011000100010010100
+11111011111111111111101110110011
+01011001011000000000000000000000
+11100000000000000000000000000110
+01011001011000100000000000000000
+00110100000000100000000000000111
+01011000001000100000000001000000
+00111000011000110000010000000000
+01011000001000110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000011000001000100000000000
+01111000000000110000000000000001
+00111000011000111100001010111100
+10111000100000000110000000000000
+00101000011001000000000000000000
+00110100000010110000000000000000
+00101000100001010000000000000000
+00100000101001010001000000000000
+01011100101000000000000010011100
+01111000000000110000000000000001
+00111000011000111100001010100000
+00101000011000110000000000000000
+10111000101000000101100000000000
+01000100011001010000000010010111
+00110100100011110000000000001000
+01111000000010100100000000000000
+00110100000001000000000000000000
+00110100000010010000000000001101
+00110100000010000000000000000011
+00110100000001110000000000000001
+00101001111100000000000000000000
+11110001001001000011000000000000
+00000010000011100000000000010000
+00100010000011011111111111111111
+00100001110011100000000000000011
+01100101110001010000000000000000
+10100010000010101000000000000000
+10100000101001100011000000000000
+01111110000100000000000000000000
+01000100110000000000000000000111
+00000000100000110000000000000001
+00110100100001000000000000000010
+00111100011000110000000000000001
+10110100001000110001100000000000
+00001100011011010000000000000000
+11100000000000000000000000011110
+11110101011100011001000000000000
+01111101110000110000000000000010
+10100010010000110001100000000000
+01011100011001100000000000000110
+01000100101000110000000000000111
+00000001011000110000000000000001
+00111100011000110000000000000001
+10110100010000110001100000000000
+00001100011011010000000000000000
+00110101011010110000000000000010
+11100000000000000000000000010011
+01011101110010000000000000000111
+00000001011000110000000000000001
+00110101011010110000000000000001
+00111100011000110000000000000001
+10110100010000110001100000000000
+00001100011011010000000000000000
+11100000000000000000000000001100
+01111100100001100000000000000000
+01100101110000110000000000000010
+10100000110000110001100000000000
+01000100011001010000000000001000
+00100001101000010000000000000010
+00110100000011100000000000000010
+01000100001001010000000000001001
+01111000000000010000000000000001
+00111000001000011000100011001000
+11111011111111111111101101011110
+11100000000000000000000000000101
+01011110000000000000000000000011
+01011101110001111111111111010010
+11100000000000000000000000000010
+00110100000100000000000000000001
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001001010000000000000000
+00110100000100100000100000000000
+00110100000000010000000000000000
+00110100101001010000000000001000
+00110100000011110000000000000000
+00110100000000100000000000000001
+00110100000001000000000000000010
+01111000000000110100000000000000
+11100000000000000000000000010000
+01000100001000000000000000000111
+01011100001000100000000000000011
+00111101101011110000000000010000
+11100000000000000000000000000101
+01011100001001000000000000000100
+10111001111011010111100000000000
+11100000000000000000000000000010
+10111001101000001001000000000000
+00101000101100000000000000000000
+00110100001000010000000000000001
+00000010000011100000000000010000
+00100010000011011111111111111111
+10100010000000111000000000000000
+01111110000100000000000000000000
+00100001110011100000000000000011
+01011110000000000000000000000010
+01000101110000101111111111110000
+00110100001000011111111111111111
+00110100000000100000000000000010
+01010000010000010000000000000100
+01000101100000000000000000110000
+00110001100000000000000000000000
+11100000000000000000000000101110
+01000101100000000000000000101101
+00110111100000010000000000101000
+00110111100000100000000000110000
+11111000000000000000011000100100
+01111000000000100000000000000001
+00111000010000101000111100101000
+01111000000000110000000000000001
+00101000010000010000000000000000
+00111000011000111000111100101100
+00101000011000100000000000000000
+10100001111000010000100000000000
+00000001111011110000000000011100
+01010000010000010000000000001110
+01111000000001000000000000000001
+00111000100001001000111100110000
+00101011100000110000000000110000
+00101000100000100000000000000000
+01010100011000100000000000001001
+00101011100001000000000000101100
+00101011100000110000000000101000
+00110100100000101111111111111111
+11110100100000100010000000000000
+00110100011000111111111111111111
+10110100100000110001100000000000
+01011011100000110000000000101000
+01011011100000100000000000101100
+00101011100000100000000000101000
+01011001100000100000000000001000
+00101011100000100000000000101100
+01011001100000100000000000001100
+00100000001000100000000000001111
+11001000010011110111100000000000
+01100101111000101111111111110001
+01100101111011110000000000000001
+10111000010011110111100000000000
+01000101111000000000000000000100
+00110100000000100000000000000001
+01011001100000100000000000000100
+11100000000000000000000000000010
+01011001100000000000000000000100
+00100010010100100000100000000000
+00111100001000010000000000000011
+01100110010100100000000000000000
+01011001100000010000000000010000
+00110001100100100000000000000000
+01111000000000010000000000000001
+00111000001000011100001001111100
+00101000001000100000000000000100
+00110100010000100000000000000001
+01011000001000100000000000000100
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001000010000000000000000
+00101000001000010000000000000000
+00100000001000010010000000000000
+01000100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011000100011110100
+11111011111111111111101011111100
+01010010001010110000000000000010
+10111010001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+01111000000000100000000000000001
+00111000010000101100001010100000
+00101000010000100000000000000000
+10111000001000000111100000000000
+10111000011000000110000000000000
+10111000100000000101100000000000
+00110100000000010000000000000000
+01000100010000000000000010001010
+00101101111000110000000000001100
+00111000000000011000000100000000
+11111100011000010001100000000000
+00110100000000011111111111111100
+11001000000000110001100000000000
+10100000011000010001100000000000
+00110100011000110000000000010010
+10110100011011000001000000000000
+00110100000000010000000000111011
+00010100011100010000000000000001
+01010100010000010000000000000011
+00110100000011000000000000111100
+11001001100000110110000000000000
+00110101100100000000000000000001
+00110100000000010000000000000010
+00110100000000100000000000000000
+00000010000100000000000000000001
+11111011111111111111111100000000
+00110100000011100000000000000000
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111011111010
+00110101111011110000000000000010
+01010110001011101111111111111011
+10111001101000000111100000000000
+00110100000011100000000000000000
+00110110000100001111111111111111
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111011110000
+00110101111011110000000000000010
+01010110000011101111111111111011
+00100001100000100000000000000001
+00111110000000010000000000000001
+01011100010000000000000000000100
+10110101101000010110100000000000
+00110100000000010000000000000000
+11100000000000000000000000000011
+10110101101000010110100000000000
+00110100000000010000000000000011
+00101101101000100000000000000000
+11111011111111111111111011100100
+01000101011000000000000000000111
+00110100000000010000000000000001
+00110100000000100001000000000000
+11111011111111111111111011100000
+00110100000000010000000000000001
+00110100000000100000000000000000
+11111011111111111111111011011101
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001000100000000000000000
+00110100000011010000000000000000
+10111000001000000111100000000000
+00101000010000110000000000000000
+00110100000100000000001111101000
+00111000011000110000000000000001
+01011000010000110000000000000000
+00101001111000010000000000000000
+00101000001011100000000000000000
+00100001110000010000000000000010
+01011100001000000000000000001001
+00110100000000010000000000000001
+00110101101011010000000000000001
+11111000000000000000000010001000
+01011101101100001111111111111001
+01111000000000010000000000000001
+00111000001000011000100100101000
+10111001110000000001000000000000
+11111011111111111111101010010010
+01000101011000000000000000111110
+01111000000011010000000000000001
+00110100000011100000000000000000
+00111001101011011100001010111100
+00110100000011110000000001100100
+00101001101000010000000000000000
+00101000001000100000000000000000
+00100000010000100000100000000000
+01011100010000000000000000001010
+00110100000000010000000000000001
+00110101110011100000000000000001
+11111000000000000000000001110111
+01011101110011111111111111111001
+01111000000000010000000000000001
+00111000001000011000100101011000
+11111011111111111111101010000010
+00110100000011100000000000000000
+11100000000000000000000000000011
+00101000001011100000000000010100
+00100001110011100000000000000001
+01111000000000010000000000000001
+00111000001000011100001010111100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101000111100101000
+00101000001011010000000000011000
+00101000001000010000000000010100
+00101000010000010000000000000000
+00110111100000100000000000101100
+10100001101000010110100000000000
+00110111100000010000000000100100
+11111000000000000000010101100011
+01111000000000110000000000000001
+00111000011000111000111100101100
+00101000011000010000000000000000
+01010000001011010000000000001110
+01111000000000110000000000000001
+00111000011000111000111100110000
+00101011100000100000000000101100
+00101000011000010000000000000000
+01010100010000010000000000001001
+00101011100000110000000000101000
+00101011100000100000000000100100
+00110100011000011111111111111111
+11110100011000010001100000000000
+00110100010000101111111111111111
+10110100011000100001000000000000
+01011011100000100000000000100100
+01011011100000010000000000101000
+00101011100000010000000000100100
+00110001011011100000000000000000
+00111101101011010000000000000011
+01011001011000010000000000001000
+00101011100000010000000000101000
+01011001011000000000000000000100
+01011001011011010000000000010000
+01011001011000010000000000001100
+01111000000000010000000000000001
+00111000001000011100001001111100
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001001111100
+00101000011001000000000000000000
+01011000001001000000000000000000
+00101000011000010000000000000100
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101100001010101100
+00101000010000100000000000000000
+00110100000000110000000000000100
+00101000010000100000000000010000
+01011011100000100000000000001000
+00110111100000100000000000001000
+11111000000000000001100111110000
+00101011100111010000000000000100
+00110111100111000000000000001000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001100001010101100
+00101000100001000000000000000000
+00101000100001010000000000001100
+00000000101001010000000000010000
+00111100101001010000000000001010
+01011000011001010000000000000000
+00101000100000110000000000010100
+01011000010000110000000000000000
+00101000100000100000000000001100
+00000000010000100000000000001000
+00100000010000100000000000000011
+01011000001000100000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001011000000
+00101000010000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+01011000011000100000000000000000
+01000100001000000000000000000101
+00101000010000110000000000011000
+01111000000000011000000000000000
+10111000011000010000100000000000
+11100000000000000000000000000110
+01111000000001000000000000000001
+00111000100001001000111011010100
+00101000010000110000000000011000
+00101000100000010000000000000000
+10100000011000010000100000000000
+01011000010000010000000000011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000011100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010101100
+00101000010000100000000000000000
+00101000010000110000000000011100
+10110100001000110000100000000000
+00101000010000110000000000011100
+11001000011000010001100000000000
+01001000000000111111111111111110
+11000011101000000000000000000000
+01111000000001010000000000000001
+00111000101001011100001010101100
+00101000101001010000000000000000
+01111000000001100000000000000001
+00111000110001101011111100111000
+00101000101010000000000000100100
+00101000101001110000000000100100
+00100001000010001111111111111111
+01011000110010000000000000000000
+00000000111001110000000000010000
+01111000000001100000000000000001
+00111000110001101011111100111100
+01011000110001110000000000000000
+01000100001000000000000000000100
+00101000101001100000000000100000
+00000000110001100000000000010000
+01011000001001100000000000000000
+01000100010000000000000000000100
+00101000101000010000000000100000
+00100000001000011111111111111111
+01011000010000010000000000000000
+01000100011000000000000000000010
+01011000011010000000000000000000
+01000100100000000000000000000010
+01011000100001110000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000111000000000000
+10111000011000000110100000000000
+00110100000000011111111111101010
+01000100011000000000000000110110
+01111000000011000000000000000001
+00111001100011001011111100111000
+00101001100000010000000000000000
+01011100001000000000000000001010
+01111000000000010000000000000001
+00111000001000011000100110001000
+11111011111111111111100111011011
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000100100
+00100000001000011111111111111111
+01011001100000010000000000000000
+01111000000011000000000000000001
+00111001100011001011111100111100
+00101001100000010000000000000000
+01011100001000000000000000001010
+01111000000000010000000000000001
+00111000001000011000100110100000
+11111011111111111111100111001110
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000100100
+00000000001000010000000000010000
+01011001100000010000000000000000
+01011101110000000000000000000110
+01111000000000010000000000000001
+00111000001000011011111100111000
+00101000001000010000000000000000
+01010001011000010000000000001000
+11100000000000000000000000001110
+00110100000000010000000000000001
+01011101110000010000000000001100
+01111000000000010000000000000001
+00111000001000011011111100111100
+00101000001000010000000000000000
+01010100001010110000000000000100
+01011001101000000000000000000000
+00110100000000011111111111101010
+11100000000000000000000000001101
+01111000000000010000000000000001
+00111000001000011011111100111000
+00101000001000010000000000000000
+10110101011000010101100000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00100001011010111111111111111111
+01011000001010110000000000101000
+00101000001000010000000000101100
+01011001101000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111100111000
+00101000011001000000000000000000
+00110100000000111111111111101010
+01010000001001000000000000001010
+01111000000000110000000000000001
+00111000011000111100001010101100
+00101000011000110000000000000000
+00100000001000011111111111111111
+01011000011000100000000000101100
+01111000000000101000000000000000
+10111000001000100000100000000000
+01011000011000010000000000101000
+00110100000000110000000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000100000000000000100
+00111000010000100000000000010000
+01011000001000100000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010101100
+01000100001000000000000000000101
+00101000010000010000000000000000
+00101000001000100000000000110000
+00111000010000100000000000000001
+11100000000000000000000000000101
+00101000010000010000000000000000
+00110100000000101111111111111110
+00101000001000110000000000110000
+10100000011000100001000000000000
+01011000001000100000000000110000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000000000001
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000000000001
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+00101000001000010000000000110000
+00100000001000010000000100000000
+01111100001000010000000000000000
+11000011101000000000000000000000
+01111000000010010000000000000001
+00111001001010011100001010101100
+00101001001010010000000000000000
+01111100001000010000000000000000
+00100000010000100000000000001111
+01011001001000010000000000110100
+00101001001000010000000000110100
+00111100010000100000000000001000
+10111000010000010001000000000000
+01011001001000100000000000110100
+01011001001000110000000001011000
+01011001001001000000000001011100
+01011001001001010000000001100000
+01011001001001100000000001100100
+00101011100000010000000000000100
+01011001001001110000000001101000
+01011001001010000000000001101100
+01011001001000010000000001110000
+00101011100000010000000000001000
+01011001001000010000000001110100
+11000011101000000000000000000000
+01111100010000100000000000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+01111100001000010000000000000000
+00111100010000100000000000000001
+00101000011000110000000000000000
+10111000010000010001000000000000
+01011000011000100000000000111000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010101100
+00101000010000100000000000000000
+00100000001000010000000011111111
+01011000010000010000000000111100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010101100
+00101000010000100000000000000000
+00100000001000010000000011111111
+01011000010000010000000001000000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010101100
+00101000011000110000000000000000
+01011000011000010000000001000100
+01011000011000100000000001001000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001100001010101100
+00101000100001000000000000000000
+01011000100000010000000001001100
+01011000100000100000000001010000
+01011000100000110000000001010100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101100001010101100
+00101000010000100000000000000000
+01011000010000010000000001111000
+11000011101000000000000000000000
+00110111100111001111111111000100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011100001010101100
+00101000001000010000000000000000
+01111000000011000000000000000001
+00111001100011001011111110111100
+00110001100000000000000000000000
+00101000001000100000000000000100
+00110100000000011111111111101101
+00100000010000100000000010000000
+01011100010000000000000001010011
+00110100000000010000000000000001
+11111011111111111111110100101011
+00110100000000010000000000000001
+11111011111111111111110001000000
+00110100000000100000000010100000
+00110100000000010000000000000001
+11111011111111111111110010001110
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111110010001011
+00110100000000010000000000000001
+11111011111111111111110001001110
+00110100000000100000000010100001
+00110100000000010000000000000001
+11111011111111111111110010000110
+00110111100011100000000000111111
+10111001110000000001000000000000
+00110100000000110000000000000001
+00110100000000010000000000000001
+11111011111111111111110011001000
+00110100000000010000000000000001
+11111011111111111111110001100100
+00110100000000010000000000000001
+01000011100011010000000000111111
+11111011111111111111110000101011
+00110100000000010000000000000001
+00110100000000100000000010100001
+11111011111111111111110001111001
+00110100000010111111111111011001
+00110100000100000000000000001111
+00110100000011110000000000010111
+00110100000000010000000000000001
+10111001110000000001000000000000
+00110100000000110000000000000000
+11111011111111111111110010111001
+01000011100000010000000000111111
+10110101101000010110100000000000
+00100001101011010000000011111111
+01010101011100000000000000000011
+10110101011011000001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01011101011011111111111111110101
+00110111100000100000000000111111
+00110100000000010000000000000001
+00110100000000110000000000000001
+11111011111111111111110010101101
+00110100000000010000000000000001
+11111011111111111111110001001001
+01000011100000100000000000111111
+00110100000000011111111111111011
+01011100010011010000000000011111
+00110111100010110000000000100000
+01111000000000100000000000000001
+00111000010000101011111110111100
+00110100000000110000000000010000
+10111001011000000000100000000000
+11111000000000000001101001010000
+10111001011000000000100000000000
+11111000000000000000011100010110
+01111000000000100000000000000001
+00111000010000101011111101001000
+01011100001000000000000000000101
+00110100000000010000000000000001
+01011000010000010000000000000000
+00110100000000011111111111111010
+11100000000000000000000000010000
+00101011100000110000000000110100
+01111000000000010000000000000001
+00111000001000011011111101000000
+01011000001000110000000000000000
+00101011100000110000000000111000
+01111000000000010000000000000001
+00111000001000011011111101000100
+01011000001000110000000000000000
+00101011100000110000000000110000
+01111000000000010000000000000001
+00111000001000011010100000001000
+01011000001000110000000000000000
+00110100000000010000000000000010
+01011000010000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100110110000000000001000
+00110100000110110000000000100000
+10110111011111001101100000000000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+10111011100000000111100000000000
+00110100000000100000000000000001
+00111001011010111010100011010000
+00111001100011001000100110111000
+11100000000000000000000000010010
+10111011100000001000000000000000
+00110111100111001111111111100100
+00110111100011100000000000001011
+00000001110011100000000000000011
+00110101101000100000000000101100
+00111101110011100000000000000011
+00110100000000110000000000010100
+10111001110000000000100000000000
+11111000000000000001100001100100
+00110001110000000000000000010011
+00101001101000100000000000100000
+00101001011000110000000001110100
+10111001100000000000100000000000
+10111001110000000010000000000000
+11111011111111111111100010100110
+00110100000000100000000000000000
+10111010000000001110000000000000
+10111001011000000000100000000000
+11111000000000000001011000011110
+10111000001000000110100000000000
+01011100001000001111111111101100
+10111001111000001110000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100110110000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111101001100
+00101001011000010000000000000000
+01011100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011010100011010000
+11111000000000000001010111100010
+00101001011000010000000000000000
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000010110000000000000001
+00111001011010111010100000010000
+01111000000011000000000000000001
+00110101011011010000000011000000
+00111001100011001010100011010000
+11100000000000000000000000001001
+00101001011000100000000000001000
+00101001011000110000000000001100
+00101001011001000000000000010000
+00101001011011100000000000000000
+10111001100000000000100000000000
+11111000000000000001011010101010
+01011001110000010000000000000000
+00110101011010110000000000011000
+01011101011011011111111111111000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000110000000000000
+11111000000000000000011110100100
+10111000001000000101100000000000
+01001100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011000100111100000
+10111001011000000001000000000000
+11100000000000000000000000000100
+00101001100000100000000000000000
+01111000000000010000000000000001
+00111000001000011000101000001100
+11111011111111111111100001011110
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111101010000
+01011000001000000000000000000000
+01111000000000100000000000000001
+01111000000000010000000000000001
+00111000001000011011111101100100
+00111000010000101011111101010100
+00110100000000111111111111111111
+01011000001000110000000000000000
+01011000010000110000000000000000
+01011000001000000000000000001000
+01011000010000000000000000001000
+01011000010000000000000000000100
+01011000001000000000000000000100
+01011000010000000000000000001100
+01011000001000000000000000001100
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111000000000000001001110011111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100000000010000000000000000
+11111000000000000001010001001100
+10111000001000000101100000000000
+00110100000000100000000000000000
+01011100001000000000000010000001
+11111011111111111111101000011001
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011001010000000000001000
+01111000000000100000000000000001
+00111000010000101011111101010000
+10111000001000000010000000000000
+00101000010000100000000000000000
+01000100101010110000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011101
+11100000000000000000000000010000
+00110100000000010000000000000001
+01000100100000010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011001010000000000000100
+00110100000000010000000000000100
+01001100001001010000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100001010000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001010000000000000100
+00110100000000010000000000000100
+00110100101001010000000000000001
+01011000011001010000000000000100
+01001100001001010000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+01111000000000110000000000000001
+00111000011000111011111101100100
+00101000011001010000000000001000
+01000100101000000000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011100
+11100000000000000000000000001111
+01000100100001010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000001
+00111000011000111011111101100100
+00101000011001000000000000000100
+00110100000000010000000000000100
+01001100001001000000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100000000000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001000000000000000100
+00110100000000010000000000000100
+00110100100001000000000000000001
+01011000011001000000000000000100
+01001100001001000000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+00110100000000010010010100011011
+01001100001000100000000000110000
+01111000000000100000000000000001
+00111000010000101011111101010100
+00101000010001000000000000001000
+00110100000000010000000000000010
+00110100000000101111111111111111
+01011100100000010000000000110001
+01111000000000110000000000000001
+00111000011000111011111101100100
+00101000011000010000000000001000
+01011100001001000000000000101101
+00101000011000100000000000001100
+00110100000000010001111100111111
+11100000000000000000000000000010
+00110100010000101110000011000000
+01001000010000011111111111111111
+01111000000000110000000000000001
+00111000011000111011111101100100
+01011000011000100000000000001100
+01111000000000110000000000000001
+00111000011000111011111101010100
+00101000011000110000000000001100
+00110100000000010001111100111111
+11100000000000000000000000000010
+00110100011000111110000011000000
+01001000011000011111111111111111
+01111000000001000000000000000001
+00111000100001001011111101010100
+01011000100000110000000000001100
+01001100011000100000000000000011
+00110100010001001111000001100000
+11100000000000000000000000000100
+00110100000001000000000000000000
+01001100010000110000000000000010
+00110100010001000000111110100000
+10110100100000110001100000000000
+00000000011000100000000000011111
+10110100010000110001100000000000
+00010100011000100000000000000001
+01001100010000000000000000000011
+00110100010000100001111101000000
+11100000000000000000000000000100
+00110100000000010001111100111111
+01001100001000100000000000000010
+00110100010000101110000011000000
+01011001100000100000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001000
+01111000000000010000000000000001
+00110100010000100000000001100100
+00111000001000011011111101010000
+01011000001000100000000000000000
+00110100000000010000000000000000
+11111000000000000001001100010011
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000001
+10111000001000000101100000000000
+10111000010000000000100000000000
+00111000001000011000101000101100
+11111011111111111111011110101000
+11100000000000000000000000000011
+00110100000000010000000001100100
+11111011111111111111110110010110
+00110100000000010000000000000000
+11111011111111111111100100101111
+01000100001000001111111111111100
+00110100000000010000000000000011
+00110100000000100000000000000000
+00110100000000110000000000000001
+11111000000000000001001000011111
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000101001000100
+11111011111111111111011110011010
+11100000000000000000000000000011
+00110100000000010000000001100100
+11111011111111111111110110001000
+00110100000000010000000000000000
+11111000000000000001001011100000
+01000100001000001111111111111100
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000011110011000
+11111011111111111111011110010000
+01111000000000100000000000000001
+10111000010000000000100000000000
+00111000001000011000101001010100
+11111011111111111111011110001100
+11111011111111111111111100110100
+10111001011000000000100000000000
+11111011111111111111111101001010
+01000100001000001111111111111110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110100000000100000000000000011
+00110100000011000000000000000000
+00110100000011010000001111101001
+01011100001000100000000000100010
+11100000000000000000000000000101
+01000101100011010000000000100111
+11111011111111111111100100000011
+01000100001000000000000000100101
+00110101100011000000000000000001
+10111001011000000000100000000000
+11111011111111111111111100110100
+01000100001000001111111111111010
+01001100001000000000000000000010
+11100000000000000000000000011000
+00110111100000010000000000010100
+00110100000000100000000000000000
+11111000000000000000011010101001
+01001000000000010000000000000111
+00101001011000100000000000000000
+00101011100000010000000000010100
+00110100010000111111111100111000
+01010100011000010000000000000011
+00110100010000100000000011001000
+01010000010000010000000000011101
+00110100000000100000000000000001
+10111001011000000000100000000000
+11111000000000000000011010011111
+01111000000000110000000000000001
+00101001011000100000000000000000
+00111000011000111000101001111100
+01001100001000000000000000000011
+01111000000000110000000000000001
+00111000011000111000101001110100
+01111000000000010000000000000001
+00111000001000011000101010000100
+11111011111111111111011101011010
+11100000000000000000000000010000
+10111001011000000000100000000000
+11111011111111111111111011101001
+10111000001000000110000000000000
+01001000000000010000000000000101
+00101001011000010000000000000000
+11111011111111111110110001100100
+11100000000000000000000000000010
+00110100000011001111111111111111
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000011000000000000000000
+11100011111111111111111111110100
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000001100000000000
+10111000010000000101100000000000
+00110100000000010000100000000000
+10111000011000000001000000000000
+01111000000011000000000000000001
+11111011111111111111101001001001
+00110100000011010000000000001000
+11111011111111111111111111101101
+00111001100011001100001010101100
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101001000011
+10110001011000000000100000000000
+01001100001000000000000000000100
+00110100000000010001000000000000
+00110100000000100000000000000001
+11100000000000000000000000000011
+00110100000000010001000000000000
+00110100000000100000000000000000
+11111011111111111111101000111011
+11111011111111111111111111100000
+00110100000000010000010000000000
+00110100000000100000000000000001
+11111011111111111111101000110111
+00101001100000010000000000000000
+00111101011010110000000000000001
+00110101101011011111111111111111
+00101000001000010000000000000100
+00100000001000010010000000000000
+01111100001000010000000000000000
+10111001011000010101100000000000
+00100001011010110000000011111111
+11111011111111111111111111010100
+01011101101000001111111111101000
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101000101010
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000100000000000
+00110100000000100000000000000001
+11111011111111111111101000011110
+00110100000000010000010000000000
+00110100000000100000000000000000
+11111011111111111111101000011011
+00110100000000010001000000000000
+00110100000000100000000000000000
+11111011111111111111101000011000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+00110100000000010000000000000001
+00110100000000100000000000000000
+10111000011000000110000000000000
+11111011111111111111111110110111
+00110100000000100000000000001011
+00110100000000010000000000000000
+11111011111111111111111110110100
+00000001011000110000000000010000
+00110100000000010000000000000000
+00100000011000100000000011111111
+11111011111111111111111110110000
+00100001011000111111111100000000
+00000000011000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111110101100
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111110101001
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110100110
+00110100000010110000000000000000
+11100000000000000000000000000111
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111110100001
+10110101101010110001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01001001100010111111111111111010
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111110011010
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000101100000000000
+00110100000000010000000000000001
+11111011111111111111111110001100
+00110100000000100000000000000110
+00110100000000010000000000000000
+11111011111111111111111110001001
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111110000110
+00110100000000100000000011011000
+00110100000000010000000000000000
+11111011111111111111111110000011
+00000001011000100000000000010000
+00110100000000010000000000000000
+00100000010000100000000011111111
+11111011111111111111111101111111
+00100001011000101111111100000000
+00000000010000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111101111011
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111101111000
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101110101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101101011
+00110100000000100000000000000101
+00110100000000010000000000000000
+11111011111111111111111101101000
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111101100101
+10111000001000000101100000000000
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111101100001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110100100
+00101001011011000000000000001000
+10111000010000000110100000000000
+10111000001000000111100000000000
+10111000010000000000100000000000
+10111001100000000001000000000000
+11111000000000000001010111110100
+01111100001011100000000000000000
+10111001100000000001000000000000
+10111001101000000000100000000000
+11111000000000000001010111100000
+10110101110000010111000000000000
+00110100000011000000000000000000
+11100000000000000000000000001001
+00101001011000100000000000001000
+10001001100000100001000000000000
+10110100010011110000100000000000
+11111011111111111111111110110000
+11111011111111111111111111010001
+00100000001000100000000000000001
+01011100010000001111111111111110
+00110101100011000000000000000001
+01001001110011001111111111111000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+00110100000000010000000000000001
+00110100000000100000000000000000
+10111000011000000110000000000000
+11111011111111111111111100101001
+00110100000000100000000000000110
+00110100000000010000000000000000
+11111011111111111111111100100110
+00110100000000100000000000000000
+00110100000000010000000000000001
+11111011111111111111111100100011
+00110100000000100000000000000010
+00110100000000010000000000000000
+11111011111111111111111100100000
+00000001011000110000000000010000
+00110100000000010000000000000000
+00100000011000100000000011111111
+11111011111111111111111100011100
+00100001011000111111111100000000
+00000000011000100000000000001000
+00110100000000010000000000000000
+11111011111111111111111100011000
+00100001011000100000000011111111
+00110100000000010000000000000000
+11111011111111111111111100010101
+00110100000010110000000000000000
+11100000000000000000000000000110
+10110101101010110001000000000000
+01000000010000100000000000000000
+00110100000000010000000000000000
+00110101011010110000000000000001
+11111011111111111111111100001110
+01001001100010111111111111111011
+00110100000000010000000000000001
+00110100000000100000000000000000
+11111011111111111111111100001010
+11111011111111111111111110011001
+00100000001000010000000000000001
+01011100001000001111111111111110
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011000000000000000001
+00111001011010111010111011100000
+00111001100011001010111011101100
+11100000000000000000000000000101
+00101001011000100000000000000000
+10111001011000000000100000000000
+00110101011010110000000000001100
+11011000010000000000000000000000
+01010101100010111111111111111100
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001011010111010111011100000
+00111001101011011010111011101100
+11100000000000000000000000000110
+00101001011000100000000000000000
+10111001011000000000100000000000
+00110101011010110000000000001100
+11011000010000000000000000000000
+10110101100000010110000000000000
+01010101101010111111111111111011
+01101001100000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+01111000000011010000000000000001
+10111000001000000111000000000000
+00111001011010111010111011100000
+00111001101011011010111011101100
+11100000000000000000000000001100
+00101001011011000000000000001000
+11100000000000000000000000000111
+10111001110000000001000000000000
+11111000000000000001011010011101
+01011100001000000000000000000011
+00101001100000010000000000000100
+11100000000000000000000000000111
+00110101100011000000000000001000
+00101001100000010000000000000000
+01011100001000001111111111111001
+00110101011010110000000000001100
+01010101101010111111111111110101
+01111000000000011000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+10111000001000000001100000000000
+01011100001000000000000000001000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011010111011100000
+00111000010000101010111011101100
+01000100001000100000000000000011
+00101000001000010000000000001000
+11000011101000000000000000000000
+00101000011000100000000000001000
+00110100011000010000000000001000
+01011100010000000000000000010110
+01111000000000100000000000000001
+01111000000001000000000000000001
+00111000010000101010111011100000
+00111000100001001010111011101100
+11100000000000000000000000001111
+00101000010000010000000000001000
+11100000000000000000000000001010
+01011100001000110000000000001000
+01111000000000110000000000000001
+00110100010000100000000000001100
+00111000011000111010111011101100
+00110100000000010000000000000000
+01010000010000110000000000001001
+00101000010000010000000000001000
+11000011101000000000000000000000
+00110100001000010000000000001000
+00101000001001010000000000000000
+01011100101000001111111111110110
+00110100010000100000000000001100
+01010100100000101111111111110010
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000111000
+01011011100011000000000000110100
+01011011100011010000000000110000
+01011011100011100000000000101100
+01011011100011110000000000101000
+01011011100100000000000000100100
+01011011100100010000000000100000
+01011011100100100000000000011100
+01011011100100110000000000011000
+01011011100101000000000000010100
+01011011100101010000000000010000
+01011011100101100000000000001100
+01011011100101110000000000001000
+01011011100111010000000000000100
+10111000001000000111000000000000
+00110100000000010000000000000000
+10111000010000001011100000000000
+01111000000101000000000000000001
+11111011111111111111111111001011
+01111000000100110000000000000001
+01111000000100100000000000000001
+01111000000100010000000000000001
+01111000000100000000000000000001
+01111000000011110000000000000001
+10111000001000000110100000000000
+00110100000101010000000000000000
+00110100000010110000000000000000
+00111010100101001000000011100000
+00111010011100110111110001011000
+00111010010100101000101010110000
+01111000000101101000000000000000
+00111010001100011000011111010000
+00111010000100000111100101001000
+00111001111011111000011111001000
+11100000000000000000000000101000
+00110101011000100000000000001111
+10110101110010110000100000000000
+01001010111000100000000000000110
+01111000000000100000000000000001
+00111000010000101000101010101000
+11111011111111111111010110011011
+10110101011000010101100000000000
+11100000000000000000000000100001
+00101001101011000000000000000100
+10111010100000000001100000000000
+01000110101000000000000000000010
+10111010011000000001100000000000
+00101001101001000000000000000000
+10111010010000000001000000000000
+11111011111111111111010110010010
+10110100001010110101100000000000
+01011101100101100000000000000101
+10110101110010110000100000000000
+10111001111000000001000000000000
+11111011111111111111010110001101
+11100000000000000000000000001110
+01001101100000000000000000000110
+10110101110010110000100000000000
+10111010000000000001000000000000
+11111011111111111111010110001000
+11001000000011000110000000000000
+10110101011000010101100000000000
+00100001100001001111111111111111
+00001000100001000010011100010000
+00010101100000110000000000010000
+10110101110010110000100000000000
+00000000100001000000000000010000
+10111010001000000001000000000000
+11111011111111111111010101111111
+10110100001010110101100000000000
+10111001101000000000100000000000
+11111011111111111111111110010110
+10111000001000000110100000000000
+00110110101101010000000000000001
+01011101101000001111111111011001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000111000
+00101011100011000000000000110100
+00101011100011010000000000110000
+00101011100011100000000000101100
+00101011100011110000000000101000
+00101011100100000000000000100100
+00101011100100010000000000100000
+00101011100100100000000000011100
+00101011100100110000000000011000
+00101011100101000000000000010100
+00101011100101010000000000010000
+00101011100101100000000000001100
+00101011100101110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111110101000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110111100010110000000000001100
+10111001011000000000100000000000
+00110100000000100000000001010000
+11111011111111111111111110011101
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000010111100111101000
+11111011111111111111010101101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000001011000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111010100
+00101000001000010000000000000000
+00101000001000100000000000001000
+00101000001000010000000000001100
+00100000001000010000000011111111
+11000011101000000000000000000000
+01111000000000010000000000000001
+01111000000000110000000000000001
+00111000011000111000111100110100
+00111000001000011011111111010100
+00101000001000010000000000000000
+00101000011000100000000000000000
+01111000000001000000000000000001
+00111000100001001000111100111000
+01011000001000100000000000000000
+01011000001000000000000000010100
+00101000100000110000000000000000
+01011000001000000000000000011000
+01011000001000000000000000010000
+01011000001000110000000000000000
+01011000001000100000000000000000
+01011000001000000000000000011100
+11000011101000000000000000000000
+01111000000001000000000000000001
+00110100000001010000000000000010
+00111000100001001011111111010100
+01011100001001010000000000001110
+00101000100000010000000000000000
+00010100010001000000000000011111
+00100000100001000000000000000111
+10110100100000110001100000000000
+11110100100000110010000000000000
+00000000011000110000000000000011
+10110100100000100001000000000000
+00111100010000100000000000011101
+01011000001000000000000000010100
+01011000001000000000000000011000
+10111000010000110001100000000000
+01011000001000110000000000010000
+11100000000000000000000000000110
+00101000100000010000000000000000
+00100000010000100000000011111111
+01011000001000110000000000010100
+01011000001000100000000000011000
+01011000001000000000000000010000
+01111000000000010000000000000001
+00111000001000011011111111010100
+00101000001000010000000000000000
+00101000001000100000000000000000
+00111000010000100000000000000100
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+01111000000001010000000000000001
+00111000101001011011111111010100
+00101000101001010000000000000000
+00100000001000010000000011111111
+00000000011000110000000000000011
+01011000101000100000000000010100
+01011000101000010000000000011000
+01011000101000110000000000010000
+00110100000000010000000000000011
+01011100100000010000000000000111
+00101000101000100000000000000000
+00110100000000011111111111110011
+10100000010000010000100000000000
+00111000001000010000000000001000
+01011000101000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000001
+01011100100000010000000000000111
+00101000101000100000000000011100
+00110100000000011111111111100111
+10100000010000010000100000000000
+00111000001000010000000000010000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110100000000010000000000000010
+01011100100000010000000000000110
+00101000101000100000000000011100
+00110100000000011111111111000111
+10100000010000010000100000000000
+00111000001000010000000000100000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111000001000011000111100101000
+00101000001011110000000000000000
+01111000000010110000000000000001
+10111000010000000110100000000000
+00111001011010111011111111010100
+11111011111111111111111110011010
+10111000001000001000100000000000
+00101001011000010000000000000000
+10111000010000001000000000000000
+00101000001011100000000000000100
+10100001110011110111000000000000
+11111011111111111111111110010100
+01011100001100011111111111111001
+01011100010100001111111111111000
+01000101100000000000000000000011
+01011001100000010000000000000000
+01011001100000100000000000000100
+01000101101000000000000000000011
+00111101110000010000000000000011
+01011001101000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111010100
+00101000001000010000000000000000
+00101000001000010000000000000000
+00100000001000010000000000000100
+01100100001000010000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111010100
+00101000010000100000000000000000
+00101000010000110000000000011100
+01000100001000000000000000000011
+00111000011000110000000000001100
+11100000000000000000000000000011
+00110100000000011111111111110011
+10100000011000010001100000000000
+01011000010000110000000000011100
+00110100000000010000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111010100
+00101000010000100000000000000000
+00101000010000110000000000011100
+01000100001000000000000000000011
+00111000011000110000000000000010
+11100000000000000000000000000011
+00110100000000011111111111111101
+10100000011000010001100000000000
+01011000010000110000000000011100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001010110000000000000100
+10111000100000000110100000000000
+10111000011000000111100000000000
+01000001011000010000000000000011
+10111000010000000110000000000000
+00110101101011101111111111111111
+11111011111111111111011111011100
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111100000101000
+00010101100000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111100000100100
+01000001011000010000000000000011
+00100001100000100000000011111111
+00110100000011000000000000000000
+11111011111111111111100000100000
+01000001011000010000000000000011
+11111011111111111111011111100011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00111000010000100000000000000001
+00100000010000100000000011111111
+11111011111111111111100000011000
+11100000000000000000000000000101
+00100000101000010000000011111111
+00110100000000110000000000000000
+11111011111111111111100001011011
+00110101100011000000000000000001
+10110101111011000001000000000000
+00101001011001010000000000000000
+01001001110011001111111111111010
+00100000101000010000000011111111
+00110100000000110000000000000001
+11111011111111111111100001010100
+01000001011000010000000000000011
+11111011111111111111011111110000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110100000011010000000000000000
+10111000010000000110000000000000
+10111000011000000111000000000000
+00101000001010110000000000000100
+11100000000000000000000000100001
+01000001011000010000000000000011
+11111011111111111111011110100011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011111101111
+00010101100000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111011111101011
+01000001011000010000000000000011
+00100001100000100000000011111111
+00110101100011000000000000000001
+11111011111111111111011111100111
+01000001011000010000000000000011
+00110100000000100000000011111111
+11111011111111111111011111100100
+01000001011000010000000000000011
+11111011111111111111011111000111
+01000001011000010000000000000011
+11111011111111111111011110001111
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011111011011
+10111000001000000111100000000000
+01000001011000010000000000000011
+11111011111111111111011110111101
+01011101111000001111111111110110
+00110101101011010000000000000001
+01001001110011011111111111100000
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000010000000110100000000000
+10111000011000000111100000000000
+10111000100000000111000000000000
+00101000001010110000000000000100
+11100000000000000000000000100010
+01000001011000010000000000000011
+11111011111111111111011101101011
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011110110111
+00010101101000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111011110110011
+01000001011000010000000000000011
+00100001101000100000000011111111
+00110101101011010000000000000001
+11111011111111111111011110101111
+10110101111011000001000000000000
+01000001011000010000000000000011
+01000000010000100000000000000000
+11111011111111111111011110101011
+01000001011000010000000000000011
+11111011111111111111011110001110
+01000001011000010000000000000011
+11111011111111111111011101010110
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111011110100010
+10111000001000001000000000000000
+01000001011000010000000000000011
+11111011111111111111011110000100
+01011110000000001111111111110110
+00110101100011000000000000000001
+01001001110011001111111111011111
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+11111011111111111111110101111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+10111000100000000001100000000000
+11111011111111111111110110011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101011000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101111001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000000000100
+11111000000000000000100101011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100000000010000000000000011
+10111000010000000110100000000000
+10111000011000000111000000000000
+00110100000010111111111111111100
+01010100011000010000000001110010
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101000100
+00101000011000100000000000000000
+01111000000011110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001111011111010100110001000
+10111001111000000000100000000000
+11111000000000000001000111011010
+00110100000010111111111111111111
+01001000000000010000000001100011
+01011101110000000000000000010111
+01111000000001000000000000000001
+00111000100001001011111110000010
+00110000100000000000000000000000
+00110100000000100000000000000001
+00110111100100000000000000101000
+00110111100100100000000000111000
+00110100000100010000000011111111
+10111000100000000101100000000000
+11100000000000000000000000000110
+01000000010000010000000000000000
+01000100001100010000000000001100
+00110100010000100000000000000001
+01011100010100101111111111111101
+11100000000000000000000001100000
+10111001111000000000100000000000
+10111010000000000001100000000000
+00110100000001000000000000011101
+11111000000000000001001000001000
+00110100000000100000000000011101
+01011100001000100000000000000011
+10111010000000000001000000000000
+11100011111111111111111111110100
+00110100000000010000000000000001
+01011101101000010000000000000111
+01111000000000010000000000000001
+00111000001000011011111110000010
+01000000001000100000000000000000
+00110100000000010000000000000100
+00110100000010111111111111111110
+01000100010000010000000001000001
+10111001110011010000100000000000
+01011100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011111110000010
+01000000001000010000000000000000
+00110100000010110000000000000000
+01000100001010110000000000111010
+11100000000000000000000000000010
+01011101101000000000000000011010
+00001001110000100000000000011101
+01111000000000010000000000000001
+00111000001000011010100110001000
+00110100010000100000000000000001
+10111001100000000001100000000000
+00110100000001000000000000011101
+11111000000000000001000111101100
+00110100000000100000000000011101
+00110100000010111111111111111111
+01011100001000100000000000101110
+10111001100000000000100000000000
+00110101100000110000000000011100
+00110100000000100000000000000000
+01000000001001000000000000000000
+00110100001000010000000000000001
+10110100010001000001000000000000
+00100000010000100000000011111111
+01011100001000111111111111111100
+01000001100000010000000000011100
+01000100001000100000000000100001
+01111000000000010000000000000001
+00111000001000011000101011001100
+11111011111111111111001110011011
+00110100000010111111111111111111
+11100000000000000000000000011111
+00110100000000010000000000000001
+01011101101000010000000000011010
+10111001100000000000100000000000
+00110101100000110000000000011100
+00110100000000100000000000000000
+01000000001001000000000000000000
+00110100001000010000000000000001
+10110100010001000001000000000000
+00100000010000100000000011111111
+01011100001000111111111111111100
+01111000000011010000000000000001
+00110001100000100000000000011100
+00111001101011011011111110000010
+01000001101000100000000000000000
+01111000000000010000000000000001
+00111000001000011010100110001000
+00001000010000100000000000011101
+10111001100000000001100000000000
+00110100000001000000000000011101
+00110100010000100000000000000001
+11111000000000000001000111110001
+00110100000000100000000000011101
+00110100000010111111111111111111
+01011100001000100000000000000111
+01000001101000010000000000000000
+00110100001000010000000000000001
+00110001101000010000000000000000
+01111000000000010000000000000001
+00111000001000011011111110000010
+01000000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000001000110100110
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+01000001011000100000000000000000
+00110100010000100000000000000001
+00100000010000100000000011111111
+00110001011000100000000000000000
+00001000010000100000000000011101
+00110100010000100000000000000001
+11100011111111111111111110011011
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+10111000011000000001000000000000
+10111000100000000001100000000000
+11111011111111111111110001011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111011000
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+01111000000000010000000000000001
+00111000001000011000111101001000
+00101000001011100000000000000000
+01111000000010110000000000000001
+01011011100000000000000000101000
+00111001011010111001001111110100
+00110100000011000000000000000000
+00110100000011010000000000000111
+00101001011000010000000000000000
+00110111100110110000000000101000
+10111011011000000001000000000000
+00110100000000110000000000000100
+11111011111111111111110001000011
+00101011100000010000000000101000
+00110101011010110000000000000100
+01000100001011100000000000000011
+00110101100011000000000000000001
+01011101100011011111111111110111
+01111000000000010000000000000001
+00111000001000011000111101001000
+00101000001000100000000000000000
+00101011100000010000000000101000
+01000100001000100000000000001010
+01111000000011010000000000000001
+00111001101011011001010000010000
+01111000000011000000000000000001
+10111001101000000111000000000000
+00110100000010110000000000000000
+00111001100011001100000111110000
+10111000010000001000100000000000
+00110100000100000000000000000110
+11100000000000000000000000011011
+01111000000000010000000000000001
+00111101100011000000000000000010
+00111000001000011001001111110100
+10110100001011000000100000000000
+00101000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011000101011101000
+10111001011000000001000000000000
+11111011111111111111001100101000
+01111000000000110000000000000001
+00111000011000111011111110100100
+00101000011000100000000000001000
+01111000000000010000000000000001
+00111000001000011010100110001000
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100001001011101000
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100001000000100000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001000000000000000000100
+01011000001010110000000000001100
+00111000010000100001000000000000
+11100000000000000000000000101011
+00101001110000100000000000000000
+10111001100000000000100000000000
+10111011011000000001100000000000
+00110100000001000000000000000100
+11111000000000000000100001100000
+00110100000000100000000000000100
+01011100001000100000000000000110
+00101011100000010000000000101000
+00110101110011100000000000000100
+01000100001100010000000000000011
+00110101011010110000000000000001
+01011101011100001111111111110101
+01111000000000010000000000000001
+00111000001000011000111101001000
+00101000001100000000000000000000
+00101011100000010000000000101000
+01011100001100000000000000011100
+00111101011010110000000000000010
+01111000000000010000000000000001
+00111000001000011001010000010000
+10110100001010110000100000000000
+00101000001010110000000000000000
+01111000000000010000000000000001
+00111000001000011000101100001000
+10111001011000000001000000000000
+11111011111111111111001011111101
+01111000000000010000000000000001
+00111000001000011010100110001000
+00110100000000100000000000000001
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100001000001000100
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100001000001111100
+01111000000000110000000000000001
+00111000011000111100000111110000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001000110000000000000100
+01011000001010110000000000001100
+00111000010000100001000001100000
+01011000001000100000000000100100
+11100000000000000000000000111010
+01111000000010110000000000000001
+00111001011010111011111101111000
+01111000000011100000000000000001
+01011001011011110000000000000000
+01011001011000000000000000000100
+00110100000100010000000001111111
+00111001110011101010100110001000
+00110100000110110000000000000110
+11100000000000000000000000101111
+01000001011000010000000000000011
+00100000010000100000000011111111
+10111001101000000111100000000000
+11111011111111111111011011111111
+00110100000011000000000000000000
+01000100001000000000000000100110
+00101001111000100000000000000000
+10111001110000000000100000000000
+00110111100000110000000000101000
+00110100000001000000000000000100
+11111011111111111111111000010000
+00101011100000010000000000101000
+00110101111011110000000000000100
+01000100001100000000000000000011
+00110101100011000000000000000001
+01011101100110111111111111110111
+00101011100000010000000000101000
+01011100001100000000000000011010
+00111101100011000000000000000010
+01111000000000010000000000000001
+00111000001000011001010000010000
+10110100001011000000100000000000
+00101000001011000000000000000000
+00101001011000110000000000000100
+01111000000000010000000000000001
+10111001100000000001000000000000
+00111000001000011000101100100100
+11111011111111111111001011000110
+01111000000000010000000000000001
+00111000001000011010100110001000
+00110100000000100000000000000001
+01011000001000100000000000001000
+01111000000000100000000000000001
+00111000010000100000110101011100
+01011000001000100000000000011100
+01111000000000100000000000000001
+00111000010000100000111100011000
+01011000001000100000000000100000
+01111000000000100000000000000001
+01011000001010110000000000000100
+01011000001011000000000000001100
+00111000010000100000111001000000
+11100011111111111111111111001011
+00101001011000010000000000000100
+00110100001000010000000000000001
+01011001011000010000000000000100
+00101001011000100000000000000100
+01001110001000101111111111010001
+01111000000000010000000000000001
+01111000000010110000000000000001
+00110100000000100000000000000001
+00111000001000011011111101110100
+00111001011010111010100110001000
+00110000001000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000000000100
+01111000000011000000000000000001
+00110100000000100000000000000001
+00111001100011001000101101001000
+11100000000000000000000000001000
+00101000100000100000000000100000
+00101000100000110000000000001100
+00110000100000000000000000111111
+10111001100000000000100000000000
+00110100100001000000000000101100
+11111011111111111111001010100000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000000011001
+10111000001000000010000000000000
+01011100001000001111111111110110
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100110110000000000001000
+00110111100111000000000000101000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101001100
+10111000010000000101100000000000
+01111000000011010000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001101011011010100110001000
+10111001101000000000100000000000
+11111000000000000001000001111011
+00110100000000101111111111111111
+01001000000000010000000001001110
+10111001101000000000100000000000
+00110100000000100000000000000000
+10111001011000000001100000000000
+00110100000001000000000000000110
+11111000000000000001000010110111
+10111000001000000110000000000000
+10111001101000000000100000000000
+11111000000000000001000010100001
+01001101100000000000000000000110
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101101100100
+00111000010000101001000011010100
+11111011111111111111001001101101
+01000001011000010000000000000000
+00110100000000100000000011111111
+01000100001000100000000000001101
+01000001011000110000000000000001
+01000001011000100000000000000010
+10111000011000100001000000000000
+10111000001000100000100000000000
+01000001011000100000000000000011
+10111000001000100000100000000000
+01000001011000100000000000000100
+10111000001000100000100000000000
+01000001011000100000000000000101
+10111000001000100000100000000000
+00100000001000010000000011111111
+01011100001000000000000000001000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101101110100
+00111000010000101001000011010100
+11111011111111111111001001011001
+00110100000011001111111111111111
+11100000000000000000000000000011
+00110100000000100000000000000000
+01001101100000000000000000101000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001000011010100
+00111000001000011000101110001100
+11111011111111111111001001010000
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011100000111110000
+00111000010000101100001000000000
+00110100001001100000000010010000
+00110100000001010000000000100010
+00110100000001000000000000110011
+00101000010000010000000000000100
+00100000001000110000000011111111
+01111100011001110000000001000010
+01111100011000110000000000101000
+10100000111000110001100000000000
+01011100011000000000000000001100
+00101000010000110000000000000000
+00110100000011000000000000000000
+00110001011001010000000000000000
+00110001011000110000000000000010
+00000000001000110000000000011000
+00110001011001000000000000000001
+00110001011000110000000000000011
+00000000001000110000000000010000
+00000000001000010000000000001000
+00110001011000110000000000000100
+00110001011000010000000000000101
+00110100010000100000000000010000
+01011100010001101111111111101110
+00110100000000100000000000000000
+01000101100000000000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000010000101001000011010100
+00111000001000011000101110101000
+11111011111111111111001000101111
+00110100000000101111111111111111
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101001100
+10111000010000000110100000000000
+01111000000010110000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100110001000
+10111001011000000000100000000000
+11111000000000000001000000010010
+10111000001000000110000000000000
+01001000000000010000000000001011
+00101001011000110000000001110000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000001000010100111
+10111001011000000000100000000000
+00110100000000100000000000000000
+10111001101000000001100000000000
+00110100000001000000000000000110
+11111000000000000001000001110110
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000001000000110011
+00110100000000010000000000000000
+01001101100000000000000000000111
+01111000000000010000000000000001
+01111000000000100000000000000001
+00111000001000011000101110111000
+00111000010000101001001111100000
+11111011111111111111000111111110
+00110100000000011111111111111111
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101000100
+00101000011000100000000000000000
+01111000000010110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100110001000
+10111001011000000000100000000000
+11111000000000000000111111100100
+10111000001000000001000000000000
+00110100000000011111111111111111
+01001000000000100000000000001110
+00101001011000110000000001110000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000001000001111000
+10111000001000000110000000000000
+00101001011000010000000001110000
+01011101100000010000000000000010
+00110100000011000000000000000001
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000001000000000110
+01111101100000010000000000000001
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000001000000101100000000000
+00110100000011010000000000000001
+00110111100011100000000000011000
+11100000000000000000000000100111
+10111001110000000000100000000000
+00110100000000100000000000000000
+10111001100000000001100000000000
+11111011111111111111110111001010
+00100000001011010000000011111111
+01000101101000000000000000100010
+10111001110000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000000010000
+11111000000000000001001011010111
+00110101100011000000000000000001
+01011100001000000000000000011011
+00101011100000010000000000101100
+00000000001000100000000000011000
+00110001011000010000000000010111
+00110001011000100000000000010100
+00000000001000100000000000010000
+00110001011000100000000000010101
+00000000001000100000000000001000
+00101011100000010000000000110000
+00110001011000100000000000010110
+00000000001000100000000000011000
+00110001011000010000000000011011
+00110001011000100000000000011000
+00000000001000100000000000010000
+00110001011000100000000000011001
+00000000001000100000000000001000
+00101011100000010000000000101000
+00110001011000100000000000011010
+00000000001000100000000000011000
+00110001011000010000000000010011
+00110001011000100000000000010000
+00000000001000100000000000010000
+00110001011000100000000000010001
+00000000001000100000000000001000
+00110100000000010000000000000001
+00110001011000100000000000010010
+11100000000000000000000000000011
+01001001101011001111111111011010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111100101000
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+00100000010000100000000011111111
+10111000001000000110000000000000
+00100000011000110000000011111111
+01000100010000000000000001000100
+01000000001000100000000000000000
+01000000001001000000000000000001
+01000000001111010000000000000101
+01000000001110110000000000000110
+01000000001110010000000000000111
+01000000001110000000000000001000
+01000000001101110000000000001001
+01000000001101100000000000001010
+01000000001101010000000000001011
+01000000001101000000000000001100
+01000000001100110000000000001101
+01000000001100100000000000001110
+01000000001100010000000000001111
+01000000001100000000000000010000
+01000000001011110000000000010001
+01000000001011100000000000010010
+01000000001011010000000000010011
+01000000001010110000000000010100
+01000000001010100000000000010101
+01000000001010010000000000010110
+01000000001010000000000000010111
+01000000001001110000000000011000
+01000000001001100000000000011001
+01000000001001010000000000011010
+01000000001000110000000000011011
+01000000001000010000000000011100
+00110011100000100000000010111100
+00110011100001000000000010111101
+01000001100000100000000000000010
+00110011100000100000000010111110
+01000001100000100000000000000011
+00110011100000100000000010111111
+01000001100000100000000000000100
+00110011100000100000000011000000
+00110011100000010000000011011000
+00110111100000010000000010111100
+00110011100111010000000011000001
+00110011100110110000000011000010
+00110011100110010000000011000011
+00110011100110000000000011000100
+00110011100101110000000011000101
+00110011100101100000000011000110
+00110011100101010000000011000111
+00110011100101000000000011001000
+00110011100100110000000011001001
+00110011100100100000000011001010
+00110011100100010000000011001011
+00110011100100000000000011001100
+00110011100011110000000011001101
+00110011100011100000000011001110
+00110011100011010000000011001111
+00110011100010110000000011010000
+00110011100010100000000011010001
+00110011100010010000000011010010
+00110011100010000000000011010011
+00110011100001110000000011010100
+00110011100001100000000011010101
+00110011100001010000000011010110
+00110011100000110000000011010111
+11111011111111111111111101110101
+01011100001000000000000000001001
+01111000000000010000000000000001
+00111000001000011000101111010100
+11111011111111111111000101000001
+10111001100000000000100000000000
+00110100000000100000000000000001
+00110100000000110000000000000000
+11111011111111111111110101000101
+11100000000000000000000001100011
+01111000000000010000000000000001
+00111000001000011000101111101100
+11111011111111111111000100111001
+00110100000011010000000000000000
+00110100000010110000000000000001
+00110111100100010000000001001000
+00110111100100000000000011011100
+11100000000000000000000001000110
+00001001101011100000000000011101
+00110100000000100000000000000000
+10111001101000000001100000000000
+10110110001011100111100000000000
+10111001111000000000100000000000
+11111011111111111111110100110110
+10111000001000000101100000000000
+01001100000000010000000001010100
+10111001111000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000000010000
+11111000000000000001001001000011
+01011100001000000000000000111000
+01000001100001010000000000010100
+01000001100000010000000000010101
+01000001100000110000000000010110
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000010111
+10110110000011100001000000000000
+00110100010001001111111110000000
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111110000000
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+01000001100001010000000000011000
+01000001100000010000000000011001
+01000001100000110000000000011010
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000011011
+00110100010001001111111110000100
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111110000100
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+01000001100001010000000000010000
+01000001100000010000000000010001
+01000001100000110000000000010010
+00111100101001010000000000011000
+00111100001000010000000000010000
+00111100011000110000000000001000
+10111000001001010000100000000000
+10111000011000010001100000000000
+01000001100000010000000000010011
+00110100010001001111111101111100
+10111000001000110001100000000000
+00000000011000010000000000011000
+00110000010000011111111101111100
+00000000011000010000000000010000
+00110000100000110000000000000011
+00110000100000010000000000000001
+00000000011000010000000000001000
+00110000100000010000000000000010
+00110101101011010000000000000001
+01001001011011011111111110111011
+11111011111111111111111011110111
+00110100000000101111111111111111
+10111001011000000111000000000000
+00110100000011000000000000000000
+00110111100011010000000001001000
+01011100001000100000000000001101
+01111000000000010000000000000001
+00111000001000011000001010001000
+11111011111111111111000011100101
+00110100000010111111111111111111
+11100000000000000000000000001011
+00001001100000010000000000011101
+00110100000000100000000000000001
+00110100000000110000000000000000
+10110101101000010000100000000000
+11111011111111111111110011100110
+00110101100011000000000000000001
+01001000000000010000000000000011
+10111001100000000000100000000000
+01001001110011001111111111111000
+10111000001000000101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000011011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101010000
+00100000010011100000000011111111
+01111000000010110000000000000001
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100110001000
+10111000001000000110100000000000
+10111001011000000000100000000000
+11111000000000000000111010101110
+00110100000011001111111111111111
+01001000000000010000000000100100
+01000101110000000000000000010010
+00101001011000110000000001110000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000000111101000010
+00101001101000100000000000000000
+01111000000000011000000000000000
+00110111100000110000000000011000
+10111000010000010000100000000000
+01011011100000010000000000011000
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110100000001000000000000000100
+11111000000000000000111100001101
+01111100001000010000000000000100
+11001000000000010110000000000000
+00111001100011000000000000000001
+11100000000000000000000000001111
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110111100000110000000000011000
+00110100000001000000000000000100
+11111000000000000000111011011000
+00110100000000100000000000000100
+01011100001000100000000000001000
+01111000000000100000000000000001
+00111000010000101000111011010100
+00101011100011000000000000011000
+00101000010000010000000000000000
+10100001100000010000100000000000
+00000001100011000000000000011111
+01011001101000010000000000000000
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000000111010111001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101010100
+00101000011000100000000000000000
+01111000000010110000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111010100110001000
+10111001011000000000100000000000
+11111000000000000000111001110000
+10111000001000000001000000000000
+00110100000000011111111111111111
+01001000000000100000000000001110
+00101001011000110000000001110000
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111000000000000000111100000100
+10111000001000000110000000000000
+00101001011000010000000001110000
+01011101100000010000000000000010
+00110100000011000000000000000001
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000000111010010010
+01111101100000010000000000000001
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101010100
+00101000011000100000000000000000
+01111000000011000000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+10111000001000000110100000000000
+00111001100011001010100110001000
+00110100000000010000000000100000
+00110011100000010000000000100111
+10111001100000000000100000000000
+11111000000000000000111001000011
+00110100000010111111111111111111
+01001000000000010000000001010001
+00001111100000000000000000100100
+00110111100011100000000000100110
+00110100000010110000000011111111
+11100000000000000000000000000110
+01000011100000010000000000100110
+01000100001010110000000000001100
+00101111100000010000000000100100
+00110100001000010000000000000001
+00001111100000010000000000100100
+00101111100000100000000000100100
+10111001100000000000100000000000
+10111001110000000001100000000000
+00110100010000100000000000000010
+00110100000001000000000000000001
+11111000000000000000111001110101
+00110100000000100000000000000001
+01000100001000101111111111110100
+00101111100000010000000000100100
+00110100000000100000000100000000
+01010000010000010000000000000010
+00001111100000000000000000100100
+01111000000011000000000000000001
+10111001101000000101100000000000
+00111001100011001010100110001000
+00110100000100000000000000001010
+00110100000011110000000000100000
+00110111100011100000000000100111
+11100000000000000000000000011110
+11111000000000000001000100010010
+00101111100000100000000000100100
+00101001011000110000000000000100
+10111000001000000110100000000000
+00110100010000100000000000000010
+10111001100000000000100000000000
+10111001101000000010000000000000
+11111000000000000000111010001100
+01011100001011010000000000101000
+00101111100000100000000000100100
+10110100001000100000100000000000
+00100000001000101111111111111111
+00101001011000010000000000001000
+00001111100000100000000000100100
+01000100001000000000000000000011
+00110011100011110000000000100111
+11100000000000000000000000000010
+00110011100100000000000000100111
+00110100010000100000000000000010
+10111001100000000000100000000000
+10111001110000000001100000000000
+00110100000001000000000000000001
+11111000000000000000111001111101
+00110100000000100000000000000001
+00110101011010110000000000000100
+01011100001000100000000000010111
+00101111100000010000000000100100
+00110100001000010000000000000001
+00001111100000010000000000100100
+00101001011000010000000000000100
+01011100001000001111111111100010
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110111100000110000000000100100
+00110100000001000000000000000010
+11111000000000000000111001110000
+10111000001000000110100000000000
+00110100000000010000000000000010
+00110100000010111111111111111111
+01011101101000010000000000001010
+10111001100000000000100000000000
+00110100000000100000000000000000
+00110111100000110000000000100010
+00110100000001000000000000000010
+11111000000000000000111000111011
+11100100001011010101100000000000
+00110101011010111111111111111111
+11100000000000000000000000000010
+00110100000010111111111111111111
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000000111000100001
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101010100
+00101000011000100000000000000000
+01111000000011000000000000000001
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001100011001010100110001000
+10111001100000000000100000000000
+11111000000000000000110111010011
+00110100000011011111111111111111
+01001000000000010000000000100010
+01111000000000010000000000000001
+00111000001000011000110000001000
+01111000000011010000000000000001
+11111011111111111110111111001111
+00110100000010110000000000000000
+00110111100011110000000000011111
+00110100000011100000000011111111
+00111001101011010111111111101000
+00110101011000100000000000000010
+10111001100000000000100000000000
+10111001111000000001100000000000
+00110100000001000000000000000001
+11111000000000000000111000000111
+00110100000000100000000000000001
+01011100001000100000000000001111
+01000011100000100000000000011111
+01000100010011100000000000000101
+10111001101000000000100000000000
+00110101011010110000000000000001
+11111011111111111110111110111111
+00100001011010111111111111111111
+01000011100000010000000000011111
+01011100001011101111111111110010
+00110100000011010000000000000000
+01011101011000000000000000000110
+01111000000000010000000000000001
+00111000001000011000000000101100
+11111011111111111110111110110111
+11100000000000000000000000000010
+00110100000011011111111111111111
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000000110111100000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000001
+10111000001000000110100000000000
+00100000011011000000000011111111
+10111000100000000000100000000000
+01111000000000110000000000000001
+01111000000001000000000000000001
+01111000000001010000000000000001
+00111000011000111000111100111100
+00111000100001001000111101000000
+00111000101001011000111101010100
+00100000010100010000000011111111
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111000001000011010100110001000
+00110100000010111111111111111111
+11111000000000000000110110001101
+01001000000000010000000000100010
+01011101100000000000000000000101
+01111000000000110000000000000001
+00111000011000111011111110000000
+00110100000000010000000000000010
+00001100011000010000000000000000
+01111000000011000000000000000001
+01111000000011100000000000000001
+00110100000010110000000000000000
+00111001100011001011111110000000
+00111001110011101010100110001000
+00110100000100000000000011111111
+00110100000011110000000000001010
+00101101100000100000000000000000
+00110100010000011111111111111110
+01010100001100010000000000001111
+00110100010000010000000000000001
+00001101100000010000000000000000
+10111001101000000001100000000000
+10111001110000000000100000000000
+00110100000001000000000000000001
+11111000000000000000110110111010
+00110100000000100000000000000001
+01011100001000100000000000000111
+01000001101000010000000000000000
+01000100001100000000000000000110
+00110101011010110000000000000001
+00110101101011010000000000000001
+01011100001011111111111111110001
+11100000000000000000000000000010
+00110100000010111111111111111111
+01111000000000010000000000000001
+00111000001000011010100110001000
+11111000000000000000110110011011
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110100100
+01111000000000100000000000000001
+01111000000000110000000000000001
+10111001011000000000100000000000
+00111000010000101011111110110000
+00111000011000111011111110101100
+11111011111111111111010100100011
+00101001011000010000000000000000
+01011100001000000000000000000111
+00101001011000100000000000001000
+01011100010000010000000000000101
+01111000000000010000000000000001
+01011001011000000000000000000100
+01011001011000010000000000001000
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111110100100
+00110100000000100000000000000001
+01011000001000100000000000000100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000011000000111000000000000
+00100000100011010000000011111111
+01100100011000110000000000000000
+01100100001001000000000000000000
+10111000010000000110000000000000
+10100000100000110001100000000000
+00110100000010111111111111101010
+01011100011000000000000000101011
+01000100100000110000000000001000
+01111000000000010000000000000001
+00111000001000011000110000100100
+11111011111111111110111100110100
+00001001110000100000000000000101
+10111001100000000000100000000000
+11111011111111111111100010010110
+11100000000000000000000000010010
+00110100000000110000000000000001
+01011100001000110000000000010010
+01111000000000010000000000000001
+10111001101000000001000000000000
+10111001100000000001100000000000
+00111000001000011000110000111100
+11111011111111111110111100101001
+01111000000001010000000000000001
+01111000000000010000000000000001
+00111000101001011011111101111000
+00111000001000011010100110001000
+01011000101000000000000000000000
+01011000101011010000000000000100
+01011000001001010000000000000100
+10111001100000000001000000000000
+00110100000000110000000101000000
+11111011111111111111101010010001
+00110100000010110000000000000000
+11100000000000000000000000010000
+00110100000000110000000000000010
+00110100000010110000000000000000
+01011100001000110000000000001101
+01111000000000010000000000000001
+00111000001000011000110001011100
+11111011111111111110111100010111
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011010100110001000
+00111000100001001100000111110000
+01011000001001000000000000000100
+10111001100000000001000000000000
+10111000100000000000100000000000
+00110100000000110000000101000000
+11111000000000000000010010000100
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000000101100
+01011011100011000000000000101000
+01011011100011010000000000100100
+01011011100011100000000000100000
+01011011100011110000000000011100
+01011011100100000000000000011000
+01011011100100010000000000010100
+01011011100100100000000000010000
+01011011100100110000000000001100
+01011011100101000000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+10111000010000000101100000000000
+10111000011000000111000000000000
+00110100000000100000000000000000
+00110111100000010000000000110000
+00110100000000110000000000010011
+00100000100100000000000011111111
+11111000000000000000111100101000
+01100101110000100000000000000000
+01100101011000010000000000000000
+01100101101100100000000000000000
+10111000010000010000100000000000
+01111000000011000000000000000001
+10100010010000010000100000000000
+00111001100011001010110000111100
+01011100001000000000000010001011
+11001000000011100001000000000000
+00110101110000010000000100111111
+10100000010000010000100000000000
+10110100001010110000100000000000
+10111001100000000111100000000000
+00110101100001110000000100000000
+10111001100000000010100000000000
+00110101110001101111111111111111
+00101000101001000000000001010100
+00101000101000110000000001001100
+01011000101000010000000001001100
+11001000100000110001100000000000
+00010100001001000000000000011111
+01011000101001000000000001001000
+10110100001000110010000000000000
+01011000101001000000000001010100
+00110100011000110000000000000001
+00010100100001000000000000011111
+10110100011000010000100000000000
+01011000101001000000000001010000
+10110100110000010000100000000000
+00110100101001010000000001000000
+10100000001000100000100000000000
+01011100101001111111111111110001
+01111000000000010000000000000001
+00111000001000011010110000111100
+01011000001000000000000000001000
+01011000001010110000000000001100
+00101001100000100000000100010000
+01111000000100010000000000000001
+00110101111101000000000101000000
+01011000001000100000000000010000
+00101001100000100000000100010100
+00110111100100110000000000110000
+10111001111000000110000000000000
+01011000001000100000000000010100
+00111010001100011000110001111100
+00110101100000100000000000101100
+00110100000000110000000000010010
+10111010011000000000100000000000
+11111000000000000001000000101001
+00101001100000110000000000001100
+00101001100001000000000000010100
+10111010001000000000100000000000
+10111010011000000001000000000000
+00110101100011000000000001000000
+11111011111111111110111010111011
+01011101100101001111111111110110
+01000110010000000000000000010001
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000011000110010100000
+11111011111111111110111010110101
+00001001110000100000000000000101
+10111001011000000000100000000000
+00110100000011000000000000000000
+11111011111111111111100000010110
+00110100000011100000000101000000
+10110101100010110000100000000000
+10110101111011000001000000000000
+00110100000000110000000001000000
+00110101100011000000000001000000
+11111011111111111111100000111000
+01011101100011101111111111111011
+11100000000000000000000001000110
+00110100000000010000000000000001
+01011101101000010000000000100010
+00110100000000010000000000000000
+10111010000000000001000000000000
+11111011111111111111001011000101
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011000110011000100
+11100000000000000000000000101010
+01111000000011100000000000000001
+00111001110011101011111101111000
+01111000000000010000000000000001
+01011001110100000000000000000100
+10111010000000000001000000000000
+01011001110000000000000000000000
+10111001011000000001100000000000
+00111000001000011000110011011100
+01111000000011000000000000000001
+11111011111111111110111010010110
+00111001100011001010100110001000
+01011001100011100000000000000100
+10111001100000000000100000000000
+10111001011000000001000000000000
+00110100000000110000000101000000
+11111011111111111111101000000010
+00110100000011100000000000000000
+00110100000100000000000101000000
+10110101110010110001000000000000
+10110101111011100001100000000000
+10111001100000000000100000000000
+00110100000001000000000001000000
+00110101110011100000000001000000
+11111011111111111111101000110000
+01011101110100001111111111111010
+11100000000000000000000000100011
+00110100000000010000000000000010
+01011101101000010000000000100001
+01111000000011000000000000000001
+01111000000000010000000000000001
+00111000001000011100000111110000
+00111001100011001010100110001000
+00110100000000100000000000000000
+01011001100000010000000000000100
+00110111100000110000000001000100
+00110100000001000000000000000100
+11111000000000000000001111001001
+00110100000000100000000000000100
+01000100001000100000000000000101
+01111000000000010000000000000001
+00111000001000011000110100001100
+11111011111111111110111001110110
+11100000000000000000000000010110
+01111000000000010000000000000001
+10111001011000000001000000000000
+00111000001000011000110100101000
+11111011111111111110111001110001
+00101001100000010000000000000100
+10111001011000000001000000000000
+00110100000000110000000101000000
+11111000000000000000001111100011
+00110100000011100000000000000000
+00110100000100000000000101000000
+00101001100000010000000000000100
+10110101110010110001000000000000
+10110101111011100001100000000000
+00110100000001000000000001000000
+00110101110011100000000001000000
+11111000000000000000001111000111
+01011101110100001111111111111010
+00110100000000010000000000000000
+00110100000000100000000001010000
+11111011111111111111101100000110
+11100000000000000000000000000010
+00110100000011011111111111101010
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000101100
+00101011100011000000000000101000
+00101011100011010000000000100100
+00101011100011100000000000100000
+00101011100011110000000000011100
+00101011100100000000000000011000
+00101011100100010000000000010100
+00101011100100100000000000010000
+00101011100100110000000000001100
+00101011100101000000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000111100000000000
+10111000010000000111000000000000
+00110100000011010000000000001000
+00110100000011000000000000000001
+00111001011010111010101001000000
+10100001100011100001100000000000
+00101001011001000000000000001000
+01111100011000100000000000000000
+10111001111000000000100000000000
+00110101101011011111111111111111
+11011000100000000000000000000000
+00111101100011000000000000000001
+01011101101000001111111111111001
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000111100000000000
+00110100000011100000000000001000
+00110100000011000000000000000000
+00110100000011010000000000000001
+00111001011010111010101001000000
+00101001011000100000000000000100
+10111001111000000000100000000000
+00110101110011101111111111111111
+11011000010000000000000000000000
+01111100001000100000000000000000
+11001000000000100001000000000000
+10100001101000100001000000000000
+10111001100000100110000000000000
+00111101101011010000000000000001
+01011101110000001111111111110111
+00110100000000010000000001100100
+11111011111111111110001001011000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000001000000
+01011011100011000000000000111100
+01011011100011010000000000111000
+01011011100011100000000000110100
+01011011100011110000000000110000
+01011011100100000000000000101100
+01011011100100010000000000101000
+01011011100100100000000000100100
+01011011100100110000000000100000
+01011011100101000000000000011100
+01011011100101010000000000011000
+01011011100101100000000000010100
+01011011100101110000000000010000
+01011011100110000000000000001100
+01011011100110010000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000110000000000000
+00110100000000110000000010000000
+00110100001000010000000000001000
+01111000000011010000000000000001
+11111000000000000000111000110001
+00111001101011011010101001000000
+00101001101000010000000000000000
+00110100000011110000000000000000
+01000100001000000000000001100001
+10111001100000000101100000000000
+00110100000100100000000000000000
+00110100000100010000000000000000
+01111000000110010100000000000000
+00110100000101100000000000000001
+00110100000110000000000000001000
+01011001011011000000000000001000
+01000101111000000000000000100010
+00101001011000010000000000000000
+01111000000000101000000000000000
+00110100000000110000000000000000
+01011001011000010000000000010000
+00101001011000010000000000000100
+01011001011000010000000000010100
+10100000010110010000100000000000
+01000100001000000000000000000011
+01111000000000100100000000000000
+00110100000000110000000000000000
+10100000011100010000100000000000
+10100000010100100010100000000000
+10111000101000010010100000000000
+00101001011001000000000000010000
+00101001011000010000000000010100
+01011100101000000000000000001110
+10100100011000000011000000000000
+10100000001001100000100000000000
+01011001011000010000000000010100
+00000000011000110000000000000001
+00111100010000010000000000011111
+10100100010000000011100000000000
+00000000010000100000000000000001
+10100000100001110010000000000000
+10111000001000110001100000000000
+01011001011001000000000000010000
+10111000010000110000100000000000
+01011100001001011111111111101011
+11100000000000000000000000111100
+10111000100000100001000000000000
+10111000001000110001100000000000
+01011001011000100000000000010000
+01011001011000110000000000010100
+00110101111011100000000000000001
+00101001101000100000000000000000
+00111101110011100000000000000100
+10111001100000000000100000000000
+10110101100011100111000000000000
+11011000010000000000000000000000
+01011100001101100000000000110001
+10111001100000000000100000000000
+00110100000000100000000011110000
+11111011111111111111111101110100
+00110100000101000000000001000000
+00110100000100110000000000000000
+00110100000100000000000000000001
+00110100000100100000000000000000
+00110100000100010000000000000000
+00101001101000100000000000000100
+10111001100000000000100000000000
+00101001110101110000000000000100
+11011000010000000000000000000000
+00101001101000100000000000000100
+10111000001000001010100000000000
+10111001100000000000100000000000
+10100010111100001011100000000000
+11011000010000000000000000000000
+01000110101000010000000000001000
+00101001101000110000000000001000
+10111010101000000001000000000000
+01111110101101010000000000000000
+10111001100000000000100000000000
+11011000011000000000000000000000
+01011110101101100000000000010001
+11100000000000000000000000000111
+00101001101000110000000000001000
+10111001100000000000100000000000
+10111010111000000001000000000000
+11011000011000000000000000000000
+01000110111000000000000000001001
+11100000000000000000000000001010
+00101001110000010000000000000000
+10111000001100110000100000000000
+01011001110000010000000000000000
+00101001110000010000000000000100
+10111000001100000000100000000000
+01011001110000010000000000000100
+11100000000000000000000000000011
+10111010010100111001000000000000
+10111010001100001000100000000000
+00111110000000010000000000000001
+00111110011100110000000000000001
+11110110000000011000000000000000
+00110110100101001111111111111111
+10110110000100111001100000000000
+10111000001000001000000000000000
+01011110100000001111111111011010
+11100000000000000000000000010100
+10111001111000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000001000000
+00101011100011000000000000111100
+00101011100011010000000000111000
+00101011100011100000000000110100
+00101011100011110000000000110000
+00101011100100000000000000101100
+00101011100100010000000000101000
+00101011100100100000000000100100
+00101011100100110000000000100000
+00101011100101000000000000011100
+00101011100101010000000000011000
+00101011100101100000000000010100
+00101011100101110000000000010000
+00101011100110000000000000001100
+00101011100110010000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110101111011110000000000000001
+00110101011010110000000000010000
+01011101111110001111111110010001
+11100011111111111111111111101010
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01111000000000010000000000000001
+00111000001000011010101001000000
+00101000001000100000000000000000
+00101001011000010000000000000000
+00110100000011000000000000000000
+00110100000011010000000001000000
+11011000010000000000000000000000
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111111100100000
+00101001011000010000000000001000
+00101001011000100000000000001100
+10111001100000000001100000000000
+00110101100011000000000000001000
+11111000000000000000110001001000
+00101001011000010000000000000000
+11111011111111111111111100011001
+01011101100011011111111111111001
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001001111000
+00101000010000100000000000000000
+00111100001000010000000000001000
+00111000001000010000000000001010
+01011000010000010000000000000000
+00101000010000010000000000000000
+00100000001000110000000000001000
+01011100011000001111111111111110
+00100000001000010000000000000001
+00011000001000010000000000000001
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001001111000
+00101000010000100000000000000000
+00111100001000010000000000001000
+00111000001000010000000000001001
+01011000010000010000000000000000
+00101000010000010000000000000000
+00100000001000110000000000001000
+01011100011000001111111111111110
+00100000001000010000000000000001
+11000011101000000000000000000000
+00101000001000010000000000000000
+01111000000000110000000000000001
+00111000011000111100001001111000
+00111100001000010000000000001000
+00101000011000110000000000000000
+01111100010000100000000000000000
+00111000001000010000000000001000
+10111000001000100001000000000000
+01011000011000100000000000000000
+00101000011000010000000000000000
+00100000001000010000000000001000
+01011100001000001111111111111110
+11000011101000000000000000000000
+01111000000000010000000000000001
+01111000000000110000000000000001
+00111000001000011100001001111000
+00111000011000111000111101011000
+00101000001000010000000000000000
+00101000011000100000000000000000
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111000100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000000000000000
+00110100000010111111111111111111
+01000100001000000000000000101010
+00101001100000100000000000000100
+01000100010000000000000000101000
+11111011111111111110000100010110
+01111000000011100000000000000001
+10111000001000000110100000000000
+00110100000010110000000000000000
+00110100000100000000000000011111
+00110111100011110000000000100000
+00111001110011101000110101011100
+11100000000000000000000000001011
+11111011111111111110000100001110
+00100000001001000000000011111111
+10110101011011010001000000000000
+10110101111010110000100000000000
+00110000001001000000000000000000
+10111000010000000001100000000000
+10111001110000000000100000000000
+10111000100000000010100000000000
+11111011111111111110110100010101
+00110101011010110000000000000001
+00101001100000010000000000000100
+11101110000010110001100000000000
+00110101100011000000000000000100
+01111100001000100000000000000000
+10100000011000100001000000000000
+01011100010000001111111111110001
+01111000000000010000000000000001
+10111001011000000010000000000000
+10111001101000000001000000000000
+10111001111000000001100000000000
+00111000001000011100000111110000
+11111000000000000000001001101010
+10111000001000000110000000000000
+10111001011000000001100000000000
+01111000000000010000000000000001
+11111101100010110101100000000000
+00111000001000011000110110000000
+10111001101000000001000000000000
+10111001100000000010000000000000
+11111011111111111110110100000000
+11001000000010110101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000111100
+11000011101000000000000000000000
+00110111100111001111111111001000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+00110100000001011111111111111111
+01000100001000000000000000101100
+00101001011000100000000000000100
+01000100010000000000000000101010
+11111011111111111110000011011000
+10111000001000000111000000000000
+00101001011000010000000000000100
+11111011111111111110000011010101
+10111000001000000101100000000000
+00110100000000010000000000100000
+01001100001010110000000000000010
+00110100000010110000000000100000
+00110111100011010000000000011100
+01111000000000010000000000000001
+10111001011000000010000000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+00111000001000011100000111110000
+11111000000000000000001000100111
+10111000001000000110000000000000
+01111000000000010000000000000001
+10111001011000000001100000000000
+00111000001000011000110110100000
+10111001110000000001000000000000
+10111001100000000010000000000000
+11111011111111111110110011010010
+11101001100010110101100000000000
+11101100000011000000100000000000
+00110100000001011111111111111111
+10111001011000010101100000000000
+01011101011000000000000000001111
+10111001101000000111100000000000
+01111000000011010000000000000001
+00111001101011011000110101011100
+10110101111010110000100000000000
+01000000001001000000000000000000
+10110101011011100001000000000000
+10111001101000000000100000000000
+10111000010000000001100000000000
+10111000100000000010100000000000
+00110101011010110000000000000001
+11111011111111111110110011000010
+01001001100010111111111111111000
+11111101100010110010100000000000
+11001000000001010010100000000000
+10111000101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000111000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+00111001101011011100000111110000
+10111001101000000000100000000000
+01111000000010110000000000000001
+01111000000011110000000000000001
+01111000000011100000000000000001
+11111011111111111111111010010110
+00111001011010111100001000000000
+00110100000011000000000000000000
+00111001111011111000110111000000
+00111001110011101000110111011000
+00110100000100000000000000001000
+00101001011000110000000000000000
+00101001011001000000000000000100
+10111000011001000000100000000000
+01000100001000000000000000010000
+10111001100000000001000000000000
+10111001111000000000100000000000
+11111011111111111110110010011011
+00111101100000010000000000000100
+00110100000000100000000000000000
+00110100001000010000000000001000
+10110101101000010000100000000000
+11111000000000000000000000010101
+00100000001000111111111111111111
+00001000011000110010011100010000
+10111000001000000001000000000000
+00010100010000100000000000010000
+00010100011000110000000000010000
+10111001110000000000100000000000
+11111011111111111110110010001111
+00110101100011000000000000000001
+00110101011010110000000000010000
+01011101100100001111111111101011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01000000001011010000000000001111
+10111000001000000110000000000000
+00110100000000010000000000101000
+10111000010000000111000000000000
+01000101101000010000000000000101
+00110100000000010000000001000010
+01000101101000010000000000000011
+00110100000000010000000000010000
+01011101101000010000000000110100
+00100001110010110000000000000010
+01011101011000000000000000001111
+10111001100000000000100000000000
+11111011111111111111111011110000
+00101001100000010000000000000000
+00110100000000100000000001000100
+00100001110011100000000000000001
+11111011111111111111111000011011
+00110100000000010000000000000000
+01011101110010110000000000101101
+01111000000010110000000000000001
+00111001011010111010101001000000
+00101001011000100000000000000100
+00101001100000010000000000000000
+11011000010000000000000000000000
+01000100001000001111111111111101
+10111001100000000000100000000000
+11111011111111111111111011100010
+00101001100000010000000000000000
+01111000000010110000000000000001
+00110100000000100000000010111110
+00111001011010111011111110000100
+11111011111111111111111000001100
+00110101011011100000000000001000
+11100000000000000000000000000101
+00101001100000010000000000000000
+11111011111111111111111000100101
+00110001011000010000000000000000
+00110101011010110000000000000001
+01011101011011101111111111111100
+01111000000000100000000000000001
+00111000010000101011111110000100
+01000000010000010000000000000001
+01000000010000110000000000000000
+00111100001000010000000000001000
+10111000001000110000100000000000
+00110100000000110000000000101000
+11011100001000000000100000000000
+01000101101000110000000000001011
+00110100000000110000000001000010
+01000101101000110000000000001001
+00110100000000110000000000010000
+01011101101000110000000000001011
+01000000010000100000000000000110
+00111100001000010000000000001111
+00111100010000100000000000001100
+00110100001000011100000000000000
+10111000001000100000100000000000
+11100000000000000000000000000110
+00111100001000010000000000001100
+11100000000000000000000000000100
+01111000000000011000000000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000000000
+10111000001000000010000000000000
+00110100000010010000000000101000
+00110100000010000000000001000010
+00110100000001110000000000010000
+00110100000001100000000000001000
+01000000100001010000000000010111
+01000100101010010000000000000011
+01000100101010000000000000000010
+01011100101001110000000000000110
+00111100011000110000000000000100
+00110100011000110000000000001000
+10110100001000110000100000000000
+11111011111111111111111110100101
+11100000000000000000000000000101
+00110100011000110000000000000001
+00110100100001000000000000010000
+01011100011001101111111111110101
+01111000000000011000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000000000000000
+10111000011000000110000000000000
+11111011111111111111111010010010
+00101001011000010000000000000000
+00110100000000100000000000001111
+00100010000011100000000011111111
+11111011111111111111110110111101
+00101001011000010000000000000000
+10111001110000000001000000000000
+00100010000100001111111100000000
+11111011111111111111110110111001
+00010110000100000000000000001000
+00101001011000010000000000000000
+10111010000000000001000000000000
+00110100000011010000000000000000
+11111011111111111111110110110100
+11100000000000000000000000000101
+00101001011000010000000000000000
+00110100000000100000000011111111
+00110101101011010000000000000001
+11111011111111111111110110101111
+01001001100011011111111111111100
+10111001011000000000100000000000
+11111011111111111111111001111101
+00101001011000010000000000000000
+00110100000000100000000010101010
+11111011111111111111110110101001
+00101001011000010000000000000000
+11111011111111111111110111000100
+10111000001000000111100000000000
+01011100001011100000000000100001
+00101001011000010000000000000000
+11111011111111111111110111000000
+10111000001000000111000000000000
+01011100001100000000000000011111
+00101001011000010000000000000000
+00110100000011010000000000000000
+00110100000100010000000011111111
+11111011111111111111110110111010
+10111000001000001000000000000000
+11100000000000000000000000000101
+00101001011000010000000000000000
+11111011111111111111110110110110
+01011100001100010000000000011000
+00110101101011010000000000000001
+01001001100011011111111111111100
+10111001011000000000100000000000
+11111011111111111111111001100101
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111110110010001
+00101001011000010000000000000000
+10111001111000000001000000000000
+11111011111111111111110110001110
+00101001011000010000000000000000
+10111001110000000001000000000000
+11111011111111111111110110001011
+00101001011000010000000000000000
+10111010000000000001000000000000
+11111011111111111111110110001000
+00110100000000010010011100010000
+11111011111111111110000000010011
+11100000000000000000000000000110
+00110100000011001111111111111111
+11100000000000000000000000000100
+00110100000011001111111111111110
+11100000000000000000000000000010
+00110100000011001111111111111101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000100000000000
+10111000011000001000000000000000
+10111000100000000110000000000000
+11111011111111111111111000111000
+00101001011000010000000000000000
+00110100000000100000000000001111
+00100010001011100000000011111111
+11111011111111111111110101100011
+00101001011000010000000000000000
+10111001110000000001000000000000
+00100010001100011111111100000000
+11111011111111111111110101011111
+00010110001100010000000000001000
+00101001011000010000000000000000
+10111010001000000001000000000000
+00110100000011010000000000000000
+11111011111111111111110101011010
+11100000000000000000000000000110
+10110110000011010001000000000000
+00101001011000010000000000000000
+01000000010000100000000000000000
+00110101101011010000000000000001
+11111011111111111111110101010100
+01001001100011011111111111111011
+10111001011000000000100000000000
+11111011111111111111111000100010
+00101001011000010000000000000000
+00110100000000100000000010101010
+11111011111111111111110101001110
+00101001011000010000000000000000
+11111011111111111111110101101001
+10111000001000000111100000000000
+01011100001011100000000000100010
+00101001011000010000000000000000
+11111011111111111111110101100101
+10111000001000000111000000000000
+01011100001100010000000000100000
+00101001011000010000000000000000
+00110100000011010000000000000000
+11111011111111111111110101100000
+10111000001000001000100000000000
+11100000000000000000000000000111
+00101001011000010000000000000000
+11111011111111111111110101011100
+10110110000011010001000000000000
+01000000010000100000000000000000
+01011100001000100000000000011000
+00110101101011010000000000000001
+01001001100011011111111111111010
+10111001011000000000100000000000
+11111011111111111111111000001001
+00101001011000010000000000000000
+00110100000000100000000001010101
+11111011111111111111110100110101
+00101001011000010000000000000000
+10111001111000000001000000000000
+11111011111111111111110100110010
+00101001011000010000000000000000
+10111001110000000001000000000000
+11111011111111111111110100101111
+00101001011000010000000000000000
+10111010001000000001000000000000
+11111011111111111111110100101100
+00110100000000010010011100010000
+11111011111111111101111110110111
+11100000000000000000000000000110
+00110100000011001111111111111111
+11100000000000000000000000000100
+00110100000011001111111111111110
+11100000000000000000000000000010
+00110100000011001111111111111101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000001000000000000000
+00100000010000010000000000011111
+10111000010000000101100000000000
+10111000011000000111000000000000
+10111000100000000110000000000000
+00110100000011010000000000000000
+01000100001000000000000000110000
+00110100010000011111111111111111
+10110100001001000000100000000000
+00010100001000100000000000011111
+10111000100000000111100000000000
+00000000010000100000000000011011
+10110100010000010000100000000000
+00010101011000100000000000011111
+00010100001000010000000000000101
+00000000010000100000000000011011
+10110100010010110001000000000000
+00010100010000100000000000000101
+01000100001000100000000000001100
+01111000000000010000000000000001
+00111000001000011000111101011100
+00101000001000100000000000000000
+10100001011000100001000000000000
+01001100010000000000000000000101
+00110100010000101111111111111111
+00110100000000011111111111100000
+10111000010000010001000000000000
+00110100010000100000000000000001
+00110100000011110000000000100000
+11001001111000100111100000000000
+10111010000000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+10111001111000000010000000000000
+11111011111111111111111101111010
+10111000001000000110100000000000
+01001000000000010000000000010110
+10110101110011110111000000000000
+10110101011011110101100000000000
+11001001100011110110000000000000
+11100000000000000000000000001110
+10111001100000000010000000000000
+01001101111011000000000000000010
+00110100000001000000000000100000
+10111010000000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111101101101
+01001000000000010000000000001001
+10110101101000010110100000000000
+00110101110011100000000000100000
+00110101011010110000000000100000
+00110101100011001111111111100000
+11100000000000000000000000000010
+00110100000011110000000000100000
+01001001100000001111111111110010
+11100000000000000000000000000010
+10111000001000000110100000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+11111011111111111111110110010011
+00101001100000010000000000000000
+00110100000000100000000011110000
+11111011111111111111110010111111
+00101001100000010000000000000000
+00100001011000100000000011111111
+11111011111111111111110010111100
+00100001011000101111111100000000
+00101001100000010000000000000000
+00000000010000100000000000001000
+00110100000010110000000000000000
+11111011111111111111110010110111
+11100000000000000000000000000110
+00101001100000010000000000000000
+11111011111111111111110011010001
+10110101110010110001000000000000
+00110000010000010000000000000000
+00110101011010110000000000000001
+01001001101010111111111111111011
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000111100000000000
+00100000010000010000000000011111
+10111000010000000101100000000000
+10111000011000000110000000000000
+00110100000011010000000000000000
+01000100001000000000000000101100
+00110100010000011111111111111111
+10110100001000110000100000000000
+00010100001000100000000000011111
+10111000011000000111000000000000
+00000000010000100000000000011011
+10110100010000010000100000000000
+00010101011000100000000000011111
+00010100001000010000000000000101
+00000000010000100000000000011011
+10110100010010110001000000000000
+00010100010000100000000000000101
+01000100001000100000000000001100
+01111000000000010000000000000001
+00111000001000011000111101011100
+00101000001000100000000000000000
+10100001011000100001000000000000
+01001100010000000000000000000101
+00110100010000101111111111111111
+00110100000000011111111111100000
+10111000010000010001000000000000
+00110100010000100000000000000001
+00110100000011100000000000100000
+11001001110000100111000000000000
+10111001111000000000100000000000
+10111001011000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111010110011
+10111000001000000110100000000000
+01001000000000010000000000010011
+10110101011011100101100000000000
+11001001100011100110000000000000
+11100000000000000000000000001100
+10111001100000000001100000000000
+01001101110011000000000000000010
+00110100000000110000000000100000
+10111001111000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111010101000
+01001000000000010000000000001000
+10110101101000010110100000000000
+00110101011010110000000000100000
+00110101100011001111111111100000
+11100000000000000000000000000010
+00110100000011100000000000100000
+01001001100000001111111111110100
+11100000000000000000000000000010
+10111000001000000110100000000000
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001010000000000000000
+10111000001000000011000000000000
+00110100000010000000000001000011
+00110100000001110000000000001000
+01000000110010010000000000010111
+01011101001010000000000000000110
+00111100101001010000000000000100
+00110100101001010000000000001000
+10110100001001010000100000000000
+11111011111111111111111110001011
+11100000000000000000000000000101
+00110100101001010000000000000001
+00110100110001100000000000010000
+01011100101001111111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001010000000000000000
+10111000001000000011000000000000
+00110100000010000000000001000011
+00110100000001110000000000001000
+01000000110010010000000000010111
+01011101001010000000000000000110
+00111100101001010000000000000100
+00110100101001010000000000001000
+10110100001001010000100000000000
+11111011111111111111111100101011
+11100000000000000000000000000101
+00110100101001010000000000000001
+00110100110001100000000000010000
+01011100101001111111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000001000000000000000000
+10111000001000000010100000000000
+00110100000001110000000001000011
+00110100000001100000000000001000
+01000000101010000000000000010111
+01011101000001110000000000000110
+00111100100001000000000000000100
+00110100100001000000000000001000
+10110100001001000000100000000000
+11111011111111111111111110001000
+11100000000000000000000000000101
+00110100100001000000000000000001
+00110100101001010000000000010000
+01011100100001101111111111110111
+00110100000000011111111111111111
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+00111001011010111011111110010100
+00101001011000010000000000000000
+01011100001000000000000000001001
+11111011111111111111000001011010
+01111000000000100000000000000001
+00110100001000010000001111101000
+00111000010000101011111110001100
+01011000010000010000000000000000
+00101001011000010000000000000000
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000010110000000000000001
+00111001011010111011111110010000
+00101001011011000000000000000000
+11111011111111111111000001001111
+01111000000000100000000000000001
+00111000010000101011111110001100
+00101000010001000000000000000000
+11001000001001000010100000000000
+00110100000000010000000000000000
+01001000000001010000000000011000
+00100001100000110000000000000001
+01111000000000010000000000000001
+00111100011001010000000000000010
+00111000001000011001010000101000
+10110100001001010000100000000000
+00101000001000010000000000000000
+10110100001001000010000000000000
+00101001011000010000000000000000
+01011000010001000000000000000000
+00110100000000100000000000000001
+00110100001000010000000000000001
+01011001011000010000000000000000
+01111000000000010000000000000001
+00111000001000011100000111110000
+01000100011000100000000000000011
+11111011111111111111111000011000
+11100000000000000000000000000110
+00110100000000100000000000000010
+11111011111111111111111000010101
+01111000000000100000000000000001
+00111000010000101010101001001100
+01011000010000010000000000000100
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001001010000000000001000
+00101000001001000000000000000000
+00101000001001100000000000000100
+10110100010001010001100000000000
+10001000011001000010000000000000
+01011000001000100000000000011100
+10001000010001100001000000000000
+10110100100000100001000000000000
+00101000001001000000000000001100
+00010100010000100000000000001100
+10110100010001000010000000000000
+00101000001000100000000000010100
+01001100100000100000000000000101
+00101000001001000000000000010000
+01000100100000000000000000001000
+01001100101000110000000000001011
+11100000000000000000000000000110
+00101000001000100000000000011000
+01001100010001000000000000000110
+00101000001001000000000000010000
+01000100100000000000000000000010
+01001100011001010000000000000101
+01011000001000110000000000001000
+11100000000000000000000000000011
+01011000001000110000000000001000
+10111000100000000001000000000000
+01011000001000100000000000100000
+10111000010000000000100000000000
+11000011101000000000000000000000
+00101000001000100000000000001100
+01011000001000000000000000001000
+01011000001000100000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000000010100
+10111000010000000000100000000000
+11111000000000000000100110101100
+00101001011000110000000000001100
+00101001011000100000000000000000
+01001000001000110000000000001011
+00101001011000010000000000000100
+01001100010000010000000000000011
+00110100010000100000000000000001
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000010001
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000010000000000010000
+11100000000000000000000000001110
+00101001011000010000000000001000
+01001100001000100000000000000011
+00110100010000101111111111111111
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000000111
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000000000000000000000
+01011001011000000000000000010000
+00110100000000011111111111111111
+11100000000000000000000000000010
+00101001011000010000000000010000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+01011000001000000000000000010000
+01011000001000000000000000000000
+01011000001000000000000000010100
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111100001010011000
+00101000011001000000000000000000
+01001000100000010000000000010011
+01111000000000110000000000000001
+00111000011000111011111110111000
+11001000001001000000100000000000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000101000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110111000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111110111000
+00101000010000100000000000000000
+10111000001000000001100000000000
+00110100000000010000000000000000
+00101000010001000000000000001000
+00100000100001000000000000000010
+01000100100000000000000000001100
+00110100000001000000000000000010
+01011000010001000000000000001000
+01111000000001100000000000000001
+00101000010000100000000000010000
+00111000110001101000111101100000
+00101000110001000000000000000000
+00110100010001011111111110011011
+01010100101001000000000000000100
+00001000010000100000000001100100
+00110100000000010000000000000001
+01011000011000100000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000001000000110000000000000
+01111000000000010000000000000001
+00111001011010111100001010011000
+00111000001000011100001010010000
+00101000001000010000000000000000
+00101001011011010000000000000000
+10110100001011010110100000000000
+00101001100000010000000000000000
+10111001101000000001000000000000
+11111000000000000000000100010000
+00101001100000010000000000000100
+00101001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000000000110001111
+01011001100000000000000000001100
+01011001100000000000000000001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+11111000000000000000000101100111
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+00110100000000100000000000000001
+00110100000000110000000000001001
+01011000001000100000000000000100
+01011001011000110000000000001100
+01111000000000110000000000000001
+00111000011000111000111101100100
+01011001011000100000000000001000
+00101000011000100000000000000000
+01011000001000100000000001001100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+10111000001000000001000000000000
+00101000001000010000000000000000
+00101000001000110000000001001000
+00110100000000010000000000000000
+01000100011000000000000000010110
+00101000010000110000000000000100
+00101000011000110000000000111000
+01000100011000000000000000010011
+01111000000000110000000000000001
+00111000011000111011111110111000
+00101000011000110000000000000000
+00101000011001000000000000000100
+00100000100001000000000000000100
+01000100100000000000000000001101
+00101000011000110000000000000100
+00100000011000110000000000001000
+01011100011000000000000000001010
+00101000010000100000000000001100
+00110100000000110000000000001010
+00110100000000010000000000000001
+01010100010000110000000000000110
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001010001011000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00101000001000100000000000001100
+10111000001000000101100000000000
+00110100000000010000000000001001
+00110100010000101111111111111111
+00110100000011000000000000000000
+01010100010000010000000010100101
+01111000000000010000000000000001
+00111100010000100000000000000010
+00111000001000011001010000110000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+00110100000011000000000000000000
+00101000001000100000000000000100
+00100000010000100000000000001000
+01011100010000000000000010011000
+00101000001000110000000000000100
+01111000000000101000000000000000
+10111000011000100001000000000000
+01011000001000100000000000000100
+00110100000000010000000000001010
+11100000000000000000000010010000
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+01111000000001000000000000000001
+00111000100001001000111011010100
+00101000001000110000000000000100
+00101000100000100000000000000000
+10100000011000100001000000000000
+01011000001000100000000000000100
+00101000001000100000000000000100
+00100000010000100000000000001000
+01011100010000000000000010000011
+00101000001000010000000000000100
+00110100000011000000000000000001
+00100000001000010000000000000100
+01000100001000100000000010000010
+01011001011011000000000000001100
+11100000000000000000000010000000
+00101001011000010000000000000000
+00110100000011000000000000000000
+00101000001000010000000001001000
+01000100001000000000000001111100
+11111011111111111011000110001111
+00101001011000010000000000000100
+11111000000000000000000101000110
+11111011111111111011000110010101
+00110100000000010000000000001000
+11100000000000000000000001110100
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+00110100000000100000000000000010
+00110100000011000000000000000000
+01011000001000100000000000001000
+00101001011000010000000000000000
+00101000001000010000000001001000
+01000100001000000000000001101101
+00101001011000010000000000000100
+00101000001000010000000000111000
+01000100001000000000000001101010
+01111000000000010000000000000001
+00111000001000011011111111001100
+00101000001000010000000000000000
+00110100000000110000000010100010
+01011000001000110000000000000000
+00110100000000110000000000000011
+01011000001000110000000000010000
+00110100000000110000000000000001
+01011000001000110000000000011100
+01011001011000100000000000001100
+11100000000000000000000001011110
+01111000000000010000000000000001
+00111000001000011011111111001100
+00101000001000010000000000000000
+00110100000011000000000000000000
+00101000001000100000000000011100
+00100000010000100000000000000001
+01000100010000000000000001011000
+00110100000000100000000000000100
+01011000001000100000000000011100
+11111011111111111110111100000001
+00110100001000010000011111010000
+01011001011000010000000000010000
+00110100000000010000000000000011
+11100000000000000000000001001111
+11111011111111111110111011111100
+00101001011000100000000000010000
+00110100000011000000000000000000
+11001000001000100000100000000000
+01001000000000010000000001001100
+00110100000000010000000000000111
+01011001011000010000000000001100
+01011001011000000000000000011100
+11100000000000000000000001000111
+00110111100000010000000000010000
+11111011111111111111111100110111
+00110100000011000000000000000000
+01000100001000000000000001000100
+01111000000000110000000000000001
+00111000011000111000111101101000
+00101000011000100000000000000000
+00101011100000010000000000010000
+11111000000000000000100000110110
+00111000000000101100001101001111
+11101000001000100001000000000000
+01100100001000010000000000000000
+10111000010000010000100000000000
+01000100001000000000000000000101
+00110100000000010000000001100100
+01011001011000010000000000010100
+00110100000000011111111110011100
+11100000000000000000000000000011
+01011001011000000000000000010100
+00110100000000010000000001100100
+01011001011000010000000000011000
+00110100000000010000000000000100
+11100000000000000000000000101111
+00101001011000010000000000000100
+00110100000011000000000000000000
+11111000000000000000000111010001
+01011100001000000000000000101101
+00110111100000010000000000010000
+11111011111111111111111100011100
+01000100001011000000000000101010
+01111000000001000000000000000001
+00111000100001001000111101101000
+00101011100000010000000000010000
+00101000100000100000000000000000
+11111000000000000000100000011100
+00101001011000100000000000010100
+01011011100000010000000000010000
+01000100001000100000000000001001
+00101001011000010000000000011100
+00101001011000100000000000011000
+10110100010000010000100000000000
+01011001011000010000000000011100
+00101001011000010000000000000100
+00101001011000100000000000011100
+11111000000000000000000110011100
+11100000000000000000000000011001
+00101001011000100000000000010100
+00110100000011000000000000000001
+01011100001000100000000000010111
+00101001011000010000000000011100
+00110100001000010111010100110000
+01011001011000010000000000011100
+00101001011000010000000000000100
+00101001011000100000000000011100
+11111000000000000000000110010010
+00110100000000010000000000000101
+01011001011000010000000000001100
+11100000000000000000000000001110
+00101001011000010000000000000100
+00110100000011000000000000000000
+11111000000000000000000110101110
+01011100001000000000000000001010
+00110100000000010000000000000110
+11100000000000000000000000000110
+10111001011000000000100000000000
+11111011111111111111111100111101
+00110100000011000000000000000000
+01011100001000000000000000000100
+00110100000000010000000000001001
+01011001011000010000000000001100
+00110100000011000000000000000001
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001011111110111000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000001
+00111000110001101000111101101100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+01111000000001000000000000000001
+00111000100001001011111110111000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000001
+00111000110001101000111101101100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+00110100000000110000000000000101
+01011000001000110000000000101000
+00111000000000111111111111111011
+01011000001000110000000000101100
+00110100000000111111111101101010
+01011000001000110000000000011000
+00110100000000111111111111111110
+01011000001000110000000000010100
+00110100000000110000000000000001
+01011000001000110000000000100100
+00110100000000110000000011001000
+01011000001000110000000001000100
+00110100000000110010011100010000
+01011000001000110000000000111100
+00110100000000110000000001100100
+01011000001000110000000001000000
+01011000001000100000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000001100
+10111000010000000110100000000000
+00110100000011000000000000000000
+01011100011000010000000001000111
+00110100000000010000000000100010
+00110100000000110000000000000000
+11111011111111111111111111000100
+00101001011000100000000000000100
+00110100000000010000000000100101
+00110100000000110000000000000000
+11111011111111111111111111000000
+00101001011000010000000000001000
+01001100001000000000000000000100
+01011001011011010000000000000100
+01011001011011010000000000001000
+11100000000000000000000000111011
+01001101101000010000000000000101
+00101001011000100000000000000000
+01111000000000010000000001000000
+10110100010000010000100000000000
+01011001011000010000000000000000
+00101001011000110000000000000000
+01111000000001010000000000000001
+00101001011000100000000000000100
+00111000101001011000111101110000
+00101000101000010000000000000000
+10110101101000110010000000000000
+11001000100000100110000000000000
+01001000001011000000000000000110
+01111000000001010000000000000001
+00111000101001011000111101110100
+00101000101000010000000000000000
+01001001100000010000000000000010
+11100000000000000000000000000010
+10111000001000000110000000000000
+01111000000001010000000000000001
+00111000101001011000111101111000
+00101000101000010000000000000000
+01001100001001000000000000000110
+01001100001000100000000000000101
+11001000011000010001100000000000
+11001000010000010000100000000000
+01011001011000110000000000000000
+01011001011000010000000000000100
+00101001011000010000000000000100
+10111001100000000001000000000000
+01011001011011010000000000001000
+00110100001000010100000000000000
+01011001011000010000000000000100
+00110101011000010000000000010100
+11111011111111111111111000010010
+01111000000000110000000000000001
+00111000011000111011111110111000
+00101001011000100000000000010000
+10111000001000000110100000000000
+00101000011000010000000000000000
+00110100000000110000000000000000
+01011000001011010000000001000000
+00110100010000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000100110
+11111011111111111111111110001101
+00110100000000010000000000100000
+10111001101000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111110001001
+10111001100000000001000000000000
+00110100000000010000000000100001
+00110100000000110000000000000001
+11111011111111111111111110000101
+10111001100000000001000000000000
+00110101011000010000000000111000
+11111011111111111111111000011101
+01111100001011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000101000
+01011001011000000000000000000100
+01011001011000000000000000000000
+01011001011000010000000000100000
+00110100000000011111111111111111
+01011001011000010000000000001000
+01011001011000000000000000010000
+00110101011000010000000000010100
+11111011111111111111111000000100
+00110101011000010000000000111000
+11111011111111111111111000101011
+00101001011000010000000000001100
+00110100000000100000000000000001
+11111011111111111111111000101100
+00110100000000010000000000100100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111101100100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000000101
+01011001011000010000000000011000
+00111000000000011111111111111010
+01011001011000010000000000011100
+00110100000000010000000000000001
+01011001011000010000000000010100
+00110100000000010111010100110000
+01011001011000010000000000010000
+00110100000000011111101110110100
+01011001011000010000000000001000
+00110100000000011111111111100010
+01011001011000010000000000000100
+00110100000000010000010010110000
+01011001011000010000000000110100
+00110100000000010000001111101000
+01011001011000010000000000101100
+00110100000000010000000001100100
+01011001011000010000000000110000
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+01011001011000110000000001100100
+01011001011000100000000001100000
+11001000011000010001100000000000
+01011001011000110000000001101100
+00110101011000010000000000000100
+01011001011000000000000001110000
+11111011111111111111110111010111
+00110101011000010000000000101000
+11111011111111111111110111111110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000001000100
+01011000001000000000000001000000
+00110100000000011111111111111111
+01011001011000010000000001001000
+01011001011000010000000001001100
+01011001011000010000000001010000
+01011001011000010000000001010100
+00110100000000010000000000000001
+01011001011000010000000001110000
+01011001011000000000000001011000
+00110101011000010000000000000100
+01011001011000000000000001011100
+01011001011000000000000001101000
+11111011111111111111110110111111
+00110101011000010000000000101000
+11111011111111111111110111100110
+00101001011000010000000001100000
+00110100000000100000000000000001
+11111011111111111111110111100111
+00101001011000010000000001100100
+00110100000000100000000000000001
+11111011111111111111110111100100
+00110100000000010000000000000100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111100101011
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000001100100
+00110100000000100000000000000000
+11111011111111111111110111010101
+01011001011000000000000001110000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000001110000
+10111000001000000101100000000000
+00110100000000010000000000000001
+01000100100000000000000001111000
+00101001011000010000000001100000
+01011100011000010000000000000010
+01011001011000100000000001001000
+00101001011000010000000001100100
+01011100011000010000000000000010
+01011001011000100000000001001100
+00101001011000010000000001001000
+01001000000000010000000000001001
+00101001011000100000000001010000
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000000
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000000
+01011001011000010000000001010000
+00101001011000010000000001001100
+01001000000000010000000000001001
+00101001011000100000000001010100
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000100
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000100
+01011001011000010000000001010100
+00101001011000110000000001001000
+00110100000000010000000000000000
+01001000000000110000000001011011
+00101001011000100000000001001100
+01001000000000100000000001011001
+00101001011011000000000001000000
+00101001011000010000000000111000
+10110100011011000001100000000000
+00101001011011000000000001000100
+11001000011000100001000000000000
+11001000010011000110000000000000
+01000100001000000000000000000110
+00100001100011000011111111111111
+00100001100000010010000000000000
+01000100001000000000000000000011
+00110100000000011100000000000000
+10111001100000010110000000000000
+10111001100000000001000000000000
+00110101011000010000000000000100
+11111011111111111111110101001111
+00101001011000100000000001101100
+01111000000000110000000000000001
+00111000011000111011111110111000
+00100000010000100000000000001111
+10111000001000000110100000000000
+00111100010000100000000000010000
+00101000011000010000000000000000
+00100001101000111111111111111111
+10111000011000100001000000000000
+01011000001000100000000001000100
+00101001011000110000000001000000
+00101001011000100000000001001000
+00110100000000010000000000000101
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011010100
+00101001011000110000000001000100
+00101001011000100000000001001100
+00110100000000010000000000000010
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011001110
+00110100000000010000000000000001
+10111001100000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111011001010
+00101001011000100000000001101000
+00110100000000110000000000000000
+00110100010000010000000000000001
+01011001011000010000000001101000
+00110100000000010000000000000110
+11111011111111111111111011000100
+00110100000000010000000000000000
+10111001101000000001000000000000
+00110100000000110000000000000001
+11111011111111111111111011000000
+01111000000000100000000000000001
+00110100000000011111111111111111
+00111000010000101000111101111100
+01011001011000010000000001001100
+01011001011000010000000001001000
+00101001011000110000000001000000
+00101000010000010000000000000000
+01001100001000110000000000001010
+00101001011000100000000001000100
+01001100001000100000000000001000
+01111000000001000000000000000001
+00111000100001001000111110000000
+00101000100000010000000000000000
+10110100011000010001100000000000
+10110100010000010000100000000000
+01011001011000110000000001000000
+01011001011000010000000001000100
+00101001011000010000000000111000
+01000100001000000000000000001111
+00101001011000010000000001011100
+00101001011000100000000001011000
+01001100001000100000000000000110
+00110100001000010000000000000001
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000011111111111111111
+11100000000000000000000000000110
+01001100010000010000000000000110
+00110100001000011111111111111111
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000010000000000000001
+01011001011000010000000001000000
+00110101011000010000000000101000
+10111001100000000001000000000000
+11111011111111111111110100101000
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00010100010000110000000000011111
+00110111100000010000000000001100
+01001000000000100000000000001011
+00000000010001000000000000010010
+00111100011000110000000000001110
+00111100010000100000000000001110
+10111000011001000001100000000000
+01011011100000100000000000010000
+00110100000000100001111101000000
+01011011100000110000000000001100
+11111011111111111011011110000001
+00101011100000100000000000010000
+11100000000000000000000000001001
+00001000010000101100000000000000
+01011011100000100000000000010000
+00010100010000100000000000011111
+01011011100000100000000000001100
+00110100000000100001111101000000
+11111011111111111011011101111001
+00101011100000100000000000010000
+11001000000000100001000000000000
+00000000010000010000000000011111
+10110100001000100001000000000000
+00010100010000100000000000000001
+00110100000000010000000000000000
+01011001011000100000000001011000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000100000000001011000
+00101000001000010000000001011100
+11111100010000010000100000000000
+11000011101000000000000000000000
+01011000001000100000000000000100
+01011000001000000000000000011100
+01011000001000110000000000001000
+01011000001000000000000000001100
+01011000001000000000000000010000
+01011000001000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000100000000000000001
+01011000001000100000000000000000
+01011000001000000000000000010100
+01011000001000000000000000011100
+01011000001000000000000000001100
+01011000001000000000000000010000
+00101000001000010000000000000100
+11111011111111111111110100010011
+01111000000000010000000000000001
+00111000001000011100001010011000
+00101000001000010000000000000000
+00110100000000100000000000000001
+11111011111111111111110100001110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110111100000010000000000010100
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000000011100101011
+00110100000000011100000000000000
+01111000000001000000000000000001
+01011011100000010000000000100000
+00111000100001001100001010011000
+00110100000000010100000000000000
+01011011100000010000000001000100
+00101000100000010000000000000000
+01011101101000010000000000000101
+01111000000000110000000000000001
+00111000011000111010110101111100
+01011000011011000000000000000000
+11100000000000000000000000100111
+00111101101011010000000000000101
+10110101011011010101100000000000
+00101001011000010000000000000000
+01000100001000000000000000100011
+01111000000000110000000000000001
+00111000011000111010110101111100
+00101000011000010000000000000000
+00101001011000100000000000010000
+11001001100000010000100000000000
+00100000001000010011111111111111
+00010100001000110000000000001100
+01011100010000000000000000000111
+00111100011000110000000000000010
+01011001011000010000000000001100
+00110100000000010000000000000001
+01011001011000110000000000010100
+01011001011000010000000000010000
+11100000000000000000000000010101
+00101001011001000000000000001100
+00110100010000100000000000000001
+10110100001001000000100000000000
+00101001011001000000000000010100
+10110100011001000001100000000000
+00111100011000110000000000000010
+00110111100001000000000001010000
+10110100100000110001100000000000
+00101000011000111111111111000100
+01011001011000100000000000010000
+10110100001000110000100000000000
+00101001011000110000000000001000
+01011001011000010000000000001100
+01011100010000110000000000000111
+11111000000000000000010111010010
+01011001011000010000000000011000
+00110100000000010000000000000001
+01011001011000010000000000011100
+01011001011000000000000000001100
+01011001011000000000000000010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110111000
+01011100010000000000000000001010
+00110100000001000000000000000001
+00101000011000100000000000000000
+10111100100000010000100000000000
+00100000001000010000000011111111
+00101000010000110000000000100000
+00111100001000010000000000010000
+10100100001000000000100000000000
+10100000001000110000100000000000
+11100000000000000000000000001000
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100000
+00100000001000010000000011111111
+00111100001000010000000000010000
+10111000001000110000100000000000
+01011000010000010000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000001
+01000100001000100000000000001001
+00110100000000100000000000000010
+01000100001000100000000000001100
+01011100001000000000000000010111
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001010110000000000000000
+00110101011010110000000000011000
+11100000000000000000000000001010
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001010110000000000000000
+00110101011010110000000000010100
+11100000000000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001010110000000000000000
+00110101011010110000000000011100
+00110100000000010000011111010000
+11111011111111111110110010000000
+01111000000000110000000000000001
+00111000011000111000111100101000
+00101001011000100000000000000000
+00101000011000010000000000000000
+10100000010000010000100000000000
+11100000000000000000000000000010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000001
+10111000010000000101100000000000
+00111000011000111100000001100000
+01000100001000000000000000000111
+00110100001000011111111111111111
+00001000001000110000000001111100
+01111000000000010000000000000001
+00111000001000011011111111011000
+10110100011000010000100000000000
+00110100001000110000000100000100
+10111000011000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111100110101
+01111000000000010000000000000001
+00111000001000011011111111011000
+01011000001010110000000000010100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000011000000000000000001
+01111000000011010000000000000001
+10111000001000000111000000000000
+00110100000010110000000000000000
+00111001100011001100001010011000
+00111001101011011011111110011000
+11100000000000000000000000001010
+00101001101000010000000000000000
+10010100001010110000100000000000
+00100000001000010000000000000001
+01000100001000000000000000000101
+00111101011000100000000000000101
+10110101110000100001000000000000
+00110100010000010000000111110100
+11111011111111111111111101000110
+00110101011010110000000000000001
+00101001100000010000000000000000
+01001000001010111111111111110110
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000110110000000000000001
+01111000000010110000000000000001
+01111000000110010000000000000001
+01111000000011010000000000000001
+01111000000100010000000000000001
+01111000000100000000000000000001
+01111000000011000000000000000001
+01111000000101110000000000000001
+01111000000011110000000000000001
+00111011011110111011111110111000
+00111001011010111011111111011000
+00110100000101000000000000001001
+00111011001110011001010010000100
+00110100000110000000000000000001
+00110100000100110000000000000011
+00111001101011011100000001000000
+00110100000100100000000000001000
+00111010001100011100000001100000
+00111010000100001011111111110000
+00111001100011001100001010011000
+00111010111101111100000111001100
+00111001111011111100001010010000
+11100000000000000000000001111110
+00101000011101010000000001111100
+01111000000000010000000011111111
+00111000001000011111111111111111
+00000010101011100000000000011000
+10100010101000011010100000000000
+00101001011000010000000000000100
+00100001110011100000000001111111
+00110100001000011111111111111111
+01010100001101000000000001010101
+00111100001000010000000000000010
+10110111001000010000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001011000010000000001000100
+01011000011000010000000001000000
+00101001011000010000000010100100
+00101001011000100000000010100000
+10110100010000010000100000000000
+00000000001000100000000000011111
+10110100010000010000100000000000
+00010100001000010000000000000001
+00110100000000100000000000000001
+01011000011000010000000001000100
+00101001100000010000000000000000
+11111011111111111111110000010110
+11111011111111111110101111110111
+00110100001000010000000000110010
+01011001011000010000000000001000
+00110100000000010000000000001010
+11100000000000000000000000010001
+00101001011101100000000000001000
+11111011111111111110101111110001
+11001010110000010000100000000000
+01001100001000000000000000111100
+00101001011000010000000000000000
+01011100001110000000000000000011
+01011001011110000000000000000100
+11100000000000000000000000111000
+01011001011100110000000000000100
+11100000000000000000000000110110
+00101001100000010000000000000000
+00110100000000100000000000000000
+11111011111111111111110000000100
+10111001101000000000100000000000
+11111011111111111111110001011001
+00110100000000010000000000000010
+01011001011000010000000000000100
+11100000000000000000000000101110
+10111001101000000000100000000000
+11111011111111111111110001101010
+11100000000000000000000000010010
+10111010000000000000100000000000
+11111011111111111111110110111101
+00110100000000010000000000000100
+11100011111111111111111111111000
+00101001011000010000000001100000
+01000100001000000000000000100101
+00101001011000010000000001100100
+01000100001000000000000000100011
+00101001011000010000000000000000
+01011100001100110000000000001001
+00110100000000010000000000000101
+11100011111111111111111111110000
+10111010001000000000100000000000
+11111011111111111111110111110001
+00110100000000010000000000000110
+11100011111111111111111111101100
+00101001011000010000000011000000
+01000100001000000000000000011001
+10111001011000000000100000000000
+11111011111111111111111101110010
+01011001011100100000000000000100
+00101001011000010000000011101000
+00110100000000100000000000000001
+11100000000000000000000000010010
+00101001011000010000000000000000
+01011100001110000000000000000100
+10111001101000000000100000000000
+11111011111111111111110001001101
+01000100001000000000000000000111
+00101001011000010000000001100000
+01000100001000000000000000000101
+00101001011000010000000000000000
+01011100001100110000000000001010
+00101001011000010000000011000000
+01011100001000000000000000001000
+00101001011000010000000000001100
+00110100000000100000000000000000
+00110100001000010000000000000001
+01011001011000010000000000001100
+01011001011101000000000000000100
+00101001011000010000000011101000
+11111011111111111111111100001101
+10111010000000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111110100111010
+00101001011000010000000001100000
+01000100001000000000000000011011
+10111010001000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111110111111001
+00101001011000010000000000000100
+01011100001100100000000000010101
+00101001011000010000000000000000
+00110100000101100000000000000000
+01011100001100110000000000001100
+11100000000000000000000000001000
+00001010110000010000000001111100
+10111010101000000001000000000000
+10111001110000000001100000000000
+10110101011000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110111101101
+00110110110101100000000000000001
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001101101111111111110111
+00101001100000010000000000000000
+01001001110000010000000000000101
+10111010111000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111010101000
+00101011011000110000000000000000
+01111000000000100000000000000010
+00101000011000010000000010000000
+10100000001000100000100000000000
+01000100001000001111111101111111
+00101001011000010000000000010000
+00110100001000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000000001
+11010000010000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+01111000000000010000000000000001
+00111000001000011011111111010100
+00101000001000100000000000000000
+01111000000000110000000000000001
+01111000000000010000000000000001
+00111000001000011011111111001100
+00111000011000111000111110000100
+01011000001000100000000000000000
+00101000011000010000000000000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000000000000000
+10111000011000001001000000000000
+11111011111111111010110111000101
+01111000000000010000000000000001
+00111000001000011100001011000100
+00101000001001000000000000000000
+01111000000000010000000000000001
+00111000001000011011111110111000
+01011000001001000000000000000000
+01111000000000010000000000000001
+00101000100001010000000000000000
+00111000001000011011111111010100
+00101000001000010000000000000000
+01111000000000100000000000000001
+00111000010000101011111111001100
+00000000101001100000000000010000
+01011000010000010000000000000000
+01111000000000100000000000000001
+00111000010000101100001010011000
+00100000110001100000000000111111
+00000000101001010000000000011000
+01011000010001100000000000000000
+01111000000000100000000000000001
+00111000010000101100001010010000
+00100000101001010000000000000111
+01011000010001010000000000000000
+01111000000001010000000000000001
+00111000101001011011111111011000
+01011000101010110000000000000000
+01011000101000000000000000001100
+01011000100000000000000001000000
+01011000100000000000000001000100
+01011000100000000000000000000000
+01011000100000000000000000101000
+01011000100000000000000000100100
+01011000100000000000000000000100
+01111000000000110000000000000001
+01011000100000000000000000100000
+00110100000000100000001111101000
+00111000011000111000111100110100
+01011000100000100000000001001000
+00101000011000100000000000000000
+01011000001000000000000000011100
+01011000001000100000000000000000
+00110100000000010000000000000100
+01011101011000010000000000000100
+00110100000000010000000000000111
+01011000101000010000000000000100
+11100000000000000000000000000110
+00110100000000010000000000001001
+01011000101000010000000000000100
+00110100000000010000000000000011
+01011101011000010000000000000010
+10111010000000000011000000000000
+01111000000000010000000000000001
+10111000110000000001000000000000
+00111000001000011011111111110000
+01111000000011010000000000000001
+11111011111111111111110010011101
+00111001101011011100001010011000
+00101001101000110000000000000000
+01111000000000010000000000000001
+00111000001000011100000001100000
+10111010000000000001000000000000
+01111000000011110000000000000001
+01111000000011100000000000000001
+11111011111111111111110100011000
+00110100000011000000000000000000
+00111001111011111100001010010000
+00111001110011101011111111011000
+00110100000100110000000000000001
+11100000000000000000000000001100
+00001001100100010000000001111100
+00101001101001000000000000000000
+10111010000000000001000000000000
+10110101110100010000100000000000
+00110100100001000000000000000001
+10110100100011000001100000000000
+00110100001000010000000100000100
+10110101110100011000100000000000
+11111011111111111111110100001010
+00110101100011000000000000000001
+01011010001100110000000011111100
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001011001111111111110011
+00110100000000010000000000000010
+01011101011000010000000000000110
+01111000000000010000000000000001
+00111000001000011011111111001100
+00101000001000010000000000000000
+00110100000000100000000000001100
+01011000001000100000000000011100
+01111000000011100000000000000001
+01111000000011010000000000000001
+00110100000011000000000000000000
+00111001110011101100001010011000
+00111001101011011011111111011000
+11100000000000000000000000001000
+00111101100000010000000000000101
+10111001100000000001000000000000
+10110101101000010000100000000000
+00110100001000010000000111110100
+00110100000000110000001000000000
+11111011111111111111110111110010
+00110101100011000000000000000001
+00101001110000100000000000000000
+01001000010011001111111111111000
+00110100000000010000000000000001
+01011101011000010000000000010111
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000000010
+01000100001000000000000000100001
+01111000000000010000000000000001
+01111000000001000000000000000001
+00111000001000011011111111011000
+00111000100001001011111111110000
+01011000001001000000000001101000
+01111000000001000000000000000001
+00111000100001001100000001100000
+01011000001001000000000001101100
+01111000000000010000000000000001
+00111000001000011100001010010000
+00101000001001000000000000000000
+01111000000000010000000000000001
+00111000001000011100000001000000
+10110100010001000001000000000000
+10111010010000000001100000000000
+11111011111111111111101100110101
+01111000000000010000000000000001
+00111000001000011011111110111000
+00101000001000010000000000000000
+01111000000000100000000000000010
+11100000000000000000000000000011
+00101000001000110000000001111100
+01011011100000110000000000101100
+00101000001000110000000010000000
+10100000011000100001100000000000
+01000100011000001111111111111100
+00110100000000100000000000000001
+01011000001000100000000001100100
+00101000001000100000000000101000
+00111000010000100000000000000001
+01011000001000100000000000101000
+11111011111111111010110100111101
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000100000000000000001
+00111000010000101011111111011000
+00101000010000110000000000000100
+01100100001001000000000000000000
+01111100011000110000000000001000
+10111000100000110001100000000000
+01011100011000000000000000000110
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100010000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110011010011
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100001000000000000000001000
+00110100001000011111111111111111
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111011000
+10110100001000100000100000000000
+00110100001000010000000100000100
+11111011111111111111110011101000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000001
+10111000001000000001100000000000
+00111000010000101011111111011000
+01011100001000000000000000000100
+00101000010000010000000000000100
+01100100001000010000000000001000
+11000011101000000000000000000000
+00101000010001010000000000000100
+00110100000001000000000000001000
+00110100000000010000000000000000
+01011100101001000000000000000110
+00110100011000111111111111111111
+00001000011000110000000001111100
+10110100010000110001000000000000
+00101000010000010000000100111100
+01111100001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110100000000111111111111111111
+10111000010000000111100000000000
+01011100001000110000000000010110
+00110100000000010000000000000000
+01111000000011000000000000000001
+01111000000011010000000000000001
+11111011111111111111111000010100
+00110100000010110000000000000000
+00111001100011001100001010010000
+00111001101011011011111111011000
+00110100000011100000000000000100
+11100000000000000000000000001001
+00001001011000010000000001111100
+10110101101000010000100000000000
+00101000001000010000000011111100
+01011100001011100000000000000100
+00110101011000010000000000000001
+10111001111000000001000000000000
+11111011111111111111111000001000
+00110101011010110000000000000001
+00101001100000010000000000000000
+00110100001000011111111111111111
+01001000001010111111111111110110
+11100000000000000000000000000010
+11111011111111111111111000000010
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000001
+10111000010000000110100000000000
+10111000011000000110000000000000
+00111001011010111100000001100000
+01000100001000000000000000000111
+00110100001000011111111111111111
+00001000001010110000000001111100
+01111000000000010000000000000001
+00111000001000011011111111011000
+10110101011000010000100000000000
+00110100001010110000000100000100
+01000101101000000000000000001011
+00101001011000100000000001011100
+00110100000001000001111101000000
+00110100000000110000000000000000
+00111100010000100000000000000001
+00010100010000010000000000011111
+11111000000000000000001100101011
+00111100001000010000000000010010
+00000000010001000000000000001110
+10111000001001000010000000000000
+01011001101001000000000000000000
+01000101100000000000000000001011
+00101001011000100000000001011000
+00110100000000110000000000000000
+00110100000001000001111101000000
+00111100010000100000000000000001
+00010100010000010000000000011111
+11111000000000000000001100100000
+00111100001000010000000000010010
+00000000010000100000000000001110
+10111000001000100001000000000000
+01011001100000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+01111000000000010000000000000001
+00111101011000100000000000000101
+00111000001000011011111111011000
+10110100001000100000100000000000
+00101000001001000000001000001100
+10111000011000000110000000000000
+01001100100000000000000000000011
+00110100100001000100000000000000
+11100000000000000000000000000100
+00110100000000010011111111111111
+01001100001001000000000000000010
+00110100100001001100000000000000
+00111100100001000000000000000001
+00110100000000010000000000000000
+00100000100000100011111111111110
+00110100000000110000000000000000
+00110100000001000001111101000000
+11111000000000000000001011111101
+00111100001000010000000000010010
+00000000010001000000000000001110
+10111000001001000010000000000000
+01011001101001000000000000000000
+01000101100000000000000000001100
+01111000000000010000000000000001
+00111000001000011011111110011000
+00101000001000100000000000000000
+00111101011000110000000000000101
+01111000000000010000000000000001
+00111000001000011011111111011000
+10110100001000110000100000000000
+00101000001000010000000111111000
+10010100010000010000100000000000
+00100000001000010000000000000001
+01011001100000010000000000000000
+00111101011010110000000000000101
+01111000000000100000000000000001
+00111000010000101011111111011000
+10110100010010110001000000000000
+00101000010000010000001000010000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+01000100001000000000000000000101
+01111000000000110000000000000001
+00111000011000111100001010011000
+00101000011000110000000000000000
+01011000001000110000000000000000
+01000100010000000000000000000101
+01111000000000010000000000000001
+00111000001000011100001010010000
+00101000001000010000000000000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000001100
+01111000000000010000000000000001
+00111000001000011011111111011000
+00101000001000110000000000000100
+01111000000000100000000000000001
+00111000010000101001010010101100
+00111100011000110000000000000010
+10110100010000110001000000000000
+00101000010000110000000000000000
+00101000001000100000000000000100
+00110100000000010000000000001010
+01010100010000010000000000000010
+11100000000000000000000000000011
+01111000000000110000000000000001
+00111000011000111000110111110100
+01111000000000010000000000000001
+00111000001000011011111111011000
+00101000001000100000000000000000
+01001100000000100000000000001110
+00101000001000100000000000010000
+00101000001001000000000000000000
+00101000001001010000000001110100
+00101000001001100000000001100000
+00101000001001110000000011000000
+00101000001010000000000001001100
+00101000001010010000000010101100
+00101000001000010000000000001100
+01011011100010010000000000000100
+01011011100000010000000000001000
+01111000000000010000000000000001
+00111000001000011000111000000000
+11111011111111111110001111110001
+00101011100111010000000000001100
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01011100001000000000000000000100
+01111000000000010000000000000001
+00111000001000011100000001100000
+11100000000000000000000000000111
+00110100001000011111111111111111
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111011000
+10110100001000100000100000000000
+00110100001000010000000100000100
+11111011111111111111110011000100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000001
+01111000000010110000000000000001
+10111000001000000110000000000000
+00111001101011011011111111011000
+00111001011010111011111110011000
+01000100010000000000000000001101
+00110100000000100000000000000001
+11111011111111111111100111011011
+00111101100000010000000000000101
+10110101101000010110100000000000
+00110101101000010000000111110100
+11111011111111111111110010111011
+00101001011000010000000000000000
+00110100000000100000000000000001
+10111100010011000110000000000000
+10111001100000010110000000000000
+01011001011011000000000000000000
+11100000000000000000000000001010
+00110100000000110000000000000001
+00101001011001000000000000000000
+10111100011000010001100000000000
+10100100011000000001100000000000
+10100000011001000001100000000000
+01011001011000110000000000000000
+00101001101000110000000011101000
+01000100001000110000000000000010
+11111011111111111111100111001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00001000001000010000000001111100
+01111000000000100000000000000001
+00111000010000101011111111011000
+10110100010000010001000000000000
+00101000010000010000000011111100
+00101000010000110000000011111100
+00110100000000100000000000000100
+01111100001000010000000000000001
+01011100011000100000000000000010
+00111000001000010000000000000010
+11000011101000000000000000000000
+01001100001000000000000000000101
+01111000000000010000000000000001
+00111000001000011011111111011000
+00101000001000010000000001001100
+11000011101000000000000000000000
+01111000000000100000000000000001
+00111000010000101011111111011000
+01011100001000000000000000000011
+00101000010000010000000010101100
+11000011101000000000000000000000
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100010000010001000000000000
+00101000010000010000000100101000
+11000011101000000000000000000000
+01111000000000110000000000000001
+00111000011000111011111110111000
+01001100001000000000000000000111
+01111000000000010000000000000001
+00111000001000011011111111011000
+01011000001000100000000001001100
+00101000011000010000000000000000
+01011000001000100000000001000000
+11000011101000000000000000000000
+00100000001001000000000000001111
+00101000011000110000000000000000
+00111100100001000000000000010000
+00100000010001011111111111111111
+10111000101001000010000000000000
+01011000011001000000000001000100
+01111000000000110000000000000001
+00111000011000111011111111011000
+01011100001000000000000000000011
+01011000011000100000000010101100
+11000011101000000000000000000000
+00110100001000011111111111111111
+00001000001000010000000001111100
+10110100011000010001100000000000
+01011000011000100000000100101000
+11000011101000000000000000000000
+00110111100111001111111111001100
+01011011100010110000000000110100
+01011011100011000000000000110000
+01011011100011010000000000101100
+01011011100011100000000000101000
+01011011100011110000000000100100
+01011011100100000000000000100000
+01011011100100010000000000011100
+01011011100100100000000000011000
+01011011100100110000000000010100
+01011011100101000000000000010000
+01011011100101010000000000001100
+01011011100101100000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000001
+00111000001000011011111111011000
+00101000001000100000000000000000
+00110100000000010000000000000001
+00110100000101000000000000000000
+01011100010000010000000000000101
+01111000000000010000000000000001
+00111000001000011100000001000000
+11111011111111111111101000000000
+10111000001000001010000000000000
+01111000000100010000000000000001
+01111000000010110000000000000001
+01111000000011100000000000000001
+00110100000011010000000000000000
+00110100000011000000000000000001
+00111010001100011100001010010000
+00111001011010111011111111011000
+00110100000011110000000000000001
+00111001110011101011111110111000
+00110100000100100000000000000010
+00110100000101100000000000000011
+00110100000101010000000000000100
+11100000000000000000000001000111
+00110101100100111111111111111111
+00001010011100000000000001111100
+10110101011100001000000000000000
+00101010000000010000000011111100
+01000100001011110000000000001111
+00101001110000010000000000000000
+10111101111011000001000000000000
+00101000001000010000000000100000
+00000000001000010000000000001000
+00100000001000010000000011111111
+10100000001000100000100000000000
+01011100001000000000000000001000
+10111001100000000000100000000000
+11111011111111111111111010010000
+10111001100000000000100000000000
+00110100000000100000000000000000
+11111011111111111111110010010100
+00110101101011010000000000000001
+01011010000011110000000011111100
+00001010011000010000000001111100
+10110101011000011000000000000000
+00101010000000100000000011111100
+01000100010100100000000000010100
+01001000010100100000000000000011
+01011100010011110000000000101101
+11100000000000000000000000000100
+01000100010101100000000000010111
+01011100010101010000000000101010
+11100000000000000000000000011110
+00101001011000010000000011000000
+01000100001000000000000000100111
+00101001110000010000000000000000
+10111101111011000001000000000000
+00101000001000010000000000100000
+00000000001000010000000000001000
+00100000001000010000000011111111
+10100000001000100000100000000000
+01000100001000000000000000100000
+10111001100000000000100000000000
+11111011111111111111111001100101
+01011010000100100000000011111100
+11100000000000000000000000011011
+00101010000000010000000100111100
+01000100001000000000000000011010
+00101001011000100000000000010100
+10111001100000000000100000000000
+11111011111111111111110010101110
+01011010000101100000000011111100
+11100000000000000000000000010100
+10110101011000010000100000000000
+00110100001000010000000100000100
+11111011111111111111110000001111
+01011100001000000000000000010001
+10111001100000000000100000000000
+00110100000000100000000000000001
+11111011111111111111110001101101
+01011010000101010000000011111100
+11100000000000000000000000001011
+00101001011000010000000011000000
+01000100001000000000000000000011
+00101010000000010000000100111100
+01011100001000000000000000001000
+00001010011100110000000001111100
+10111001100000000000100000000000
+00110100000000100000000000000000
+10110101011100111001100000000000
+11111011111111111111110001100010
+01011010011011110000000011111100
+00110101101011010000000000000001
+00110101100011000000000000000001
+00101010001000010000000000000000
+01001000001011001111111110111001
+00101001011000110000000000000000
+01111000000000100000000000000001
+00111000010000101010110110000100
+01011000010000110000000000001100
+00101001011000110000000000010000
+00101000010000010000000000001000
+01111101101011010000000000000000
+01011000010000110000000000010000
+00101001011000110000000000000100
+00110100001000010000000000000010
+10110101101101001010000000000000
+01011000010000110000000000010100
+00101001011000110000000001110100
+01011000010000010000000000001000
+01111110100000010000000000000000
+01011000010000110000000000011000
+00101001011000110000000001100000
+01011000010000110000000000011100
+00101001011000110000000011000000
+01011000010000110000000000100000
+00101001011000110000000001001100
+01011000010000110000000000100100
+00101001011000110000000010101100
+01011000010000110000000000101000
+00101001011000110000000000001100
+01011000010000110000000000101100
+00101011100111010000000000000100
+00101011100010110000000000110100
+00101011100011000000000000110000
+00101011100011010000000000101100
+00101011100011100000000000101000
+00101011100011110000000000100100
+00101011100100000000000000100000
+00101011100100010000000000011100
+00101011100100100000000000011000
+00101011100100110000000000010100
+00101011100101000000000000010000
+00101011100101010000000000001100
+00101011100101100000000000001000
+00110111100111000000000000110100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+11111011111111111010101100111111
+00110100000000100000000000000000
+00110100000000011111111111111111
+11111011111111111111111101001011
+00110100000000010000000000000001
+11111011111111111111110001000000
+00111000000010111111111111111111
+10111001011000000001000000000000
+00110100000000011111111111111111
+11111011111111111111111101000101
+00110100000000010000000000000001
+11111011111111111111110000111010
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111011111111111111111101000000
+00110100000000010000000000000000
+11111011111111111111110000110101
+10111001011000000001000000000000
+00110100000000010000000000000000
+11111011111111111111111100111011
+00110100000000010000000000000000
+11111011111111111111110000110000
+00110100000000010000000000000010
+11111011111111111111110000101110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001001000000000000010100
+10111000001000000001100000000000
+10111000010000000011000000000000
+01000100100000000000000000010101
+00101000001001010000000000010000
+00100000101001010000000000000010
+01011100101000000000000000000111
+10110100100001100010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100011010110000000000110000
+10110100100001100001000000000000
+10111001011000000000100000000000
+00110100000000110000000001000000
+11111000000000000000001001110001
+10111001011000000010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101000001001010000000000010000
+00100000101001110000000000000100
+01011100111001001111111111101011
+00101000001001010000000000011100
+00110100000001000000000000000000
+01000100101001111111111111101011
+00110100001010110000000000110000
+00110100000001000000000001000000
+10111001011000000001100000000000
+11011000101000000000000000000000
+10111001011000000010000000000000
+11100011111111111111111111110000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001000100000000000010100
+10111000001000000101100000000000
+01000100010000000000000000010011
+00101001011000010000000000001100
+10110100010000010001000000000000
+00101000010000110000000000000000
+01111000000001000000000000000001
+00111000100001001000111101001000
+00101000100000100000000000000000
+00110100000000011111111111101100
+01011100011000100000000000000111
+01111000000000100000000000000001
+00111000010000101011111110011100
+00101000010000110000000000000000
+00110100000000010000000000000000
+01011000010010110000000000000000
+01011001011000110000000001111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00101000001000110000000000010000
+00100000011000110000000000000100
+01011100011000101111111111101100
+00101000001001010000000000011100
+00101000001000100000000000001100
+00110111100000110000000000001100
+00110100000001000000000000000100
+11011000101000000000000000000000
+00101011100000110000000000001100
+11100011111111111111111111101000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01000100010000000000000001000111
+00101000001000100000000000001100
+01011000001000000000000010000000
+01011000001000000000000010110000
+01011000001000100000000010010000
+00110100000011000000000000000000
+10111001011000000000100000000000
+11111011111111111111111110101010
+01011001011000010000000000101000
+01000000001000100000000000111111
+01011100010000000000000000000110
+01111000000001000000000000000001
+00111000100001001000111101001000
+00101000001000110000000000000000
+00101000100000100000000000000000
+01000100011000100000000001011101
+00110100000000010000000000000000
+01000101100000000000000000110000
+00110101100000111111111111111111
+00110100011011000000000000101000
+10110101100011000000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000100000000000000000
+01011100010000000000000000001111
+00110100000000010000000000000000
+01000100011000100000000000100111
+00110100011000100000000000100111
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+11100000000000000000000000000010
+01000100011000010000000001000100
+00101000010000010000000000000000
+00110100011000111111111111111111
+00110100010000101111111111111100
+01000100001000001111111111111100
+01011001011000110000000010110000
+00110100011011000000000000101000
+00110100011011010000000000100100
+10110101101011010110100000000000
+10110101101011010110100000000000
+10110101011011010110100000000000
+00101001101000100000000000000000
+10111001011000000000100000000000
+10110101100011000110000000000000
+11111011111111111111111110000011
+10110101100011000110000000000000
+10110101011011000001000000000000
+00101001101001000000000000000000
+00101000010000110000000000000000
+00101001011011000000000010110000
+00110100100001000000000001000000
+00110100011000111111111111111111
+01011001011000010000000000101000
+01011001101001000000000000000000
+01011000010000110000000000000000
+00110101100000110000000000100000
+10110100011000110001100000000000
+10110100011000110001100000000000
+10110101011000110001100000000000
+00101000001001000000000000001100
+00101000011000100000000000000000
+10110100010001000001000000000000
+01011001011000100000000001110100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000010000000000101000
+00101001011000110000000010110000
+00110100000001010000000000000010
+01000000001001000000000000111111
+11101100101000110010100000000000
+01100100100001000000000000000010
+10100000100001010010000000000000
+01000100100000101111111111000101
+00110100011000100000000000100000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00101000010001010000000000000000
+00110100011001000000000000100101
+00101000001000100000000000000100
+10110100100001000010000000000000
+10110100100001000010000000000000
+10110100101000100001000000000000
+10110101011001000010000000000000
+01011000100000100000000000000000
+00101000001001000000000000001100
+00110100011000010000000000100001
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+10110100100001010010100000000000
+00110100011011000000000000000001
+01011000001001010000000000000000
+11100011111111111111111110100011
+00110100000000010000000000000000
+01011001011000000000000010110000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110101100000100000000000100100
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001100000000000
+00101100001001010000000000000100
+00101000011001000000000000000000
+00110101100000100000000000101000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00110100101001011111111111111111
+00110100100001000000000001000000
+01011000010001010000000000000000
+01011000011001000000000000000000
+01011001011011000000000010110000
+11100011111111111111111110111110
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00110100000000100000000000000001
+10111000001000000101100000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+11111011111111111111111101110011
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111111111101110000
+10111000001000000010100000000000
+01000100001000000000000000011110
+00101000101000010000000000011000
+01011100001011001111111111111010
+00101000101000010000000000011100
+01011100001011101111111111111000
+00101000101000010000000000100000
+01011100001011011111111111110110
+00101001011000010000000010110000
+01011001011001010000000000101000
+00101000101000100000000000001100
+00110100001000010000000000100000
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000110000000000000000
+00110100000000010000000000000000
+10110100010000110001100000000000
+01011001011000110000000001110100
+00101000101000110000000000010100
+01011001011000000000000001111000
+00110100011000110000000000000001
+11001000011000100001000000000000
+01011001011000100000000001110000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000000011111111111111110
+11100011111111111111111111111000
+01011000001000000000000000101000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+11111011111111111111111111001001
+01001100001000000000000000000101
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101001011000010000000001110100
+01011001011000000000000000101000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000100000000001110100
+10111000011000000000100000000000
+10111001101000000001100000000000
+10110101100000100001000000000000
+10110100100000100001000000000000
+11111000000000000000000101100000
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000011100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+10111000011000000001000000000000
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000100110100
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000100000
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110100000000011111111111111110
+01000100100000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+00110100000000100000000011111111
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000110000110
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001000000000000100100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+11100011111111111111111111101110
+00100000010001011111111111111111
+00000000010001100000000000010000
+00100000100010001111111111111111
+00000000100010010000000000010000
+10001001000001010011100000000000
+10001001000001100100000000000000
+10001001001001010010100000000000
+00000000111010100000000000010000
+10001001001001100011000000000000
+10110101000001010010100000000000
+10110100101010100010100000000000
+01010000101010000000000000000011
+01111000000010000000000000000001
+10110100110010000011000000000000
+10001000010000110001000000000000
+10001000100000010010000000000000
+00000000101000010000000000010000
+00111100101001010000000000010000
+10110100110000010011000000000000
+00100000111001111111111111111111
+10110100010001000000100000000000
+10110100001001100000100000000000
+10110100101001110001000000000000
+11000011101000000000000000000000
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+11001000000001000001000000000000
+00110100000000110000000000000000
+10000000001000100001000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+10111100001001000010000000000000
+10000000010000110001000000000000
+10000000001000110001100000000000
+10111000100000100001000000000000
+10111000011000000000100000000000
+11100011111111111111111111111010
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+11001000000001000000100000000000
+00110100000000110000000000000000
+10111100010000010000100000000000
+10111000011000000001000000000000
+11000011101000000000000000000000
+10000000010001000010000000000000
+10111100001000110000100000000000
+10111100010000110001100000000000
+10111000100000010000100000000000
+10111000011000000001000000000000
+11100011111111111111111111111010
+01000100011000000000000000001000
+00110100000001000000000000100000
+11001000100000110010000000000000
+01001000100000000000000000000110
+00010100001000110000000000011111
+11001000000001000001000000000000
+10010100001000100001000000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+10111100001001000010000000000000
+10000000010000110001000000000000
+10010100001000110001100000000000
+10111000100000100001000000000000
+10111000011000000000100000000000
+11100011111111111111111111111010
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000100010000000000000000100010
+10111000010000010010000000000000
+00110100000000110000000000001111
+01010100100000110000000000001011
+01111000000000110000000000000001
+00111000011000111001010011011000
+00111100001000010000000000000100
+10110100011000100001000000000000
+10110100010000010000100000000000
+01000000001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000010110000000000000000
+01001100001000000000000000000011
+11001000000000010000100000000000
+00110100000010110000000000000001
+01001100010000000000000000000011
+11001000000000100001000000000000
+00011001011010110000000000000001
+10010000110000000001100000000000
+00100000011000110000000000000010
+01000100011000000000000000001000
+10001100001000100000100000000000
+01000101011000000000000000000010
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000110000000000000000
+11111000000000000000000001001010
+11100011111111111111111111111000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000100010000000000000000010101
+00110100000010110000000000000000
+01001100001000000000000000000011
+11001000000000010000100000000000
+00110100000010110000000000000001
+00010100010000110000000000011111
+10010000110000000010000000000000
+10011000011000100001000000000000
+00100000100001000000000000000010
+11001000010000110001000000000000
+01000100100000000000000000001000
+11000100001000100000100000000000
+01000101011000000000000000000010
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000110000000000000001
+11111000000000000000000000101010
+11100011111111111111111111111000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000000
+11111000000000000000000000011100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000001
+11111000000000000000000000001100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+11110100001000100010000000000000
+01000100100000000000000000011000
+00110100000001000000000000000001
+01001100010000000000000000001011
+00110100000001010000000000000000
+01010100010000010000000000000011
+11001000001000100000100000000000
+10111000101001000010100000000000
+00000000100001000000000000000001
+00000000010000100000000000000001
+01011100100000001111111111111011
+01011100011000000000000000000010
+10111000101000000000100000000000
+11000011101000000000000000000000
+00111100010000100000000000000001
+00111100100001000000000000000001
+11110100001000100010100000000000
+01111100100001100000000000000000
+10100000110001010010100000000000
+01000100101000000000000000000010
+01001100010000001111111111111010
+00110100000001010000000000000000
+01000100100000001111111111110101
+00110100000001010000000000000000
+11100011111111111111111111101101
+00110100000001000000000000000001
+00110100000001010000000000000000
+11100011111111111111111111101010
+00010100001000100000000000011111
+10011000010000010000100000000000
+11001000001000100000100000000000
+11000011101000000000000000000000
+00110100000001100000000000000011
+10111000001000000010000000000000
+10111000010000000010100000000000
+01010000110000110000000000001100
+10111000010000010011000000000000
+00100000110001100000000000000011
+01011100110000000000000000001011
+00110100000000010000000000000011
+00101000100001100000000000000000
+00101000101000100000000000000000
+01011100110000100000000000000101
+00110100011000111111111111111100
+00110100100001000000000000000100
+00110100101001010000000000000100
+01010100011000011111111111111010
+00110100000000010000000000000000
+01000100011000000000000000001110
+01000000100001100000000000000000
+01000000101000010000000000000000
+00110100011000101111111111111111
+01000100110000010000000000000110
+11100000000000000000000000001010
+01000000100001100000000000000000
+01000000101000010000000000000000
+00110100010000101111111111111111
+01011100110000010000000000000110
+00110100100001000000000000000001
+00110100101001010000000000000001
+01011100010000001111111111111010
+00110100000000010000000000000000
+11000011101000000000000000000000
+11001000110000010000100000000000
+11000011101000000000000000000000
+00110100000001000000000000001111
+10111000001000000011100000000000
+10111000010000000011000000000000
+01010000100000110000000000101101
+10111000010000010010000000000000
+00100000100001000000000000000011
+01011100100000000000000000101011
+10111000010000000010000000000000
+10111000001000000010100000000000
+10111000011000000011000000000000
+00110100000001110000000000001111
+00101000100010000000000000000000
+00110100110001101111111111110000
+01011000101010000000000000000000
+00101000100010000000000000000100
+01011000101010000000000000000100
+00101000100010000000000000001000
+01011000101010000000000000001000
+00101000100010000000000000001100
+00110100100001000000000000010000
+01011000101010000000000000001100
+00110100101001010000000000010000
+01010100110001111111111111110101
+00110100011000111111111111110000
+00000000011001100000000000000100
+00100000011000110000000000001111
+00110100110001100000000000000001
+00111100110001100000000000000100
+10110100001001100011100000000000
+10110100010001100011000000000000
+00110100000000100000000000000011
+01010000010000110000000000010001
+00110100000000100000000000000000
+00110100000010000000000000000011
+10110100110000100010000000000000
+00101000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000100
+01011000100001010000000000000000
+11001000011000100010000000000000
+01010100100010001111111111111010
+00110100011000111111111111111100
+00000000011000100000000000000010
+00100000011000110000000000000011
+00110100010000100000000000000001
+00111100010000100000000000000010
+10110100111000100011100000000000
+10110100110000100011000000000000
+01000100011000000000000000001000
+00110100000000100000000000000000
+10110100110000100010000000000000
+01000000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000001
+00110000100001010000000000000000
+01011100010000111111111111111011
+11000011101000000000000000000000
+10111000001000000011100000000000
+10111000010000000011000000000000
+01010000010000010000000000001100
+10110100010000110010000000000000
+01010000001001000000000000001010
+01000100011000000000000000111111
+10110100001000110001000000000000
+00110100100001001111111111111111
+01000000100001010000000000000000
+00110100010000101111111111111111
+00110100011000111111111111111111
+00110000010001010000000000000000
+01011100011000001111111111111011
+11000011101000000000000000000000
+00110100000001000000000000001111
+01010000100000110000000000101101
+10111000010000010010000000000000
+00100000100001000000000000000011
+01011100100000000000000000101011
+10111000010000000010000000000000
+10111000001000000010100000000000
+10111000011000000011000000000000
+00110100000001110000000000001111
+00101000100010000000000000000000
+00110100110001101111111111110000
+01011000101010000000000000000000
+00101000100010000000000000000100
+01011000101010000000000000000100
+00101000100010000000000000001000
+01011000101010000000000000001000
+00101000100010000000000000001100
+00110100100001000000000000010000
+01011000101010000000000000001100
+00110100101001010000000000010000
+01010100110001111111111111110101
+00110100011000111111111111110000
+00000000011001100000000000000100
+00100000011000110000000000001111
+00110100110001100000000000000001
+00111100110001100000000000000100
+10110100001001100011100000000000
+10110100010001100011000000000000
+00110100000000100000000000000011
+01010000010000110000000000010001
+00110100000000100000000000000000
+00110100000010000000000000000011
+10110100110000100010000000000000
+00101000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000100
+01011000100001010000000000000000
+11001000011000100010000000000000
+01010100100010001111111111111010
+00110100011000111111111111111100
+00000000011000100000000000000010
+00100000011000110000000000000011
+00110100010000100000000000000001
+00111100010000100000000000000010
+10110100111000100011100000000000
+10110100110000100011000000000000
+01000100011000000000000000001000
+00110100000000100000000000000000
+10110100110000100010000000000000
+01000000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000001
+00110000100001010000000000000000
+01011100010000111111111111111011
+11000011101000000000000000000000
+00100000001001010000000000000011
+10111000001000000010000000000000
+01000100101000000000000000001011
+01000100011000000000000000101100
+00110100011000111111111111111111
+00100000010001100000000011111111
+11100000000000000000000000000011
+01000100011000000000000000101000
+00110100011000111111111111111111
+00110000100001100000000000000000
+00110100100001000000000000000001
+00100000100001010000000000000011
+01011100101000001111111111111011
+00110100000001010000000000000011
+01010000101000110000000000011010
+00100000010001010000000011111111
+00111100101001100000000000001000
+00110100000010100000000000001111
+10111000110001010010100000000000
+00111100101001100000000000010000
+10111000100000000100000000000000
+10111000110001010011000000000000
+10111000011000000011100000000000
+10111000100000000010100000000000
+00110100000010010000000000001111
+01010100011010100000000000010111
+00110100000001000000000000000000
+00110100000001110000000000000011
+10110101000001000010100000000000
+00110100100001000000000000000100
+01011000101001100000000000000000
+11001000011001000010100000000000
+01010100101001111111111111111100
+00110100011000111111111111111100
+00000000011001000000000000000010
+00100000011000110000000000000011
+00110100100001000000000000000001
+00111100100001000000000000000010
+10110101000001000100000000000000
+10111001000000000010000000000000
+01000100011000000000000000000111
+00100000010000100000000011111111
+00110100000001010000000000000000
+10110100100001010011000000000000
+00110000110000100000000000000000
+00110100101001010000000000000001
+01011100011001011111111111111101
+11000011101000000000000000000000
+01011000101001100000000000000000
+01011000101001100000000000000100
+01011000101001100000000000001000
+01011000101001100000000000001100
+00110100111001111111111111110000
+00110100101001010000000000010000
+01010100111010011111111111111010
+00110100011000111111111111110000
+00000000011010000000000000000100
+00100000011000110000000000001111
+00110101000010000000000000000001
+00111101000010000000000000000100
+10110100100010000100000000000000
+00110100000001000000000000000011
+01010100011001001111111111011100
+10111001000000000010000000000000
+11100011111111111111111111101000
+01111000000000110000000000000001
+00111000011000111010110110000000
+00101000011001110000000000000000
+10111000001000000100100000000000
+00110100000000110000000000000000
+00110100000001100000000000000001
+11100000000000000000000000001001
+01000000100001000000000000000000
+10110100111001000100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01000101000001100000000000010010
+11001000101001000000100000000000
+01011100001000000000000000010011
+01000100100000010000000000010010
+10110101001000110010100000000000
+01000000101001010000000000000000
+10110100010000110010000000000000
+00110100011000110000000000000001
+10110100111001010100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01011101000001101111111111110001
+01000000100001000000000000000000
+00110100101001010000000000100000
+10110100111001000100000000000000
+01000001000010000000000000000001
+00100001000010000000000000000011
+01011101000001101111111111110000
+00110100100001000000000000100000
+11001000101001000000100000000000
+01000100001000001111111111101111
+11000011101000000000000000000000
+10111000010000010001100000000000
+00100000011000110000000000000011
+01011100011000000000000000011101
+10111000001000000010000000000000
+00101000010000110000000000000000
+00101000001000010000000000000000
+01011100001000110000000000011000
+01111000000000110000000000000001
+00111000011000111001010111011000
+00101000011001110000000000000000
+01111000000000110000000000000001
+00111000011000111001010111011100
+00101000011001100000000000000000
+10100100001000000001100000000000
+10110100001001110000100000000000
+10100000001000110001100000000000
+10100000011001100001100000000000
+00110100000000010000000000000000
+01000100011000000000000000000011
+11100000000000000000000000011100
+01011100011000000000000000011001
+00110100100001000000000000000100
+00101000100000010000000000000000
+00110100010000100000000000000100
+00101000010010000000000000000000
+10110100001001110010100000000000
+10100100001000000001100000000000
+10100000101000110001100000000000
+10100000011001100001100000000000
+01000100001010001111111111110111
+10111000100000000000100000000000
+01000000001000110000000000000000
+01011100011000000000000000000110
+11100000000000000000000000001001
+00110100001000010000000000000001
+01000000001000110000000000000000
+00110100010000100000000000000001
+01000100011000000000000000000101
+01000000010001000000000000000000
+01000100011001001111111111111011
+11001000011001000000100000000000
+11000011101000000000000000000000
+01000000010001000000000000000000
+11001000011001000000100000000000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+10111000010000010010100000000000
+00100000101001010000000000000011
+10111000010000000011100000000000
+10111000001000000010000000000000
+01011100101000000000000000011000
+01111000000001000000000000000001
+00111000100001001001010111011000
+00101000010000110000000000000000
+00101000100010000000000000000000
+01111000000001000000000000000001
+00111000100001001001010111011100
+00101000100001110000000000000000
+10100100011000000011000000000000
+10110100011010000010000000000000
+10100000110001000011000000000000
+10100000110001110011000000000000
+10111000001000000010000000000000
+01011100110001010000000000001010
+01011000100000110000000000000000
+00110100010000100000000000000100
+00101000010000110000000000000000
+00110100100001000000000000000100
+10100100011000000011000000000000
+10110100011010000010100000000000
+10100000110001010010100000000000
+10100000101001110010100000000000
+01000100101000001111111111111000
+10111000010000000011100000000000
+00110100000000110000000000000000
+10110100111000110010100000000000
+01000000101001010000000000000000
+10110100100000110011000000000000
+00110100011000110000000000000001
+00110000110001010000000000000000
+01011100101000001111111111111011
+11000011101000000000000000000000
+00100000001000100000000000000011
+01000100010000000000000000101100
+01000000001000110000000000000000
+00110100000000100000000000000000
+01000100011000000000000000100111
+10111000001000000001000000000000
+11100000000000000000000000000011
+01000000010000110000000000000000
+01000100011000000000000000100010
+00110100010000100000000000000001
+00100000010000110000000000000011
+01011100011000001111111111111100
+01111000000001000000000000000001
+00111000100001001001010111011000
+00101000010000110000000000000000
+00101000100001100000000000000000
+01111000000001000000000000000001
+00111000100001001001010111011100
+00101000100001010000000000000000
+10100100011000000010000000000000
+10110100011001100001100000000000
+10100000011001000001100000000000
+10100000011001010001100000000000
+01011100011000000000000000010001
+00110100010000100000000000000100
+00101000010000110000000000000000
+10110100011001100010000000000000
+10100100011000000001100000000000
+10100000100000110001100000000000
+10100000011001010001100000000000
+01011100011000000000000000001010
+00110100010000100000000000000100
+00101000010000110000000000000000
+10110100011001100010000000000000
+10100100011000000001100000000000
+10100000100000110001100000000000
+10100000011001010001100000000000
+01000100011000001111111111110011
+11100000000000000000000000000010
+00110100010000100000000000000001
+01000000010000110000000000000000
+01011100011000001111111111111110
+11001000010000010001000000000000
+10111000010000000000100000000000
+11000011101000000000000000000000
+10111000001000000001000000000000
+11100011111111111111111111011110
+00110100000001100000000000000000
+01000100011000000000000000010111
+10111000010000010011100000000000
+00100000111001110000000000000011
+00110100011001001111111111111111
+01000100111000000000000000010101
+01000000001000110000000000000000
+01000000010001010000000000000000
+01011100011001010000000000001111
+00110100000001100000000000000000
+01000100100000000000000000001110
+00110100001000010000000000000001
+00110100010000100000000000000001
+01011100011000000000000000000100
+11100000000000000000000000001010
+01000100100000000000000000110011
+01000100011000000000000000110010
+01000000001000110000000000000000
+01000000010001010000000000000000
+00110100100001001111111111111111
+00110100001000010000000000000001
+00110100010000100000000000000001
+01000100011001011111111111111001
+11001000011001010011000000000000
+10111000110000000000100000000000
+11000011101000000000000000000000
+10111000001000000010100000000000
+00110100000000010000000000000011
+10111000010000000010000000000000
+01010000001000110000000000101000
+00101000101000010000000000000000
+00101000010000100000000000000000
+01011100001000100000000000100101
+00110100011000111111111111111100
+10111000111000000011000000000000
+01000100011000001111111111110101
+01111000000000100000000000000001
+00111000010000101001010111011000
+00101000010010010000000000000000
+01111000000000100000000000000001
+00111000010000101001010111011100
+00101000010010000000000000000000
+10100100001000000001000000000000
+10110100001010010000100000000000
+10100000001000100000100000000000
+10100000001010000000100000000000
+00110100000001110000000000000011
+01011100001000001111111111101001
+00110100101001010000000000000100
+00110100100001000000000000000100
+01010100011001110000000000000110
+10111000101000000000100000000000
+10111000100000000001000000000000
+01000100011000000000000000010100
+00110100011001001111111111111111
+11100011111111111111111111001111
+00101000101000010000000000000000
+00101000100010100000000000000000
+10110100001010010011000000000000
+10100100001000000001000000000000
+10100000110000100001000000000000
+10100000010010000001000000000000
+01011100001010100000000000000111
+00110100011000111111111111111100
+01000100011000000000000000000010
+01000100010000001111111111101111
+00110100000001100000000000000000
+10111000110000000000100000000000
+11000011101000000000000000000000
+10111000100000000001000000000000
+10111000101000000000100000000000
+00110100011001001111111111111111
+11100011111111111111111110111110
+01000000101000110000000000000000
+01000000100001010000000000000000
+11001000011001010011000000000000
+11100011111111111111111111001100
+10111000010000010010000000000000
+00100000100001000000000000000011
+01110100011001010000000000000011
+01100100100001000000000000000000
+10111000010000000011000000000000
+10100000100001010010000000000000
+10111000001000000010100000000000
+01000100100000000000000000010101
+01111000000001000000000000000001
+00111000100001001001010111011000
+00101000100010010000000000000000
+01111000000001000000000000000001
+00111000100001001001010111011100
+00101000100010000000000000000000
+00110100000010100000000000000011
+11100000000000000000000000000110
+01011000101001000000000000000000
+00110100011000111111111111111100
+00110100101001010000000000000100
+00110100010000100000000000000100
+01010001010000110000000000000111
+00101000010001000000000000000000
+10100100100000000011100000000000
+10110100100010010011000000000000
+10100000111001100011000000000000
+10100000110010000011000000000000
+01000100110000001111111111110110
+10111000010000000011000000000000
+01000100011000000000000000010100
+01000000110000100000000000000000
+00110100011000111111111111111111
+00110100101001000000000000000001
+00110000101000100000000000000000
+01000100010000000000000000001001
+00110100110000100000000000000001
+01000100011000000000000000001110
+01000000010001010000000000000000
+00110100011000111111111111111111
+00110100010000100000000000000001
+00110000100001010000000000000000
+00110100100001000000000000000001
+01011100101000001111111111111010
+00110100000000100000000000000000
+01000100011000000000000000000111
+10110100100000100010100000000000
+00110000101000000000000000000000
+00110100010000100000000000000001
+01011100011000101111111111111101
+11000011101000000000000000000000
+11000011101000000000000000000000
+11000011101000000000000000000000
+00110100000000110000000000000000
+01000100010000000000000000001100
+01000000001001000000000000000000
+01000100100000000000000000001010
+00110100010000101111111111111111
+10111000001000000001100000000000
+11100000000000000000000000000100
+01000000011001000000000000000000
+00110100010000101111111111111111
+01000100100000000000000000000011
+00110100011000110000000000000001
+01011100010000001111111111111100
+11001000011000010001100000000000
+10111000011000000000100000000000
+11000011101000000000000000000000
+01010111010100100010000001000011
+01101111011100100110010100111010
+00100000011100110111010001100001
+01110010011101000110100101101110
+01100111001000000111010101110000
+00101110001011100010111000001010
+00000000000000000000000000000000
+01010101011011100110000101100010
+01101100011001010010000001110100
+01101111001000000110010001100101
+01110100011001010111001001101101
+01101001011011100110010100100000
+01001101010000010100001100100000
+01100001011001000110010001110010
+01100101011100110111001100001010
+00000000000000000000000000000000
+01001100011011110110001101100001
+01101100001000000100110101000001
+01000011001000000110000101100100
+01100100011100100110010101110011
+01110011001110100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00001010000000000000000000000000
+01001110011001010111011100100000
+01101101011000010111100000100000
+01110010011101010110111000100000
+01110100011010010110110101100101
+00100000011001100110111101110010
+00100000011000010010000001110100
+01100001011100110110101100100000
+00100101011100110010110000100000
+01101111011011000110010000100000
+00100101011011000110010000101100
+00100000011011100110010101110111
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110100011000010111001101101011
+00100000001001010111001100101100
+00100000011100100111010101101110
+00100000011001100110111101110010
+00100000001001010110010000100000
+01101101011100110000101000000000
+01110011011100000110110001101100
+00101101011000100110100000000000
+01110011011010000110010101101100
+01101100001010110110011101110101
+01101001000000000000000000000000
+01110000011101000111000000000000
+01110101011100000111010001101001
+01101101011001010000000000000000
+01100011011010000110010101100011
+01101011001011010110110001101001
+01101110011010110000000000000000
+01101001011001000110110001100101
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00101101001100010010110100100101
+01110011001110100010000000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00111010001000000000000000000000
+01000101010011100101010001000101
+01010010001000000010010101110011
+00101100001000000111000001100001
+01100011011010110110010101110100
+00100000011011000110010101101110
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01110010011001010110010101101110
+01110100011001010111001000100000
+01101001011011100010000000100101
+01101001001000000110110101110011
+00001010000000000000000000000000
+01001100010001010100000101010110
+01000101001000000010010101110011
+00100000001010000110111001100101
+01111000011101000011101000100000
+00100101001100110110100100101001
+00001010000010100000000000000000
+01010010010001010100001101010110
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+00111001011001000010111000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00100000001010000111010001111001
+01110000011001010010000000100101
+01111000001011000010000000100101
+01110011001010010000101000000000
+01100110011100110110110100111010
+00100000010101010110111001101011
+01101110011011110111011101101110
+00100000011100110111010001100001
+01110100011001010010000001100110
+01101111011100100010000001110000
+01101111011100100111010000100000
+00100101011100110000101000000000
+01010111011100100110111101101110
+01100111001000000110010001101111
+01101101011000010110100101101110
+00100000001001010110100100111010
+00100000011001000110100101110011
+01100011011000010111001001100100
+00001010000000000000000000000000
+01000001011011000111010001100101
+01110010011011100110000101110100
+01100101001000000110110101100001
+01110011011101000110010101110010
+00111010001000000110010001101001
+01110011011000110110000101110010
+01100100000010100000000000000000
+01001100011011110110111101110000
+01101001011011100110011100100000
+01100110011100100110000101101101
+01100101001110100010000001100100
+01101001011100110110001101100001
+01110010011001000000101000000000
+01100110011100110110110100100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+01000101011100100111001001101111
+01110010001000000010010101101001
+00100000011010010110111000100000
+00100101011100110000101000000000
+01110000011100000111001101101001
+00000000000000000000000000000000
+00100101011100110010110100100101
+01101001001011010010010101110011
+00111010001000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010001000000111000001100001
+01110010011100110110100101101110
+01100111001000000010001000100101
+01110011001000100000101000000000
+01100100011010010110000101100111
+00101101011000110110111101101110
+01100110011010010110011100000000
+01100100011010010110000101100111
+00101101011001010111100001110100
+01100101011011100111001101101001
+01101111011011100000000000000000
+01100100011010010110000101100111
+00101101011000100110110101100011
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011100110110010101110010
+01110110011011110000000000000000
+01100100011010010110000101100111
+00101101011001100111001001100001
+01101101011001010111001100000000
+01100100011010010110000101100111
+00101101011101000110100101101101
+01100101000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00000000000000000000000000000000
+01101110011001010111011100100000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+00100101011010010000101000000000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100101011110000111000001101001
+01110010011001010110010000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010010010001010101000101010101
+01000101010100110101010000000000
+01010011010110010100111001000011
+01011111010100110100010101001110
+01000100000000000000000000000000
+01000001010011100100111001011111
+01010010010001010100001101000101
+01001001010100000101010000000000
+01000001010011100100111001011111
+01010011010001010100111001000100
+00000000000000000000000000000000
+01000110010000010101010101001100
+01010100000000000000000000000000
+01010001010101010100000101001100
+00000000000000000000000000000000
+01110011011110010110111001100011
+00000000000000000000000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110001000000000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100010000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110011011100000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000001011111
+01100110011011110110110001101100
+01101111011101110101111101110101
+01110000000000000000000000000000
+01100001011011100110111001101111
+01110101011011100110001101100101
+00000000000000000000000000000000
+01110011011010010110011101101110
+01100001011011000110100101101110
+01100111000000000000000000000000
+01101101011000010110111001100001
+01100111011001010110110101100101
+01101110011101000000000000000000
+01010000010100000101001101101001
+00100000011001100110111101110010
+00100000010101110101001001010000
+01000011001011100010000001000011
+01101111011011010110110101101001
+01110100001000000010010101110011
+00101100001000000110001001110101
+01101001011011000111010000100000
+01101111011011100010000001000100
+01100101011000110010000000110001
+00111000001000000011001000110000
+00110001001101110000101000000000
+01110000011100000111001101101001
+00101101011101100011001000110000
+00110001001101100010111000110001
+00110010001011010011100000111001
+00101101011001110110001101100010
+00110101001110010011001100110100
+01100101000000000000000000000000
+01010000010101000101000000100000
+01110011011101000110000101110010
+01110100000010100000000000000000
+01010000010101000101000000100000
+01110011011101000110111101110000
+00001010000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000000000
+00001010010011000110111101100011
+01101011001000000111010001101001
+01101101011001010110111101110101
+01110100001011100000000000000000
+00101110000000000000000000000000
+01110111011100100011000100000000
+00100000011010010110111001110110
+01100001011011000110100101100100
+00000000000000000000000000000000
+00100101011100110101010001001001
+01001101010001010011101000100000
+00101000001001010110110001101001
+00100000001011010010000000110000
+01111000001001010110110001111000
+00101001001000000010010101101100
+01101001001011100010010100110000
+00110110011011000110100100100101
+01110011000010100000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000000010100000000000000000
+00100101011100110010010101110011
+00100101011100110010000000101000
+01110011011010010111101001100101
+00100000001001010110100100101001
+00001010000000000000000000000000
+00100101011100110010010101110011
+00000000000000000000000000000000
+00100101001100000011001001111000
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000001110101
+01101110011100110111010101110000
+01110000011011110111001001110100
+01100101011001000010000000101000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000000100101
+01101001001000000010100001110100
+01111001011100000110010100100000
+00100101011010010010110000100000
+01101100011001010110111000100000
+00100101011010010010110000100000
+01100100011011110110110101100001
+01101001011011100010000000100101
+01101001001010010000101000000000
+00100101011100110100011001001100
+01000001010001110101001100111010
+00100000001100000111100000100101
+00110000001101000111100000100000
+00101000011000110110111101110010
+01110010011001010110001101110100
+01101001011011110110111000100000
+00110000011110000010010100110000
+00111000011110000011101000100101
+00110000001110000111100000100000
+00100101001100000011100001110101
+00101001000010100000000000000000
+01010000010011110101001001010100
+00111010001000000000000000000000
+00100101011100110101001001000101
+01010011010101000011101000100000
+01110011011001010111000100100000
+00100101011010010010110000100000
+01100011011101000111001001101100
+00100000001001010110100100101100
+00100000011011000110111101100111
+00101101011010010110111001110100
+01100101011100100111011001100001
+01101100001000000010010101101001
+00001010000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001010011
+01011001010011100100001100001010
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101011011000111010100101110
+00100101001100000011100101101001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010110010100111001000011
+00111010001000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010001001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000110
+01001111010011000100110001001111
+01010111010111110101010101010000
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000110010011110100110001001100
+01001111010101110101111101010101
+01010000001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010011
+01010000000010100000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010011010100000011101000100000
+00000000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000001
+01001110010011100100111101010101
+01001110010000110100010100001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000111001101110100
+01100001011011010111000000100000
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110100011110000000101000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010111000101110101
+01100001011011000110100101110100
+01111001001000000000000000000000
+00100101011100110100110101010011
+01000111001011010100000101001110
+01001110010011110101010101001110
+01000011010001010011101000100000
+01100111011100100110000101101110
+01100100011011010110000101110011
+01110100011001010111001000101101
+01110000011100100110100101101111
+00100000001001010110100100100000
+00100101011010010000101000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010110100101100100
+00100000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001010011
+01001001010001110100111001000001
+01001100010010010100111001000111
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010010010100011101001110
+01000001010011000100100101001110
+01000111001110100010000001110100
+01100001011100100110011101100101
+01110100001011010111000001101111
+01110010011101000010000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000010010101101001
+00100000001011010010000000100101
+01101001001000000011110100100000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01111001011100000110010100100000
+00100101001100000011010001111000
+00100000011011000110010101101110
+00100000001001010110100100100000
+01101111011101010110100100100000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000001110011
+01110101011000100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000010100000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000110010101111000
+01110000011001010110001101110100
+01100101011001000010000000100101
+01101001001011000010000001110100
+01101111011101000110000101101100
+00100000001001010110100100101001
+00001010000000000000000000000000
+01010100010011000101011000111010
+00100000000000000000000000000000
+01110100011011000111011000101101
+01100011011011110110111001110100
+01100101011011100111010000000000
+01000100010101010100110101010000
+00111010001000000000000000000000
+01110000011000010111100101101100
+01101111011000010110010000000000
+00100101011100110101011001001100
+01000001010011100010000000100101
+01101001000010100000000000000000
+00100101011100110100010101010100
+01001000001110100010000000100101
+00110000001101000111100000100000
+00101000001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000000101101
+00111110001000000010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000101001
+00001010000000000000000000000000
+00100101011100110100100101010000
+00111010001000000010010101101001
+00100000001010000010010101101001
+00101110001001010110100100101110
+00100101011010010010111000100101
+01101001001000000010110100111110
+00100000001001010110100100101110
+00100101011010010010111000100101
+01101001001011100010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110101010101000100
+01010000001110100010000000101000
+00100101011010010010000000101101
+00111110001000000010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101011011000110100100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000001001010111001100111010
+00100000011000110110000101101110
+00100000011011100110111101110100
+00100000011000010110010001101010
+01110101011100110111010000100000
+01100110011100100110010101110001
+01011111011100000111000001100010
+00100000001001010110110001101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101001110010110110001110101
+00101110001001010011000000111001
+01101100011010010000101000000000
+00100101011100110011101000100000
+01110011011011100111010000111101
+00100101011001000010110000100000
+01110011011001010110001100111101
+00100101011011000110010000101100
+00100000011011100111001101100101
+01100011001111010010010101101100
+01100100000010100000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000010000000000000
+01110011011001010110111001100100
+00111010001000000000000000000000
+01110010011001010110001101110110
+00111010001000000000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000000000000000000
+00100000001000000010000000100101
+00111001011001000010111000100101
+00110011011001000000101000000000
+01101001011011100110100101110100
+01101001011000010110110001101001
+01111010011010010110111001100111
+00000000000000000000000000000000
+01100110011000010111010101101100
+01110100011110010000000000000000
+01100100011010010111001101100001
+01100010011011000110010101100100
+00000000000000000000000000000000
+01101100011010010111001101110100
+01100101011011100110100101101110
+01100111000000000000000000000000
+01110000011100100110010100101101
+01101101011000010111001101110100
+01100101011100100000000000000000
+01110000011000010111001101110011
+01101001011101100110010100000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01110011011011000110000101110110
+01100101000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110000011100100110010101110011
+01100101011011100111010000000000
+01101101011000010111001101110100
+01100101011100100010111101110111
+01110010001011010110110100101101
+01101100011011110110001101101011
+00000000000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110011001011010110110001101111
+01100011011010110000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01101100011011110110001101101011
+01100101011001000000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001101001
+01101111011011100000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001100101
+01100100000000000000000000000000
+01110111011100100010110101110010
+01100101011100110111000000101101
+01100011011000010110110001101001
+01100010001011010111001001100101
+01110001000000000000000000000000
+01110111011100100010110101101100
+01101001011011100110101100101101
+01101111011011100000000000000000
+01100001011000100111001101101111
+01101100011101010111010001100101
+00101101011000110110000101101100
+01101001011000100111001001100001
+01110100011010010110111101101110
+00000000000000000000000000000000
+01101000011011110110111101101011
+00111010001000000010010101110011
+00001010000000000000000000000000
+01010100001100100010000001101111
+01110010001000000101010000110011
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01010100001100110010000001101111
+01110010001000000101010000110110
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01001000011000010110111001100100
+01110011011010000110000101101011
+01100101001000000110011001100001
+01101001011011000111010101110010
+01100101001110100010000001101110
+01101111011101110010000001101110
+01101111011011100010110101110111
+01110010001000000010010101110011
+00001010000000000000000000000000
+01010010011001010111010001110010
+01111001001000000110111101101110
+00100000011101000110100101101101
+01100101011011110111010101110100
+00001010000000000000000000000000
+00100101011100110011101000100000
+01110011011101010110001001110011
+01110100011000010111010001100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000010000001100110
+01101001011110000110010101100100
+00100000011001000110010101101100
+01100001011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100011001000110010001100100000
+01110100001101000010111001110000
+01101000011000010111001101100101
+00100000011010010111001100100000
+01100001011011000111001001100101
+01100001011001000111100100100000
+01100011011011110111001001110010
+01100101011000110111010001100101
+01100100001000000110011001101111
+01110010001000000110001001101001
+01110100011100110110110001101001
+01100100011001010000101000000000
+01110100001100010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+01110100001101000011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000011000100110100101110100
+01110011011011000110100101100100
+01100101001110100010000000100101
+01100100000010100000000000000000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100100000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000001001110
+01100101011101110010000001100011
+01101100011000010111001101110011
+00100000001001010110100100001010
+00000000000000000000000000000000
+01000010010101010100011100111010
+00100000010101000111001001111001
+01101001011011100110011100100000
+01110100011011110010000001110011
+01100101011011100110010000100000
+01101001011011100111011001100001
+01101100011010010110010000100000
+01110111011100100101111101101101
+01110011011001110010000001101101
+01101111011001000110010100111101
+00100101011110000010000001101001
+01100100001111010010010101111000
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000101010001101000
+01101001011100110010000001101001
+01110011001000000110111001101111
+01110100001000000110111101110010
+01100111011000010110111001101001
+01111010011000010111010001101001
+01101111011011100010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00100000010101000100110001010110
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000100001101000101
+01010010010011100010011101110011
+00100000010011110101010101001001
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000101011101101000
+01101001011101000110010100100000
+01010010011000010110001001100010
+01101001011101000010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00111101001000000011000001111000
+00100101011110000000101000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000111001101110101
+01110000011100000110111101110010
+01110100011001010110010000100000
+01110110011001010111001001110011
+01101001011011110110111000100000
+01101110011101010110110101100010
+01100101011100100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100101011100110010000000111101
+00100000001001010110110001100100
+00111010001001010011000000111001
+01101100011001000011101000100101
+00110000001100110110110001100100
+00001010000000000000000000000000
+01010101011011100110100101101110
+01101001011101000110100101100001
+01101100011010010111101001100101
+01100100000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000010010101100100
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110001
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110011
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110100
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110101
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110110
+00000000000000000000000000000000
+00101101001111100110110101100100
+01100101011011000110000101111001
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000000101000000000
+00100000001010000111011101100001
+01101001011101000010000001100110
+01101111011100100010000001101000
+01110111001010010000000000000000
+01101111011001100110011001110011
+01100101011101000101111101101000
+01110111001110100010000000100101
+01101100011010010010111000100101
+00110000001110010110110001101001
+00100000001010000010101100100101
+01101100011010010010100100001010
+00000000000000000000000000000000
+01010000010011000100110000100000
+01001111011101010111010001001111
+01100110010011000110111101100011
+01101011001011000010000001110011
+01101000011011110111010101101100
+01100100001000000111001001100101
+01110011011101000110000101110010
+01110100001000000111001101111001
+01101110011000110000101000000000
+01110011011001010111001001110110
+01101111001110100110001001110101
+01110011011110010000101000000000
+01110111011100100101111101110011
+01100101011100100111011001101111
+00100000011100110111010001100001
+01110100011001010011101000100000
+00100101011100110010010101110011
+00001010000000000000000000000000
+01101111011011000110010001110011
+01100101011101000111000000100000
+00100101011010010010110000100000
+01101111011001100110011001110011
+01100101011101000010000000100101
+01101001001110100010010100110000
+00110100011010010000101000000000
+01100001011001000110101001110101
+01110011011101000010000001110000
+01101000011000010111001101100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010011100101001101000101
+01000011000000000000000000000000
+01010011010110010100111001000011
+01011111010100110100010101000011
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010100000100100001000001
+01010011010001010000000000000000
+01010100010100100100000101000011
+01001011010111110101000001001000
+01000001010100110100010100000000
+01010111010000010100100101010100
+01011111010011110100011001000110
+01010011010001010101010001011111
+01010011010101000100000101000010
+01001100010001010000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110011
+01111001011011100110001100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001100001
+01101110011011100110111101110101
+01101110011000110110010100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110010
+01100101011100010111010101100101
+01110011011101000000101000000000
+01001110011001010111011100100000
+01100110011011110111001001100101
+01101001011001110110111000100000
+01001101011000010111001101110100
+01100101011100100010000000100101
+01101001001000000110000101100100
+01100100011001010110010000001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01100011011000010110111000100111
+01110100001000000110100101101110
+01101001011101000010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+00111101001000000010010101100100
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110000101100011
+01100011011101010111001001100001
+01100011011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01001001011001110110111001101111
+01110010011001010110010000100000
+01100110011100100110000101101101
+01100101001000000010010101101001
+00001010000000000000000000000000
+01110000011100000101111101110011
+01101100011000010111011001100101
+00100000001110100010000001000100
+01100101011011000110000101111001
+00100000010100100110010101110011
+01110000001000000110010001101111
+01100101011100110110111000100111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001001000000010100001100110
+00100000001001010111100000101001
+00001010000000000000000000000000
+01110000011100000101111101110000
+01100011011011000110111101100011
+01101011001000000011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01100100011011110110010101110011
+01101110001001110111010000100000
+01101101011000010111010001100011
+01101000001000000101000001000100
+01100101011011000110000101111001
+00100000010100100110010101110001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01000110001011010111010101110000
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001010000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001000010100000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001000110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000011010010111001100100000
+01101110011011110111010000100000
+01100110011100100110111101101101
+00100000011000110111010101110010
+01110010011001010110111001110100
+00100000011100000110000101110010
+01100101011011100111010000001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01101100011000010111011001100101
+00100000011101110110000101110011
+00100000011011100110111101110100
+00100000011101110110000101101001
+01110100011010010110111001100111
+00100000011000010010000001100110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00001010000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01100101011100010111010101100101
+01101110011000110110010101001001
+01000100001000000010010101100100
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001101100
+01100001011100110111010000100000
+01010011011110010110111001100011
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000001001010110010000001010
+00000000000000000000000000000000
+00100101011100110010100000100101
+01100100001010010010000001001101
+01100101011100110111001101100001
+01100111011001010010000001100011
+01100001011011100010011101110100
+00100000011000100110010100100000
+01110011011001010110111001110100
+00001010000000000000000000000000
+01010011010001010100111001010100
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+01100100001011100010010100110000
+00111001011001000010111000100101
+00110000001100110110010000100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100010000101000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100100000101000000000
+01110000011100100110010100101101
+00000000000000000000000000000000
+01000010011001010111001101110100
+00100000011001100110111101110010
+01100101011010010110011101101110
+00100000011011010110000101110011
+01110100011001010111001000100000
+01101001011100110010000000100101
+01101001001011110010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01110000011000010111001101110011
+01101001011101100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+00100101011100110110110101100001
+01110011011101000110010101110010
+00001010000000000000000000000000
+01001110011001010111011100100000
+01010101010101000100001100100000
+01101111011001100110011001110011
+01100101011101000011101000100000
+00100101011010010000101000000000
+00100101011100110011101000100000
+01110011011011000110000101110110
+01100101000010100000000000000000
+00101101000000000000000000000000
+00100101011100110010010101100100
+00101110001001010011000000111001
+01100100000000000000000000000000
+01010100011100100110100101101101
+00100000011101000110111101101111
+00101101011011000110111101101110
+01100111001000000110110101110000
+01100100001110100010000000100101
+01101001000010100000000000000000
+01000001011001100111010001100101
+01110010001000000110000101110110
+01100111001010000010010101101001
+00101001001011000010000001101101
+01100101011000010110111001010000
+01100001011101000110100001000100
+01100101011011000110000101111001
+00111010001000000010010101101001
+00001010000000000000000000000000
+01100101011100100111001001101111
+01110010001000000110100101101110
+00100000011101000101111101101111
+01110000011100110010110100111110
+01110011011001010111001001110110
+01101111010111110110100101101110
+01101001011101000000000000000000
+01001001011011100110100101110100
+01101001011000010110110001101001
+01111010011001010110010000111010
+00100000011011110110001001110011
+01011111011001000111001001101001
+01100110011101000010000000100101
+01101100011011000110100100001010
+00000000000000000000000000000000
+01001111011001100110011001110011
+01100101011101000010000001100110
+01110010011011110110110100100000
+01101101011000010111001101110100
+01100101011100100011101000100000
+00100000001000000010000000100000
+00100101011100110000101000000000
+01010100001100010011101000100000
+00100101011100110000101000000000
+01010100001100100011101000100000
+00100101011100110000101000000000
+01001111011000100111001101100101
+01110010011101100110010101100100
+00100000011001000111001001101001
+01100110011101000011101000100000
+00100101001110010110100100001010
+00000000000000000000000000000000
+01100100011010010111001101100011
+01100001011100100110010000100000
+01010100001100110010111101010100
+00110100001110100010000001110111
+01100101001000000110110101101001
+01110011011100110010000001010100
+00110001001011110101010000110010
+00001010000000000000000000000000
+01010100001100110011101000100000
+00100101011100110000101000000000
+01010100001101000011101000100000
+00100101011100110000101000000000
+01001101011000010111001101110100
+01100101011100100010000001110100
+01101111001000000111001101101100
+01100001011101100110010100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010011011011000110000101110110
+01100101001000000111010001101111
+00100000011011010110000101110011
+01110100011001010111001000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011001010110000101101110
+01010000011000010111010001101000
+01000100011001010110110001100001
+01111001001110100010000000100101
+01110011000010100000000000000000
+01010100001101010011101000100000
+00100101011100110000101000000000
+01010100001101100011101000100000
+00100101011100110000101000000000
+01010011011011000110000101110110
+01100101001000000100111101101110
+01101100011110010010110000100000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+01110011011001010111010000100000
+01110100011011110010000000100101
+01100100000010100000000000000000
+00100101001100100011000001110101
+00000000000000000000000000000000
+00100101011101010000000000000000
+00100101001100010011000101110101
+00100101001100000011100101110101
+00000000000000000000000000000000
+00100101011101010010010100110000
+00111001011101010000000000000000
+01101100011011100110101100111010
+00100101011001000010000001110010
+01111000001110100010010101100100
+00100000011101000111100000111010
+00100101011001000010000000000000
+01101100011011110110001101101011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110000011101000111000000111010
+00100101011100110010000000000000
+01110011011101100011101000100101
+01100100001000000000000000000000
+01110011011100110011101000100111
+00100101011100110010011100100000
+00000000000000000000000000000000
+01100001011101010111100000100101
+01100100001110100010010101111000
+00100000000000000000000000000000
+01110011011001010110001100111010
+00100101011001000010000001101110
+01110011011001010110001100111010
+00100101011001000010000000000000
+01101101011101010011101000100101
+01110011001000000000000000000000
+01100100011011010111001100111010
+00100101011100110010000000000000
+01100100011101000111100001101101
+00111010001001010110010000100000
+01100100011100100111100001101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100100011101000111100001110011
+00111010001001010110010000100000
+01100100011100100111100001110011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100001011100110111100101101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100011011100100111010001110100
+00111010001001010111001100100000
+00000000000000000000000000000000
+01100011011010110110111100111010
+00100101011001000010000000000000
+01110011011001010111010001110000
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110101011000110110111001110100
+00111010001001010110010000100000
+00000000000000000000000000000000
+01101000011001000011101000100101
+01100100001000000110110101100100
+00111010001001010110010000100000
+01100001011001000011101000100101
+01100100001000000000000000000000
+01110000011000110110001000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100001000000100001100000000
+00001010000010100101000001010100
+01010000001000000111001101110100
+01100001011101000111010101110011
+00111010001000000000000000000000
+00100101011100110000000000000000
+00001010000010100101001101111001
+01101110011000110010000001101001
+01101110011001100110111100100000
+01101110011011110111010000100000
+01110110011000010110110001101001
+01100100000010100000000000000000
+00001010000010100101001101111001
+01101110011000110110100001110010
+01101111011011100110100101111010
+01100001011101000110100101101111
+01101110001000000111001101110100
+01100001011101000111010101110011
+00111010000010100000000000000000
+01010111010100100010000001010000
+01010100010100000010000001000011
+01101111011100100110010100100000
+01010011011110010110111001100011
+00100000010011010110111101101110
+01101001011101000110111101110010
+00100000001001010111001100000000
+00001010010001010111001101100011
+00100000001111010010000001100101
+01111000011010010111010000000000
+00001010000010100101010001000001
+01001001001000000101010001101001
+01101101011001010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+00001010000010100100110001101001
+01101110011010110010000001110011
+01110100011000010111010001110101
+01110011001110100000000000000000
+00001010001001010111001100111010
+00100000000000000000000000000000
+01110111011100100111010100110001
+00000000000000000000000000000000
+01001100011010010110111001101011
+00100000011101010111000000100000
+00100000001000000000000000000000
+01001100011010010110111001101011
+00100000011001000110111101110111
+01101110001000000000000000000000
+00101000010100100101100000111010
+00100000001001010110010000101100
+00100000010101000101100000111010
+00100000001001010110010000101001
+00000000000000000000000000000000
+00100000010010010101000001110110
+00110100001110100010000000000000
+01000010010011110100111101010100
+01010000001000000111001001110101
+01101110011011100110100101101110
+01100111000000000000000000000000
+00100101011100110010000000101000
+01100110011100100110111101101101
+00100000011000100110111101101111
+01110100011100000010100100000000
+00100101011100110010000000101000
+01110011011101000110000101110100
+01101001011000110010000001100001
+01110011011100110110100101100111
+01101110011011010110010101101110
+01110100001010010000000000000000
+00001010010011010110111101100100
+01100101001110100010000000000000
+01010111010100100010000001001111
+01100110011001100000000000000000
+00001010010000110110110001101111
+01100011011010110010000001101111
+01100110011001100111001101100101
+01110100001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00100101001100100110100100101110
+00100101001100000011100101101001
+00100000011100110000000000000000
+00100101011010010010111000100101
+00110000001110010110100100100000
+01110011000000000000000000000000
+00100101001110010110100100100000
+01101110011100110000000000000000
+00001010010011110110111001100101
+00101101011101110110000101111001
+00100000011001000110010101101100
+01100001011110010010000001100001
+01110110011001010111001001100001
+01100111011001010110010000111010
+00100000001000000010000000100000
+00100000001000000010000000000000
+00001010010011110110001001110011
+01100101011100100111011001100101
+01100100001000000110010001110010
+01101001011001100111010000111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010111010100100010000001001101
+01100001011100110111010001100101
+01110010001000000010000000000000
+01010111010100100010000001010011
+01101100011000010111011001100101
+00100000001000000010000000000000
+01010111010100100010000001010101
+01101110011010110110111001101111
+01110111011011100010000000000000
+01001100011011110110001101101011
+01100101011001000010000000000000
+01001110011011110100110001101111
+01100011011010110010000000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01100101011001000000000000000000
+01010101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01010011011001010111001001110110
+01101111001000000111001101110100
+01100001011101000110010100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01001111010011100000101000000000
+01001111010001100100011000001010
+00000000000000000000000000000000
+01000001011101010111100000100000
+01100011011011000110111101100011
+01101011001000000010010101100100
+00100000011100110111010001100001
+01110100011101010111001100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00000000000000000000000000000000
+01100101011011100110000101100010
+01101100011001010110010000000000
+00101100001000000110110001101111
+01100011011010110110010101100100
+00000000000000000000000000000000
+00001010010101000110100101101101
+01101001011011100110011100100000
+01110000011000010111001001100001
+01101101011001010111010001100101
+01110010011100110011101000001010
+00000000000000000000000000000000
+01010010011011110111010101101110
+01100100001011010111010001110010
+01101001011100000010000001110100
+01101001011011010110010100100000
+00101000011011010111010100101001
+00111010001000000000000000000000
+00100101011100110010000001110000
+01110011000010100000000000000000
+01001101011000010111001101110100
+01100101011100100010110101110011
+01101100011000010111011001100101
+00100000011001000110010101101100
+01100001011110010011101000100000
+00100000001000000000000000000000
+01001101011000010111001101110100
+01100101011100100010000001010000
+01001000010110010010000001100100
+01100101011011000110000101111001
+01110011001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100010110000011101000100000
+00100101001110010110010000100000
+01110000011100110010110000100000
+01010010010110000011101000100000
+00100101001110010110010000100000
+01110000011100110000101000000000
+01010011011011000110000101110110
+01100101001000000101000001001000
+01011001001000000110010001100101
+01101100011000010111100101110011
+00111010001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100011011110111010001100001
+01101100001000000110110001101001
+01101110011010110010000001100001
+01110011011110010110110101101101
+01100101011101000111001001111001
+00111010000000000000000000000000
+00100101001100100011000101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01000011011000010110001001101100
+01100101001000000111001001110100
+01110100001000000110010001100101
+01101100011000010111100100111010
+00100000001000000010000000100000
+00100000001000000000000000000000
+01000011011011000110111101100011
+01101011001000000110111101100110
+01100110011100110110010101110100
+00111010000000000000000000000000
+00100101001100100011100101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010000011010000110000101110011
+01100101001000000111001101100101
+01110100011100000110111101101001
+01101110011101000011101000000000
+00100101001100100011011101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010011011010110110010101110111
+00111010001000000010000000100000
+00100000001000000000000000000000
+00100101001100110011001001100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100011
+01101111011101010110111001110100
+01100101011100100011101000000000
+00100101001100100011011101100100
+00001010000000000000000000000000
+01110101011011100110101101101110
+01101111011101110110111000000000
+01100100011010010110000101100111
+01110011000000000000000000000000
+01110011011101000110000101110100
+01110011000000000000000000000000
+00011011010110110011000100100101
+01100011000000000000000000000000
+01000011011011110110110101101101
+01100001011011100110010000100000
+00100010001001010111001100100010
+00111010001000000110010101110010
+01110010011011110111001000100000
+00100101011001000000101000000000
+01010101011011100111001001100101
+01100011011011110110011101101110
+01101001011110100110010101100100
+00100000011000110110111101101101
+01101101011000010110111001100100
+00100000001000100010010101110011
+00100010001011100000101000000000
+01110111011100100110001100100011
+00100000000000000000000000000000
+00100101011000110000000000000000
+01100101011110000110010101100011
+01110101011101000110100101101110
+01100111001110100010000000100101
+01110011000010100000000000000000
+01000101011011010111000001110100
+01111001001000000110100101101110
+01101001011101000010000001110011
+01100011011100100110100101110000
+01110100001011100010111000101110
+00001010000000000000000000000000
+00101101001011010010000001100010
+01110101011010010110110001110100
+00101101011010010110111000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+00101000011001010110110101110000
+01110100011110010010100100001010
+00000000000000000000000000000000
+01010111010100100010000001000011
+01101111011100100110010100100000
+01100010011101010110100101101100
+01100100001110100010000000100101
+01110011001001010111001100001010
+00000000000000000000000000000000
+01000010011101010110100101101100
+01110100001110100010000000100101
+01110011001000000010010101110011
+00100000011000100111100100100000
+00100101011100110000101000000000
+01000010011101010110100101101100
+01110100001000000110011001101111
+01110010001000000010010101100100
+00100000011010110100001000100000
+01010010010000010100110100101100
+00100000011100110111010001100001
+01100011011010110010000001101001
+01110011001000000010010101100100
+00100000011000100111100101110100
+01100101011100110000101000000000
+01010111010000010101001001001110
+01001001010011100100011100111010
+00100000011010000110000101110010
+01100100011101110110000101110010
+01100101001000000111001101100001
+01111001011100110010000000100101
+01101001011010110100001000100000
+00111100001111010010000001010010
+01000001010011010010000000111100
+00100000001001010110100101101011
+01000010000010100000000000000000
+01110110011001010111001000000000
+00100101011100110011101100100000
+00100101011100110010000000100101
+01110011000010100000000000000000
+01010101011011100110101101101110
+01101111011101110110111000100000
+01110011011101010110001001100011
+01101111011011010110110101100001
+01101110011001000010000000100010
+00100101011100110010001000001010
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100000000000000000000000000
+01110011011101000110111101110000
+00000000000000000000000000000000
+01100101001100100110010100000000
+01100100011001010110110001100001
+01111001000000000000000000000000
+01100111011011010000000000000000
+01100001011000100111001101100011
+01100001011011000000000000000000
+01101101011011110110010001100101
+00000000000000000000000000000000
+01110011011101000110111101110000
+01110000011001010110010000000000
+01110010011101010110111001101110
+01101001011011100110011100000000
+01110000001100100111000000000000
+01000001011101100110000101101001
+01101100011000010110001001101100
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100011100110011101000001010
+00000000000000000000000000000000
+00100000001000000010010101110011
+00001010000000000000000000000000
+01101000011001010110110001110000
+00000000000000000000000000000000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000000000000000000000000
+01100111011001010111010000000000
+01100111011001010111010001110000
+00000000000000000000000000000000
+01110011011001010111010000000000
+01110011011001010111010001110000
+00000000000000000000000000000000
+01001101010000010100001100101101
+01100001011001000110010001110010
+01100101011100110111001100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011000010110001100000000
+01110010011001010111001101100101
+01110100000000000000000000000000
+01101101011000010111100000000000
+01110000011100100110100101101110
+01110100010111110111010001100001
+01110011011010110101111101110100
+01101001011011010110010101011111
+01110100011010000111001001100101
+01110011011010000110111101101100
+01100100001000000010010101100100
+00001010000000000000000000000000
+00100000011010010111010001100101
+01110010011000010111010001101001
+01101111011011100111001100100000
+00100000001000000010000000100000
+01110011011001010110001101101111
+01101110011001000111001100101110
+01101101011010010110001101110010
+01101111011100110010000000100000
+00100000001000000110110101100001
+01111000010111110110110101110011
+00100000011011100110000101101101
+01100101000010100000000000000000
+00100000001000000010010100111001
+01101100011010010010000000100000
+00100000001001010011100101101100
+01101001001011100010010100110000
+00110110011011000110100100100000
+00100101001110010110110001100100
+00100000001001010111001100001010
+00000000000000000000000000000000
+01110000011100110000000000000000
+00100101011101010000101000000000
+01010101011100110110000101100111
+01100101001110100010000001110010
+01100101011001100111001001100101
+01110011011010000010000000111100
+01110011011001010110001101101111
+01101110011001000111001100111110
+00001010000000000000000000000000
+01110010011001010110011001110010
+01100101011100110110100000000000
+01110011011101000110000101110100
+01101001011100110111010001101001
+01100011011100110010000001101110
+01101111011101110010000001101111
+01100110011001100000101000000000
+01100010011101000111001100000000
+01101111011001100110011000000000
+01110011011101000110000101110100
+00000000000000000000000000000000
+01010111011100100110111101101110
+01100111001000000111000001100001
+01110010011000010110110101100101
+01110100011001010111001000001010
+00000000000000000000000000000000
+01100101011100100110000101110011
+01100101000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01000100010000100000101000000000
+01100001011001000110010000000000
+01010011010001100101000000100000
+01000100010000100010000001101001
+01110011001000000110011001110101
+01101100011011000000101000000000
+01001001001100100100001100100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010111001001110010
+01101111011100100010000000101000
+00100101011001000010100100001010
+00000000000000000000000000000000
+00100101011001000010000001010011
+01000110010100000111001100100000
+01101001011011100010000001000100
+01000010000010100000000000000000
+01110011011010000110111101110111
+00000000000000000000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010110110101110000
+01110100011110010000101000000000
+00100101011001000011101000100000
+01010000010011100011101000000000
+00100000011001000101010001111000
+00111010001000000010010100111000
+01100100001000000110010001010010
+01111000001110100010000000100101
+00111000011001000010000001100001
+01101100011100000110100001100001
+00111010001000000010010100111000
+01100100000010100000000000000000
+01101101011000010111010001100011
+01101000000000000000000000000000
+01001110011011110010000001010011
+01000110010100000010111000001010
+00000000000000000000000000000000
+01010011010001100101000000100000
+01110010011001010110000101100100
+00100000011001010111001001110010
+01101111011100100000101000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01110100011011110010000001000100
+01000010000010100000000000000000
+01010011010001100101000000100000
+01101101011000010111010001100011
+01101000011001010110010000101100
+00100000011001000101010001111000
+00111101001001010110010000100000
+01100100010100100111100000111101
+00100101011001000010000001100001
+01101100011100000110100001100001
+00111101001001010110010000001010
+00000000000000000000000000000000
+01100101011011100110000100000000
+01110011011001100111000000000000
+01101001011011100110100101110100
+00000000000000000000000000000000
+01100011011011000000000000000000
+01110011011100000111001100000000
+01100111011100000111001100000000
+00100101011001000010000000100101
+01100100000010100000000000000000
+01110011011001000110000101100011
+00000000000000000000000000000000
+01100111011001000110000101100011
+00000000000000000000000000000000
+01100011011010000110010101100011
+01101011011101100110001101101111
+00000000000000000000000000000000
+01110000011011000110110000000000
+01100110011011110111001001100011
+01100101000000000000000000000000
+01000110011011110111010101101110
+01100100001000000111000001101000
+01100001011100110110010100100000
+01110100011100100110000101101110
+01110011011010010111010001101001
+01101111011011100010000001101001
+01101110001000000100010101000101
+01010000010100100100111101001101
+00111010001000000010010101100100
+01110000011100110000101000000000
+01001101011001010110000101110011
+01110101011100100110100101101110
+01100111001000000111010000110010
+00101111011101000011010000100000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011011100111001101101001
+01110100011010010110111101101110
+00101110001011100010111000001010
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000000000
+01110011011001010111010001110011
+01100101011000110000000000000000
+01110011011001010111010001101110
+01110011011001010110001100000000
+01110010011000010111011100000000
+00100101011100110010000000101011
+00100101011001000010000001101110
+01100001011011100110111101110011
+01100101011000110110111101101110
+01100100011100110010111000001010
+00000000000000000000000000000000
+01110100011010010110110101100101
+00000000000000000000000000000000
+01100111011101010110100100000000
+01100110011100110000000000000000
+01100110011100110110010100000000
+01110011011001000110001000000000
+01001111010011100000000000000000
+01001111010001100100011000000000
+01100101011011100110000101100010
+01101100011001010000000000000000
+01100100011010010111001101100001
+01100010011011000110010100000000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110010000000100101
+01110011000010100000000000000000
+01110000011101000111001001100001
+01100011011010110000000000000000
+00100101011001000010111000100101
+01100100001011100010010101100100
+00101110001001010110010000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+01101001011011100010000001110100
+01110010011000010110100101101110
+01101001011011100110011100001010
+00000000000000000000000000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+00100101011100110010000000101000
+01100110011100100110111101101101
+00100000011000100110111101101111
+01110100011100000010100100001010
+00000000000000000000000000000000
+01001001010100000010110101100001
+01100100011001000111001001100101
+01110011011100110011101000100000
+00100101011100110010000000101000
+01110011011101000110000101110100
+01101001011000110010000001100001
+01110011011100110110100101100111
+01101110011011010110010101101110
+01110100001010010000101000000000
+01101001011100000000000000000000
+01010000010100000101001101001001
+00100000011101100110010101110010
+01100010011011110111001101101001
+01110100011110010011101000100000
+00100101001100000011100001101100
+01111000000010100000000000000000
+01110110011001010111001001100010
+01101111011100110110010100000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01101001011011100110100101110100
+00100000011100110110001101110010
+01101001011100000111010000001010
+00000000000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110000101100100
+01100100001000000111010001101000
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100000010100000000000000000
+01001111010010110010111000001010
+00000000000000000000000000000000
+01100010011011110110111101110100
+00000000000000000000000000000000
+00100101011010010010000000101000
+00100010001001010111001100100010
+00101001001000000110111101110101
+01110100001000000110111101100110
+00100000011100100110000101101110
+01100111011001010000101000000000
+01100011011101010111001001110010
+01100101011011100111010000100000
+01110110011011000110000101101110
+00111010001000000010010101101001
+00100000001010000011000001111000
+00100101011110000010100100001010
+00000000000000000000000000000000
+01110110011011000110000101101110
+00000000000000000000000000000000
+01000001011101010111100000100000
+01100100011010010110000101100111
+01101110011011110111001101110100
+01101001011000110111001100100000
+01101001011011100110011001101111
+00111010000010100000000000000000
+01101001011001000011101000100000
+00100101011001000010111000100101
+01100100001011000010000001110010
+00101111011101110010000001110111
+01101111011100100110010001110011
+00111010001000000010010101100100
+00101100001000000111001000101111
+01101111001000000111011101101111
+01110010011001000111001100111010
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110010011011110000000000000000
+01010111011011110111001001100100
+00100000001001010110010000100000
+01101001011100110010000000110000
+01111000001001010011000000111000
+01111000000010100000000000000000
+01110010011101110000000000000000
+01110111000000000000000000000000
+01010110011000010110110001110101
+01100101001000000011000001111000
+00100101001100000011100001111000
+00100000011101110111001001101001
+01110100011101000110010101101110
+00100000011101000110111100100000
+01110100011010000110010100100000
+01110111011011110111001001100100
+00100000001001010110010000001010
+00000000000000000000000000000000
+01100100011010010110000101100111
+00000000000000000000000000000000
+00100101011100110010110000100000
+00100101011100110010000000100101
+01100100001011000010000000100101
+01100100001011000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101011100110010000000100101
+00110010011001000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101001101000110010000101101
+00100101001100000011001001100100
+00101101001001010011000000110010
+01100100001011010010010100110000
+00110010011001000011101000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00000000000000000000000000000000
+00011011010110110011000000100101
+01100100001110110011001100100101
+01100100011011010000000000000000
+00011011010110110110110100000000
+00011011010110110010010101100100
+00111011001001010110010001100110
+00000000000000000000000000000000
+00011011010110110011001001001010
+00011011010110110011000100111011
+00110001010010000000000000000000
+01010011011101010110111000000000
+01001101011011110110111000000000
+01010100011101010110010100000000
+01010111011001010110010000000000
+01010100011010000111010100000000
+01000110011100100110100100000000
+01010011011000010111010000000000
+01001010011000010110111000000000
+01000110011001010110001000000000
+01001101011000010111001000000000
+01000001011100000111001000000000
+01001101011000010111100100000000
+01001010011101010110111000000000
+01001010011101010110110000000000
+01000001011101010110011100000000
+01010011011001010111000000000000
+01001111011000110111010000000000
+01001110011011110111011000000000
+01000100011001010110001100000000
+01001100011011110110111101110000
+01110011001000000111000001100101
+01110010001000000110101001101001
+01100110011001100111100100111010
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01101110011011110010000001110011
+01101111011000110110101101100101
+01110100001000000111001101101100
+01101111011101000111001100100000
+01101100011001010110011001110100
+00001010000000000000000000000000
+01110111011100100011000000000000
+01101110011001010111010000101101
+01100010011010000000000000000000
+01101001011100000111011000110100
+00000000000000000000000000000000
+01100001011100100111000000000000
+01000100011010010111001101100011
+01101111011101100110010101110010
+01100101011001000010000001001001
+01010000001000000110000101100100
+01100100011100100110010101110011
+01110011001000000010100000100101
+01100100001011100010010101100100
+00101110001001010110010000101110
+00100101011001000010100100100001
+00001010000000000000000000000000
+01010011010011100100110101010000
+00111010001000000101001101000110
+01010000001000000111010101110000
+01100100011000010111010001100101
+01100100001000000110100101101110
+00100000011011010110010101101101
+01101111011100100111100100101100
+00100000011100100110010101110011
+01110100011000010111001001110100
+00100000010100000101010001010000
+00001010000000000000000000000000
+01001001010011100101011001000001
+01001100010010010100010000000000
+00100101011001000010111000100101
+00110000001101000110010000000000
+01110011011011100110110101110000
+00000000000000000000000000000000
+01000100011001010110001100100000
+00110001001110000010000000110010
+00110000001100010011011100100000
+00110000001110010011101000110011
+00110010001110100011010000111000
+00000000000000000000000000000000
+01101100011011000110010001110000
+00100000011101010111000001100100
+01100001011101000110010100001010
+00000000000000000000000000000000
+01101100011011000110010001110000
+00000000000000000000000000000000
+00110000001100010011001000110011
+00110100001101010011011000110111
+00111000001110010110000101100010
+01100011011001000110010101100110
+00000000000000000000000000000000
+01001001010001000011101000100000
+00100101011110000000101000000000
+01101110011011110010000001110000
+01100110011010010110110001110100
+01100101011100100010000001110010
+01110101011011000110010100101101
+01110011011001010111010000100001
+00001010000000000000000000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00101000011001110110111101110100
+00100000001100000111100000100101
+01111000001010010000101000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001110010
+01110101011011000110010100101101
+01110011011001010111010000101100
+00100000011000110110000101101110
+00100111011101000010000001100001
+01110000011100000110110001111001
+00001010000000000000000000000000
+01000101011100100111001001101111
+01110010001110100010000001001101
+01101001011011100110100101100011
+00100000010010000100010001001100
+00100000011101100110010101110010
+01110011011010010110111101101110
+00100000001001010110010000100000
+01101110011011110111010000100000
+01110011011101010111000001110000
+01101111011100100111010001100101
+01100100001000000110001001111001
+00100000011100110111011100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001110010
+01100101011000110110010101101001
+01110110011001010110010000100000
+01100101011100100111001001101111
+01101110011001010110111101110101
+01110011001000000110011001110010
+01100001011011010110010100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001010010
+01111000001000000110011001101001
+01100110011011110010000001100110
+01110101011011000110110000101100
+00100000011001010111100001110000
+01100101011000110111010000100000
+01110111011100100110111101101110
+01100111001000000110011001110010
+01100001011011010110010101110011
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01101110011011110111010000100000
+01110100011001010111001001101101
+01101001011011100110000101110100
+01100101011001000010000001101001
+01101110011001100110100101101110
+01101001011101000110010100100000
+01101101011000110111001000111101
+00110000011110000010010101111000
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01110100011010010110110101100101
+01110011011101000110000101101101
+01110000001000000110111001100101
+01110110011001010111001000100000
+01100010011001010110001101100001
+01101101011001010010000001100001
+01110110011000010110100101101100
+01100001011000100110110001100101
+00001010000000000000000000000000
+01100110011001010111010001100011
+01101000011010010110111001100111
+00100000011001000110100101100001
+01100111010111110111001001110111
+01011111011101110110111101110010
+01100100011100110000101000000000
+01100110011001010111010001100011
+01101000011010010110111001100111
+00100000011001000110100101100001
+01100111010111110111001001101111
+01011111011101110110111101110010
+01100100011100110000101000000000
+01100100011001010111011000100000
+00100000001100000111100000100101
+00110000001110000110110001111000
+00100000010000000010000000100101
+00110000001101100110110001111000
+00101100001000000010010101110011
+00001010000000000000000000000000
+01100110011100000110011101100001
+00101101011000010111001001100101
+01100001000000000000000000000000
+01000101011100100111001001101111
+01110010001000000010010101100100
+00100000011101110110100001101001
+01101100011001010010000001110010
+01100101011000010110010001101001
+01101110011001110010000001110100
+00110010001101000111000000100000
+01100110011100100110111101101101
+00100000011100110111010001101111
+01110010011000010110011101100101
+00001010000000000000000000000000
+01110100001100100011010001110000
+00100000011100100110010101100001
+01100100001000000110011001110010
+01101111011011010010000001110011
+01110100011011110111001001100001
+01100111011001010011101000100000
+00100101011001000010000001110000
+01110011000010100000000000000000
+01010111011000010110100101110100
+01101001011011100110011100100000
+01100110011011110111001000100000
+01101100011010010110111001101011
+00101110001011100010111000001010
+00000000000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000101110
+00101110001011100000101000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01101001011011100110011100100000
+01010010010110000010000001110100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01100101011100100010111000101110
+00101110000010100000000000000000
+01000110011000010110100101101100
+01100101011001000000000000000000
+01010011011101010110001101100011
+01100101011100110111001100000000
+01010111011100100110111101110100
+01100101001000000110111001100101
+01110111001000000111010000110010
+00110100011100000010000001110110
+01100001011011000111010101100101
+00111010001000000010010101100100
+00100000011100000111001100100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100000010001010100111001001111
+01010011010100000100001100000000
+00100101011100110010010101110011
+00111010000000000000000000000000
+01110100011001010110110101110000
+00000000000000000000000000000000
+01110100011001010110110101110000
+01100101011100100110000101110100
+01110101011100100110010100000000
+01110011011001100111000000111010
+00100000011000110110111101110010
+01110010011101010111000001110100
+01100101011001000010000001100011
+01101000011001010110001101101011
+01110011011101010110110100001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100011001101100
+01100001011100110110100000001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000101011100110001
+00001010000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100100100110010
+01000011001010000011000001111000
+00100101001100100101100000101001
+00001010000000000000000000000000
+01100110011010010110110001100101
+00100000001100000111100000100101
+00110000001110000111100000100000
+01000000001000000010010100110100
+01101001001011000010000001101110
+01100001011011010110010100100000
+00100101011100110000101000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100110011010010110110001100101
+00100000011010010111001100100000
+01100101011011010111000001110100
+01111001000010100000000000000000
+00100101011100110011101000100000
+01010101011100110110100101101110
+01100111001000000101011100110001
+00100000011100110110010101110010
+01101001011000010110110000100000
+01101110011101010110110101100010
+01100101011100100000101000000000
+00100101011100110011101000100000
+01100110011000010110100101101100
+01110101011100100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010001011000010000001100011
+01100001011011100010011101110100
+00100000011100110110000101110110
+01100101000010100000000000000000
+01000001011001000110010001101001
+01101110011001110010000001101110
+01100101011101110010000001010011
+01000110010100000010000001100101
+01101110011101000111001001111001
+00001010000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100101
+01111000011010010111001101110100
+01101001011011100110011100100000
+01010011010001100101000000100000
+01100101011011100111010001110010
+01111001000010100000000000000000
+00101101001011010010000001110101
+01110011011001010111001000101101
+01100100011001010110011001101001
+01101110011001010110010000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100110011010010110110001100101
+01101110011000010110110101100101
+00111010001000000010010101110011
+00111011001000000110011001101001
+01110010011100110111010000111010
+00100000001001010111100000111011
+00100000011011000110000101110011
+01110100001110100010000000100101
+01111000000010100000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000001101110
+01101111011101000010000001100110
+01101111011101010110111001100100
+00001010000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+00110001001011010101011101101001
+01110010011001010010000001000101
+01000101010100000101001001001111
+01001101001000000110111001101111
+01110100001000000110011001101111
+01110101011011100110010000001010
+00000000000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100101011001010111000001110010
+01101111011011010000000000000000
+01101111011001100110011001110011
+01100101011101000010000000100101
+00110100011010010010000000101000
+00110000011110000010010100110000
+00110011011110000010100100111010
+00100000001001010011001101101001
+00100000001010000011000001111000
+00100101001100000011001001111000
+00101001000010100000000000000000
+01110111011100100110100101110100
+01100101001010000011000001111000
+00100101011110000010110000100000
+00100101011010010010100100111010
+00100000011100100110010101110011
+01110101011011000111010000100000
+00111101001000000010010101101001
+00001010000000000000000000000000
+01110010011001010110000101100100
+00101000001100000111100000100101
+01111000001011000010000000100101
+01101001001010010011101000100000
+01110010011001010111001101110101
+01101100011101000010000000111101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01100100011001010111011001101001
+01100011011001010010000000100101
+01101001001110100010000000100101
+00110000001110000111100000100101
+00110000001110000111100000001010
+00000000000000000000000000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100000010100000000000000000
+01110111001100010000000000000000
+01110111001100010111001000000000
+01110111001100010111011100000000
+00111100010101010110111001101011
+01101110011011110111011101101110
+00111110000000000000000000000000
+01110011011011110110011001110100
+01110000011011000110110000111010
+00100000011010010111001001110001
+01110011001000000010010101100100
+00100000011100110110010101110001
+00100000001001010111001100100000
+01101101011011110110010001100101
+00100000001001010110010000100000
+01100001011011000110100101100111
+01101110011011010110010101101110
+01110100010111110111001101110100
+01100001011101000110010100100000
+00100101011001000010000001001000
+01001100001001010110010000100000
+01001101010011000010010101100100
+00100000010010000101100100111101
+00100101011001000010000001001101
+01011001001111010010010101100100
+00100000010001000110010101101100
+01000011011011100111010000111101
+00100101011001000000101000000000
+01110011011101000110000101110010
+01110100001011010110010101111000
+01110100000000000000000000000000
+01110111011000010110100101110100
+00101101011001010111100001110100
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100001011010110100001100101
+01101100011100000110010101110010
+00000000000000000000000000000000
+01110111011000010110100101110100
+00101101011010000110010101101100
+01110000011001010111001000000000
+01110011011101000110000101110010
+01110100001011010110110101100001
+01101001011011100000000000000000
+01110111011000010110100101110100
+00101101011011010110000101101001
+01101110000000000000000000000000
+01110010011001010110000101100100
+01111001000000000000000000000000
+01100011011011000110010101100001
+01110010001011010110010001100001
+01100011011100110000000000000000
+01110111011000010110100101110100
+00101101011000110110110001100101
+01100001011100100010110101100100
+01100001011000110111001100000000
+10111010110111000000111111111110
+00111011100110101100101000000000
+00000000000011110100001001000000
+01000001110001100100111001101101
+01111111111111111111111111111111
+00000000000010000000000000110000
+11000100011001010011011000000000
+11111111111100001011110111000000
+00000000000001111101000000000000
+00111011100110101100100111111111
+00000000000000010000000001000011
+00000000000000010000000001000100
+00000000000000010101000110000000
+10000011101010100111111010000000
+01111111111111111111111111111110
+10000000000000000000000000000001
+00000000000001100010000000000000
+00000000010111101110000000000000
+00000001000000000000000000000001
+00010001001000100011001101000100
+11100000000000000001111111111111
+00000000001001000110000000000000
+00000001010101010100000000000000
+00000010010001101000000000000000
+00010011010101111000000000000000
+00001111111111111111111111111111
+00000101100101101000001011110000
+00001110111001101011001001111111
+00000001001100010010110100000010
+00000001001100010010110100001010
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+01010011010001000100001000101101
+01101101011000010110001100101101
+01100011011000010110110001101001
+01110111011100100010110101101001
+00000000001111010000000100110111
+10000000000000000000000000011111
+00000000100110001001010110110110
+11000100000000000000000000000001
+00000000000000011000011010100000
+00000000111111111111111111111111
+11111111111111011011011000010000
+00000000000000100100100111110000
+00000101111101011110000100000000
+00001011111010111100001000000000
+11111010000010100001111100000000
+00000001001100010010110100000011
+00000001000110110001100100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001100000001100001000000000
+00000000000011100000000000000000
+00000000000000000000000000101100
+00000000000000000000000000101100
+00000000000000000000000000110110
+00000000000000000000000000110110
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000101100
+00000000000000000000000000110110
+00000000000000000000000000110110
+00000000000000000000000001000000
+00000000000000000000000000100010
+00000000000000000000000000110000
+01110000011100000101111101100100
+01101001011000010110011101011111
+01110000011000010111001001110011
+01100101000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110100101100100
+00000000000000010110100101110000
+00000000000000010110100110000000
+00000000000000010110100110001100
+00000000000000010110100110011000
+00000000000000010110100110100100
+00000000000000010110100110110000
+00000000000000000001110010000100
+00000000000000000001110011110100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000010000000001100
+00000000000000000001110101110000
+00000000000000000001110111100000
+00000000000000000010000000001100
+00000000000000000001111001110100
+00000000000000000001111111100000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+01011111011011110110011001100110
+01110011011001010111010000000000
+01110111011100100101111101110011
+00110001000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+00000000000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110111001101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110011101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011011100110010101110100
+01011111011100110110010101101110
+01100100000000000000000000000000
+00000001000110110001100100000000
+00000000000000000000000110000000
+11000010000000000000000000001110
+01110111011100100101111101110101
+01101110011100000110000101100011
+01101011010111110110000101101110
+01101110011011110111010101101110
+01100011011001010000000000000000
+01110111011100100101111101110000
+01100001011000110110101101011111
+01100001011011100110111001101111
+01110101011011100110001101100101
+00000000000000000000000000000000
+01100111011001010111010001011111
+01110000011001010111001001110011
+01101001011100110111010001100101
+01101110011101000101111101101101
+01100001011000110000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110110011001101111
+01101100011011000110111101110111
+01110101011100000000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110110000101101110
+01101110011011110111010101101110
+01100011011001010000000000000000
+01110111011100100101111101100101
+01111000011001010110001101110101
+01110100011001010101111101110011
+01101100011000010111011001100101
+00000000000000000000000000000000
+01110111011100100101111101101000
+01100001011011100110010001101100
+01100101010111110111001001100101
+01110011011100000000000000000000
+01110111011100100101111101101110
+01100101011101110101111101110011
+01101100011000010111011001100101
+00000000000000000000000000000000
+01110111011100100101111101101101
+01100001011100110111010001100101
+01110010010111110110110101110011
+01100111000000000000000000000000
+01110111011100100101111101101100
+01101001011100110111010001100101
+01101110011010010110111001100111
+00000000000000000000000000000000
+01110111011100100101111101101111
+01110000011001010110111000000000
+01110111011100100101111101101001
+01101110011010010111010000000000
+00000000000000000011010110010100
+00000000000000000011010110111100
+00000000000000000011010111011100
+00000000000000000011011001001100
+00000000000000000011011001101100
+00000000000000000011011010001000
+00000000000000000011011010101000
+00000000000000000011011100110100
+00000000000000000011011101010100
+01110111011100100101111101100011
+01100001011011000110100101100010
+01110010011000010111010001101001
+01101111011011100000000000000000
+00000000000000000100110000001000
+00000000000000000100101111110000
+00000000000000000100110000110000
+00000000000000000100110011101000
+00000000000000000100110010000100
+00000000000000010111010010101100
+00000000000000010111011000010000
+00000000000000010111011000011100
+00000000000000010111011000101000
+00000000000000010111011000110100
+00000000000000010111011001000000
+01110111011100100101111101100101
+00110010011001010101111101101111
+01100110011001100111001101100101
+01110100000000000000000000000000
+01110000011100000101111101101001
+01101110011010010111010001101001
+01100001011011000110100101111010
+01101001011011100110011100000000
+00000000000000000101111011110000
+00000000000000000101011011110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101000111101100
+00000000000000000101110100000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101110111101000
+00000000000000000101100101010000
+00000000000000000000000000000000
+00000000000000000101000111101100
+01110011011101000101111101100011
+01101111011011010101111101110011
+01101100011000010111011001100101
+01011111011010000110000101101110
+01100100011011000110010101011111
+01100110011011110110110001101100
+01101111011101110111010101110000
+00000000000000000000000000000000
+01100010011011010110001101011111
+01100100011000010111010001100001
+01110011011001010111010001011111
+01100011011011010111000000000000
+01100010011011010110001101011111
+01110011011101000110000101110100
+01100101010111110110010001100101
+01100011011010010111001101101001
+01101111011011100000000000000000
+00000000000000011000000100010100
+00000000000000011000000100011100
+00000000000000011000000011110100
+00000000000000011000000100100100
+00000000000000000000000000000000
+00000000000000011000000100000000
+00000000000000010111000001101100
+00000000000000010111000010001100
+00000000000000011000000100000100
+00000000000000000000000000011111
+00000000000000000000000000011100
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011101
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000000000000000011110
+00000000000000000000000000011111
+00000000000000011000011011011100
+00000000000000011000011011100000
+00000000000000011000011011100100
+00000000000000011000011011101000
+00000000000000011000011011101100
+00000000000000011000011011110000
+00000000000000011000011011110100
+00000000000000011000011011111000
+00000000000000011000011011111100
+00000000000000011000011100000000
+00000000000000011000011100000100
+00000000000000011000011100001000
+00000000000000011000011100001100
+00000000000000011000011100010000
+00000000000000011000011100010100
+00000000000000011000011100011000
+00000000000000011000011100011100
+00000000000000011000011100100000
+00000000000000011000011100100100
+01110000011101000111000001100100
+01011111011011100110010101110100
+01101001011001100101111101100011
+01110010011001010110000101110100
+01100101010111110111001101101111
+01100011011010110110010101110100
+00000000000000000000000000000000
+00000000000000001100100110001100
+00000000000000001100100110011100
+00000000000000001100101000000000
+00000000000000001100101000000000
+00000000000000001100100110101100
+00000000000000001100101000000000
+00000000000000001100101000000000
+00110000111111110000001000000001
+11111010000001000000011001110000
+01110101011000100110110001101001
+01100011111111011111111100000010
+11111001000000100000000111111100
+00000010000000011111101100110000
+11111111001100001111111100000110
+00000000000000001101101011110100
+00000000000000001101101100000100
+00000000000000001101101100101000
+00000000000000001101101101011100
+00000000000000001101101110001100
+00000000000000001101101111001000
+00000000000000001101110010000100
+00000000000000001101110110110000
+00000000000000001101110100100000
+01110011011001010111010001011111
+01110000011001010111001001110011
+01101001011100110111010001100101
+01101110011101000101111101101101
+01100001011000110000000000000000
+00000000000000000000000000000000
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000001100000000
+00000000000101110000000000000000
+00000000001011100000000000000000
+00000000011000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000001000000
+00000000000000000000000010000000
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000010000000000
+00000000000000000000000011001000
+00000000000000000011100111010000
+00000000000000010011101101111100
+00000000000000010011110000000000
+00000000000000010011110000111000
+00000000000000010011110010111000
+00000000000000010011110101000100
+00000000000000010011110101011100
+00000000000000010011110001011100
+00000000000000010011101110100100
+00000000000000010011101100000000
+00000000000000010011101100110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010100100010001000
+00000000000000010100100010101000
+00000000000000010100100010110100
+00000000000000010100100011000100
+00000000000000010100100011100100
+00000000000000010100100011110100
+00000000000000010100100101011100
+00000000000000010100100100010100
+00000000000000010100100000011100
+00000000000000010100100001100000
+00000000000000000000000000000000
+00000000000000011000111001010100
+00000000000000011000111001100000
+00000000000000011000111001101100
+00000000000000011000111001111100
+00000000000000011000111010001000
+00000000000000011000111010010100
+00000000000000010111000001010000
+00000000000000011000111010100000
+00000000000000011000111010101000
+00000000000000011000111010110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000100000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000110000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001000000001000000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001010000001000000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001100000001100000010
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001110000001100000010
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000010000000010000000010
+00000010000000010000000100000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000010010000010000000011
+00000010000000010000000100000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000010100000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000010110000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000011000000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000000000000000000000
+00000000000011010000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000010000000000000000
+00000000000011100000011100000100
+00000011000000100000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000000
+00000000000011110000011100000101
+00000011000000110000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000001
+11111110111111101111111011111111
+10000000100000001000000010000000
+00000000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010100000101000
+00101000001010000010100000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000100010000001000000010000
+00010000000100000001000000010000
+00010000000100000001000000010000
+00010000000100000001000000010000
+00010000000001000000010000000100
+00000100000001000000010000000100
+00000100000001000000010000010000
+00010000000100000001000000010000
+00010000000100000100000101000001
+01000001010000010100000101000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000001000000010000000100000001
+00010000000100000001000000010000
+00010000000100000100001001000010
+01000010010000100100001001000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00000010000000100000001000000010
+00010000000100000001000000010000
+00100000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011010110110111000
+00000000000000011010110111011000
+00000000000000011010110111101000
+00000000000000011010110111111000
+00000000000000000000001111101000
+00000000000000000000000000000001
+00000000000000000000100101010101
+00000000000000000000000000000001
+00000000000000010110100111101100
+00000000000000000000000000000010
+00000000000000000000000000000000
+00000000000000010110100111110100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000010110101000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101000001100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000010110101000011000
+00000000000000000000000000000000
+00000000000000000000111110100000
+00000000000000010110101000100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101000101000
+00000000001011000000000100000000
+00000000000000010000000000000000
+00000000000000010110101000110000
+00000000001011000000000100000000
+00000001011111110000000000000000
+00000000000000010110101000111100
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000010110101001001000
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101001101100
+00000000001011000000000000000000
+00000010000000010000000000000000
+00000000000000010110101001010100
+00000000001101100000000000000000
+00000011000000100000000000000000
+00000000000000010110101001100000
+00000000001101100000000000000001
+00000101011111110000000000000000
+00000000000000010110101001111000
+00000000010000000000000000000000
+00000101000000000000000000000000
+00000000000000010110101010000100
+11111111111111110000000000000000
+00000101011111110000000000000000
+00000000000000010110101010010000
+11111111111111110000000000000000
+00000100011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110001000000
+00000000000000011001110101100000
+00000000000000011001110101000100
+00000000000000011011000011100100
+00000000000000011011000101100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110010001000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110101100100000
+00000000000000010110101100100000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001100000101000
+00000000000000011011000111101000
+00000000000000000000000000000000
+00000000000000011011001000101000
+00000000000000011011001001010000
+00000000000000011011001010000000
+00000000000000011011001010101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011011001011001000
+00000000000000000000001111101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001110010011100
+00000000000000011001110100001000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000001000011110000
+00000000000000000001000100101000
+00000000000000000001000110111000
+00000000000000000001000111000000
+00000000000000000001001000011000
+00000000000000000001001001000100
+00000000000000000001001010011100
+00000000000000000001001011000000
+00000000000000000001001110000100
+00000000000000000001001110001100
+00000000000000000001001110010100
+00000000000000000001001111111000
+00000000000000000001010000010100
+00000000000000000001000111100100
+00000000000000000000000000000000
+00000000000000000010010001100000
+00000000000000000010001111011000
+00000000000000000010001101111100
+00000000000000000010001100100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010001011111100
+00000000000000000010100011010000
+00000000000000000010100010110000
+00000000000000000010011010101000
+00000000000000000010010011110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001000000000
+00000000000000000000000000000000
+00000000000000011011001111101000
+00000000000000000000000000000001
+00000000000000010111000000111000
+00000000000000000101001111001000
+00000000000000000000000000000010
+00000000000000010111000001001000
+00000000000000000101010111010100
+00000000000000000000000000000011
+00000000000000010111000001010000
+00000000000000000101011000100000
+00000000000000000000000000000100
+00000000000000010111000001011100
+00000000000000000101011000110000
+00000000000000000000000000000101
+00000000000000010111000001101000
+00000000000000000101011100100000
+00000000000000000000000000000110
+00000000000000010111000001101100
+00000000000000000101011100100000
+00000000000000000000000000000111
+00000000000000010111000001110100
+00000000000000000101100010001100
+00000000000000000000000000001000
+00000000000000010111000001111100
+00000000000000000101100011100000
+00000000000000000000000000001001
+00000000000000010111000010001100
+00000000000000000101101001101100
+00000000000000000000000001100100
+00000000000000010111000010010100
+00000000000000000011000101001100
+00000000000000000000000001100110
+00000000000000010111000010101100
+00000000000000000011001000110100
+00000000000000000000000001100101
+00000000000000010111000011000000
+00000000000000000011001100001000
+00000000000000000000000001100111
+00000000000000010111000011011000
+00000000000000000011001111101100
+00000000000000000000000001101000
+00000000000000010111000011110000
+00000000000000000011010011000000
+00000000000000000000000001101001
+00000000000000010111000100000000
+00000000000000000011011110010100
+00000000000000000000000001101010
+00000000000000010111000100010000
+00000000000000000011100001101000
+00000000000000000000000001101011
+00000000000000010111000100100100
+00000000000000000011100110100000
+00000000000000000000000001110101
+00000000000000010111000100110000
+00000000000000000100111100011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000010111000000111000
+00000000000000000101001111001000
+00000000000000000000000000000010
+00000000000000010111000001001000
+00000000000000000101010111010100
+00000000000000000000000000000011
+00000000000000010111000001010000
+00000000000000000101011000100000
+00000000000000000000000000000100
+00000000000000010111000001011100
+00000000000000000101011000110000
+00000000000000000000000000000101
+00000000000000010111000001101000
+00000000000000000101011100100000
+00000000000000000000000000000110
+00000000000000010111000001101100
+00000000000000000101011100100000
+00000000000000000000000000000111
+00000000000000010111000001110100
+00000000000000000101100010001100
+00000000000000000000000000001000
+00000000000000010111000001111100
+00000000000000000101100011100000
+00000000000000000000000000001001
+00000000000000010111000010001100
+00000000000000000101101001101100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010101101000100
+00000000000000000010101001100100
+00000000000000000000000000000000
+00000000000000000010101000011100
+00000000000000000010111101010000
+00000000000000000010111100001000
+00000000000000000010111000011100
+00000000000000000010100110001100
+00000000000000000010110110101000
+00000000000000000010110100101100
+00000000000000000010110010111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000010110001010000
+00000000000000000010101111100100
+00000000000000000000000000000001
+00000000000000000000000010111011
+00000000000000000000000011111110
+11111111111111111111000001100000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000010100000001111101000
+00000000000001100000000100000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011001100000101000
+01110110011011000110000101101110
+00100000011011110110011001100110
+00111011011100000111010001110000
+00100000011100110111010001101111
+01110000001110110111001101100110
+01110000001000000110110101100001
+01110100011000110110100000111011
+01101101011011110110010001100101
+00100000011100110110110001100001
+01110110011001010011101101110000
+01110100011100000010000001110011
+01110100011000010111001001110100
+00000000000000000000000000000000
+00000000000000011001111101111000
+00000000000000011000000011100100
+00000000000000000001011111011000
+00000000000000000000000000000001
+00000000000000011000000011101100
+00000000000000000001011111011000
+00000000000000000000000000000000
+00000000000000011000000011110100
+00000000000000000001010001110100
+00000000000000000000000000000000
+00000000000000011000000011111000
+00000000000000000001010001110100
+00000000000000000000000000000000
+00000000000000011000000100000000
+00000000000000000001010110110100
+00000000000000000000000000000001
+00000000000000010111000001101100
+00000000000000000001010110110100
+00000000000000000000000000000010
+00000000000000010111000010001100
+00000000000000000001010110110100
+00000000000000000000000000000011
+00000000000000011000000100000100
+00000000000000000001010110110100
+00000000000000000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001000000000
+00000000000000000000000000000000
+00000000000000011011100100010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000001100000
+00000000000000000000000000000000
+00000000000000011011101100010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000011011101101110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000010000000
+00000000000000000000000000000000
+00000000000000011011101111111000
+00000000000000011010000111011100
+00000000000000001100111011011100
+00000000000000011010000111101000
+00001001000000000000000000000000
+00000000000000011010001001001100
+00000000000000001100111011011100
+00000000000000011010001001011000
+00001001000000000000000000000000
+00000000000000011010001010101000
+00000000000000001100110011001100
+00000000000000011010001010110100
+00001010000000000000000000000000
+00000000000000011010001011110000
+00000000000000001100111011011100
+00000000000000011010001011111100
+00001001000000000000000000000000
+00000000000000011010001111000100
+00000000000000001100111011011100
+00000000000000011010001111010000
+00001001000000000000000000000000
+00000000000000011010010100111000
+00000000000000001100111011011100
+00000000000000011010010101000100
+00001001000000000000000000000000
+00000000000000011010010111010000
+00000000000000001100111011011100
+00000000000000011010010111011100
+00001001000000000000000000000000
+00000000000000011010011001010100
+00000000000000001100110011001100
+00000000000000011010011001100000
+00001010000000000000000000000000
+00000000000000011010000110010000
+00000000000000001100011000011100
+00000000000000011010011011000100
+00001100000000000000000000000000
+00000000000000011010000110011100
+00000000000000001100011000011100
+00000000000000011010011011101100
+00001100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000010
+00000000000000000000000100000001
+00101011000001100000000100000100
+00000001011000000110010100000010
+00000000000000000000001000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000100000000
+00000000000000000000000000000000
+00000000000000011011110010101000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000001000000000000000000000000
+00000000000000011010011100010100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001010000100
+00000010000001000000000000000101
+00000000000000011010011100011000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011001011011101000
+00000010000001000000000000000100
+00000000000000011010011100011100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011001011011110100
+00000010000001000000000000000100
+00000000000000011010011100100000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011010011100100100
+00000010000001000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000010000000000000000000000000
+00000000000000011010011100101000
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000100
+00000010010001100000000000000001
+00000000000000011010011100101100
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000101
+00000010000001000000000000000001
+00000000000000011010011100110000
+00000000000000001101100101000100
+00000000000000000000000000000000
+00000000000000000000000000000010
+00000010010000110000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000011000000010000000000000000
+00000000000000011010011100110100
+00000000000000001101100000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000011010011100111000
+00000000000000001101100000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000100000000000000000000000000
+00000000000000011010011100111100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110010000
+00000010000000100000000000000100
+00000000000000011010011101000000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110010100
+00000010010000010000000000000100
+00000000000000011010011101000100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110011000
+00000010000000100000000000000100
+00000000000000011010011101001000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110011100
+00000010000000100000000000000100
+00000000000000011010011101001100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110100000
+00000010010000010000000000000100
+00000000000000011010011101010000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110100100
+00000010010000010000000000000100
+00000000000000011010011101010100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110101000
+00000010000000100000000000000100
+00000000000000011010011101011000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110101100
+00000010000000100000000000000100
+00000000000000011010011101011100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011010110110110000
+00000010010000010000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000101000000000000000000000000
+00000000000000011010011101100000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100001010000000100
+00000000000000011010011101100100
+00000000000000001101001111000100
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000101000100000001000
+00000000000000011010011101101000
+00000000000000001101001111000100
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000101000000000001000
+00000000000000011010011101101100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010010001100100000000001000
+00000000000000011010011101110000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010010000010101100000000100
+00000000000000011010011101110100
+00000000000000001101001010110000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000010010001100000000000000001
+00000000000000011010011101111000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100001100000000100
+00000000000000011010011101111100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100001110000000100
+00000000000000011010011110000000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100010000000000100
+00000000000000011010011110000100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100010010000000100
+00000000000000011010011110001000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010010000011001000000000100
+00000000000000011010011110001100
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010010000011001010000000100
+00000000000000011010011110010000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010010000011001100000000100
+00000000000000011010011110010100
+00000000000000001101001010110000
+00000000000000000000000000000000
+00000000000000000000000000000010
+00000010010001100000000000000001
+00000000000000011010011110011000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011001110000111000
+00000010010000010000000000000100
+00000000000000011010011110011100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011001110000111100
+00000010010000010000000000000100
+00000000000000011010011110100000
+00000000000000001101010001010000
+00000000000000000000000000000000
+00000000000000011011110001111100
+00000010000000100010100000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000110000000000000000000000000
+00000000000000011010011110100100
+00000000000000001101010001111100
+00000000000000001101011000110100
+00000000000000011011110110101000
+00000010000000100000000000000100
+00000000000000011010011110101000
+00000000000000001101010001111100
+00000000000000001101011010010100
+00000000000000011011110110101100
+00000010000000100000000000000100
+00000000000000011010011110101100
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010000000
+00000010000001000000000000010000
+00000000000000011010011110110000
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010010100
+00000010000000100000000000000100
+00000000000000011010011110110100
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010011000
+00000010000000100000000000000100
+00000000000000011010011110111000
+00000000000000001101010001111100
+00000000000000001100110010101000
+00000000000000011011110010010000
+00000010000000100000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00000111000000000000000000000000
+00000000000000011010011110111100
+00000000000000001101010111010100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000010000000100000000000000001
+00000000000000011010011111000000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011011111110111100
+00000010000001000000000000010000
+00000000000000011010011111000100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011011111101001000
+00000010000000100000000000000100
+00000000000000011010011111001000
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001001111100
+00000010010000010000000000000100
+00000000000000011010011111001100
+00000000000000001101010001111100
+00000000000000000000000000000000
+00000000000000011100001010000000
+00000010010000010000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00101011000001100000000100000100
+00000001011000000110010100000001
+00001000000000010000000000000000
+00000000000000011010011111010000
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000001000000000000000001
+00000000000000011010011111010100
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000011010011111011000
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000011010011111011100
+00000000000000001101010010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001101001010010100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000100010000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001101001010010100
+00000000000000001101001001111000
+00000000000000000000000000000000
+00000100010000100000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000000000000011000011111100000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000110000000000000000000000000
+00000111000000000000000000000000
+00001000000000000000000000000000
+00001001000000000000000000000000
+00000101000000000000000000000000
+00001000000000000000000000000000
+00001001000000000000000000000000
+00001010000000000000000000000000
+00001100000000000000000000000000
+00001101000000000000000000000000
+00001110000000000000000000000000
+00001111000000000000000000000000
+00010000000000000000000000000000
+00010001000000000000000000000000
+00010010000000000000000000000000
+00010011000000000000000000000000
+00010100000000000000000000000000
+00010110000000000000000000000000
+00010111000000000000000000000000
+00011000000000000000000000000000
+00011010000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000110000000000000000000000000
+00000001000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000010000000000000000000000000
+00000011000000000000000000000000
+00000100000000000000000000000000
+00000101000000000000000000000000
+00000000000000011010101001011100
+00000000000000011010101101011000
+00000000000000011010101101011000
+00000000000000011010110000111100
+00000000000000000000000000000100
+00000000000000000000000000001000
+00000000000000000000000000001111
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000000100101100
+00000100011000110110001010100000
+00000000000000000000000000000000
+00000000000000011100001010111100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+10101011001010000110001100111010
+00000000000000000000000000000000
+00000000000000011011111110100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01100101000011000010110101001111
+00000000000000000000000000000000
+00000000000000011100001011000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01100101000101011000110111000000
+00000000000000000000000000000000
+00000000000000011011111111010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11011110000011011000110011101101
+00000000000000000000000000000000
+00000000000000011100001011000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11111111000001111111110001000111
+00000000000000000000000000000000
+00000000000000011100001010001100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+11100010110100010011110100000100
+00000000000000000000000000000000
+00000000000000011100001001111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001100111001000010
+01110111100111000101010001000011
+00000000000000000000000000000000
+00000000000000011100001010111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000011001010001
+01101000001000000010101100100010
+00000000000000000000000000000000
+00000000000000011000100111010100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000110000000000000000
+00000000000000000000000000000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000110101010100
+00000000000000011011111101111000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010000110101011100
+00000000000000010000111100011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010010101011110100
+00000000000000010010101100101000
+00000000000000010010101101011000
+00000000000000010111101110111000
+10000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000100001100110010001000010001
+00000000000000000000000000000000
+00000100000000000000000000000000
+00010011100000000100011011100010
+00000001000000000000000000000000
+10010000000000001100111111101010
+00000001000000000000000000000000
+00010000100000010101011111110011
+00000001000000000000000000000000
+00001011111000001111111111111111
+00000001000000000000000000000000
+10001000111000001111111111111111
+00000001000000000000000000000000
+00001000111000011111111111111111
+00000001000000000000000000000000
+00011011000000000010000011100000
+00000001000000000000000000000000
+10011000000000001100000011101011
+00000001000000000000000000000000
+01101011001000010011000011100000
+00000001000000000000000000000000
+01101001011000010000110111100000
+00000001000000000000000000000000
+00010000101000111000100100000000
+00000100000000000000000000000000
+01101011000000110010000011110000
+00000001000000000000000000000000
+10111011000011011000000000000001
+00000100000000000000000000000000
+00110011111000110001111011110001
+00000001000000000000000000000000
+00110001110000110101111111111001
+00000001000000000000000000000000
+00101011000000110000000011100001
+00000001000000000000000000000000
+01000011110000110000000011100001
+00000001000000000000000000000000
+01111001010000010001010000000000
+00000100000000000000000000000000
+11001011001001010000000001100000
+00000000000000000000000000000000
+11010011001001010000001001100000
+00000000000000000000000000000000
+01010000111010101000000100000001
+00000100000000000000000000000000
+10000001110010001000000000000001
+00000100000000000000000000000000
+10000000001011111100000100000000
+00000100000000000000000000000000
+01011011000010010000000010000000
+00000001000000000000000000000000
+01011001000010010010000010000000
+00000001000000000000000000000000
+11000000011010101100000100000000
+00000100000000000000000000000000
+01100011000010010111101011111101
+00000001000000000000000000000000
+11111000100010101000000100000001
+00000100000000000000000000000000
+11110100100010101000000100000001
+00000100000000000000000000000000
+00000000000000000000000000000000
+00001000000000000000000000000000
+01000100001100110010001000010001
+00000000000000000000000000000000
+00000100000000000000000000000000
+00010011100000000100011011100010
+00000001000000000000000000000000
+10010000000000001100111111101010
+00000001000000000000000000000000
+00010000100000010101011111110011
+00000001000000000000000000000000
+00001011111000001111111111111111
+00000001000000000000000000000000
+10001000111000001111111111111111
+00000001000000000000000000000000
+00001000111000011111111111111111
+00000001000000000000000000000000
+00011011000000000010000011100000
+00000001000000000000000000000000
+10011000000000001100000011101011
+00000001000000000000000000000000
+01101011001000010011000011100000
+00000001000000000000000000000000
+01101001011000010000110111100000
+00000001000000000000000000000000
+00010000101000111000100100000000
+00000100000000000000000000000000
+01101011000000110010000011110000
+00000001000000000000000000000000
+10111111000011011000000000000001
+00000100000000000000000000000000
+10100011010000110101010111100001
+00000000000000000000000000000000
+00110011111001000001111011110001
+00000001000000000000000000000000
+00110001110001000101111111111001
+00000001000000000000000000000000
+00101011000001000000000011100001
+00000001000000000000000000000000
+01000011110001000000000011100001
+00000001000000000000000000000000
+10000001001000101001100000000000
+00000100000000000000000000000000
+11000000100100001000000000000001
+00000100000000000000000000000000
+01101001001000101000000000000001
+00000100000000000000000000000000
+10100011010000110000000111100000
+00000000000000000000000000000000
+10100001011000110000000111100000
+00000000000000000000000000000000
+11111000100011011000000000000001
+00000100000000000000000000000000
+10100011100000110000001011100000
+00000000000000000000000000000000
+11110000100011011000000000000001
+00000100000000000000000000000000
+00000000000000000000000000000000
+00001000000000000000000000000000
+01010011010001000100001000101101
+00000000000001010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+00101110001000000010000000100000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00101110001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000000101000000
+00000000000000000000000000000000
+00000000000000000000001000111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110111011100100010110101101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110111011100100010110101101001
+01101110011010010111010000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001001000000
+00000000000000000000000000000000
+00000000000000000000001010111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01100011011000010110110001101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001011000000
+00000000000000000000000000000000
+00000000000000000000001011000101
+01000110011010010110110001100101
+01000100011000010111010001100001
+01101101011000010110001100101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01101101011000010110001100101101
+01100001011001000110010001110010
+01100101011100110111001100100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001100000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110011011001100111000000101101
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000001000000010000000100000
+00100000001000000010000000000001
+11111111111111111111111111111111
+00000000000000011001010111100000
+01011011000100010101011110100111
+00000000000000000000000000000011
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01110111011100100111000001100011
+00101101011101100011010000101110
+00110010000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000100011001010110001100100000
+00110001001110000010000000110010
+00110000001100010011011100000000
+00000000000000000000000000000000
+00110000001110010011101000110011
+00110010001110100011010100110000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000111011100100111101001100101
+01100111011011110111001001111010
+00100000010001000110000101101110
+01101001011011000111010101101011
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000000010111000
+00000000000000001001011001000000
+00000000000000011000000100001100
+00000000000000001001011100000000
+00000000000000010110011111110100
+00000000000000001001011100000000
+00000000000000011000000101001000
+00000000000000001001100000111100
+00000000000000011000000110011100
+00000000000000001001100101010100
+00000000000000011000001000011100
+00000000000000001001101001100100
+00000000000000010110011111111000
+00000000000000001001101110011100
+00000000000000011000001001000000
+00000000000000001001101111001100
+00000000000000011000001001100100
+00000000000000001001110000101100
+00000000000000011000001110010100
+00000000000000001001110100110000
+00000000000000011000001111010000
+00000000000000001010000011001000
+00000000000000011000010000101100
+00000000000000001010001100110000
+00000000000000011000010001100100
+00000000000000001010010000001000
+00000000000000011000010001101100
+00000000000000001010010101101000
+00000000000000011000010001111000
+00000000000000001010010110000000
+00000000000000011000010010101000
+00000000000000001010011100101000
+00000000000000011000010100011100
+00000000000000001010100001111000
+00000000000000011000010100111000
+00000000000000001010100101101000
+00000000000000011000001110011000
+00000000000000001010100110110000
+00000000000000011000010111000000
+00000000000000001010101010010100
+00000000000000011000011001010100
+00000000000000001010101101111000
+00000000000000011000101010111000
+00000000000000010000101010100100
+00000000000000011000110111101000
+00000000000000010010110110100100
+00000000000000011000110111101100
+00000000000000010010110010101000
+00000000000000011000110111110000
+00000000000000010010101110101100
+00000000000000010011011010100000
+00000000000000000000000000000000
+00000000000000011010101001001100
+00000000000000010110100000001100
+00000000000000000000000000000000
+00000000000000000000001010100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010101001001101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111101000
+00000000000000000000000000000000
+00000000000000001001010011000000
+00000000000000000000010011100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000001100000011000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110011111111000
+00000000000000000000000000000000
+00000000000000000000001010000000
+00000000000000000000001000010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010110100000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001111110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010111111110010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000001010100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010111111110011100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000111111011101000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101100000
+00000000000000011100001010100100
+00000000000000000000000000000000
+00000000000000001011001010011100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101101000
+00000000000000011100001010100100
+00000000000000001011101000010000
+00000000000000001011101111111000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011101110000
+00000000000000011100001010100100
+00000000000000001011111111101100
+00000000000000001011111001100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000011111011000
+00000000000000011100001010100100
+00000000000000001101100111110000
+00000000000000001100100011000100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000100000001000
+00000000000000000000000000000000
+00000000000000001101111101100100
+00000000000000001101111001010100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000011000101011000000
+00000000000000000000000000000000
+00000000000000010000011101111100
+00000000000000010000011111001000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif
new file mode 100644
index 000000000..83f979eb6
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8.mif
@@ -0,0 +1,32775 @@
+DEPTH = 32768;
+WIDTH = 32;
+ADDRESS_RADIX = HEX;
+DATA_RADIX = HEX;
+CONTENT
+BEGIN
+0 : 98000000;
+1 : D0000000;
+2 : D0200000;
+3 : 78010000;
+4 : 38210000;
+5 : D0E10000;
+6 : F800003A;
+7 : 34000000;
+8 : 00000000;
+9 : 00000000;
+a : 00000000;
+b : 00000000;
+c : 00000000;
+d : 00000000;
+e : 00000000;
+f : 00000000;
+10 : 00000000;
+11 : 00000000;
+12 : 00000000;
+13 : 00000000;
+14 : 00000000;
+15 : 00000000;
+16 : 00000000;
+17 : 00000000;
+18 : 00000000;
+19 : 00000000;
+1a : 00000000;
+1b : 00000000;
+1c : 00000000;
+1d : 00000000;
+1e : 00000000;
+1f : 00000000;
+20 : 57525043;
+21 : 2D2D2D2D;
+22 : 01234567;
+23 : 89ABCDEF;
+24 : 0001BFD8;
+25 : 00000000;
+26 : 00019828;
+27 : 0001AD84;
+28 : 00000000;
+29 : 02140000;
+2a : 00000000;
+2b : 00000000;
+2c : 00000000;
+2d : 00000000;
+2e : 00000000;
+2f : 00000000;
+30 : 5B9D0000;
+31 : F800001E;
+32 : 34010002;
+33 : F800519E;
+34 : E000002E;
+35 : 34000000;
+36 : 34000000;
+37 : 34000000;
+38 : 00000000;
+39 : 00000000;
+3a : 00000000;
+3b : 00000000;
+3c : 00000000;
+3d : 00000000;
+3e : 00000000;
+3f : 00000000;
+40 : 98000000;
+41 : 781C0001;
+42 : 3B9CFFFC;
+43 : 78010001;
+44 : 3821B0B0;
+45 : 34020000;
+46 : 78030001;
+47 : 3863C2C8;
+48 : C8611800;
+49 : F800580B;
+4a : 34010000;
+4b : 34020000;
+4c : 34030000;
+4d : F8000109;
+4e : E0000000;
+4f : 379CFFC4;
+50 : 5B810004;
+51 : 5B820008;
+52 : 5B83000C;
+53 : 5B840010;
+54 : 5B850014;
+55 : 5B860018;
+56 : 5B87001C;
+57 : 5B880020;
+58 : 5B890024;
+59 : 5B8A0028;
+5a : 5B9E0034;
+5b : 5B9F0038;
+5c : 2B81003C;
+5d : 5B810030;
+5e : BB800800;
+5f : 3421003C;
+60 : 5B81002C;
+61 : C3A00000;
+62 : 2B810004;
+63 : 2B820008;
+64 : 2B83000C;
+65 : 2B840010;
+66 : 2B850014;
+67 : 2B860018;
+68 : 2B87001C;
+69 : 2B880020;
+6a : 2B890024;
+6b : 2B8A0028;
+6c : 2B9D0030;
+6d : 2B9E0034;
+6e : 2B9F0038;
+6f : 2B9C002C;
+70 : 34000000;
+71 : C3C00000;
+72 : 90001000;
+73 : 3401FFFE;
+74 : A0410800;
+75 : D0010000;
+76 : 90201000;
+77 : 3401FFFE;
+78 : A0410800;
+79 : D0210000;
+7a : C3A00000;
+7b : 90001000;
+7c : 3401FFFE;
+7d : A0410800;
+7e : D0010000;
+7f : 90201000;
+80 : 38420001;
+81 : D0220000;
+82 : 38210001;
+83 : D0010000;
+84 : C3A00000;
+85 : 379CFFFC;
+86 : 5B9D0004;
+87 : F8003D83;
+88 : 78020001;
+89 : 78030001;
+8a : 3863B0C4;
+8b : 3842B0C8;
+8c : 28640000;
+8d : 28450000;
+8e : 58610000;
+8f : 340303E8;
+90 : C8A42000;
+91 : B4812000;
+92 : 58440000;
+93 : 34010000;
+94 : 50640009;
+95 : 78010000;
+96 : 382100A0;
+97 : 3484FC18;
+98 : 58440000;
+99 : 28220000;
+9a : 34420001;
+9b : 58220000;
+9c : 34010001;
+9d : 2B9D0004;
+9e : 379C0004;
+9f : C3A00000;
+a0 : 379CFFFC;
+a1 : 5B9D0004;
+a2 : F8003D68;
+a3 : 78020001;
+a4 : 3842B0C4;
+a5 : 58410000;
+a6 : 2B9D0004;
+a7 : 379C0004;
+a8 : C3A00000;
+a9 : 379CFFF4;
+aa : 5B9D0004;
+ab : F8003EDF;
+ac : F800384D;
+ad : 78010001;
+ae : 38216720;
+af : F800376F;
+b0 : 34010001;
+b1 : F8003D47;
+b2 : 78010001;
+b3 : 3821C284;
+b4 : F8003D29;
+b5 : F8004808;
+b6 : F8004A2D;
+b7 : 78010001;
+b8 : 3821C1F0;
+b9 : 58200000;
+ba : F8004953;
+bb : F8004054;
+bc : 34010000;
+bd : F8003B6C;
+be : 34010000;
+bf : 34020050;
+c0 : F8004403;
+c1 : 37820008;
+c2 : 34010000;
+c3 : F80044CC;
+c4 : 3402FFFF;
+c5 : 5C220006;
+c6 : 78010001;
+c7 : 3821673C;
+c8 : F8003756;
+c9 : 34010022;
+ca : 33810008;
+cb : 4384000A;
+cc : 4385000B;
+cd : 4386000C;
+ce : 4387000D;
+cf : 43830009;
+d0 : 43820008;
+d1 : 78010001;
+d2 : 38216760;
+d3 : F800374B;
+d4 : F8003DB5;
+d5 : 37810008;
+d6 : F8003950;
+d7 : 340100C8;
+d8 : F8003D37;
+d9 : 34020001;
+da : 34010001;
+db : F800389D;
+dc : F8003B80;
+dd : F80041E3;
+de : F800042E;
+df : 78020001;
+e0 : 38429700;
+e1 : 34010002;
+e2 : F8003FB9;
+e3 : F80051B1;
+e4 : F8002B51;
+e5 : F8002322;
+e6 : 78030001;
+e7 : 38638EC4;
+e8 : 78010001;
+e9 : 28620000;
+ea : 3821B0B0;
+eb : 58200000;
+ec : 78010001;
+ed : 3821F800;
+ee : 58220000;
+ef : 34010003;
+f0 : F800047D;
+f1 : F8000430;
+f2 : 78020001;
+f3 : 3842B0B8;
+f4 : 34010000;
+f5 : F800421A;
+f6 : F8003D14;
+f7 : 78020001;
+f8 : 3842B0BC;
+f9 : 58410000;
+fa : 2B9D0004;
+fb : 379C000C;
+fc : C3A00000;
+fd : 379CFFF8;
+fe : 5B8B0008;
+ff : 5B9D0004;
+100 : 34010000;
+101 : F80038A9;
+102 : B8205800;
+103 : 78010001;
+104 : 3821B0C0;
+105 : 28240000;
+106 : 7D620000;
+107 : 64830000;
+108 : A0431800;
+109 : 4460000D;
+10a : 78010001;
+10b : 3821C2AC;
+10c : 28210000;
+10d : 34020002;
+10e : 58220004;
+10f : F8003DDC;
+110 : F8000411;
+111 : 78010001;
+112 : 3821C2A4;
+113 : 34020001;
+114 : 58220000;
+115 : E0000014;
+116 : 65610000;
+117 : 7C840000;
+118 : A0240800;
+119 : 44230012;
+11a : 78010001;
+11b : 3821C2AC;
+11c : 28210000;
+11d : 34020002;
+11e : 58220008;
+11f : 78010001;
+120 : 3821C2A4;
+121 : 58220000;
+122 : F8000425;
+123 : 34010002;
+124 : 34020000;
+125 : 34030001;
+126 : F8005179;
+127 : 34010000;
+128 : F8004217;
+129 : 34010001;
+12a : E0000008;
+12b : FC411000;
+12c : 78010001;
+12d : C8021000;
+12e : 3821C2A4;
+12f : 20420003;
+130 : 58220000;
+131 : 34010000;
+132 : 78020001;
+133 : 3842B0C0;
+134 : 584B0000;
+135 : 2B9D0004;
+136 : 2B8B0008;
+137 : 379C0008;
+138 : C3A00000;
+139 : 379CFFF8;
+13a : 5B8B0008;
+13b : 5B9D0004;
+13c : 78010001;
+13d : 3821B0B0;
+13e : 28220000;
+13f : 34010001;
+140 : 5C41000F;
+141 : F8001FFC;
+142 : B8205800;
+143 : F80037E4;
+144 : 3402001B;
+145 : 44220005;
+146 : 78020001;
+147 : 384296F8;
+148 : 28410000;
+149 : 5C200008;
+14a : F80022BD;
+14b : 78020001;
+14c : 3842B0B0;
+14d : 58400000;
+14e : E0000003;
+14f : F80022C2;
+150 : B8205800;
+151 : B9600800;
+152 : 2B9D0004;
+153 : 2B8B0008;
+154 : 379C0008;
+155 : C3A00000;
+156 : 379CFFC8;
+157 : 5B8B0034;
+158 : 5B8C0030;
+159 : 5B8D002C;
+15a : 5B8E0028;
+15b : 5B8F0024;
+15c : 5B900020;
+15d : 5B91001C;
+15e : 5B920018;
+15f : 5B930014;
+160 : 5B940010;
+161 : 5B95000C;
+162 : 5B960008;
+163 : 5B9D0004;
+164 : 780B0001;
+165 : 780C0001;
+166 : F80053EA;
+167 : 396BAEEC;
+168 : 398CB0AC;
+169 : E0000005;
+16a : 29610008;
+16b : 44200002;
+16c : D8200000;
+16d : 356B0020;
+16e : 558BFFFC;
+16f : 780B0001;
+170 : 78010001;
+171 : 396BAEEC;
+172 : 78140001;
+173 : 78100001;
+174 : 38218EC8;
+175 : 780F0001;
+176 : 780E0001;
+177 : 78120001;
+178 : 78110001;
+179 : 3A94B0AC;
+17a : 3A10B0B8;
+17b : 28330000;
+17c : 39EFB0BC;
+17d : 39CEB0B4;
+17e : 3A5267C8;
+17f : 3A316794;
+180 : B960A800;
+181 : E000003C;
+182 : 2961000C;
+183 : 5C200005;
+184 : 29610010;
+185 : 34210001;
+186 : 59610010;
+187 : E000000B;
+188 : 29620004;
+189 : 44400003;
+18a : 28420000;
+18b : 44400007;
+18c : D8200000;
+18d : 29620010;
+18e : B9606000;
+18f : B4411000;
+190 : 59620010;
+191 : 5C200002;
+192 : BAA06000;
+193 : 37820038;
+194 : 34010000;
+195 : F800417A;
+196 : F8003C74;
+197 : B820B000;
+198 : 2A020000;
+199 : 2B810038;
+19a : C8221000;
+19b : 4C400002;
+19c : B4531000;
+19d : 29830018;
+19e : B4431000;
+19f : 59820018;
+1a0 : 52620006;
+1a1 : C8531000;
+1a2 : 59820018;
+1a3 : 29820014;
+1a4 : 34420001;
+1a5 : 59820014;
+1a6 : 29ED0000;
+1a7 : 5A010000;
+1a8 : CACD6800;
+1a9 : 4DA00002;
+1aa : 35AD03E8;
+1ab : 2983001C;
+1ac : 506D0008;
+1ad : 29C10000;
+1ae : 44200005;
+1af : 29820000;
+1b0 : BA200800;
+1b1 : B9A02000;
+1b2 : F800366C;
+1b3 : 598D001C;
+1b4 : 29C10000;
+1b5 : 44200006;
+1b6 : 502D0005;
+1b7 : 29820000;
+1b8 : BA400800;
+1b9 : B9A01800;
+1ba : F8003664;
+1bb : 59F60000;
+1bc : 356B0020;
+1bd : 568BFFC5;
+1be : F8005391;
+1bf : BAA05800;
+1c0 : E3FFFFFD;
+1c1 : 379CFFC0;
+1c2 : 5B8B0014;
+1c3 : 5B8C0010;
+1c4 : 5B8D000C;
+1c5 : 5B8E0008;
+1c6 : 5B9D0004;
+1c7 : 5B83002C;
+1c8 : 78030001;
+1c9 : 3863B0CC;
+1ca : 5B820028;
+1cb : 5B840030;
+1cc : 5B850034;
+1cd : 5B860038;
+1ce : 5B87003C;
+1cf : 5B880040;
+1d0 : 286D0000;
+1d1 : B8205800;
+1d2 : B8407000;
+1d3 : 34030000;
+1d4 : 44200002;
+1d5 : 2823001C;
+1d6 : B86D1800;
+1d7 : 0063001C;
+1d8 : 4460001E;
+1d9 : 780C0001;
+1da : 398CB0CC;
+1db : 39A10001;
+1dc : 59810000;
+1dd : 29610038;
+1de : 37820018;
+1df : 28230000;
+1e0 : B9600800;
+1e1 : D8600000;
+1e2 : 598D0000;
+1e3 : 2B840020;
+1e4 : 2F830024;
+1e5 : 296B03D4;
+1e6 : 3C840010;
+1e7 : 780C0001;
+1e8 : B8830800;
+1e9 : 78030001;
+1ea : 38638ECC;
+1eb : 28620000;
+1ec : 398C6814;
+1ed : F800553B;
+1ee : 2B83001C;
+1ef : B8202000;
+1f0 : B9601000;
+1f1 : B9800800;
+1f2 : F800362C;
+1f3 : B9C00800;
+1f4 : 3782002C;
+1f5 : F8003607;
+1f6 : 2B9D0004;
+1f7 : 2B8B0014;
+1f8 : 2B8C0010;
+1f9 : 2B8D000C;
+1fa : 2B8E0008;
+1fb : 379C0040;
+1fc : C3A00000;
+1fd : 379CFFFC;
+1fe : 5B9D0004;
+1ff : B8402800;
+200 : 5C600005;
+201 : 78020001;
+202 : 38426830;
+203 : B8A01800;
+204 : E000000C;
+205 : 34020001;
+206 : 5C620006;
+207 : 78020001;
+208 : 3842684C;
+209 : B8A01800;
+20a : 28240008;
+20b : E0000005;
+20c : 28240004;
+20d : 78020001;
+20e : 38426864;
+20f : B8A01800;
+210 : FBFFFFB1;
+211 : 2B9D0004;
+212 : 379C0004;
+213 : C3A00000;
+214 : 379CFFDC;
+215 : 5B8B0024;
+216 : 5B8C0020;
+217 : 5B8D001C;
+218 : 5B8E0018;
+219 : 5B8F0014;
+21a : 5B900010;
+21b : 5B9D000C;
+21c : B8205800;
+21d : B8407000;
+21e : B8606800;
+21f : 4C0300B6;
+220 : 40430000;
+221 : 2828010C;
+222 : 28290108;
+223 : 2063000F;
+224 : 28260104;
+225 : 5B830004;
+226 : 0863000C;
+227 : 78020001;
+228 : 01070010;
+229 : 38429768;
+22a : 2108FFFF;
+22b : B4431000;
+22c : 090803E8;
+22d : 28420000;
+22e : 3D290010;
+22f : 78040001;
+230 : 01080010;
+231 : 5B820008;
+232 : 34030001;
+233 : 34020005;
+234 : 3884687C;
+235 : B9A02800;
+236 : B9273800;
+237 : F80000A2;
+238 : 34010021;
+239 : 4C2D009C;
+23a : 41C10000;
+23b : 3402000D;
+23c : 2021000F;
+23d : 48220010;
+23e : 3C210002;
+23f : 78020001;
+240 : 38428FA0;
+241 : B4411000;
+242 : 28410000;
+243 : 482D000A;
+244 : 41C20001;
+245 : 34010002;
+246 : 2042000F;
+247 : 5C410006;
+248 : B9600800;
+249 : B9C01000;
+24a : B9A01800;
+24b : F80017D2;
+24c : 44200003;
+24d : 340D0000;
+24e : 340E0000;
+24f : 296C0010;
+250 : 5960000C;
+251 : 29610000;
+252 : 45800003;
+253 : 29820000;
+254 : 44410013;
+255 : 34020001;
+256 : 780C0001;
+257 : 5962000C;
+258 : 398C9DA8;
+259 : E0000006;
+25a : 5C410004;
+25b : 596C0010;
+25c : 5D80000B;
+25d : E0000004;
+25e : 358C000C;
+25f : 29820000;
+260 : 5C40FFFA;
+261 : 296203D4;
+262 : 78010001;
+263 : 382168AC;
+264 : F80035BA;
+265 : 34012710;
+266 : E0000066;
+267 : 59610004;
+268 : 2961000C;
+269 : 59600008;
+26a : 44200006;
+26b : 29820004;
+26c : B9600800;
+26d : 34030000;
+26e : B9A02000;
+26f : FBFFFF8E;
+270 : 45C00033;
+271 : 29610030;
+272 : 416503A6;
+273 : 2821000C;
+274 : 4021001E;
+275 : 44250008;
+276 : 78040001;
+277 : B9600800;
+278 : 34020005;
+279 : 34030001;
+27a : 388468CC;
+27b : F800005E;
+27c : E0000025;
+27d : 417003A7;
+27e : 22100001;
+27f : 46000007;
+280 : 78040001;
+281 : B9600800;
+282 : 34020005;
+283 : 34030001;
+284 : 388468E8;
+285 : E000000C;
+286 : 29620358;
+287 : 356F03C0;
+288 : B9E00800;
+289 : 3403000A;
+28a : F800552B;
+28b : 5C300008;
+28c : 78040001;
+28d : B9600800;
+28e : 34020005;
+28f : 34030001;
+290 : 38846904;
+291 : F8000048;
+292 : E000000F;
+293 : 416203A1;
+294 : 3401000B;
+295 : 5C41000E;
+296 : 29620358;
+297 : B9E00800;
+298 : 34030008;
+299 : F800551C;
+29a : 5C200009;
+29b : 29610358;
+29c : 2D6203C8;
+29d : 2C210008;
+29e : 50410003;
+29f : 34010007;
+2a0 : 59610004;
+2a1 : 340D0000;
+2a2 : 340E0000;
+2a3 : 29610004;
+2a4 : 29620000;
+2a5 : 5C410013;
+2a6 : 5DA00003;
+2a7 : 3401000F;
+2a8 : 316103A1;
+2a9 : 29840008;
+2aa : B9A01800;
+2ab : B9600800;
+2ac : B9C01000;
+2ad : D8800000;
+2ae : B8201800;
+2af : 44200006;
+2b0 : 296203D4;
+2b1 : 29840004;
+2b2 : 78010001;
+2b3 : 3821691C;
+2b4 : F800356A;
+2b5 : 29610004;
+2b6 : 29620000;
+2b7 : 4441000F;
+2b8 : 59610000;
+2b9 : B9600800;
+2ba : F80000E6;
+2bb : 41610020;
+2bc : 29620010;
+2bd : 34030002;
+2be : 202100F9;
+2bf : 31610020;
+2c0 : 28420004;
+2c1 : B9600800;
+2c2 : 34040000;
+2c3 : FBFFFF3A;
+2c4 : 34010000;
+2c5 : E0000007;
+2c6 : 29820004;
+2c7 : B9600800;
+2c8 : 34030001;
+2c9 : 34040000;
+2ca : FBFFFF33;
+2cb : 29610008;
+2cc : 2B9D000C;
+2cd : 2B8B0024;
+2ce : 2B8C0020;
+2cf : 2B8D001C;
+2d0 : 2B8E0018;
+2d1 : 2B8F0014;
+2d2 : 2B900010;
+2d3 : 379C0024;
+2d4 : C3A00000;
+2d5 : 34010000;
+2d6 : 340D0000;
+2d7 : 340E0000;
+2d8 : E3FFFF66;
+2d9 : 379CFFE4;
+2da : 5B8B0008;
+2db : 5B9D0004;
+2dc : 5B84000C;
+2dd : 5B850010;
+2de : B8805800;
+2df : 5B860014;
+2e0 : 78040001;
+2e1 : 5B870018;
+2e2 : 5B88001C;
+2e3 : 38846938;
+2e4 : 34050000;
+2e5 : 44200003;
+2e6 : 282403D4;
+2e7 : 2825001C;
+2e8 : 78060001;
+2e9 : 38C6B0CC;
+2ea : 28C10000;
+2eb : 3C420002;
+2ec : B8A12800;
+2ed : 80A22800;
+2ee : 20A5000F;
+2ef : 5465000C;
+2f0 : 78050001;
+2f1 : 38A58FE8;
+2f2 : B4A22800;
+2f3 : 78060001;
+2f4 : 28A20000;
+2f5 : B8C00800;
+2f6 : 38216940;
+2f7 : F8003527;
+2f8 : B9600800;
+2f9 : 37820010;
+2fa : F8003502;
+2fb : 2B9D0004;
+2fc : 2B8B0008;
+2fd : 379C001C;
+2fe : C3A00000;
+2ff : 379CFFF8;
+300 : 5B8B0008;
+301 : 5B9D0004;
+302 : 3402001C;
+303 : B8201800;
+304 : 340B0000;
+305 : 3405FFFC;
+306 : 34040003;
+307 : E0000009;
+308 : 3421FFD0;
+309 : 202600FF;
+30a : 50860002;
+30b : E0000008;
+30c : BC220800;
+30d : 34630001;
+30e : B9615800;
+30f : 3442FFFC;
+310 : 40610000;
+311 : 44200007;
+312 : 5C45FFF6;
+313 : 78010001;
+314 : 78020001;
+315 : 3821694C;
+316 : 38428FD8;
+317 : F8003507;
+318 : B9600800;
+319 : 2B9D0004;
+31a : 2B8B0008;
+31b : 379C0008;
+31c : C3A00000;
+31d : 28240358;
+31e : 78020001;
+31f : 38429708;
+320 : 1083000A;
+321 : 34050001;
+322 : 28210030;
+323 : 58430008;
+324 : 3463000C;
+325 : BCA31800;
+326 : 28210010;
+327 : 58430038;
+328 : 1083000D;
+329 : 2C210000;
+32a : 58430014;
+32b : 1083000B;
+32c : 4084000C;
+32d : 34210001;
+32e : 5843002C;
+32f : BC832000;
+330 : 088403E8;
+331 : 58440020;
+332 : 340403E8;
+333 : BC831800;
+334 : 88231800;
+335 : 58430044;
+336 : C3A00000;
+337 : 379CFFF0;
+338 : 5B8B0010;
+339 : 5B8C000C;
+33a : 5B8D0008;
+33b : 5B9D0004;
+33c : B8406800;
+33d : 28220038;
+33e : B8606000;
+33f : B8205800;
+340 : 28430018;
+341 : B9801000;
+342 : D8600000;
+343 : 35A200D6;
+344 : 3C420002;
+345 : 09AD000C;
+346 : B5621000;
+347 : 58410004;
+348 : 78010001;
+349 : 38219708;
+34a : B42D6800;
+34b : 29A50000;
+34c : 78040001;
+34d : B9600800;
+34e : 34020006;
+34f : 34030003;
+350 : 388469BC;
+351 : B9803000;
+352 : FBFFFF87;
+353 : 2B9D0004;
+354 : 2B8B0010;
+355 : 2B8C000C;
+356 : 2B8D0008;
+357 : 379C0010;
+358 : C3A00000;
+359 : 379CFFF0;
+35a : 5B8B0010;
+35b : 5B8C000C;
+35c : 5B8D0008;
+35d : 5B9D0004;
+35e : B8406000;
+35f : B8206800;
+360 : 0981000C;
+361 : 78020001;
+362 : 78030001;
+363 : 38429708;
+364 : 3863B0D0;
+365 : B4411000;
+366 : 28610000;
+367 : 28440008;
+368 : 5C200005;
+369 : 29A10030;
+36a : 2821000C;
+36b : 28210008;
+36c : 58610000;
+36d : 78030001;
+36e : 78010001;
+36f : 3863B0D0;
+370 : 38218ED0;
+371 : 28620000;
+372 : 28250000;
+373 : 340B0019;
+374 : 88451000;
+375 : 34423039;
+376 : 00410010;
+377 : 88451000;
+378 : 202107FF;
+379 : 34423039;
+37a : 58620000;
+37b : 3C23000A;
+37c : 00410010;
+37d : 34820004;
+37e : 202103FF;
+37f : 98230800;
+380 : 0983000C;
+381 : BD625800;
+382 : 78020001;
+383 : 38429708;
+384 : B4431000;
+385 : 28420004;
+386 : 34030001;
+387 : 44430005;
+388 : 34030002;
+389 : 44430008;
+38a : 5C40000C;
+38b : E000000A;
+38c : B9601000;
+38d : 3D6B0001;
+38e : F80053F7;
+38f : B42B5800;
+390 : E0000006;
+391 : 09620005;
+392 : F80053F3;
+393 : B8205800;
+394 : E0000002;
+395 : B8805800;
+396 : B9A00800;
+397 : B9801000;
+398 : B9601800;
+399 : FBFFFF9E;
+39a : 2B9D0004;
+39b : 2B8B0010;
+39c : 2B8C000C;
+39d : 2B8D0008;
+39e : 379C0010;
+39f : C3A00000;
+3a0 : 379CFFF0;
+3a1 : 5B8B0010;
+3a2 : 5B8C000C;
+3a3 : 5B8D0008;
+3a4 : 5B9D0004;
+3a5 : 340B0000;
+3a6 : B8206000;
+3a7 : 340D0008;
+3a8 : B9601000;
+3a9 : B9800800;
+3aa : 356B0001;
+3ab : FBFFFFAE;
+3ac : 5D6DFFFC;
+3ad : B9800800;
+3ae : 34020003;
+3af : 34030014;
+3b0 : FBFFFF87;
+3b1 : 2B9D0004;
+3b2 : 2B8B0010;
+3b3 : 2B8C000C;
+3b4 : 2B8D0008;
+3b5 : 379C0010;
+3b6 : C3A00000;
+3b7 : 379CFFF4;
+3b8 : 5B8B000C;
+3b9 : 5B8C0008;
+3ba : 5B9D0004;
+3bb : B8406000;
+3bc : 28220038;
+3bd : B8205800;
+3be : 28430018;
+3bf : 34020000;
+3c0 : D8600000;
+3c1 : 358200D6;
+3c2 : 3C420002;
+3c3 : B5621000;
+3c4 : 28420004;
+3c5 : C8221000;
+3c6 : 34010000;
+3c7 : 4802000D;
+3c8 : 098C000C;
+3c9 : 78010001;
+3ca : 38219708;
+3cb : B42C6000;
+3cc : 29850000;
+3cd : 78040001;
+3ce : B9600800;
+3cf : 34020006;
+3d0 : 34030001;
+3d1 : 388469D4;
+3d2 : FBFFFF07;
+3d3 : 34010001;
+3d4 : 2B9D0004;
+3d5 : 2B8B000C;
+3d6 : 2B8C0008;
+3d7 : 379C000C;
+3d8 : C3A00000;
+3d9 : 379CFFF4;
+3da : 5B8B000C;
+3db : 5B8C0008;
+3dc : 5B9D0004;
+3dd : B8406000;
+3de : 28220038;
+3df : B8205800;
+3e0 : 28430018;
+3e1 : 34020000;
+3e2 : D8600000;
+3e3 : 358200D6;
+3e4 : 3C420002;
+3e5 : B5625800;
+3e6 : 29620004;
+3e7 : C8410800;
+3e8 : A4201000;
+3e9 : 1442001F;
+3ea : A0220800;
+3eb : 2B9D0004;
+3ec : 2B8B000C;
+3ed : 2B8C0008;
+3ee : 379C000C;
+3ef : C3A00000;
+3f0 : 379CFFF0;
+3f1 : 5B8B0010;
+3f2 : 5B8C000C;
+3f3 : 5B8D0008;
+3f4 : 5B9D0004;
+3f5 : B8406800;
+3f6 : 28220038;
+3f7 : B8205800;
+3f8 : B8606000;
+3f9 : 28440018;
+3fa : 34020000;
+3fb : D8800000;
+3fc : 35A200D6;
+3fd : 358300D6;
+3fe : 3C630002;
+3ff : 3C420002;
+400 : B5621000;
+401 : B5635800;
+402 : 28420004;
+403 : 29630004;
+404 : C8411000;
+405 : C8610800;
+406 : 4C410002;
+407 : B8400800;
+408 : A4201000;
+409 : 1442001F;
+40a : A0220800;
+40b : 2B9D0004;
+40c : 2B8B0010;
+40d : 2B8C000C;
+40e : 2B8D0008;
+40f : 379C0010;
+410 : C3A00000;
+411 : 379CFFEC;
+412 : 5B8B0014;
+413 : 5B8C0010;
+414 : 5B8D000C;
+415 : 5B8E0008;
+416 : 5B9D0004;
+417 : B8407000;
+418 : 28220038;
+419 : B8205800;
+41a : B8606800;
+41b : 28450018;
+41c : 34020000;
+41d : B8806000;
+41e : D8A00000;
+41f : 35C200D6;
+420 : 35A300D6;
+421 : 3C420002;
+422 : 3C630002;
+423 : B5621000;
+424 : B5631800;
+425 : 28450004;
+426 : 28620004;
+427 : C8A12800;
+428 : C8411000;
+429 : 4CA20002;
+42a : B8A01000;
+42b : 358400D6;
+42c : 3C840002;
+42d : B5645800;
+42e : 29630004;
+42f : C8610800;
+430 : 4C220002;
+431 : B8201000;
+432 : A4400800;
+433 : 1421001F;
+434 : A0410800;
+435 : 2B9D0004;
+436 : 2B8B0014;
+437 : 2B8C0010;
+438 : 2B8D000C;
+439 : 2B8E0008;
+43a : 379C0014;
+43b : C3A00000;
+43c : 379CFFFC;
+43d : 5B9D0004;
+43e : 34030001;
+43f : 34010003;
+440 : 34020000;
+441 : F8004E5E;
+442 : 34010000;
+443 : 34020001;
+444 : F8004FFD;
+445 : F8003B82;
+446 : 34010000;
+447 : 2B9D0004;
+448 : 379C0004;
+449 : C3A00000;
+44a : 379CFFF4;
+44b : 5B8B000C;
+44c : 5B8C0008;
+44d : 5B9D0004;
+44e : 34010000;
+44f : B8406000;
+450 : F8004F19;
+451 : 45800005;
+452 : 64220000;
+453 : C8021000;
+454 : 38420001;
+455 : E0000013;
+456 : 780B0001;
+457 : 396BB0D4;
+458 : 5C2C0004;
+459 : 59600000;
+45a : 3402FFFF;
+45b : E000000D;
+45c : 296C0000;
+45d : 34020001;
+45e : 5D80000A;
+45f : 78020001;
+460 : 38429700;
+461 : 34010003;
+462 : F8003C39;
+463 : 34020002;
+464 : 49810004;
+465 : 34010001;
+466 : 59610000;
+467 : 34020001;
+468 : B8400800;
+469 : 2B9D0004;
+46a : 2B8B000C;
+46b : 2B8C0008;
+46c : 379C000C;
+46d : C3A00000;
+46e : 34010000;
+46f : C3A00000;
+470 : 379CFFFC;
+471 : 5B9D0004;
+472 : 34010000;
+473 : 34020001;
+474 : F8004FCD;
+475 : 34010000;
+476 : 2B9D0004;
+477 : 379C0004;
+478 : C3A00000;
+479 : 379CFFFC;
+47a : 5B9D0004;
+47b : 28210358;
+47c : 28210010;
+47d : 2823000C;
+47e : 44430004;
+47f : 5822000C;
+480 : B8400800;
+481 : F8003EBE;
+482 : 34010000;
+483 : 2B9D0004;
+484 : 379C0004;
+485 : C3A00000;
+486 : 379CFFFC;
+487 : 5B9D0004;
+488 : F8003EB0;
+489 : 34020001;
+48a : 5C200003;
+48b : F8004FA6;
+48c : 7C220000;
+48d : B8400800;
+48e : 2B9D0004;
+48f : 379C0004;
+490 : C3A00000;
+491 : 379CFFF8;
+492 : 5B8B0008;
+493 : 5B9D0004;
+494 : B8202800;
+495 : B8220800;
+496 : B8402000;
+497 : B8605800;
+498 : 44200005;
+499 : 34010001;
+49a : B8A01000;
+49b : B8801800;
+49c : F8003E35;
+49d : 45600005;
+49e : 1562001F;
+49f : 34010002;
+4a0 : B9601800;
+4a1 : F8003E30;
+4a2 : 34010000;
+4a3 : 2B9D0004;
+4a4 : 2B8B0008;
+4a5 : 379C0008;
+4a6 : C3A00000;
+4a7 : 379CFFFC;
+4a8 : 5B9D0004;
+4a9 : B8201000;
+4aa : 3401FFFF;
+4ab : F8004ECF;
+4ac : 34010000;
+4ad : 2B9D0004;
+4ae : 379C0004;
+4af : C3A00000;
+4b0 : 379CFF24;
+4b1 : 5B8B0014;
+4b2 : 5B8C0010;
+4b3 : 5B8D000C;
+4b4 : 5B8E0008;
+4b5 : 5B9D0004;
+4b6 : B8406000;
+4b7 : 282203D0;
+4b8 : B8807000;
+4b9 : 37810018;
+4ba : B8605800;
+4bb : B8A06800;
+4bc : F8001E65;
+4bd : 45C00005;
+4be : 78010001;
+4bf : 3821A808;
+4c0 : 28210000;
+4c1 : 59C10000;
+4c2 : 45A00003;
+4c3 : 2B8100CC;
+4c4 : 59A10000;
+4c5 : 2B82006C;
+4c6 : 3401FFFD;
+4c7 : 44400013;
+4c8 : 45800007;
+4c9 : 2B820060;
+4ca : 2B810058;
+4cb : B4410800;
+4cc : 2B8200A0;
+4cd : B4220800;
+4ce : 59810000;
+4cf : 2B820068;
+4d0 : 3401FFFD;
+4d1 : 44400009;
+4d2 : 34010000;
+4d3 : 45600007;
+4d4 : 2B830064;
+4d5 : 2B82005C;
+4d6 : B4621000;
+4d7 : 2B8300A4;
+4d8 : B4431000;
+4d9 : 59620000;
+4da : 2B9D0004;
+4db : 2B8B0014;
+4dc : 2B8C0010;
+4dd : 2B8D000C;
+4de : 2B8E0008;
+4df : 379C00DC;
+4e0 : C3A00000;
+4e1 : 34010000;
+4e2 : C3A00000;
+4e3 : 34010000;
+4e4 : C3A00000;
+4e5 : 379CFFEC;
+4e6 : 5B8B000C;
+4e7 : 5B8C0008;
+4e8 : 5B9D0004;
+4e9 : 34040000;
+4ea : B8406000;
+4eb : B8605800;
+4ec : 37820010;
+4ed : 37830014;
+4ee : 34050000;
+4ef : 5B800014;
+4f0 : 5B800010;
+4f1 : FBFFFFBF;
+4f2 : 34010001;
+4f3 : 5D810003;
+4f4 : 2B810010;
+4f5 : E0000002;
+4f6 : 2B810014;
+4f7 : 59610000;
+4f8 : 34010001;
+4f9 : 2B9D0004;
+4fa : 2B8B000C;
+4fb : 2B8C0008;
+4fc : 379C0014;
+4fd : C3A00000;
+4fe : 379CFFFC;
+4ff : 5B9D0004;
+500 : F80034EB;
+501 : 34010000;
+502 : 2B9D0004;
+503 : 379C0004;
+504 : C3A00000;
+505 : 379CFFFC;
+506 : 5B9D0004;
+507 : F80034EF;
+508 : 34010000;
+509 : 2B9D0004;
+50a : 379C0004;
+50b : C3A00000;
+50c : 379CFFFC;
+50d : 5B9D0004;
+50e : F8003A7C;
+50f : F80033EA;
+510 : 78010001;
+511 : 78020001;
+512 : 38426ACC;
+513 : 38216A9C;
+514 : F800330A;
+515 : 34010000;
+516 : 2B9D0004;
+517 : 379C0004;
+518 : C3A00000;
+519 : 78010001;
+51a : 3821B0D8;
+51b : 28210000;
+51c : C3A00000;
+51d : 78010001;
+51e : 38219828;
+51f : 2821002C;
+520 : C3A00000;
+521 : 379CFFF8;
+522 : 5B8B0008;
+523 : 5B9D0004;
+524 : 78010001;
+525 : 38216AE8;
+526 : F80032F8;
+527 : 78010001;
+528 : 78020001;
+529 : 38429F44;
+52a : 38219C40;
+52b : 780B0001;
+52c : F80019FF;
+52d : 396B9828;
+52e : 34030000;
+52f : B9600800;
+530 : 34020000;
+531 : FBFFFCE3;
+532 : 78020001;
+533 : 38429C84;
+534 : 58410000;
+535 : F80038D5;
+536 : 78020001;
+537 : 3842B0E0;
+538 : 58410000;
+539 : 29610358;
+53a : 28210010;
+53b : 58200068;
+53c : B9600800;
+53d : F8000B31;
+53e : 78010001;
+53f : 3821B0DC;
+540 : 34020001;
+541 : 58220000;
+542 : 34010000;
+543 : 2B9D0004;
+544 : 2B8B0008;
+545 : 379C0008;
+546 : C3A00000;
+547 : 379CFFF4;
+548 : 5B8B000C;
+549 : 5B8C0008;
+54a : 5B9D0004;
+54b : 780B0001;
+54c : 396B9828;
+54d : 29610358;
+54e : 282C0010;
+54f : 78010001;
+550 : 38216AF4;
+551 : F80032CD;
+552 : 29810000;
+553 : 34020000;
+554 : 28230034;
+555 : B9600800;
+556 : D8600000;
+557 : 78010001;
+558 : 34020000;
+559 : 34030230;
+55a : 59800040;
+55b : 31800035;
+55c : 38219950;
+55d : F80052F7;
+55e : 78010001;
+55f : 3821B0DC;
+560 : 58200000;
+561 : B9600800;
+562 : 0D600120;
+563 : F8000B0B;
+564 : 78010001;
+565 : 38219C40;
+566 : F8001A10;
+567 : 34010000;
+568 : 2B9D0004;
+569 : 2B8B000C;
+56a : 2B8C0008;
+56b : 379C000C;
+56c : C3A00000;
+56d : 379CFFEC;
+56e : 5B8B0014;
+56f : 5B8C0010;
+570 : 5B8D000C;
+571 : 5B8E0008;
+572 : 5B9D0004;
+573 : 780B0001;
+574 : 396B9828;
+575 : B8206000;
+576 : 29610358;
+577 : 282D0010;
+578 : 78010001;
+579 : 3821B0D8;
+57a : 58200000;
+57b : FBFFFFCC;
+57c : 34010002;
+57d : 4581001F;
+57e : 49810003;
+57f : 34010001;
+580 : E0000004;
+581 : 34020003;
+582 : 4582002F;
+583 : 34010004;
+584 : 5D810039;
+585 : 34010001;
+586 : 780B0001;
+587 : 396B9828;
+588 : 31A10004;
+589 : 34010001;
+58a : 59610024;
+58b : 78010001;
+58c : 38219F44;
+58d : 340E0006;
+58e : 34020000;
+58f : 34030001;
+590 : 582E0000;
+591 : 34010001;
+592 : F8004D0D;
+593 : 34010001;
+594 : F8003DB7;
+595 : 29610030;
+596 : 2821000C;
+597 : 582E0010;
+598 : B9600800;
+599 : F80012ED;
+59a : 380BEA60;
+59b : E0000023;
+59c : 34010001;
+59d : 31A10004;
+59e : 34010001;
+59f : 59610024;
+5a0 : 78010001;
+5a1 : 38219F44;
+5a2 : 340E00BB;
+5a3 : 34020000;
+5a4 : 34030001;
+5a5 : 582E0000;
+5a6 : 34010002;
+5a7 : F8004CF8;
+5a8 : 34010001;
+5a9 : F8003DA2;
+5aa : 29610030;
+5ab : 2821000C;
+5ac : 582E0010;
+5ad : B9600800;
+5ae : F80012D8;
+5af : 340B0FA0;
+5b0 : E000000E;
+5b1 : 31A10004;
+5b2 : 59610024;
+5b3 : 78010001;
+5b4 : 38219F44;
+5b5 : 340200FF;
+5b6 : 58220000;
+5b7 : 34030001;
+5b8 : 34010003;
+5b9 : 34020000;
+5ba : F8004CE5;
+5bb : 34010000;
+5bc : F8003D8F;
+5bd : 340B0000;
+5be : F800384C;
+5bf : 78020001;
+5c0 : B8207000;
+5c1 : B8400800;
+5c2 : 38216B00;
+5c3 : F800325B;
+5c4 : 29A20000;
+5c5 : 780D0001;
+5c6 : 39AD6B1C;
+5c7 : 28430034;
+5c8 : 78020001;
+5c9 : B8400800;
+5ca : 38219828;
+5cb : 34020000;
+5cc : D8600000;
+5cd : E000000E;
+5ce : F8004ECC;
+5cf : 340103E8;
+5d0 : F800383F;
+5d1 : F8003839;
+5d2 : C82E1000;
+5d3 : 51620006;
+5d4 : 78010001;
+5d5 : 38216B0C;
+5d6 : F8003248;
+5d7 : 340BFF8C;
+5d8 : E0000008;
+5d9 : B9A00800;
+5da : F8003244;
+5db : 34010000;
+5dc : F8004D8D;
+5dd : 5C200002;
+5de : 5D61FFF0;
+5df : 340B0000;
+5e0 : 78010001;
+5e1 : 38218798;
+5e2 : F800323C;
+5e3 : 7D620000;
+5e4 : 65810001;
+5e5 : A0410800;
+5e6 : 44200005;
+5e7 : 78010001;
+5e8 : 38219F44;
+5e9 : 34020034;
+5ea : 58220000;
+5eb : 78010001;
+5ec : 3821B0D8;
+5ed : 582C0000;
+5ee : B9600800;
+5ef : 2B9D0004;
+5f0 : 2B8B0014;
+5f1 : 2B8C0010;
+5f2 : 2B8D000C;
+5f3 : 2B8E0008;
+5f4 : 379C0014;
+5f5 : C3A00000;
+5f6 : 379CFFFC;
+5f7 : 5B9D0004;
+5f8 : 44200004;
+5f9 : 34020001;
+5fa : 5C220006;
+5fb : E0000003;
+5fc : FBFFFF4B;
+5fd : E0000006;
+5fe : FBFFFF23;
+5ff : E0000004;
+600 : 78010001;
+601 : 3821B0DC;
+602 : 28210000;
+603 : 2B9D0004;
+604 : 379C0004;
+605 : C3A00000;
+606 : 379CFFEC;
+607 : 5B8B0014;
+608 : 5B8C0010;
+609 : 5B8D000C;
+60a : 5B8E0008;
+60b : 5B9D0004;
+60c : 78010001;
+60d : 3821B0DC;
+60e : 28210000;
+60f : 340E0000;
+610 : 44200024;
+611 : 780B0001;
+612 : 396B9828;
+613 : 29610034;
+614 : 29620048;
+615 : 78040001;
+616 : 28250008;
+617 : 3403007C;
+618 : B9600800;
+619 : 38849928;
+61a : D8A00000;
+61b : B8201800;
+61c : 4C010005;
+61d : 29610414;
+61e : 34210001;
+61f : 59610414;
+620 : E000000C;
+621 : 5C20000B;
+622 : 780D0001;
+623 : F80037E7;
+624 : 39ADB0E0;
+625 : 29A20000;
+626 : 780C0001;
+627 : 398C9C84;
+628 : C8220800;
+629 : 29820000;
+62a : 5441000A;
+62b : E0000011;
+62c : 78010001;
+62d : 38219828;
+62e : 28220050;
+62f : FBFFFBE5;
+630 : 78020001;
+631 : 38429C84;
+632 : 58410000;
+633 : 340E0001;
+634 : B9C00800;
+635 : 2B9D0004;
+636 : 2B8B0014;
+637 : 2B8C0010;
+638 : 2B8D000C;
+639 : 2B8E0008;
+63a : 379C0014;
+63b : C3A00000;
+63c : F80037CE;
+63d : 59A10000;
+63e : 34020000;
+63f : B9600800;
+640 : 34030000;
+641 : FBFFFBD3;
+642 : 59810000;
+643 : E3FFFFF0;
+644 : 379CFFF0;
+645 : 5B8B0010;
+646 : 5B8C000C;
+647 : 5B8D0008;
+648 : 5B9D0004;
+649 : 28450008;
+64a : 2C44000C;
+64b : 284D0000;
+64c : 3CA50010;
+64d : B8206000;
+64e : 284B0004;
+64f : B8A40800;
+650 : 340203E8;
+651 : F80050D7;
+652 : 15A20018;
+653 : B8203000;
+654 : 78070001;
+655 : 204200C0;
+656 : 34010080;
+657 : 38E780E0;
+658 : 5C410003;
+659 : 78070001;
+65a : 38E76B24;
+65b : 78040001;
+65c : B8800800;
+65d : B9801000;
+65e : B9601800;
+65f : B9602000;
+660 : B9602800;
+661 : 38216B30;
+662 : F80031BC;
+663 : 2B9D0004;
+664 : 2B8B0010;
+665 : 2B8C000C;
+666 : 2B8D0008;
+667 : 379C0010;
+668 : C3A00000;
+669 : 379CFFE8;
+66a : 5B9D0018;
+66b : B8205000;
+66c : 40610005;
+66d : 40640000;
+66e : 40650001;
+66f : 40660002;
+670 : 40670003;
+671 : 40680004;
+672 : 5B810004;
+673 : 40610006;
+674 : B8404800;
+675 : B9401000;
+676 : 5B810008;
+677 : 40610007;
+678 : 5B81000C;
+679 : 40610008;
+67a : 5B810010;
+67b : 40610009;
+67c : B9201800;
+67d : 5B810014;
+67e : 78010001;
+67f : 38216B54;
+680 : F800319E;
+681 : 2B9D0018;
+682 : 379C0018;
+683 : C3A00000;
+684 : 379CFFD0;
+685 : 5B8B0030;
+686 : 5B8C002C;
+687 : 5B8D0028;
+688 : 5B8E0024;
+689 : 5B8F0020;
+68a : 5B90001C;
+68b : 5B910018;
+68c : 5B920014;
+68d : 5B930010;
+68e : 5B94000C;
+68f : 5B950008;
+690 : 5B9D0004;
+691 : B8603000;
+692 : B8209800;
+693 : B8409000;
+694 : 78010001;
+695 : B880A800;
+696 : 38216B8C;
+697 : BA601000;
+698 : BA401800;
+699 : B8C02000;
+69a : B8A0A000;
+69b : 78110001;
+69c : F8003182;
+69d : 78100001;
+69e : 780F0001;
+69f : 780E0001;
+6a0 : 780D0001;
+6a1 : B8205800;
+6a2 : 340C0000;
+6a3 : 3A316BA0;
+6a4 : 3A106BA8;
+6a5 : 39EF7C58;
+6a6 : 39CE8798;
+6a7 : 39AD7F20;
+6a8 : E0000017;
+6a9 : 5CC00006;
+6aa : BA200800;
+6ab : BA601000;
+6ac : BA401800;
+6ad : F8003171;
+6ae : B5615800;
+6af : B6AC1000;
+6b0 : 40420000;
+6b1 : BA000800;
+6b2 : 358C0001;
+6b3 : F800316B;
+6b4 : 21820003;
+6b5 : B42B5800;
+6b6 : B9E03000;
+6b7 : 5C400005;
+6b8 : 2181000F;
+6b9 : B9C03000;
+6ba : 44220002;
+6bb : B9A03000;
+6bc : B8C00800;
+6bd : F8003161;
+6be : B5615800;
+6bf : 2186000F;
+6c0 : 4A8CFFE9;
+6c1 : 44C00005;
+6c2 : 78010001;
+6c3 : 38218798;
+6c4 : F800315A;
+6c5 : B42B5800;
+6c6 : B9600800;
+6c7 : 2B9D0004;
+6c8 : 2B8B0030;
+6c9 : 2B8C002C;
+6ca : 2B8D0028;
+6cb : 2B8E0024;
+6cc : 2B8F0020;
+6cd : 2B90001C;
+6ce : 2B910018;
+6cf : 2B920014;
+6d0 : 2B930010;
+6d1 : 2B94000C;
+6d2 : 2B950008;
+6d3 : 379C0030;
+6d4 : C3A00000;
+6d5 : 379CFFB8;
+6d6 : 5B8B0048;
+6d7 : 5B8C0044;
+6d8 : 5B8D0040;
+6d9 : 5B8E003C;
+6da : 5B8F0038;
+6db : 5B900034;
+6dc : 5B910030;
+6dd : 5B92002C;
+6de : 5B930028;
+6df : 5B940024;
+6e0 : 5B950020;
+6e1 : 5B96001C;
+6e2 : 5B970018;
+6e3 : 5B980014;
+6e4 : 5B9D0010;
+6e5 : B8608000;
+6e6 : 40430001;
+6e7 : B8206000;
+6e8 : 34010002;
+6e9 : 2063000F;
+6ea : B8406800;
+6eb : 404E0000;
+6ec : 44610006;
+6ed : 78010001;
+6ee : B9801000;
+6ef : 38216BB0;
+6f0 : F800312E;
+6f1 : E0000150;
+6f2 : 40450002;
+6f3 : 40460003;
+6f4 : 21CE000F;
+6f5 : 3CA50008;
+6f6 : 78010001;
+6f7 : B8C52800;
+6f8 : 41A60004;
+6f9 : 34030002;
+6fa : B9C02000;
+6fb : 344B0022;
+6fc : 38216BD0;
+6fd : B9801000;
+6fe : F8003120;
+6ff : 41A30006;
+700 : 41A40007;
+701 : 29A5000C;
+702 : 3C630008;
+703 : 78010001;
+704 : B8831800;
+705 : 29A40008;
+706 : B8A03000;
+707 : B9801000;
+708 : 38216BFC;
+709 : F8003115;
+70a : 78020001;
+70b : B9800800;
+70c : 38426C2C;
+70d : 35A30014;
+70e : FBFFFF5B;
+70f : 41A3001E;
+710 : 41A4001F;
+711 : 41A50021;
+712 : 3C630008;
+713 : 78010001;
+714 : B8831800;
+715 : 41A40020;
+716 : 38216C34;
+717 : B9801000;
+718 : F8003106;
+719 : 3401000C;
+71a : 55C100E9;
+71b : 78010001;
+71c : 3DCE0002;
+71d : 38219008;
+71e : B42E0800;
+71f : 28210000;
+720 : C0200000;
+721 : 78010001;
+722 : B9801000;
+723 : 38216C60;
+724 : F80030FA;
+725 : 41620002;
+726 : 41610003;
+727 : 41640004;
+728 : 3C420018;
+729 : 3C210010;
+72a : 3C840008;
+72b : B8220800;
+72c : B8812000;
+72d : 41620006;
+72e : 41610007;
+72f : 41650008;
+730 : 3C420018;
+731 : 3C210010;
+732 : 3CA50008;
+733 : B8220800;
+734 : B8A12800;
+735 : 78030001;
+736 : 78010001;
+737 : 41670005;
+738 : 41660009;
+739 : 38216C78;
+73a : B9801000;
+73b : 38636C88;
+73c : E000001C;
+73d : 78010001;
+73e : B9801000;
+73f : 38216C94;
+740 : F80030DE;
+741 : 41620002;
+742 : 41610003;
+743 : 41640004;
+744 : 3C420018;
+745 : 3C210010;
+746 : 3C840008;
+747 : B8220800;
+748 : B8812000;
+749 : 41620006;
+74a : 41610007;
+74b : 41650008;
+74c : 3C420018;
+74d : 3C210010;
+74e : 3CA50008;
+74f : B8220800;
+750 : 41670005;
+751 : 41660009;
+752 : B8A12800;
+753 : 78030001;
+754 : 78010001;
+755 : 38216C78;
+756 : B9801000;
+757 : 38636CB0;
+758 : B8E42000;
+759 : B8C52800;
+75a : F80030C4;
+75b : E00000A6;
+75c : 78010001;
+75d : B9801000;
+75e : 38216CC0;
+75f : F80030BF;
+760 : 41620002;
+761 : 41610003;
+762 : 41640004;
+763 : 3C420018;
+764 : 3C210010;
+765 : 3C840008;
+766 : B8220800;
+767 : B8812000;
+768 : 41620006;
+769 : 41610007;
+76a : 41650008;
+76b : 3C420018;
+76c : 3C210010;
+76d : 3CA50008;
+76e : B8220800;
+76f : B8A12800;
+770 : 78030001;
+771 : 78010001;
+772 : 41670005;
+773 : 41660009;
+774 : 38216C78;
+775 : B9801000;
+776 : 38636CDC;
+777 : E3FFFFE1;
+778 : 78010001;
+779 : B9801000;
+77a : 38216CEC;
+77b : F80030A3;
+77c : 41620002;
+77d : 41610003;
+77e : 41640004;
+77f : 3C420018;
+780 : 3C210010;
+781 : 3C840008;
+782 : B8220800;
+783 : B8812000;
+784 : 41620006;
+785 : 41610007;
+786 : 41650008;
+787 : 3C420018;
+788 : 3C210010;
+789 : 41670005;
+78a : 41660009;
+78b : 3CA50008;
+78c : B8220800;
+78d : 780E0001;
+78e : 39CE6D08;
+78f : B8A12800;
+790 : 78010001;
+791 : B9801000;
+792 : B9C01800;
+793 : B8E42000;
+794 : B8C52800;
+795 : 38216C78;
+796 : F8003088;
+797 : 3563000A;
+798 : B9800800;
+799 : B9C01000;
+79a : FBFFFECF;
+79b : 340B0036;
+79c : E0000098;
+79d : 78010001;
+79e : B9801000;
+79f : 38216D1C;
+7a0 : F800307E;
+7a1 : 41620002;
+7a2 : 41610003;
+7a3 : 41640004;
+7a4 : 3C420018;
+7a5 : 3C210010;
+7a6 : 3C840008;
+7a7 : B8220800;
+7a8 : B8812000;
+7a9 : 41620006;
+7aa : 41610007;
+7ab : 41650008;
+7ac : 3C420018;
+7ad : 3C210010;
+7ae : 41670005;
+7af : 41660009;
+7b0 : 3CA50008;
+7b1 : B8220800;
+7b2 : B8A12800;
+7b3 : 78030001;
+7b4 : 78010001;
+7b5 : B8E42000;
+7b6 : B8C52800;
+7b7 : B9801000;
+7b8 : 38636D38;
+7b9 : 38216C78;
+7ba : F8003064;
+7bb : 4162000E;
+7bc : 4161000F;
+7bd : 41640010;
+7be : 3C420018;
+7bf : 3C210010;
+7c0 : 3C840008;
+7c1 : B8220800;
+7c2 : B8812000;
+7c3 : 41620012;
+7c4 : 41610013;
+7c5 : 41650014;
+7c6 : 3C420018;
+7c7 : 3C210010;
+7c8 : 3CA50008;
+7c9 : B8220800;
+7ca : B8A12800;
+7cb : 41620016;
+7cc : 41610017;
+7cd : 41660018;
+7ce : 3C420018;
+7cf : 3C210010;
+7d0 : 41690011;
+7d1 : 41680015;
+7d2 : 41670019;
+7d3 : 3CC60008;
+7d4 : B8220800;
+7d5 : B8C13000;
+7d6 : 78030001;
+7d7 : 78010001;
+7d8 : B9242000;
+7d9 : B9052800;
+7da : B8E63000;
+7db : B9801000;
+7dc : 38636D64;
+7dd : 38216D50;
+7de : F8003040;
+7df : 4163000D;
+7e0 : 4164001A;
+7e1 : 78010001;
+7e2 : B9801000;
+7e3 : 38216D88;
+7e4 : F800303A;
+7e5 : 41610020;
+7e6 : 4164001B;
+7e7 : 4165001C;
+7e8 : 4166001D;
+7e9 : 4167001E;
+7ea : 4168001F;
+7eb : 5B810004;
+7ec : 41610021;
+7ed : 78030001;
+7ee : B9801000;
+7ef : 5B810008;
+7f0 : 41610022;
+7f1 : 38636DE0;
+7f2 : 340B0040;
+7f3 : 5B81000C;
+7f4 : 78010001;
+7f5 : 38216DB0;
+7f6 : F8003028;
+7f7 : E000003D;
+7f8 : 78010001;
+7f9 : B9801000;
+7fa : 38216E00;
+7fb : F8003023;
+7fc : 78020001;
+7fd : B9800800;
+7fe : 38426E1C;
+7ff : B9601800;
+800 : FBFFFE69;
+801 : 340B002C;
+802 : E0000032;
+803 : 340B0022;
+804 : E0000030;
+805 : 55F70009;
+806 : 78010001;
+807 : B9801000;
+808 : BA001800;
+809 : B9602000;
+80a : B9E02800;
+80b : 38216E38;
+80c : F8003012;
+80d : E0000034;
+80e : B5AB7000;
+80f : 41D60002;
+810 : 41C10003;
+811 : 41C30000;
+812 : 3ED60008;
+813 : 41C40001;
+814 : B836B000;
+815 : 41C10008;
+816 : 41C50004;
+817 : 41C60005;
+818 : 41C70006;
+819 : 41C80007;
+81a : 5B810004;
+81b : 41C10009;
+81c : 3C630008;
+81d : 36D10004;
+81e : 5B810008;
+81f : B8831800;
+820 : BAA00800;
+821 : B9801000;
+822 : BA202000;
+823 : F8002FFB;
+824 : 4DF10007;
+825 : BA400800;
+826 : B9801000;
+827 : BA201800;
+828 : B9E02000;
+829 : F8002FF5;
+82a : E0000008;
+82b : B9800800;
+82c : BA801000;
+82d : BA601800;
+82e : 35C4000A;
+82f : 36C5FFFA;
+830 : FBFFFE54;
+831 : BA207800;
+832 : B56F5800;
+833 : E000000B;
+834 : 78150001;
+835 : 78140001;
+836 : 78130001;
+837 : 78120001;
+838 : 34180002;
+839 : 34170009;
+83a : 3AB56E5C;
+83b : 3A946EC8;
+83c : 3A736ED0;
+83d : 3A526E9C;
+83e : 4D700003;
+83f : CA0B7800;
+840 : 49F8FFC5;
+841 : 78020001;
+842 : 78030001;
+843 : B9800800;
+844 : 38426EDC;
+845 : 38636EE4;
+846 : B9A02000;
+847 : BA002800;
+848 : FBFFFE3C;
+849 : 2B9D0010;
+84a : 2B8B0048;
+84b : 2B8C0044;
+84c : 2B8D0040;
+84d : 2B8E003C;
+84e : 2B8F0038;
+84f : 2B900034;
+850 : 2B910030;
+851 : 2B92002C;
+852 : 2B930028;
+853 : 2B940024;
+854 : 2B950020;
+855 : 2B96001C;
+856 : 2B970018;
+857 : 2B980014;
+858 : 379C0048;
+859 : C3A00000;
+85a : 379CFFF0;
+85b : 5B8B000C;
+85c : 5B8C0008;
+85d : 5B9D0004;
+85e : B8206000;
+85f : B8405800;
+860 : 44800005;
+861 : B8801000;
+862 : 5B830010;
+863 : FBFFFDE1;
+864 : 2B830010;
+865 : B9800800;
+866 : B9601000;
+867 : FBFFFE6E;
+868 : 34010000;
+869 : 2B9D0004;
+86a : 2B8B000C;
+86b : 2B8C0008;
+86c : 379C0010;
+86d : C3A00000;
+86e : 379CFFE8;
+86f : 5B8B0018;
+870 : 5B8C0014;
+871 : 5B8D0010;
+872 : 5B8E000C;
+873 : 5B8F0008;
+874 : 5B9D0004;
+875 : 282D0000;
+876 : B8207800;
+877 : 282E0004;
+878 : B8406000;
+879 : 340B0000;
+87a : 34010000;
+87b : 34040000;
+87c : 544D0006;
+87d : B9A00800;
+87e : F8004EF7;
+87f : 882C1000;
+880 : B9602000;
+881 : C9A26800;
+882 : 34030000;
+883 : 34020001;
+884 : E000000B;
+885 : 3D850001;
+886 : 3D6B0001;
+887 : F5856000;
+888 : 3C630001;
+889 : B58B5800;
+88a : B8A06000;
+88b : 3C450001;
+88c : F4451000;
+88d : B4431800;
+88e : B8A01000;
+88f : 1565001F;
+890 : C8AC3000;
+891 : F4C53000;
+892 : C8AB2800;
+893 : C8A62800;
+894 : 00A5001F;
+895 : 34060001;
+896 : 55AB0004;
+897 : 5DAB0002;
+898 : 55CC0002;
+899 : 34060000;
+89a : A0A63000;
+89b : 5CC0FFEA;
+89c : 556D000D;
+89d : 5D6D0002;
+89e : 558E000B;
+89f : C9CC2800;
+8a0 : F4AE7000;
+8a1 : C9AB6800;
+8a2 : C9AE6800;
+8a3 : B8A07000;
+8a4 : B4822800;
+8a5 : F4852000;
+8a6 : B4230800;
+8a7 : B4810800;
+8a8 : B8A02000;
+8a9 : 3C65001F;
+8aa : 00420001;
+8ab : 00630001;
+8ac : B8A21000;
+8ad : B8622800;
+8ae : 44A00006;
+8af : 3D65001F;
+8b0 : 018C0001;
+8b1 : 016B0001;
+8b2 : B8AC6000;
+8b3 : E3FFFFE9;
+8b4 : 59E10000;
+8b5 : B9C00800;
+8b6 : 59E40004;
+8b7 : 2B9D0004;
+8b8 : 2B8B0018;
+8b9 : 2B8C0014;
+8ba : 2B8D0010;
+8bb : 2B8E000C;
+8bc : 2B8F0008;
+8bd : 379C0018;
+8be : C3A00000;
+8bf : 379CFFF8;
+8c0 : 5B8B0008;
+8c1 : 5B9D0004;
+8c2 : B8405800;
+8c3 : F8003547;
+8c4 : B42B0800;
+8c5 : 2B9D0004;
+8c6 : 2B8B0008;
+8c7 : 379C0008;
+8c8 : C3A00000;
+8c9 : 379CFFF8;
+8ca : 5B8B0008;
+8cb : 5B9D0004;
+8cc : 78040001;
+8cd : B8405800;
+8ce : 78050001;
+8cf : 34020006;
+8d0 : 34030001;
+8d1 : 38846F94;
+8d2 : 38A5903C;
+8d3 : B9603000;
+8d4 : FBFFFA05;
+8d5 : 45600005;
+8d6 : 1562001F;
+8d7 : 34010002;
+8d8 : B9601800;
+8d9 : F80039F8;
+8da : 34010000;
+8db : 2B9D0004;
+8dc : 2B8B0008;
+8dd : 379C0008;
+8de : C3A00000;
+8df : 379CFFF4;
+8e0 : 5B8B000C;
+8e1 : 5B8C0008;
+8e2 : 5B9D0004;
+8e3 : B8206000;
+8e4 : B8405800;
+8e5 : B8603000;
+8e6 : 44600008;
+8e7 : 78040001;
+8e8 : 78050001;
+8e9 : 34020006;
+8ea : 34030001;
+8eb : 38846FA0;
+8ec : 38A5905C;
+8ed : FBFFF9EC;
+8ee : B9800800;
+8ef : B9601000;
+8f0 : FBFFFFD9;
+8f1 : 2B9D0004;
+8f2 : 2B8B000C;
+8f3 : 2B8C0008;
+8f4 : 379C000C;
+8f5 : C3A00000;
+8f6 : 379CFFF0;
+8f7 : 5B8B0010;
+8f8 : 5B8C000C;
+8f9 : 5B8D0008;
+8fa : 5B9D0004;
+8fb : B8206800;
+8fc : 44400015;
+8fd : 28410008;
+8fe : 2C4B000C;
+8ff : 284C0004;
+900 : 3C210010;
+901 : 34040003;
+902 : B82B5800;
+903 : 28410000;
+904 : B9601800;
+905 : B9801000;
+906 : F80039E9;
+907 : 78040001;
+908 : 78050001;
+909 : B9A00800;
+90a : 34020006;
+90b : 34030001;
+90c : 38846FCC;
+90d : 38A59070;
+90e : B9803000;
+90f : B9603800;
+910 : FBFFF9C9;
+911 : 34010000;
+912 : 2B9D0004;
+913 : 2B8B0010;
+914 : 2B8C000C;
+915 : 2B8D0008;
+916 : 379C0010;
+917 : C3A00000;
+918 : 379CFFE8;
+919 : 5B8B000C;
+91a : 5B8C0008;
+91b : 5B9D0004;
+91c : B8405800;
+91d : B8206000;
+91e : 37820018;
+91f : 37810010;
+920 : F80039EF;
+921 : 2B870018;
+922 : 2B810010;
+923 : 2B860014;
+924 : 00E20010;
+925 : 59610000;
+926 : 59620008;
+927 : 3CE10010;
+928 : 78020001;
+929 : 3842B0CC;
+92a : 5961000C;
+92b : 28410000;
+92c : 59660004;
+92d : 20210001;
+92e : 5C200009;
+92f : 78040001;
+930 : 78050001;
+931 : B9800800;
+932 : 34020006;
+933 : 34030002;
+934 : 38846FCC;
+935 : 38A59080;
+936 : FBFFF9A3;
+937 : 34010000;
+938 : 2B9D0004;
+939 : 2B8B000C;
+93a : 2B8C0008;
+93b : 379C0018;
+93c : C3A00000;
+93d : 379CFFB0;
+93e : 5B8B001C;
+93f : 5B8C0018;
+940 : 5B8D0014;
+941 : 5B8E0010;
+942 : 5B8F000C;
+943 : 5B900008;
+944 : 5B9D0004;
+945 : 0884000C;
+946 : B8205800;
+947 : 342D0110;
+948 : 78010001;
+949 : 38219768;
+94a : B4240800;
+94b : B8407800;
+94c : 40220007;
+94d : 78050001;
+94e : 378C0040;
+94f : 08420006;
+950 : 38A590A0;
+951 : 29700068;
+952 : 340188F7;
+953 : B4451000;
+954 : B8607000;
+955 : 0F81004C;
+956 : 34030006;
+957 : B9800800;
+958 : F8004E7E;
+959 : B9801000;
+95a : BA000800;
+95b : B9E01800;
+95c : B9C02000;
+95d : 37850020;
+95e : F80024F0;
+95f : B8206000;
+960 : 45A0001F;
+961 : 2B810028;
+962 : 2B820024;
+963 : 2B830020;
+964 : 1425001F;
+965 : 00240010;
+966 : 3CA50010;
+967 : 3C210010;
+968 : B8852800;
+969 : 2B84003C;
+96a : 59630110;
+96b : 59620114;
+96c : 59650118;
+96d : 5961011C;
+96e : 5C800004;
+96f : 78048F00;
+970 : B8641800;
+971 : 59630110;
+972 : 3CA90010;
+973 : 00280010;
+974 : 29670114;
+975 : 78040001;
+976 : 78050001;
+977 : B9600800;
+978 : 34020005;
+979 : 34030002;
+97a : 38846FDC;
+97b : 38A59090;
+97c : B9803000;
+97d : B9284000;
+97e : FBFFF95B;
+97f : 78010001;
+980 : 3821B0D8;
+981 : 28220000;
+982 : 34010004;
+983 : 5C41000D;
+984 : 2964011C;
+985 : 29650118;
+986 : 29620114;
+987 : 00830010;
+988 : 2084FFFF;
+989 : 088403E8;
+98a : 3CA50010;
+98b : 78010001;
+98c : 00840010;
+98d : 38216FFC;
+98e : B8A31800;
+98f : F8002E8F;
+990 : 4C0C0010;
+991 : 78010001;
+992 : 3821B0CC;
+993 : 28220000;
+994 : 2961001C;
+995 : B8410800;
+996 : 00210014;
+997 : 34020001;
+998 : 2021000F;
+999 : 50410007;
+99a : 78010001;
+99b : 3821700C;
+99c : B9E01000;
+99d : B9C01800;
+99e : B9A02000;
+99f : FBFFFEBB;
+9a0 : B9800800;
+9a1 : 2B9D0004;
+9a2 : 2B8B001C;
+9a3 : 2B8C0018;
+9a4 : 2B8D0014;
+9a5 : 2B8E0010;
+9a6 : 2B8F000C;
+9a7 : 2B900008;
+9a8 : 379C0050;
+9a9 : C3A00000;
+9aa : 379CFF90;
+9ab : 5B8B001C;
+9ac : 5B8C0018;
+9ad : 5B8D0014;
+9ae : 5B8E0010;
+9af : 5B8F000C;
+9b0 : 5B900008;
+9b1 : 5B9D0004;
+9b2 : B8206000;
+9b3 : 28210068;
+9b4 : B8602800;
+9b5 : B8407000;
+9b6 : B8805800;
+9b7 : 37820040;
+9b8 : B8A02000;
+9b9 : B9C01800;
+9ba : 37850020;
+9bb : F8002420;
+9bc : B8206800;
+9bd : 4C010065;
+9be : 45600021;
+9bf : 2B81002C;
+9c0 : 2B8F0024;
+9c1 : 2B900020;
+9c2 : 3C210010;
+9c3 : 340203E8;
+9c4 : 59700000;
+9c5 : 596F0004;
+9c6 : F8004D62;
+9c7 : 2B850028;
+9c8 : B8202000;
+9c9 : 1422001F;
+9ca : 14A1001F;
+9cb : 00A30010;
+9cc : 3CA50010;
+9cd : 3C210010;
+9ce : B4852800;
+9cf : B8610800;
+9d0 : F4852000;
+9d1 : B4410800;
+9d2 : B4810800;
+9d3 : 59610008;
+9d4 : 2B81003C;
+9d5 : 5965000C;
+9d6 : 5C200009;
+9d7 : 78010001;
+9d8 : 3821B0D8;
+9d9 : 28220000;
+9da : 34010004;
+9db : 44410004;
+9dc : 78018F00;
+9dd : BA018000;
+9de : 59700000;
+9df : 78010001;
+9e0 : 3821B0CC;
+9e1 : 2982001C;
+9e2 : 28210000;
+9e3 : B8220800;
+9e4 : 00210014;
+9e5 : 34020001;
+9e6 : 2021000F;
+9e7 : 50410007;
+9e8 : 78010001;
+9e9 : 38217014;
+9ea : B9C01000;
+9eb : B9A01800;
+9ec : B9602000;
+9ed : FBFFFE6D;
+9ee : 78010001;
+9ef : 3821B0D8;
+9f0 : 28220000;
+9f1 : 34010004;
+9f2 : 5C410030;
+9f3 : 29640000;
+9f4 : 29630004;
+9f5 : 29620008;
+9f6 : 2961000C;
+9f7 : 5B840064;
+9f8 : 5B830068;
+9f9 : 5B82006C;
+9fa : 5B810070;
+9fb : F8002FCD;
+9fc : 3C210010;
+9fd : 340203E8;
+9fe : 5B800058;
+9ff : 5B800054;
+a00 : F8004D28;
+a01 : 1422001F;
+a02 : 378B0064;
+a03 : 5B810060;
+a04 : 5B82005C;
+a05 : B9600800;
+a06 : 37820054;
+a07 : F8001255;
+a08 : 2B840070;
+a09 : 2B85006C;
+a0a : 2B820068;
+a0b : 00830010;
+a0c : 2084FFFF;
+a0d : 088403E8;
+a0e : 3CA50010;
+a0f : 78010001;
+a10 : 00840010;
+a11 : B8A31800;
+a12 : 3821701C;
+a13 : F8002E0B;
+a14 : B9600800;
+a15 : 35820110;
+a16 : F8001246;
+a17 : 2B830070;
+a18 : 2B84006C;
+a19 : 78010001;
+a1a : 00620010;
+a1b : 2063FFFF;
+a1c : 086303E8;
+a1d : 3C840010;
+a1e : 3821702C;
+a1f : 00630010;
+a20 : B8821000;
+a21 : F8002DFD;
+a22 : B9A00800;
+a23 : 2B9D0004;
+a24 : 2B8B001C;
+a25 : 2B8C0018;
+a26 : 2B8D0014;
+a27 : 2B8E0010;
+a28 : 2B8F000C;
+a29 : 2B900008;
+a2a : 379C0070;
+a2b : C3A00000;
+a2c : 379CFFFC;
+a2d : 5B9D0004;
+a2e : 28210068;
+a2f : F8002352;
+a30 : 34010000;
+a31 : 2B9D0004;
+a32 : 379C0004;
+a33 : C3A00000;
+a34 : 379CFFD4;
+a35 : 5B8B0010;
+a36 : 5B8C000C;
+a37 : 5B8D0008;
+a38 : 5B9D0004;
+a39 : B8205800;
+a3a : 28210068;
+a3b : 44200002;
+a3c : F8002345;
+a3d : B9600800;
+a3e : F8000CAF;
+a3f : 378C0014;
+a40 : 340188F7;
+a41 : 78020001;
+a42 : 0F810020;
+a43 : 38428F88;
+a44 : B9800800;
+a45 : 34030006;
+a46 : F8004D90;
+a47 : 78010001;
+a48 : B9801000;
+a49 : 38219D74;
+a4a : 34030001;
+a4b : 34040000;
+a4c : F80022EC;
+a4d : B8206000;
+a4e : 4420000E;
+a4f : 378D0028;
+a50 : B9A01000;
+a51 : F80022D6;
+a52 : B9A01000;
+a53 : 34030006;
+a54 : 35610070;
+a55 : F8004D81;
+a56 : 3561005C;
+a57 : 596C0068;
+a58 : B9A01000;
+a59 : 34030006;
+a5a : F8004D7C;
+a5b : 596C0054;
+a5c : 34010000;
+a5d : 2B9D0004;
+a5e : 2B8B0010;
+a5f : 2B8C000C;
+a60 : 2B8D0008;
+a61 : 379C002C;
+a62 : C3A00000;
+a63 : 379CFFF4;
+a64 : 5B8B000C;
+a65 : 5B8C0008;
+a66 : 5B9D0004;
+a67 : 78040001;
+a68 : 78050001;
+a69 : B8606000;
+a6a : 34020002;
+a6b : 34030002;
+a6c : 38847148;
+a6d : 38A59054;
+a6e : B8205800;
+a6f : FBFFF86A;
+a70 : 2982002C;
+a71 : 29610358;
+a72 : 20430003;
+a73 : 28210010;
+a74 : 7C640000;
+a75 : 58240038;
+a76 : 20440008;
+a77 : 20420004;
+a78 : 7C840000;
+a79 : 7C420000;
+a7a : 30230035;
+a7b : 58220044;
+a7c : 58240040;
+a7d : 29610030;
+a7e : 28220010;
+a7f : 29610358;
+a80 : 2C210008;
+a81 : 0C410028;
+a82 : 2B9D0004;
+a83 : 2B8B000C;
+a84 : 2B8C0008;
+a85 : 379C000C;
+a86 : C3A00000;
+a87 : 379CFFF8;
+a88 : 5B8B0008;
+a89 : 5B9D0004;
+a8a : 28220358;
+a8b : 78040001;
+a8c : 78050001;
+a8d : 284B0010;
+a8e : 34030002;
+a8f : 34020002;
+a90 : 38847148;
+a91 : 38A59154;
+a92 : FBFFF847;
+a93 : 34010000;
+a94 : 31600005;
+a95 : 2B9D0004;
+a96 : 2B8B0008;
+a97 : 379C0008;
+a98 : C3A00000;
+a99 : 379CFFF8;
+a9a : 5B8B0008;
+a9b : 5B9D0004;
+a9c : 78040001;
+a9d : 78050001;
+a9e : B8205800;
+a9f : 34020002;
+aa0 : 34010000;
+aa1 : 34030002;
+aa2 : 38847148;
+aa3 : 38A59164;
+aa4 : FBFFF835;
+aa5 : 29610024;
+aa6 : 44200006;
+aa7 : 34020000;
+aa8 : 34030001;
+aa9 : 34040002;
+aaa : 34060003;
+aab : E000001F;
+aac : 29610000;
+aad : 29620040;
+aae : 58220018;
+aaf : E000001D;
+ab0 : 29650000;
+ab1 : 08410418;
+ab2 : B4A10800;
+ab3 : 29650040;
+ab4 : 58250018;
+ab5 : 28250408;
+ab6 : 5CA30010;
+ab7 : 28250024;
+ab8 : 44A30004;
+ab9 : 28210358;
+aba : 5CA40009;
+abb : E0000005;
+abc : 28210358;
+abd : 28210010;
+abe : 30230004;
+abf : E000000A;
+ac0 : 28210010;
+ac1 : 30240004;
+ac2 : E0000007;
+ac3 : 28210010;
+ac4 : 30260004;
+ac5 : E0000004;
+ac6 : 28210358;
+ac7 : 28210010;
+ac8 : 30200004;
+ac9 : 34420001;
+aca : 29610024;
+acb : 4822FFE5;
+acc : 34010000;
+acd : 2B9D0004;
+ace : 2B8B0008;
+acf : 379C0008;
+ad0 : C3A00000;
+ad1 : 379CFFF4;
+ad2 : 5B8B000C;
+ad3 : 5B8C0008;
+ad4 : 5B9D0004;
+ad5 : 28220358;
+ad6 : 78040001;
+ad7 : 78050001;
+ad8 : 284B0010;
+ad9 : 34030002;
+ada : 34020002;
+adb : 38847148;
+adc : 38A5916C;
+add : B8206000;
+ade : FBFFF7FB;
+adf : 41630004;
+ae0 : 3401012C;
+ae1 : 59610028;
+ae2 : 34020001;
+ae3 : 34010BB8;
+ae4 : 59610030;
+ae5 : 59600008;
+ae6 : 31600035;
+ae7 : 59600040;
+ae8 : 59620014;
+ae9 : 20630003;
+aea : 29610000;
+aeb : 5C620004;
+aec : 28230034;
+aed : B9800800;
+aee : E0000004;
+aef : 28230034;
+af0 : 34020000;
+af1 : B9800800;
+af2 : D8600000;
+af3 : 34010000;
+af4 : 2B9D0004;
+af5 : 2B8B000C;
+af6 : 2B8C0008;
+af7 : 379C000C;
+af8 : C3A00000;
+af9 : 379CFFF0;
+afa : 5B8B0010;
+afb : 5B8C000C;
+afc : 5B8D0008;
+afd : 5B9D0004;
+afe : 78040001;
+aff : 78050001;
+b00 : 2C2D0002;
+b01 : B8205800;
+b02 : B8406000;
+b03 : 34010000;
+b04 : 34020002;
+b05 : 34030002;
+b06 : 38847148;
+b07 : 38A590AC;
+b08 : FBFFF7D1;
+b09 : 34010040;
+b0a : 4C2D0004;
+b0b : B9600800;
+b0c : B9801000;
+b0d : F80003ED;
+b0e : 2B9D0004;
+b0f : 2B8B0010;
+b10 : 2B8C000C;
+b11 : 2B8D0008;
+b12 : 379C0010;
+b13 : C3A00000;
+b14 : 379CFFF8;
+b15 : 5B8B0008;
+b16 : 5B9D0004;
+b17 : 78040001;
+b18 : 78050001;
+b19 : 34020002;
+b1a : 34030002;
+b1b : 38847148;
+b1c : 38A590C0;
+b1d : B8205800;
+b1e : FBFFF7BB;
+b1f : 29610358;
+b20 : 34020040;
+b21 : 28210010;
+b22 : 40210004;
+b23 : 44200006;
+b24 : 34030002;
+b25 : 44230004;
+b26 : B9600800;
+b27 : F8000391;
+b28 : 3402004E;
+b29 : B8400800;
+b2a : 2B9D0004;
+b2b : 2B8B0008;
+b2c : 379C0008;
+b2d : C3A00000;
+b2e : 379CFFF4;
+b2f : 5B8B000C;
+b30 : 5B8C0008;
+b31 : 5B9D0004;
+b32 : 78040001;
+b33 : 78050001;
+b34 : 34030002;
+b35 : B8406000;
+b36 : 38847148;
+b37 : 34020002;
+b38 : 38A590E8;
+b39 : B8205800;
+b3a : FBFFF79F;
+b3b : 29610358;
+b3c : 34030000;
+b3d : 28210010;
+b3e : 28210008;
+b3f : 44200006;
+b40 : 356300A8;
+b41 : B9600800;
+b42 : B9801000;
+b43 : F80005B1;
+b44 : 34030001;
+b45 : B8600800;
+b46 : 2B9D0004;
+b47 : 2B8B000C;
+b48 : 2B8C0008;
+b49 : 379C000C;
+b4a : C3A00000;
+b4b : 379CFFF8;
+b4c : 5B8B0008;
+b4d : 5B9D0004;
+b4e : 78040001;
+b4f : 78050001;
+b50 : 34020002;
+b51 : 34030002;
+b52 : 38847148;
+b53 : 38A590FC;
+b54 : B8205800;
+b55 : FBFFF784;
+b56 : 29610358;
+b57 : 28220010;
+b58 : 40410004;
+b59 : 20210002;
+b5a : 4420000B;
+b5b : 40410035;
+b5c : 20210001;
+b5d : 44200008;
+b5e : 28410008;
+b5f : 44200003;
+b60 : 28410040;
+b61 : 5C200004;
+b62 : B9600800;
+b63 : 34020009;
+b64 : F80000A5;
+b65 : 34010000;
+b66 : 2B9D0004;
+b67 : 2B8B0008;
+b68 : 379C0008;
+b69 : C3A00000;
+b6a : 379CFFF8;
+b6b : 5B8B0008;
+b6c : 5B9D0004;
+b6d : 78040001;
+b6e : 78050001;
+b6f : 34020002;
+b70 : 34030002;
+b71 : 38847148;
+b72 : 38A59110;
+b73 : B8205800;
+b74 : FBFFF765;
+b75 : B9600800;
+b76 : 34020004;
+b77 : FBFFF840;
+b78 : 44200003;
+b79 : B9600800;
+b7a : F80004F4;
+b7b : 29610358;
+b7c : 28220010;
+b7d : 34010000;
+b7e : 28430064;
+b7f : 44600004;
+b80 : 34010001;
+b81 : 59610004;
+b82 : 58400064;
+b83 : 2B9D0004;
+b84 : 2B8B0008;
+b85 : 379C0008;
+b86 : C3A00000;
+b87 : 379CFFF0;
+b88 : 5B8B0010;
+b89 : 5B8C000C;
+b8a : 5B8D0008;
+b8b : 5B9D0004;
+b8c : 28220030;
+b8d : 78040001;
+b8e : 78050001;
+b8f : 284D0010;
+b90 : 28220358;
+b91 : 34030002;
+b92 : 38847148;
+b93 : 284C0010;
+b94 : 38A59124;
+b95 : 34020002;
+b96 : B8205800;
+b97 : FBFFF742;
+b98 : 29810008;
+b99 : 5C20001E;
+b9a : 116200A8;
+b9b : 34010080;
+b9c : 204200C0;
+b9d : 44410004;
+b9e : 116200B8;
+b9f : 204200C0;
+ba0 : 5C410008;
+ba1 : 78040001;
+ba2 : B9600800;
+ba3 : 34020004;
+ba4 : 34030001;
+ba5 : 38847154;
+ba6 : FBFFF733;
+ba7 : E0000014;
+ba8 : B9600800;
+ba9 : F80012D8;
+baa : 29A2000C;
+bab : 29A10008;
+bac : B8220800;
+bad : 29820000;
+bae : 44200005;
+baf : 28430034;
+bb0 : B9600800;
+bb1 : 34020000;
+bb2 : E0000004;
+bb3 : 28430034;
+bb4 : B9600800;
+bb5 : 34020001;
+bb6 : D8600000;
+bb7 : B9600800;
+bb8 : F8000553;
+bb9 : B9600800;
+bba : F800069D;
+bbb : 34010000;
+bbc : 2B9D0004;
+bbd : 2B8B0010;
+bbe : 2B8C000C;
+bbf : 2B8D0008;
+bc0 : 379C0010;
+bc1 : C3A00000;
+bc2 : 379CFFF8;
+bc3 : 5B8B0008;
+bc4 : 5B9D0004;
+bc5 : 78040001;
+bc6 : 78050001;
+bc7 : 34020002;
+bc8 : 34030002;
+bc9 : 38847148;
+bca : 38A59134;
+bcb : B8205800;
+bcc : FBFFF70D;
+bcd : B9600800;
+bce : F80004C5;
+bcf : 34010000;
+bd0 : 2B9D0004;
+bd1 : 2B8B0008;
+bd2 : 379C0008;
+bd3 : C3A00000;
+bd4 : 379CFFE0;
+bd5 : 5B8B0010;
+bd6 : 5B8C000C;
+bd7 : 5B8D0008;
+bd8 : 5B9D0004;
+bd9 : B8406800;
+bda : 3402000F;
+bdb : B8205800;
+bdc : B8806000;
+bdd : 44820025;
+bde : 78040001;
+bdf : 78050001;
+be0 : 34020002;
+be1 : 34030002;
+be2 : 38847148;
+be3 : 38A59144;
+be4 : FBFFF6F5;
+be5 : 34010001;
+be6 : 45810004;
+be7 : 3401000C;
+be8 : 5D81001A;
+be9 : E0000006;
+bea : B9600800;
+beb : 35620100;
+bec : F8000FC1;
+bed : 340C000F;
+bee : E0000014;
+bef : 29610358;
+bf0 : B9A01000;
+bf1 : 37830014;
+bf2 : 28240010;
+bf3 : B9600800;
+bf4 : 340C000F;
+bf5 : 3484003C;
+bf6 : F800039A;
+bf7 : 29610358;
+bf8 : 34021000;
+bf9 : 28210010;
+bfa : 2C23003C;
+bfb : 5C620007;
+bfc : 40210004;
+bfd : 20210001;
+bfe : 44200004;
+bff : B9600800;
+c00 : 34020006;
+c01 : F8000008;
+c02 : B9800800;
+c03 : 2B9D0004;
+c04 : 2B8B0010;
+c05 : 2B8C000C;
+c06 : 2B8D0008;
+c07 : 379C0020;
+c08 : C3A00000;
+c09 : 28230358;
+c0a : 34040006;
+c0b : 28630010;
+c0c : 44440004;
+c0d : 34040009;
+c0e : 5C440008;
+c0f : E0000004;
+c10 : 34020001;
+c11 : 30620005;
+c12 : E0000007;
+c13 : 34020002;
+c14 : 30620005;
+c15 : E0000006;
+c16 : 40630005;
+c17 : 34020001;
+c18 : 5C620003;
+c19 : 34020066;
+c1a : E0000002;
+c1b : 34020064;
+c1c : 58220004;
+c1d : C3A00000;
+c1e : 379CFFF4;
+c1f : 5B8B000C;
+c20 : 5B8C0008;
+c21 : 5B9D0004;
+c22 : B8205800;
+c23 : 28210358;
+c24 : 78050001;
+c25 : 38A5708C;
+c26 : 282C0010;
+c27 : 34010001;
+c28 : 41820005;
+c29 : 5C410003;
+c2a : 78050001;
+c2b : 38A5706C;
+c2c : 78040001;
+c2d : B9600800;
+c2e : 34020002;
+c2f : 34030001;
+c30 : 388471A4;
+c31 : FBFFF6A8;
+c32 : 41820005;
+c33 : 34010001;
+c34 : 5C410003;
+c35 : 34010006;
+c36 : E0000002;
+c37 : 34010009;
+c38 : 59610004;
+c39 : 31800005;
+c3a : 2B9D0004;
+c3b : 2B8B000C;
+c3c : 2B8C0008;
+c3d : 379C000C;
+c3e : C3A00000;
+c3f : 379CFFFC;
+c40 : 5B9D0004;
+c41 : 28220358;
+c42 : 28420010;
+c43 : 4043002C;
+c44 : 4460000A;
+c45 : 3463FFFF;
+c46 : 78040001;
+c47 : 3043002C;
+c48 : 388471C8;
+c49 : 34020002;
+c4a : 34030001;
+c4b : FBFFF68E;
+c4c : 34010001;
+c4d : E0000003;
+c4e : FBFFFFD0;
+c4f : 34010000;
+c50 : 2B9D0004;
+c51 : 379C0004;
+c52 : C3A00000;
+c53 : 379CFFDC;
+c54 : 5B8B0014;
+c55 : 5B8C0010;
+c56 : 5B8D000C;
+c57 : 5B8E0008;
+c58 : 5B9D0004;
+c59 : B8407000;
+c5a : 28220358;
+c5b : B8205800;
+c5c : 284D0010;
+c5d : 2822000C;
+c5e : 44400004;
+c5f : 34010003;
+c60 : 31A1002C;
+c61 : E0000008;
+c62 : 34020006;
+c63 : FBFFF754;
+c64 : 340C0000;
+c65 : 442C000C;
+c66 : B9600800;
+c67 : FBFFFFD8;
+c68 : 4420001D;
+c69 : B9600800;
+c6a : 34020006;
+c6b : 340303E8;
+c6c : FBFFF6CB;
+c6d : B9600800;
+c6e : 34021000;
+c6f : F8000391;
+c70 : B8206000;
+c71 : 416203A1;
+c72 : 3401000C;
+c73 : 5C41000B;
+c74 : B9600800;
+c75 : B9C01000;
+c76 : 37830018;
+c77 : 35A4003C;
+c78 : F8000318;
+c79 : 2DA2003C;
+c7a : 34011001;
+c7b : 5C410003;
+c7c : 34010065;
+c7d : 59610004;
+c7e : 5D800003;
+c7f : B9600800;
+c80 : F8000A94;
+c81 : 29610358;
+c82 : 28210010;
+c83 : 28210028;
+c84 : 59610008;
+c85 : B9800800;
+c86 : 2B9D0004;
+c87 : 2B8B0014;
+c88 : 2B8C0010;
+c89 : 2B8D000C;
+c8a : 2B8E0008;
+c8b : 379C0024;
+c8c : C3A00000;
+c8d : 379CFFDC;
+c8e : 5B8B0014;
+c8f : 5B8C0010;
+c90 : 5B8D000C;
+c91 : 5B8E0008;
+c92 : 5B9D0004;
+c93 : B8407000;
+c94 : 28220358;
+c95 : B8205800;
+c96 : 284C0010;
+c97 : 2822000C;
+c98 : 44400004;
+c99 : 34010003;
+c9a : 3181002C;
+c9b : E0000008;
+c9c : 34020006;
+c9d : FBFFF71A;
+c9e : 340D0000;
+c9f : 442D000C;
+ca0 : B9600800;
+ca1 : FBFFFF9E;
+ca2 : 44200018;
+ca3 : 34021001;
+ca4 : B9600800;
+ca5 : F800035B;
+ca6 : B8206800;
+ca7 : 34020006;
+ca8 : B9600800;
+ca9 : 34033A98;
+caa : FBFFF68D;
+cab : 416203A1;
+cac : 3401000C;
+cad : 5C41000B;
+cae : B9600800;
+caf : B9C01000;
+cb0 : 37830018;
+cb1 : 3584003C;
+cb2 : F80002DE;
+cb3 : 2D82003C;
+cb4 : 34011002;
+cb5 : 5C410003;
+cb6 : 34010068;
+cb7 : 59610004;
+cb8 : 29810028;
+cb9 : 59610008;
+cba : B9A00800;
+cbb : 2B9D0004;
+cbc : 2B8B0014;
+cbd : 2B8C0010;
+cbe : 2B8D000C;
+cbf : 2B8E0008;
+cc0 : 379C0024;
+cc1 : C3A00000;
+cc2 : 379CFFF0;
+cc3 : 5B8B0010;
+cc4 : 5B8C000C;
+cc5 : 5B8D0008;
+cc6 : 5B9D0004;
+cc7 : 28220358;
+cc8 : 282D000C;
+cc9 : B8205800;
+cca : 284C0010;
+ccb : 45A00004;
+ccc : 34010003;
+ccd : 3181002C;
+cce : E000000B;
+ccf : 34020006;
+cd0 : FBFFF6E7;
+cd1 : 442D0010;
+cd2 : 29810000;
+cd3 : 28220008;
+cd4 : B9600800;
+cd5 : D8400000;
+cd6 : B9600800;
+cd7 : FBFFFF68;
+cd8 : 4420001C;
+cd9 : 29810000;
+cda : 28220000;
+cdb : B9600800;
+cdc : D8400000;
+cdd : B9600800;
+cde : 34020006;
+cdf : 34033A98;
+ce0 : FBFFF657;
+ce1 : 29810028;
+ce2 : 34020000;
+ce3 : 59610008;
+ce4 : 29810000;
+ce5 : 28230004;
+ce6 : B9600800;
+ce7 : D8600000;
+ce8 : 34020001;
+ce9 : 5C220008;
+cea : 34010067;
+ceb : 59610004;
+cec : 29810000;
+ced : 28220008;
+cee : B9600800;
+cef : D8400000;
+cf0 : E0000004;
+cf1 : 34020002;
+cf2 : 5C220002;
+cf3 : 59600008;
+cf4 : 34010000;
+cf5 : 2B9D0004;
+cf6 : 2B8B0010;
+cf7 : 2B8C000C;
+cf8 : 2B8D0008;
+cf9 : 379C0010;
+cfa : C3A00000;
+cfb : 379CFFDC;
+cfc : 5B8B0014;
+cfd : 5B8C0010;
+cfe : 5B8D000C;
+cff : 5B8E0008;
+d00 : 5B9D0004;
+d01 : B8407000;
+d02 : 28220358;
+d03 : B8205800;
+d04 : 284C0010;
+d05 : 2822000C;
+d06 : 44400004;
+d07 : 34010003;
+d08 : 3181002C;
+d09 : E0000008;
+d0a : 34020006;
+d0b : FBFFF6AC;
+d0c : 340D0000;
+d0d : 442D000C;
+d0e : B9600800;
+d0f : FBFFFF30;
+d10 : 44200018;
+d11 : 29830028;
+d12 : B9600800;
+d13 : 34020006;
+d14 : FBFFF623;
+d15 : B9600800;
+d16 : 34021002;
+d17 : F80002E9;
+d18 : B8206800;
+d19 : 416203A1;
+d1a : 3401000C;
+d1b : 5C41000B;
+d1c : B9600800;
+d1d : B9C01000;
+d1e : 37830018;
+d1f : 3584003C;
+d20 : F8000270;
+d21 : 2D82003C;
+d22 : 34011003;
+d23 : 5C410003;
+d24 : 3401006A;
+d25 : 59610004;
+d26 : 29810028;
+d27 : 59610008;
+d28 : B9A00800;
+d29 : 2B9D0004;
+d2a : 2B8B0014;
+d2b : 2B8C0010;
+d2c : 2B8D000C;
+d2d : 2B8E0008;
+d2e : 379C0024;
+d2f : C3A00000;
+d30 : 379CFFEC;
+d31 : 5B8B0010;
+d32 : 5B8C000C;
+d33 : 5B8D0008;
+d34 : 5B9D0004;
+d35 : 28220358;
+d36 : 282D000C;
+d37 : B8206000;
+d38 : 284B0010;
+d39 : 45A00004;
+d3a : 34010003;
+d3b : 3161002C;
+d3c : E0000007;
+d3d : 34020006;
+d3e : FBFFF679;
+d3f : 442D0011;
+d40 : B9800800;
+d41 : FBFFFEFE;
+d42 : 4420009C;
+d43 : 29630030;
+d44 : B9800800;
+d45 : 34020006;
+d46 : FBFFF5F1;
+d47 : B9800800;
+d48 : 34021003;
+d49 : F80002B7;
+d4a : 3401006C;
+d4b : 31610010;
+d4c : 29610014;
+d4d : 44200003;
+d4e : 3401006E;
+d4f : 31610010;
+d50 : 41660010;
+d51 : 78040001;
+d52 : 78050001;
+d53 : B9800800;
+d54 : 34020002;
+d55 : 34030001;
+d56 : 388471DC;
+d57 : 38A59198;
+d58 : 34C6FF94;
+d59 : FBFFF580;
+d5a : 41620010;
+d5b : 34010008;
+d5c : 3442FF94;
+d5d : 204200FF;
+d5e : 5441007E;
+d5f : 78010001;
+d60 : 3C420002;
+d61 : 38219174;
+d62 : B4220800;
+d63 : 28210000;
+d64 : C0200000;
+d65 : 29610000;
+d66 : 34020000;
+d67 : 34030000;
+d68 : 2825002C;
+d69 : 34040000;
+d6a : B9800800;
+d6b : D8A00000;
+d6c : 5C200070;
+d6d : 3401006D;
+d6e : 31610010;
+d6f : 29610000;
+d70 : 34020001;
+d71 : 28230024;
+d72 : B9800800;
+d73 : D8600000;
+d74 : 5C200068;
+d75 : 3401006E;
+d76 : 31610010;
+d77 : 29610000;
+d78 : 34020001;
+d79 : 37830014;
+d7a : 28240028;
+d7b : B9800800;
+d7c : D8800000;
+d7d : 34020001;
+d7e : 5C22005E;
+d7f : 2B810014;
+d80 : 78040001;
+d81 : 34020002;
+d82 : 00250010;
+d83 : 3C210010;
+d84 : 5965001C;
+d85 : 59610018;
+d86 : 34030001;
+d87 : B9800800;
+d88 : 388471F0;
+d89 : FBFFF550;
+d8a : 29650018;
+d8b : 78040001;
+d8c : B9800800;
+d8d : 34020002;
+d8e : 34030001;
+d8f : 38847214;
+d90 : FBFFF549;
+d91 : 3401006F;
+d92 : 31610010;
+d93 : 29610000;
+d94 : 34020001;
+d95 : 28230020;
+d96 : B9800800;
+d97 : D8600000;
+d98 : 5C200044;
+d99 : 34010070;
+d9a : 31610010;
+d9b : 29610000;
+d9c : 28220030;
+d9d : B9800800;
+d9e : D8400000;
+d9f : 5C20003D;
+da0 : 34010071;
+da1 : 31610010;
+da2 : 29610000;
+da3 : 34020002;
+da4 : 28230024;
+da5 : B9800800;
+da6 : D8600000;
+da7 : 5C200035;
+da8 : 34010072;
+da9 : 31610010;
+daa : 29610000;
+dab : 34020002;
+dac : 37830014;
+dad : 28240028;
+dae : B9800800;
+daf : D8800000;
+db0 : 34020001;
+db1 : 5C22002B;
+db2 : 2B850014;
+db3 : 78040001;
+db4 : B9800800;
+db5 : 34020002;
+db6 : 34030001;
+db7 : 38847238;
+db8 : FBFFF521;
+db9 : 2B810014;
+dba : 78040001;
+dbb : 34020002;
+dbc : 00250010;
+dbd : 3C210010;
+dbe : 59650024;
+dbf : 59610020;
+dc0 : 34030001;
+dc1 : B9800800;
+dc2 : 38847250;
+dc3 : FBFFF516;
+dc4 : 29650020;
+dc5 : 78040001;
+dc6 : B9800800;
+dc7 : 34020002;
+dc8 : 34030001;
+dc9 : 38847274;
+dca : FBFFF50F;
+dcb : 34010073;
+dcc : 31610010;
+dcd : 29610000;
+dce : 34020002;
+dcf : 28230020;
+dd0 : B9800800;
+dd1 : D8600000;
+dd2 : 5C20000A;
+dd3 : 34010074;
+dd4 : 31610010;
+dd5 : B9800800;
+dd6 : 34021004;
+dd7 : F8000229;
+dd8 : 34010069;
+dd9 : 59810004;
+dda : 34010001;
+ddb : 59610014;
+ddc : 29610028;
+ddd : 59810008;
+dde : 34010000;
+ddf : 2B9D0004;
+de0 : 2B8B0010;
+de1 : 2B8C000C;
+de2 : 2B8D0008;
+de3 : 379C0014;
+de4 : C3A00000;
+de5 : 379CFFE0;
+de6 : 5B8B0010;
+de7 : 5B8C000C;
+de8 : 5B8D0008;
+de9 : 5B9D0004;
+dea : B8406800;
+deb : 28220358;
+dec : B8205800;
+ded : 284C0010;
+dee : 2822000C;
+def : 44400004;
+df0 : 29830028;
+df1 : 34020006;
+df2 : FBFFF545;
+df3 : B9600800;
+df4 : 34020006;
+df5 : FBFFF5C2;
+df6 : 44200004;
+df7 : B9600800;
+df8 : FBFFFE26;
+df9 : E000001A;
+dfa : 416203A1;
+dfb : 3401000C;
+dfc : 5C410015;
+dfd : B9600800;
+dfe : B9A01000;
+dff : 37830014;
+e00 : 3584003C;
+e01 : F800018F;
+e02 : 2D81003C;
+e03 : 34021003;
+e04 : 5C220006;
+e05 : 41820005;
+e06 : 34010001;
+e07 : 5C41000A;
+e08 : 3401006A;
+e09 : E0000007;
+e0a : 34021005;
+e0b : 5C220006;
+e0c : 41820005;
+e0d : 34010002;
+e0e : 5C410003;
+e0f : 3401006B;
+e10 : 59610004;
+e11 : 29810028;
+e12 : 59610008;
+e13 : 34010000;
+e14 : 2B9D0004;
+e15 : 2B8B0010;
+e16 : 2B8C000C;
+e17 : 2B8D0008;
+e18 : 379C0020;
+e19 : C3A00000;
+e1a : 379CFFD8;
+e1b : 5B8B0018;
+e1c : 5B8C0014;
+e1d : 5B8D0010;
+e1e : 5B8E000C;
+e1f : 5B8F0008;
+e20 : 5B9D0004;
+e21 : B8407800;
+e22 : 28220358;
+e23 : 282E000C;
+e24 : B8206000;
+e25 : 284B0010;
+e26 : 2D6D0048;
+e27 : 7DAD0000;
+e28 : 45C00004;
+e29 : 34010003;
+e2a : 3161002C;
+e2b : E000000C;
+e2c : 34020006;
+e2d : FBFFF58A;
+e2e : 442E0018;
+e2f : 45A00005;
+e30 : 29610000;
+e31 : 28230030;
+e32 : B9800800;
+e33 : D8600000;
+e34 : B9800800;
+e35 : FBFFFE0A;
+e36 : 44200029;
+e37 : 45A00008;
+e38 : 29610000;
+e39 : 34020000;
+e3a : 34030000;
+e3b : 2825002C;
+e3c : 34040000;
+e3d : B9800800;
+e3e : D8A00000;
+e3f : 2961004C;
+e40 : 340203E8;
+e41 : F8004934;
+e42 : B8201800;
+e43 : 34020006;
+e44 : B9800800;
+e45 : FBFFF4F2;
+e46 : 418203A1;
+e47 : 3401000C;
+e48 : 5C410015;
+e49 : B9800800;
+e4a : B9E01000;
+e4b : 3783001C;
+e4c : 3564003C;
+e4d : F8000143;
+e4e : 2D62003C;
+e4f : 34011004;
+e50 : 5C41000D;
+e51 : 45A00005;
+e52 : 29610000;
+e53 : 28220030;
+e54 : B9800800;
+e55 : D8400000;
+e56 : 41620005;
+e57 : 34010001;
+e58 : 5C410003;
+e59 : 3401006B;
+e5a : E0000002;
+e5b : 34010068;
+e5c : 59810004;
+e5d : 29610028;
+e5e : 59810008;
+e5f : 34010000;
+e60 : 2B9D0004;
+e61 : 2B8B0018;
+e62 : 2B8C0014;
+e63 : 2B8D0010;
+e64 : 2B8E000C;
+e65 : 2B8F0008;
+e66 : 379C0028;
+e67 : C3A00000;
+e68 : 379CFFF0;
+e69 : 5B8B0010;
+e6a : 5B8C000C;
+e6b : 5B8D0008;
+e6c : 5B9D0004;
+e6d : 28220358;
+e6e : 340D0001;
+e6f : B8205800;
+e70 : 284C0010;
+e71 : 29820000;
+e72 : 598D0008;
+e73 : 2842000C;
+e74 : D8400000;
+e75 : 41820005;
+e76 : 34010000;
+e77 : 5C4D0004;
+e78 : B9600800;
+e79 : 34021005;
+e7a : F8000186;
+e7b : 34020001;
+e7c : 59820040;
+e7d : 340DFFFF;
+e7e : 5C20001B;
+e7f : 41820005;
+e80 : 34010002;
+e81 : 5C410003;
+e82 : 34010009;
+e83 : E0000002;
+e84 : 34010006;
+e85 : 59610004;
+e86 : 78010001;
+e87 : 3821B0D8;
+e88 : 28220000;
+e89 : 34010004;
+e8a : 340D0000;
+e8b : 5C41000E;
+e8c : 34010075;
+e8d : 59610004;
+e8e : 78010001;
+e8f : 38217298;
+e90 : F800298E;
+e91 : F8002B37;
+e92 : B8201000;
+e93 : 78010001;
+e94 : 382172C8;
+e95 : F8002989;
+e96 : 78010001;
+e97 : 38217304;
+e98 : F8002986;
+e99 : B9A00800;
+e9a : 2B9D0004;
+e9b : 2B8B0010;
+e9c : 2B8C000C;
+e9d : 2B8D0008;
+e9e : 379C0010;
+e9f : C3A00000;
+ea0 : 00430018;
+ea1 : 30220003;
+ea2 : 30230000;
+ea3 : 00430010;
+ea4 : 30230001;
+ea5 : 00430008;
+ea6 : 30230002;
+ea7 : C3A00000;
+ea8 : 40220000;
+ea9 : 40230003;
+eaa : 3C420018;
+eab : B8621000;
+eac : 40230001;
+ead : 40210002;
+eae : 3C630010;
+eaf : 3C210008;
+eb0 : B8431000;
+eb1 : B8410800;
+eb2 : C3A00000;
+eb3 : 40220000;
+eb4 : 40210001;
+eb5 : 3C420008;
+eb6 : B8410800;
+eb7 : C3A00000;
+eb8 : 379CFFF0;
+eb9 : 5B8B0010;
+eba : 5B8C000C;
+ebb : 5B8D0008;
+ebc : 5B9D0004;
+ebd : 28230030;
+ebe : 28220358;
+ebf : B8205800;
+ec0 : 2863000C;
+ec1 : 28420010;
+ec2 : 282C004C;
+ec3 : 28640010;
+ec4 : 340300BA;
+ec5 : 48830017;
+ec6 : 28420000;
+ec7 : 28430004;
+ec8 : 34020001;
+ec9 : D8600000;
+eca : 7C210001;
+ecb : C8016800;
+ecc : B9600800;
+ecd : F80009B9;
+ece : 29610030;
+ecf : 21AD002E;
+ed0 : 35AD0006;
+ed1 : 2821000C;
+ed2 : 28210010;
+ed3 : 45A10009;
+ed4 : 78010001;
+ed5 : 38217338;
+ed6 : B9A01000;
+ed7 : F8002947;
+ed8 : 29610030;
+ed9 : 2821000C;
+eda : 582D0010;
+edb : 318D0030;
+edc : 3401004E;
+edd : 0D810002;
+ede : 34010003;
+edf : 0D810040;
+ee0 : 3401000A;
+ee1 : 0D810042;
+ee2 : 34010800;
+ee3 : 0D810044;
+ee4 : 340130DE;
+ee5 : 0D810046;
+ee6 : 3401AD01;
+ee7 : 0D810048;
+ee8 : 34012000;
+ee9 : 0D81004A;
+eea : 29610358;
+eeb : 28220010;
+eec : 28430014;
+eed : 40410004;
+eee : 44600002;
+eef : 38210004;
+ef0 : 28420008;
+ef1 : 44400002;
+ef2 : 38210008;
+ef3 : 0D81004C;
+ef4 : 2B9D0004;
+ef5 : 2B8B0010;
+ef6 : 2B8C000C;
+ef7 : 2B8D0008;
+ef8 : 379C0010;
+ef9 : C3A00000;
+efa : 379CFFF4;
+efb : 5B8B000C;
+efc : 5B8C0008;
+efd : 5B9D0004;
+efe : B8205800;
+eff : 34210040;
+f00 : B8406000;
+f01 : FBFFFFB2;
+f02 : 2D650044;
+f03 : 2D640046;
+f04 : 78070001;
+f05 : 3CA50008;
+f06 : 00860008;
+f07 : 38E78ED8;
+f08 : B8A62800;
+f09 : 28E60000;
+f0a : 64210003;
+f0b : 2D630048;
+f0c : E4A62800;
+f0d : 2D62004A;
+f0e : A0250800;
+f0f : 44200010;
+f10 : 3C840008;
+f11 : 00610008;
+f12 : 2084FFFF;
+f13 : B8812000;
+f14 : 206300FF;
+f15 : 3801DEAD;
+f16 : E4812000;
+f17 : 64630001;
+f18 : A0831800;
+f19 : 44600006;
+f1a : 34012000;
+f1b : 5C410004;
+f1c : 3561004C;
+f1d : FBFFFF96;
+f1e : 5981002C;
+f1f : 2B9D0004;
+f20 : 2B8B000C;
+f21 : 2B8C0008;
+f22 : 379C000C;
+f23 : C3A00000;
+f24 : 379CFFF0;
+f25 : 5B8B0010;
+f26 : 5B8C000C;
+f27 : 5B8D0008;
+f28 : 5B9D0004;
+f29 : B8206000;
+f2a : 28210358;
+f2b : 204DFFFF;
+f2c : 28210010;
+f2d : 40250005;
+f2e : 44A00003;
+f2f : 34012000;
+f30 : 5DA1000A;
+f31 : 78040001;
+f32 : B9800800;
+f33 : 34020005;
+f34 : 34030001;
+f35 : 38847350;
+f36 : B9A03000;
+f37 : FBFFF3A2;
+f38 : 34010000;
+f39 : E0000051;
+f3a : 298B004C;
+f3b : 34030008;
+f3c : 41610000;
+f3d : 202100F0;
+f3e : 3821000C;
+f3f : 31610000;
+f40 : 34010005;
+f41 : 31610020;
+f42 : 29820030;
+f43 : 35610022;
+f44 : 28420014;
+f45 : F8004891;
+f46 : 29810030;
+f47 : 28210014;
+f48 : 2C210008;
+f49 : 0D6D0036;
+f4a : 00220008;
+f4b : 3161002B;
+f4c : 34010003;
+f4d : 0D61002C;
+f4e : 34010800;
+f4f : 0D610030;
+f50 : 340130DE;
+f51 : 0D610032;
+f52 : 3401AD01;
+f53 : 0D610034;
+f54 : 3162002A;
+f55 : 34011003;
+f56 : 45A10005;
+f57 : 34011004;
+f58 : 34020008;
+f59 : 5DA1002D;
+f5a : E0000017;
+f5b : 29810358;
+f5c : 35620038;
+f5d : 28210010;
+f5e : 28230014;
+f5f : 44600005;
+f60 : 40210034;
+f61 : 31610038;
+f62 : 30400001;
+f63 : E0000007;
+f64 : 40210034;
+f65 : 3C210008;
+f66 : 38210001;
+f67 : 00230008;
+f68 : 31630038;
+f69 : 30410001;
+f6a : 29810358;
+f6b : 28220010;
+f6c : 3561003A;
+f6d : 28420030;
+f6e : FBFFFF32;
+f6f : 34020014;
+f70 : E0000016;
+f71 : 29810358;
+f72 : 28220010;
+f73 : 35610038;
+f74 : 2842001C;
+f75 : FBFFFF2B;
+f76 : 29810358;
+f77 : 28220010;
+f78 : 3561003C;
+f79 : 28420018;
+f7a : FBFFFF26;
+f7b : 29810358;
+f7c : 28220010;
+f7d : 35610040;
+f7e : 28420024;
+f7f : FBFFFF21;
+f80 : 29810358;
+f81 : 28220010;
+f82 : 35610044;
+f83 : 28420020;
+f84 : FBFFFF1C;
+f85 : 34020018;
+f86 : 34410030;
+f87 : 31600002;
+f88 : 31610003;
+f89 : 0D62002E;
+f8a : 2B9D0004;
+f8b : 2B8B0010;
+f8c : 2B8C000C;
+f8d : 2B8D0008;
+f8e : 379C0010;
+f8f : C3A00000;
+f90 : 379CFFEC;
+f91 : 5B8B0014;
+f92 : 5B8C0010;
+f93 : 5B8D000C;
+f94 : 5B8E0008;
+f95 : 5B9D0004;
+f96 : B8405800;
+f97 : B8607000;
+f98 : 34420022;
+f99 : B8206000;
+f9a : B8600800;
+f9b : 34030008;
+f9c : B8806800;
+f9d : F8004839;
+f9e : 3561002A;
+f9f : FBFFFF14;
+fa0 : 0DC10008;
+fa1 : 3561002C;
+fa2 : FBFFFF11;
+fa3 : B8202800;
+fa4 : 34040003;
+fa5 : 2D630030;
+fa6 : 2D620032;
+fa7 : 2D610034;
+fa8 : 44A40007;
+fa9 : 78040001;
+faa : B9800800;
+fab : 34020005;
+fac : 34030001;
+fad : 38847384;
+fae : E0000022;
+faf : 3C650008;
+fb0 : 78040001;
+fb1 : 00430008;
+fb2 : 38848ED8;
+fb3 : B8A32800;
+fb4 : 28830000;
+fb5 : 44A30007;
+fb6 : 78040001;
+fb7 : B9800800;
+fb8 : 34020005;
+fb9 : 34030001;
+fba : 388473D4;
+fbb : E0000015;
+fbc : 3C450008;
+fbd : 00230008;
+fbe : 20A5FFFF;
+fbf : B8A32800;
+fc0 : 3802DEAD;
+fc1 : 44A20007;
+fc2 : 78040001;
+fc3 : B9800800;
+fc4 : 34020005;
+fc5 : 34030001;
+fc6 : 3884740C;
+fc7 : E0000009;
+fc8 : 202500FF;
+fc9 : 34010001;
+fca : 44A10008;
+fcb : 78040001;
+fcc : B9800800;
+fcd : 34020005;
+fce : 34030001;
+fcf : 38847450;
+fd0 : FBFFF309;
+fd1 : E0000028;
+fd2 : 2D610036;
+fd3 : 45A00002;
+fd4 : 0DA10000;
+fd5 : 34021003;
+fd6 : 44220004;
+fd7 : 34021004;
+fd8 : 5C220021;
+fd9 : E0000012;
+fda : 29810358;
+fdb : 356E0038;
+fdc : 282D0010;
+fdd : B9C00800;
+fde : FBFFFED5;
+fdf : 202100FF;
+fe0 : 0DA10048;
+fe1 : B9C00800;
+fe2 : FBFFFED1;
+fe3 : 00210008;
+fe4 : 31A10050;
+fe5 : 3561003A;
+fe6 : FBFFFEC2;
+fe7 : 29820358;
+fe8 : 28420010;
+fe9 : 5841004C;
+fea : E000000F;
+feb : 29810358;
+fec : 282C0010;
+fed : 35610038;
+fee : FBFFFEBA;
+fef : 59810058;
+ff0 : 3561003C;
+ff1 : FBFFFEB7;
+ff2 : 59810054;
+ff3 : 35610040;
+ff4 : FBFFFEB4;
+ff5 : 59810060;
+ff6 : 35610044;
+ff7 : FBFFFEB1;
+ff8 : 5981005C;
+ff9 : 2B9D0004;
+ffa : 2B8B0014;
+ffb : 2B8C0010;
+ffc : 2B8D000C;
+ffd : 2B8E0008;
+ffe : 379C0014;
+fff : C3A00000;
+1000 : 379CFFF8;
+1001 : 5B8B0008;
+1002 : 5B9D0004;
+1003 : 2042FFFF;
+1004 : B8205800;
+1005 : FBFFFF1F;
+1006 : B8201000;
+1007 : 34030000;
+1008 : B9600800;
+1009 : F80007B5;
+100a : 2B9D0004;
+100b : 2B8B0008;
+100c : 379C0008;
+100d : C3A00000;
+100e : 379CFFE8;
+100f : 5B8B0008;
+1010 : 5B9D0004;
+1011 : 20C8FFFF;
+1012 : 090803E8;
+1013 : B8405000;
+1014 : 38028000;
+1015 : 3CAB0010;
+1016 : 00C70010;
+1017 : B5024000;
+1018 : B8804800;
+1019 : 5B840010;
+101a : 01080010;
+101b : 78040001;
+101c : 5B83000C;
+101d : 5B850014;
+101e : 5B860018;
+101f : 34020004;
+1020 : 34030002;
+1021 : 38847494;
+1022 : B9402800;
+1023 : B9203000;
+1024 : B9673800;
+1025 : FBFFF2B4;
+1026 : 2B9D0004;
+1027 : 2B8B0008;
+1028 : 379C0018;
+1029 : C3A00000;
+102a : 379CFFD8;
+102b : 5B8B0018;
+102c : 5B8C0014;
+102d : 5B8D0010;
+102e : 5B8E000C;
+102f : 5B8F0008;
+1030 : 5B9D0004;
+1031 : 142B001F;
+1032 : B8202800;
+1033 : 396B0001;
+1034 : 156D001F;
+1035 : B8402000;
+1036 : B8606000;
+1037 : B9A00800;
+1038 : B8A01800;
+1039 : B9601000;
+103a : F80046A9;
+103b : 5B81001C;
+103c : 5B820020;
+103d : 3781001C;
+103e : 340203E8;
+103f : FBFFF82F;
+1040 : B8207800;
+1041 : 2B81001C;
+1042 : 78030001;
+1043 : 38638EC8;
+1044 : 5B810024;
+1045 : 2B810020;
+1046 : 28620000;
+1047 : 5B810028;
+1048 : 37810024;
+1049 : FBFFF825;
+104a : B8207000;
+104b : 3DE10010;
+104c : 340203E8;
+104d : F80046DB;
+104e : 3DC20010;
+104f : B8202000;
+1050 : 1423001F;
+1051 : B4821000;
+1052 : 01C10010;
+1053 : F4822000;
+1054 : B4610800;
+1055 : B4810800;
+1056 : B9A01800;
+1057 : B9602000;
+1058 : F800468B;
+1059 : 2B830024;
+105a : 2B840028;
+105b : 59810008;
+105c : 5982000C;
+105d : B9A00800;
+105e : B9601000;
+105f : F8004684;
+1060 : 59810000;
+1061 : 59820004;
+1062 : 2B9D0004;
+1063 : 2B8B0018;
+1064 : 2B8C0014;
+1065 : 2B8D0010;
+1066 : 2B8E000C;
+1067 : 2B8F0008;
+1068 : 379C0028;
+1069 : C3A00000;
+106a : 78020001;
+106b : 38429F40;
+106c : 58410000;
+106d : C3A00000;
+106e : 379CFFE8;
+106f : 5B8B0018;
+1070 : 5B8C0014;
+1071 : 5B8D0010;
+1072 : 5B8E000C;
+1073 : 5B8F0008;
+1074 : 5B9D0004;
+1075 : 282B0018;
+1076 : B8206800;
+1077 : 45600014;
+1078 : 780C0001;
+1079 : 398CC2A8;
+107a : 29810000;
+107b : 34020001;
+107c : F80012DB;
+107d : 34020000;
+107e : 31A00020;
+107f : B9600800;
+1080 : 34030120;
+1081 : 296F0090;
+1082 : 296E0094;
+1083 : 296D0098;
+1084 : F80047D0;
+1085 : 29810000;
+1086 : 596F0090;
+1087 : 596E0094;
+1088 : 596D0098;
+1089 : 34020000;
+108a : F80012CD;
+108b : 2B9D0004;
+108c : 2B8B0018;
+108d : 2B8C0014;
+108e : 2B8D0010;
+108f : 2B8E000C;
+1090 : 2B8F0008;
+1091 : 379C0018;
+1092 : C3A00000;
+1093 : 379CFFF0;
+1094 : 5B8B0010;
+1095 : 5B8C000C;
+1096 : 5B8D0008;
+1097 : 5B9D0004;
+1098 : B8206800;
+1099 : 28210358;
+109a : 34020001;
+109b : 29AB0018;
+109c : 282C0010;
+109d : 78010001;
+109e : 3821C2A8;
+109f : 28210000;
+10a0 : F80012B7;
+10a1 : 29810000;
+10a2 : 34020000;
+10a3 : 34030000;
+10a4 : 2826001C;
+10a5 : 35640028;
+10a6 : B9A00800;
+10a7 : 3565002C;
+10a8 : D8C00000;
+10a9 : 3402FFFF;
+10aa : 5C200043;
+10ab : 29810000;
+10ac : 34020000;
+10ad : 28230034;
+10ae : B9A00800;
+10af : D8600000;
+10b0 : 35A203F8;
+10b1 : B9600800;
+10b2 : 34030010;
+10b3 : F80048D3;
+10b4 : 29610048;
+10b5 : 2962002C;
+10b6 : 4C410003;
+10b7 : F800469E;
+10b8 : 59610048;
+10b9 : 29810000;
+10ba : 28220018;
+10bb : 29610048;
+10bc : D8400000;
+10bd : 29810058;
+10be : 2D820054;
+10bf : 59600118;
+10c0 : 3C210010;
+10c1 : 59600014;
+10c2 : B8220800;
+10c3 : 59610018;
+10c4 : 29810060;
+10c5 : 2D82005C;
+10c6 : 3C210010;
+10c7 : B8220800;
+10c8 : 5961001C;
+10c9 : 2981001C;
+10ca : 2D820018;
+10cb : 3C210010;
+10cc : B8220800;
+10cd : 59610020;
+10ce : 29810024;
+10cf : 2D820020;
+10d0 : 3C210010;
+10d1 : B8220800;
+10d2 : 78020001;
+10d3 : 59610024;
+10d4 : 384274AC;
+10d5 : 35610060;
+10d6 : F8004810;
+10d7 : 29610010;
+10d8 : 356200A0;
+10d9 : 59600058;
+10da : 38210001;
+10db : 59610010;
+10dc : 29A10038;
+10dd : 28230000;
+10de : B9A00800;
+10df : D8600000;
+10e0 : 78010001;
+10e1 : 38219F40;
+10e2 : 28210000;
+10e3 : 34020000;
+10e4 : 5961005C;
+10e5 : 78010001;
+10e6 : 3821B5E8;
+10e7 : 58200000;
+10e8 : 78010001;
+10e9 : 3821C2A8;
+10ea : 28210000;
+10eb : F800126C;
+10ec : 34020000;
+10ed : B8400800;
+10ee : 2B9D0004;
+10ef : 2B8B0010;
+10f0 : 2B8C000C;
+10f1 : 2B8D0008;
+10f2 : 379C0010;
+10f3 : C3A00000;
+10f4 : 28450004;
+10f5 : 28440008;
+10f6 : 28460000;
+10f7 : 28210018;
+10f8 : 2842000C;
+10f9 : 582600B0;
+10fa : 582500B4;
+10fb : 582400B8;
+10fc : 582200BC;
+10fd : 28620008;
+10fe : 28650000;
+10ff : 28640004;
+1100 : 2863000C;
+1101 : 582200C8;
+1102 : 582500C0;
+1103 : 582400C4;
+1104 : 582300CC;
+1105 : 78010001;
+1106 : 3821B5E8;
+1107 : 34020001;
+1108 : 58220000;
+1109 : 34010000;
+110a : C3A00000;
+110b : 379CFFF0;
+110c : 5B8B0010;
+110d : 5B8C000C;
+110e : 5B8D0008;
+110f : 5B9D0004;
+1110 : 780D0001;
+1111 : 39ADC2A8;
+1112 : 282C0018;
+1113 : B8205800;
+1114 : 29A10000;
+1115 : 34020001;
+1116 : F8001241;
+1117 : 296100C4;
+1118 : 296400B8;
+1119 : 296300BC;
+111a : 296200C0;
+111b : 598100DC;
+111c : 296100D4;
+111d : 598400D0;
+111e : 598300D4;
+111f : 296400C8;
+1120 : 296300CC;
+1121 : 598200D8;
+1122 : 296200D0;
+1123 : 598100EC;
+1124 : 29A10000;
+1125 : 598200E8;
+1126 : 598400E0;
+1127 : 598300E4;
+1128 : 34020000;
+1129 : F800122E;
+112a : 34010000;
+112b : 2B9D0004;
+112c : 2B8B0010;
+112d : 2B8C000C;
+112e : 2B8D0008;
+112f : 379C0010;
+1130 : C3A00000;
+1131 : 379CFFC0;
+1132 : 5B8B0020;
+1133 : 5B8C001C;
+1134 : 5B8D0018;
+1135 : 5B8E0014;
+1136 : 5B8F0010;
+1137 : 5B90000C;
+1138 : 5B910008;
+1139 : 5B9D0004;
+113a : B8405800;
+113b : B8206000;
+113c : B8606800;
+113d : 28210358;
+113e : 116300B0;
+113f : 28220010;
+1140 : 206300C0;
+1141 : 34010080;
+1142 : 4461000A;
+1143 : 116400C0;
+1144 : 208400C0;
+1145 : 44810007;
+1146 : 116400D0;
+1147 : 208400C0;
+1148 : 44810004;
+1149 : 116400E0;
+114a : 208400C0;
+114b : 5C810019;
+114c : 78010001;
+114d : 3821B5EC;
+114e : 28220000;
+114f : 340C0000;
+1150 : 34420001;
+1151 : 58220000;
+1152 : 34010005;
+1153 : 4C2200F9;
+1154 : 116400C0;
+1155 : 116500D0;
+1156 : 116600E0;
+1157 : 208400C0;
+1158 : 20A500C0;
+1159 : 20C600C0;
+115a : 78010001;
+115b : 78020001;
+115c : 7C630080;
+115d : 7C840080;
+115e : 7CA50080;
+115f : 7CC60080;
+1160 : 384291D4;
+1161 : 382174BC;
+1162 : F80026BC;
+1163 : E00000E9;
+1164 : 28410000;
+1165 : 28230038;
+1166 : 44600004;
+1167 : B9600800;
+1168 : 34020000;
+1169 : D8600000;
+116a : 78010001;
+116b : 3821B5EC;
+116c : 58200000;
+116d : 29610058;
+116e : 356200A0;
+116f : 378E0034;
+1170 : 34210001;
+1171 : 59610058;
+1172 : 29810038;
+1173 : 357100C0;
+1174 : 28230000;
+1175 : B9800800;
+1176 : D8600000;
+1177 : 78010001;
+1178 : 3821B5E8;
+1179 : 296200E8;
+117a : 58200000;
+117b : 296100EC;
+117c : 296400E0;
+117d : 296300E4;
+117e : 5B82002C;
+117f : 5B810030;
+1180 : 356200B0;
+1181 : 37810024;
+1182 : 5B840024;
+1183 : 5B830028;
+1184 : F8000AD8;
+1185 : 296200D8;
+1186 : 296100DC;
+1187 : 296400D0;
+1188 : 296300D4;
+1189 : 5B82003C;
+118a : 5B810040;
+118b : BA201000;
+118c : B9C00800;
+118d : 5B840034;
+118e : 5B830038;
+118f : F8000ACD;
+1190 : 2B810024;
+1191 : B9C01000;
+1192 : 59610030;
+1193 : 2B810028;
+1194 : 59610034;
+1195 : 2B81002C;
+1196 : 59610038;
+1197 : 2B810030;
+1198 : 5961003C;
+1199 : 35610030;
+119a : F8000AC2;
+119b : 78010001;
+119c : 3821B0CC;
+119d : 28210000;
+119e : 2982001C;
+119f : B8220800;
+11a0 : 00210010;
+11a1 : 2021000F;
+11a2 : 44200029;
+11a3 : 296300B0;
+11a4 : 296400B4;
+11a5 : 296500B8;
+11a6 : 296600BC;
+11a7 : 78020001;
+11a8 : B9800800;
+11a9 : 384274EC;
+11aa : FBFFFE64;
+11ab : 296300C0;
+11ac : 296400C4;
+11ad : 296500C8;
+11ae : 296600CC;
+11af : 78020001;
+11b0 : B9800800;
+11b1 : 384274F8;
+11b2 : FBFFFE5C;
+11b3 : 296300D0;
+11b4 : 296400D4;
+11b5 : 296500D8;
+11b6 : 296600DC;
+11b7 : 78020001;
+11b8 : B9800800;
+11b9 : 38427504;
+11ba : FBFFFE54;
+11bb : 296300E0;
+11bc : 296400E4;
+11bd : 296500E8;
+11be : 296600EC;
+11bf : 78020001;
+11c0 : B9800800;
+11c1 : 38427510;
+11c2 : FBFFFE4C;
+11c3 : 29630030;
+11c4 : 29640034;
+11c5 : 29650038;
+11c6 : 2966003C;
+11c7 : 78020001;
+11c8 : B9800800;
+11c9 : 38427534;
+11ca : FBFFFE44;
+11cb : 29610038;
+11cc : 2962003C;
+11cd : 34030000;
+11ce : 340403E8;
+11cf : F8004514;
+11d0 : 380C8000;
+11d1 : B44C6000;
+11d2 : F44C1800;
+11d3 : 78050001;
+11d4 : B4610800;
+11d5 : 3C220010;
+11d6 : 018C0010;
+11d7 : 38A58EC8;
+11d8 : B84C6000;
+11d9 : 28A40000;
+11da : 142E0010;
+11db : 29620034;
+11dc : 29610030;
+11dd : 34030000;
+11de : F8004505;
+11df : B5823000;
+11e0 : F5866000;
+11e1 : B5C10800;
+11e2 : 29670018;
+11e3 : 29630020;
+11e4 : B5816000;
+11e5 : 2961001C;
+11e6 : 29640024;
+11e7 : B4E31800;
+11e8 : B4611800;
+11e9 : B4641800;
+11ea : 1465001F;
+11eb : 596C0040;
+11ec : 59660044;
+11ed : 48AC0004;
+11ee : 5CAC0005;
+11ef : 54660002;
+11f0 : E0000003;
+11f1 : 59650040;
+11f2 : 59630044;
+11f3 : 29620044;
+11f4 : 29610040;
+11f5 : 148F001F;
+11f6 : C8431800;
+11f7 : F4621000;
+11f8 : C8250800;
+11f9 : C8220800;
+11fa : B4872800;
+11fb : 14E2001F;
+11fc : F4852000;
+11fd : B5E27800;
+11fe : 006C0001;
+11ff : 3C22001F;
+1200 : B48F7800;
+1201 : 29640028;
+1202 : B84C6000;
+1203 : 00220001;
+1204 : B4AC6000;
+1205 : F4AC2800;
+1206 : B5E27800;
+1207 : B8601000;
+1208 : 1483001F;
+1209 : B4AF7800;
+120a : F80044D9;
+120b : 142E0008;
+120c : 1421001F;
+120d : B58E7000;
+120e : F58E6000;
+120f : B5E10800;
+1210 : B5817800;
+1211 : 296200B8;
+1212 : 296100BC;
+1213 : 296400B0;
+1214 : 296300B4;
+1215 : 37900034;
+1216 : 5B82003C;
+1217 : 5B810040;
+1218 : BA201000;
+1219 : BA000800;
+121a : 5B840034;
+121b : 378C0024;
+121c : 5B830038;
+121d : F8000A3F;
+121e : B9801800;
+121f : B9E00800;
+1220 : B9C01000;
+1221 : FBFFFE09;
+1222 : BA000800;
+1223 : B9801000;
+1224 : F8000A1E;
+1225 : 2B81003C;
+1226 : 2B910034;
+1227 : 2B900038;
+1228 : 2B820040;
+1229 : 34030000;
+122a : 59B10000;
+122b : 59B00004;
+122c : 59A10008;
+122d : 59A2000C;
+122e : 340403E8;
+122f : F80044B4;
+1230 : 380C8000;
+1231 : B44C6000;
+1232 : F44C1000;
+1233 : 78050001;
+1234 : B4411800;
+1235 : 38A58EC8;
+1236 : 3C610010;
+1237 : 018C0010;
+1238 : 28A40000;
+1239 : B82C6000;
+123a : 146D0010;
+123b : BA200800;
+123c : 34030000;
+123d : BA001000;
+123e : F80044A5;
+123f : B5821000;
+1240 : F5826000;
+1241 : B5A10800;
+1242 : 78030001;
+1243 : B5810800;
+1244 : 38639F40;
+1245 : 59610088;
+1246 : 28610000;
+1247 : 5962008C;
+1248 : 596F0050;
+1249 : 5961005C;
+124a : 596E0054;
+124b : 340C0001;
+124c : B9800800;
+124d : 2B9D0004;
+124e : 2B8B0020;
+124f : 2B8C001C;
+1250 : 2B8D0018;
+1251 : 2B8E0014;
+1252 : 2B8F0010;
+1253 : 2B90000C;
+1254 : 2B910008;
+1255 : 379C0040;
+1256 : C3A00000;
+1257 : 379CFFC8;
+1258 : 5B8B0028;
+1259 : 5B8C0024;
+125a : 5B8D0020;
+125b : 5B8E001C;
+125c : 5B8F0018;
+125d : 5B900014;
+125e : 5B910010;
+125f : 5B92000C;
+1260 : 5B930008;
+1261 : 5B9D0004;
+1262 : B8207000;
+1263 : 28210358;
+1264 : 29CB0018;
+1265 : 282D0010;
+1266 : 78010001;
+1267 : 3821B5E8;
+1268 : 28210000;
+1269 : 4420013C;
+126a : 78010001;
+126b : 3821C2A8;
+126c : 28210000;
+126d : 34020001;
+126e : F80010E9;
+126f : B9C00800;
+1270 : B9601000;
+1271 : 3783002C;
+1272 : 29720040;
+1273 : 29700044;
+1274 : FBFFFEBD;
+1275 : 44200125;
+1276 : 2961002C;
+1277 : 340203E8;
+1278 : F80044B0;
+1279 : B8209800;
+127a : 2B810038;
+127b : 2B8C0034;
+127c : 2B910030;
+127d : 202FFFFF;
+127e : 09EF03E8;
+127f : 3D8C0010;
+1280 : 00210010;
+1281 : 15EF0010;
+1282 : B9816000;
+1283 : 4C0C0008;
+1284 : B9800800;
+1285 : BA601000;
+1286 : F80044CF;
+1287 : B8201800;
+1288 : 082103E8;
+1289 : C9836000;
+128a : B5E17800;
+128b : BA201800;
+128c : 4D800006;
+128d : 78020001;
+128e : 38428EC8;
+128f : 28410000;
+1290 : 3623FFFF;
+1291 : B5816000;
+1292 : 69820000;
+1293 : 6461FFFF;
+1294 : A0410800;
+1295 : 44200006;
+1296 : 78020001;
+1297 : 38428EDC;
+1298 : 28410000;
+1299 : 34030000;
+129a : B5816000;
+129b : 64630000;
+129c : 0181001F;
+129d : A0611800;
+129e : 44600006;
+129f : C8139800;
+12a0 : 4A6C0004;
+12a1 : 098C03E8;
+12a2 : B5EC7800;
+12a3 : 340C0000;
+12a4 : 78040001;
+12a5 : B9C00800;
+12a6 : 34020004;
+12a7 : 34030002;
+12a8 : 38847578;
+12a9 : BA202800;
+12aa : B9803000;
+12ab : B9E03800;
+12ac : FBFFF02D;
+12ad : 29A10000;
+12ae : 34020000;
+12af : 28230004;
+12b0 : B9C00800;
+12b1 : D8600000;
+12b2 : 3421FFFF;
+12b3 : 34020001;
+12b4 : 5041000C;
+12b5 : 78040001;
+12b6 : B9C00800;
+12b7 : 34020004;
+12b8 : 34030001;
+12b9 : 38847598;
+12ba : FBFFF01F;
+12bb : 29A10000;
+12bc : 34020000;
+12bd : 28230034;
+12be : B9C00800;
+12bf : D8600000;
+12c0 : 29A10000;
+12c1 : 28210010;
+12c2 : D8200000;
+12c3 : 5C20000A;
+12c4 : 29630010;
+12c5 : 3402FFFD;
+12c6 : A0431000;
+12c7 : 59620010;
+12c8 : 2B820030;
+12c9 : 2B83002C;
+12ca : B8621000;
+12cb : 5C410009;
+12cc : E000000A;
+12cd : 78040001;
+12ce : B9C00800;
+12cf : 34020004;
+12d0 : 34030001;
+12d1 : 388475BC;
+12d2 : FBFFF007;
+12d3 : E00000C7;
+12d4 : 34010002;
+12d5 : E0000006;
+12d6 : 34010001;
+12d7 : 5D820004;
+12d8 : 29610014;
+12d9 : 5C2C0003;
+12da : 34010003;
+12db : 59610014;
+12dc : 29620014;
+12dd : 78010001;
+12de : 382191BC;
+12df : 3C420002;
+12e0 : 78060001;
+12e1 : B4220800;
+12e2 : 28250000;
+12e3 : 78040001;
+12e4 : 38C680E0;
+12e5 : B9C00800;
+12e6 : 34020004;
+12e7 : 34030001;
+12e8 : 388475C8;
+12e9 : FBFFEFF0;
+12ea : 29620014;
+12eb : 78010001;
+12ec : 382191BC;
+12ed : 3C420002;
+12ee : B4221000;
+12ef : 28420000;
+12f0 : 35610060;
+12f1 : F80045F5;
+12f2 : 29620014;
+12f3 : 34010004;
+12f4 : 3442FFFF;
+12f5 : 5441006E;
+12f6 : 78010001;
+12f7 : 3C420002;
+12f8 : 382191A8;
+12f9 : B4220800;
+12fa : 28210000;
+12fb : C0200000;
+12fc : 29A10000;
+12fd : 2B820030;
+12fe : 34030000;
+12ff : 28240014;
+1300 : 2B81002C;
+1301 : E0000006;
+1302 : 29A10000;
+1303 : 34020000;
+1304 : B9801800;
+1305 : 28240014;
+1306 : 34010000;
+1307 : D8800000;
+1308 : 29610010;
+1309 : 38210002;
+130a : 59610010;
+130b : E0000042;
+130c : 29650048;
+130d : 78040001;
+130e : B9C00800;
+130f : 34020004;
+1310 : 34030002;
+1311 : 388475E0;
+1312 : B9803000;
+1313 : B9E03800;
+1314 : FBFFEFC5;
+1315 : 29A20000;
+1316 : 29610048;
+1317 : 28420018;
+1318 : B5E10800;
+1319 : 59610048;
+131a : D8400000;
+131b : 29610010;
+131c : 38210002;
+131d : 59610010;
+131e : 34010005;
+131f : 59610014;
+1320 : E0000043;
+1321 : 15E1001F;
+1322 : 3402003B;
+1323 : 982F7800;
+1324 : C9E10800;
+1325 : 4822000D;
+1326 : 29A10000;
+1327 : 34020001;
+1328 : 28230034;
+1329 : B9C00800;
+132a : D8600000;
+132b : 29610050;
+132c : 59610110;
+132d : 29610054;
+132e : 59610114;
+132f : 34010004;
+1330 : 59610014;
+1331 : E0000004;
+1332 : 29610118;
+1333 : 34210001;
+1334 : 59610118;
+1335 : 29620118;
+1336 : 34010009;
+1337 : 4C22002C;
+1338 : 59600118;
+1339 : E0000014;
+133a : 29630054;
+133b : 29610114;
+133c : 29640050;
+133d : 29620110;
+133e : C8610800;
+133f : F4231800;
+1340 : 59610084;
+1341 : 78010001;
+1342 : 38219F40;
+1343 : C8821000;
+1344 : 28210000;
+1345 : C8431000;
+1346 : 59620080;
+1347 : 4420001C;
+1348 : 15E1001F;
+1349 : 34030078;
+134a : 982F1000;
+134b : C8411000;
+134c : 4C620003;
+134d : 34010003;
+134e : E3FFFFD1;
+134f : 0021001E;
+1350 : 29A20000;
+1351 : B42F7800;
+1352 : 29610048;
+1353 : 15EF0002;
+1354 : 28420018;
+1355 : B5E10800;
+1356 : 59610048;
+1357 : D8400000;
+1358 : 29650048;
+1359 : 78040001;
+135a : B9C00800;
+135b : 34020006;
+135c : 34030001;
+135d : 388475FC;
+135e : FBFFEF7B;
+135f : 29610050;
+1360 : 59610110;
+1361 : 29610054;
+1362 : 59610114;
+1363 : 29620014;
+1364 : 34010004;
+1365 : 44410004;
+1366 : 29610090;
+1367 : 34210001;
+1368 : 59610090;
+1369 : 29640088;
+136a : 2963008C;
+136b : 1481001F;
+136c : 98611800;
+136d : C8611000;
+136e : 98812000;
+136f : F4431800;
+1370 : C8810800;
+1371 : C8230800;
+1372 : 48200005;
+1373 : 5C200007;
+1374 : 340101F4;
+1375 : 54410002;
+1376 : E0000004;
+1377 : 29610094;
+1378 : 34210001;
+1379 : 59610094;
+137a : 29650044;
+137b : 29640040;
+137c : CA051800;
+137d : F4700800;
+137e : CA441000;
+137f : C8411000;
+1380 : 48020007;
+1381 : 34010001;
+1382 : 48400013;
+1383 : 5C400011;
+1384 : 340203E8;
+1385 : 54620010;
+1386 : E000000E;
+1387 : C8100800;
+1388 : 7C220000;
+1389 : C8121800;
+138a : C8621800;
+138b : C8251000;
+138c : F4410800;
+138d : C8641800;
+138e : C8611800;
+138f : 34010001;
+1390 : 48600005;
+1391 : 5C600003;
+1392 : 340303E8;
+1393 : 54430002;
+1394 : 34010000;
+1395 : 202100FF;
+1396 : 44200004;
+1397 : 29610098;
+1398 : 34210001;
+1399 : 59610098;
+139a : 78010001;
+139b : 3821C2A8;
+139c : 28210000;
+139d : 34020000;
+139e : F8000FB9;
+139f : 29A10000;
+13a0 : 28230038;
+13a1 : 44600004;
+13a2 : B9600800;
+13a3 : 34020001;
+13a4 : D8600000;
+13a5 : 34010000;
+13a6 : 2B9D0004;
+13a7 : 2B8B0028;
+13a8 : 2B8C0024;
+13a9 : 2B8D0020;
+13aa : 2B8E001C;
+13ab : 2B8F0018;
+13ac : 2B900014;
+13ad : 2B910010;
+13ae : 2B92000C;
+13af : 2B930008;
+13b0 : 379C0038;
+13b1 : C3A00000;
+13b2 : 379CFFF8;
+13b3 : 5B8B0008;
+13b4 : 5B9D0004;
+13b5 : 28230038;
+13b6 : B8405800;
+13b7 : 28630000;
+13b8 : D8600000;
+13b9 : 29620008;
+13ba : 2D61000C;
+13bb : 78030001;
+13bc : 3C420010;
+13bd : 38638EE0;
+13be : B8410800;
+13bf : 28620000;
+13c0 : F8004368;
+13c1 : 342103E8;
+13c2 : 2B9D0004;
+13c3 : 2B8B0008;
+13c4 : 379C0008;
+13c5 : C3A00000;
+13c6 : 379CFFDC;
+13c7 : 5B8B0014;
+13c8 : 5B8C0010;
+13c9 : 5B8D000C;
+13ca : 5B8E0008;
+13cb : 5B9D0004;
+13cc : 282D000C;
+13cd : B8205800;
+13ce : 378C0018;
+13cf : 45A00008;
+13d0 : B9801000;
+13d1 : FBFFFFE1;
+13d2 : 342303DE;
+13d3 : 34020006;
+13d4 : B9600800;
+13d5 : FBFFEF62;
+13d6 : E0000032;
+13d7 : B9801000;
+13d8 : FBFFFFDA;
+13d9 : B8207000;
+13da : 34020006;
+13db : B9600800;
+13dc : FBFFEFDB;
+13dd : 442D0026;
+13de : 2B8E001C;
+13df : 2B8D0018;
+13e0 : 29610038;
+13e1 : B9801000;
+13e2 : 28230000;
+13e3 : B9600800;
+13e4 : D8600000;
+13e5 : 2B820018;
+13e6 : 2B81001C;
+13e7 : 5C4D0002;
+13e8 : 442EFFF8;
+13e9 : 29610038;
+13ea : 378C0018;
+13eb : B9801000;
+13ec : 28230000;
+13ed : B9600800;
+13ee : D8600000;
+13ef : B9801000;
+13f0 : B9600800;
+13f1 : F800068C;
+13f2 : B8201000;
+13f3 : 34030001;
+13f4 : B9600800;
+13f5 : F80003C9;
+13f6 : B9801000;
+13f7 : B9600800;
+13f8 : FBFFFFBA;
+13f9 : 3423FFF6;
+13fa : 34020006;
+13fb : B9600800;
+13fc : FBFFEF3B;
+13fd : B9600800;
+13fe : B9801000;
+13ff : FBFFFFB3;
+1400 : 3421FFF6;
+1401 : 59610008;
+1402 : E0000006;
+1403 : 35C2FFF6;
+1404 : EC410800;
+1405 : C8010800;
+1406 : A0411000;
+1407 : 59620008;
+1408 : 34010000;
+1409 : 2B9D0004;
+140a : 2B8B0014;
+140b : 2B8C0010;
+140c : 2B8D000C;
+140d : 2B8E0008;
+140e : 379C0024;
+140f : C3A00000;
+1410 : 379CFFF4;
+1411 : 5B8B000C;
+1412 : 5B8C0008;
+1413 : 5B9D0004;
+1414 : 34020001;
+1415 : B8205800;
+1416 : FBFFEFA1;
+1417 : 340C0000;
+1418 : 44200014;
+1419 : B9600800;
+141a : 34020001;
+141b : FBFFEF3E;
+141c : 296303E4;
+141d : 34020001;
+141e : 34010000;
+141f : 5C620002;
+1420 : 296103E0;
+1421 : 0D610092;
+1422 : B9600800;
+1423 : F8000739;
+1424 : B8206000;
+1425 : 44200007;
+1426 : 78040001;
+1427 : B9600800;
+1428 : 34020005;
+1429 : 34030001;
+142a : 38847654;
+142b : FBFFEEAE;
+142c : B9800800;
+142d : 2B9D0004;
+142e : 2B8B000C;
+142f : 2B8C0008;
+1430 : 379C000C;
+1431 : C3A00000;
+1432 : 379CFFF4;
+1433 : 5B8B000C;
+1434 : 5B8C0008;
+1435 : 5B9D0004;
+1436 : 34020003;
+1437 : B8205800;
+1438 : FBFFEF7F;
+1439 : 340C0000;
+143a : 44200014;
+143b : B9600800;
+143c : 34020003;
+143d : FBFFEF1C;
+143e : 296303E4;
+143f : 34020001;
+1440 : 34010000;
+1441 : 5C620002;
+1442 : 296103E0;
+1443 : 0D610092;
+1444 : B9600800;
+1445 : F80006B2;
+1446 : B8206000;
+1447 : 44200007;
+1448 : 78040001;
+1449 : B9600800;
+144a : 34020005;
+144b : 34030001;
+144c : 3884766C;
+144d : FBFFEE8C;
+144e : B9800800;
+144f : 2B9D0004;
+1450 : 2B8B000C;
+1451 : 2B8C0008;
+1452 : 379C000C;
+1453 : C3A00000;
+1454 : 379CFFF4;
+1455 : 5B8B000C;
+1456 : 5B8C0008;
+1457 : 5B9D0004;
+1458 : 34020000;
+1459 : B8205800;
+145a : FBFFEF5D;
+145b : 340C0000;
+145c : 44200019;
+145d : 34020000;
+145e : B9600800;
+145f : FBFFEEFA;
+1460 : B9600800;
+1461 : F8000728;
+1462 : B8206000;
+1463 : 29640110;
+1464 : 2961011C;
+1465 : 29630114;
+1466 : 29620118;
+1467 : 596100C4;
+1468 : 596400B8;
+1469 : 596300BC;
+146a : 596200C0;
+146b : 3401FFFF;
+146c : 5D810008;
+146d : 78040001;
+146e : B9600800;
+146f : 34020005;
+1470 : 34030001;
+1471 : 38847688;
+1472 : FBFFEE67;
+1473 : E0000002;
+1474 : 340C0000;
+1475 : B9800800;
+1476 : 2B9D0004;
+1477 : 2B8B000C;
+1478 : 2B8C0008;
+1479 : 379C000C;
+147a : C3A00000;
+147b : 379CFFE4;
+147c : 5B8B001C;
+147d : 5B8C0018;
+147e : 5B8D0014;
+147f : 5B8E0010;
+1480 : 5B8F000C;
+1481 : 5B900008;
+1482 : 5B9D0004;
+1483 : 340C0000;
+1484 : B8205800;
+1485 : B8407000;
+1486 : 342F03A0;
+1487 : 343003C0;
+1488 : E0000012;
+1489 : 098D0070;
+148a : BA000800;
+148b : 3403000A;
+148c : 35A20128;
+148d : B5621000;
+148e : F8004327;
+148f : 5C20000A;
+1490 : 35A10168;
+1491 : B9E01000;
+1492 : B5610800;
+1493 : F8000253;
+1494 : B56D1000;
+1495 : B9C00800;
+1496 : 34420134;
+1497 : F8000610;
+1498 : E000001F;
+1499 : 358C0001;
+149a : 2D630120;
+149b : 486CFFEE;
+149c : 34010004;
+149d : 54610003;
+149e : 34630001;
+149f : 0D630120;
+14a0 : 2D6D0120;
+14a1 : 3403000A;
+14a2 : 356203C0;
+14a3 : 35ADFFFF;
+14a4 : 09AC0070;
+14a5 : 35810128;
+14a6 : B5610800;
+14a7 : F800432F;
+14a8 : 35810168;
+14a9 : B9E01000;
+14aa : B5610800;
+14ab : F800023B;
+14ac : B56C1000;
+14ad : B9C00800;
+14ae : 34420134;
+14af : F80005F8;
+14b0 : 78040001;
+14b1 : B9600800;
+14b2 : 34020003;
+14b3 : 34030001;
+14b4 : 388476A0;
+14b5 : B9A02800;
+14b6 : FBFFEE23;
+14b7 : B9600800;
+14b8 : F8000402;
+14b9 : 59610004;
+14ba : 34020002;
+14bb : B9600800;
+14bc : FBFFEE9D;
+14bd : 78010001;
+14be : 38219F04;
+14bf : 28220024;
+14c0 : 34010000;
+14c1 : 44400003;
+14c2 : B9600800;
+14c3 : D8400000;
+14c4 : 2B9D0004;
+14c5 : 2B8B001C;
+14c6 : 2B8C0018;
+14c7 : 2B8D0014;
+14c8 : 2B8E0010;
+14c9 : 2B8F000C;
+14ca : 2B900008;
+14cb : 379C001C;
+14cc : C3A00000;
+14cd : 28220000;
+14ce : 78050001;
+14cf : 38A58ED4;
+14d0 : 28430014;
+14d1 : 2842000C;
+14d2 : 28440004;
+14d3 : 58640000;
+14d4 : 28420008;
+14d5 : 3404FFFF;
+14d6 : 58620004;
+14d7 : 28230000;
+14d8 : 28620014;
+14d9 : 2863000C;
+14da : 0C44000A;
+14db : 28A40000;
+14dc : 5844000C;
+14dd : 28640004;
+14de : 58440010;
+14df : 28630008;
+14e0 : 58430014;
+14e1 : 28220000;
+14e2 : 28430014;
+14e3 : 2842000C;
+14e4 : 28460010;
+14e5 : 28450014;
+14e6 : 28440018;
+14e7 : 58660018;
+14e8 : 5865001C;
+14e9 : 58640020;
+14ea : 4042001C;
+14eb : 30620024;
+14ec : 28210000;
+14ed : 28220014;
+14ee : 2821000C;
+14ef : 4021001D;
+14f0 : 30410025;
+14f1 : C3A00000;
+14f2 : 379CFFE4;
+14f3 : 5B8B001C;
+14f4 : 5B8C0018;
+14f5 : 5B8D0014;
+14f6 : 5B8E0010;
+14f7 : 5B8F000C;
+14f8 : 5B900008;
+14f9 : 5B9D0004;
+14fa : B8408000;
+14fb : 28220030;
+14fc : B8205800;
+14fd : B8607800;
+14fe : 284D0008;
+14ff : 28220034;
+1500 : 282C0358;
+1501 : 28440000;
+1502 : D8800000;
+1503 : 48010066;
+1504 : 356E0030;
+1505 : B9C00800;
+1506 : FBFFFFC7;
+1507 : 29610030;
+1508 : 2824000C;
+1509 : 4161005C;
+150a : 30810004;
+150b : 4161005D;
+150c : 30810005;
+150d : 4161005E;
+150e : 30810006;
+150f : 3401FFFF;
+1510 : 30810007;
+1511 : 3401FFFE;
+1512 : 30810008;
+1513 : 4161005F;
+1514 : 30810009;
+1515 : 41610060;
+1516 : 3081000A;
+1517 : 41610061;
+1518 : 3081000B;
+1519 : B9C00800;
+151a : FBFFFFB3;
+151b : 29610030;
+151c : 34030008;
+151d : 2824000C;
+151e : B9800800;
+151f : 34820004;
+1520 : F80042B6;
+1521 : 29610030;
+1522 : 35620418;
+1523 : 28210000;
+1524 : 3180000A;
+1525 : C8410800;
+1526 : 14210003;
+1527 : 08214E2B;
+1528 : 0D810008;
+1529 : 41A1001A;
+152a : 3181000B;
+152b : 34010014;
+152c : 3181000C;
+152d : 29A1001C;
+152e : 3181000D;
+152f : 34010002;
+1530 : 3181000E;
+1531 : B9600800;
+1532 : FBFFEDEB;
+1533 : 78010001;
+1534 : 38219F04;
+1535 : 28240000;
+1536 : 4480000F;
+1537 : B9600800;
+1538 : BA001000;
+1539 : B9E01800;
+153a : D8800000;
+153b : 4420000A;
+153c : 78040001;
+153d : 78050001;
+153e : B9600800;
+153f : 34020002;
+1540 : 34030001;
+1541 : 388476C0;
+1542 : 38A591E4;
+1543 : FBFFED96;
+1544 : E0000025;
+1545 : 29610030;
+1546 : 78040001;
+1547 : 34020003;
+1548 : 2825000C;
+1549 : 34030001;
+154a : B9600800;
+154b : 28A50010;
+154c : 388476DC;
+154d : FBFFED8C;
+154e : 29610030;
+154f : 78040001;
+1550 : 34020003;
+1551 : 2825000C;
+1552 : 34030001;
+1553 : B9600800;
+1554 : 28A50014;
+1555 : 388476F0;
+1556 : FBFFED83;
+1557 : 2962004C;
+1558 : B9600800;
+1559 : F8000507;
+155a : 29620024;
+155b : 34010001;
+155c : 44410003;
+155d : 34010004;
+155e : E0000002;
+155f : 34010006;
+1560 : 59610004;
+1561 : 78010001;
+1562 : 3821B0D8;
+1563 : 28220000;
+1564 : 34010004;
+1565 : 5C410006;
+1566 : 3401006B;
+1567 : 59610004;
+1568 : E0000003;
+1569 : 340103E8;
+156a : 59610008;
+156b : 34010000;
+156c : 2B9D0004;
+156d : 2B8B001C;
+156e : 2B8C0018;
+156f : 2B8D0014;
+1570 : 2B8E0010;
+1571 : 2B8F000C;
+1572 : 2B900008;
+1573 : 379C001C;
+1574 : C3A00000;
+1575 : 379CFFF8;
+1576 : 5B8B0008;
+1577 : 5B9D0004;
+1578 : 34020004;
+1579 : B8205800;
+157a : FBFFEE3D;
+157b : 44200004;
+157c : 34010001;
+157d : 59610004;
+157e : E0000005;
+157f : B9600800;
+1580 : 34020004;
+1581 : FBFFEE58;
+1582 : 59610008;
+1583 : 34010000;
+1584 : 2B9D0004;
+1585 : 2B8B0008;
+1586 : 379C0008;
+1587 : C3A00000;
+1588 : 340203E8;
+1589 : 58220008;
+158a : 34010000;
+158b : C3A00000;
+158c : 379CFFF0;
+158d : 5B8B0010;
+158e : 5B8C000C;
+158f : 5B8D0008;
+1590 : 5B9D0004;
+1591 : B8406800;
+1592 : 34020004;
+1593 : B8205800;
+1594 : B8606000;
+1595 : FBFFEDC4;
+1596 : 78010001;
+1597 : 38219F04;
+1598 : 2824000C;
+1599 : 44800006;
+159a : B9600800;
+159b : B9A01000;
+159c : B9801800;
+159d : D8800000;
+159e : 5C200012;
+159f : 416103A1;
+15a0 : 44200008;
+15a1 : 3402000B;
+15a2 : 5C22000B;
+15a3 : B9600800;
+15a4 : B9A01000;
+15a5 : B9801800;
+15a6 : FBFFFED5;
+15a7 : E0000005;
+15a8 : B9600800;
+15a9 : B9A01000;
+15aa : B9801800;
+15ab : F8000211;
+15ac : 5C200004;
+15ad : B9600800;
+15ae : F8000166;
+15af : 44200003;
+15b0 : 34010002;
+15b1 : 59610004;
+15b2 : B9600800;
+15b3 : 34020002;
+15b4 : FBFFEE25;
+15b5 : 59610008;
+15b6 : 34010000;
+15b7 : 2B9D0004;
+15b8 : 2B8B0010;
+15b9 : 2B8C000C;
+15ba : 2B8D0008;
+15bb : 379C0010;
+15bc : C3A00000;
+15bd : 379CFFFC;
+15be : 5B9D0004;
+15bf : 28240000;
+15c0 : 34030006;
+15c1 : 5C830003;
+15c2 : 34220100;
+15c3 : F80005EA;
+15c4 : 34010000;
+15c5 : 2B9D0004;
+15c6 : 379C0004;
+15c7 : C3A00000;
+15c8 : 379CFFF0;
+15c9 : 5B8B0010;
+15ca : 5B8C000C;
+15cb : 5B8D0008;
+15cc : 5B9D0004;
+15cd : B8606000;
+15ce : 28230000;
+15cf : B8406800;
+15d0 : 34020005;
+15d1 : B8205800;
+15d2 : 5C620007;
+15d3 : FBFFEDE4;
+15d4 : 44200008;
+15d5 : 34010006;
+15d6 : 59610004;
+15d7 : 340C0000;
+15d8 : E0000044;
+15d9 : FBFFFE37;
+15da : B9600800;
+15db : FBFFFE57;
+15dc : B9600800;
+15dd : 34020000;
+15de : FBFFED7B;
+15df : 78010001;
+15e0 : 38219F04;
+15e1 : 28260010;
+15e2 : 416503A1;
+15e3 : 44C00008;
+15e4 : B8A02000;
+15e5 : B9600800;
+15e6 : B9A01000;
+15e7 : B9801800;
+15e8 : D8C00000;
+15e9 : B8202800;
+15ea : 4801002B;
+15eb : 3401000B;
+15ec : 54A1000E;
+15ed : 78010001;
+15ee : 3CA20002;
+15ef : 382191F4;
+15f0 : B4220800;
+15f1 : 28240000;
+15f2 : 44800008;
+15f3 : B9801800;
+15f4 : B9600800;
+15f5 : B9A01000;
+15f6 : D8800000;
+15f7 : B8206000;
+15f8 : 5C20000D;
+15f9 : E0000011;
+15fa : 7CA1000F;
+15fb : 7D8C0000;
+15fc : A02C6000;
+15fd : 4580000D;
+15fe : 78040001;
+15ff : B9600800;
+1600 : 34020005;
+1601 : 34030001;
+1602 : 38847708;
+1603 : FBFFECD6;
+1604 : E0000006;
+1605 : 34010001;
+1606 : 4581000F;
+1607 : 3401FFFF;
+1608 : 5D81000E;
+1609 : E000000C;
+160a : 29610030;
+160b : 2821000C;
+160c : 28220010;
+160d : 340100FF;
+160e : 44410005;
+160f : 29620024;
+1610 : 34010002;
+1611 : 340C0000;
+1612 : 5C410004;
+1613 : 34010004;
+1614 : 59610004;
+1615 : 340C0000;
+1616 : B9600800;
+1617 : 34020003;
+1618 : 34030001;
+1619 : 34040000;
+161a : FBFFEDF7;
+161b : 59610008;
+161c : B9800800;
+161d : 2B9D0004;
+161e : 2B8B0010;
+161f : 2B8C000C;
+1620 : 2B8D0008;
+1621 : 379C0010;
+1622 : C3A00000;
+1623 : 379CFFF8;
+1624 : 5B8B0008;
+1625 : 5B9D0004;
+1626 : 402403A1;
+1627 : B8205800;
+1628 : 44800005;
+1629 : 3405000B;
+162a : 5C850005;
+162b : FBFFFE50;
+162c : E0000002;
+162d : F800018F;
+162e : 5C200003;
+162f : B9600800;
+1630 : F80000E4;
+1631 : 340103E8;
+1632 : 59610008;
+1633 : 34010000;
+1634 : 2B9D0004;
+1635 : 2B8B0008;
+1636 : 379C0008;
+1637 : C3A00000;
+1638 : 379CFFF8;
+1639 : 5B8B0008;
+163a : 5B9D0004;
+163b : 402403A1;
+163c : B8205800;
+163d : 44800007;
+163e : 34050008;
+163f : 44850007;
+1640 : 3405000B;
+1641 : 5C850007;
+1642 : FBFFFE39;
+1643 : E0000004;
+1644 : F80000FD;
+1645 : E0000002;
+1646 : F8000134;
+1647 : 5C200004;
+1648 : B9600800;
+1649 : F80000CB;
+164a : 44200003;
+164b : 34010002;
+164c : 59610004;
+164d : 340103E8;
+164e : 59610008;
+164f : 34010000;
+1650 : 2B9D0004;
+1651 : 2B8B0008;
+1652 : 379C0008;
+1653 : C3A00000;
+1654 : 379CFFD4;
+1655 : 5B8B000C;
+1656 : 5B8C0008;
+1657 : 5B9D0004;
+1658 : B8205800;
+1659 : B8400800;
+165a : 37820010;
+165b : F8000482;
+165c : 29610358;
+165d : 37820020;
+165e : 34030008;
+165f : F8004156;
+1660 : 5C20000B;
+1661 : 2D620380;
+1662 : 2D6103CA;
+1663 : 5C410008;
+1664 : 29610358;
+1665 : 2C220008;
+1666 : 2F810028;
+1667 : 5C410004;
+1668 : 41610020;
+1669 : 20210001;
+166a : 5C20000A;
+166b : 41650020;
+166c : 78040001;
+166d : B9600800;
+166e : 34020005;
+166f : 34030001;
+1670 : 3884771C;
+1671 : FBFFEC68;
+1672 : 340C0000;
+1673 : E0000022;
+1674 : 2B810010;
+1675 : 356203B0;
+1676 : 596100C8;
+1677 : 2B810014;
+1678 : 596100CC;
+1679 : 2B810018;
+167a : 596100D0;
+167b : 2B81001C;
+167c : 596100D4;
+167d : 356100C8;
+167e : F80005C4;
+167f : B9600800;
+1680 : 34020004;
+1681 : FBFFECD8;
+1682 : 78010001;
+1683 : 38219F04;
+1684 : 28220018;
+1685 : 44400006;
+1686 : B9600800;
+1687 : D8400000;
+1688 : B8206000;
+1689 : 44200004;
+168a : E000000B;
+168b : B9600800;
+168c : F80007F5;
+168d : 29610358;
+168e : 116203CC;
+168f : 340C0000;
+1690 : 1023000A;
+1691 : 44620004;
+1692 : 3022000A;
+1693 : B9600800;
+1694 : FBFFEC89;
+1695 : B9800800;
+1696 : 2B9D0004;
+1697 : 2B8B000C;
+1698 : 2B8C0008;
+1699 : 379C002C;
+169a : C3A00000;
+169b : 379CFFEC;
+169c : 5B8B0014;
+169d : 5B8C0010;
+169e : 5B8D000C;
+169f : 5B8E0008;
+16a0 : 5B9D0004;
+16a1 : B8205800;
+16a2 : 2821000C;
+16a3 : B8407000;
+16a4 : B8606800;
+16a5 : 44200011;
+16a6 : 34020000;
+16a7 : 34030010;
+16a8 : 35610098;
+16a9 : F80041AB;
+16aa : B9600800;
+16ab : F800074C;
+16ac : 78010001;
+16ad : 38219F04;
+16ae : 28240014;
+16af : 44800007;
+16b0 : B9600800;
+16b1 : B9C01000;
+16b2 : B9A01800;
+16b3 : D8800000;
+16b4 : B8206000;
+16b5 : 5C20001B;
+16b6 : B9600800;
+16b7 : FBFFFD9D;
+16b8 : 416503A1;
+16b9 : 3401000B;
+16ba : 54A1000C;
+16bb : 78010001;
+16bc : 3CA20002;
+16bd : 38219224;
+16be : B4220800;
+16bf : 28240000;
+16c0 : 44800006;
+16c1 : B9600800;
+16c2 : B9C01000;
+16c3 : B9A01800;
+16c4 : D8800000;
+16c5 : E0000008;
+16c6 : 45A00007;
+16c7 : 78040001;
+16c8 : B9600800;
+16c9 : 34020005;
+16ca : 34030001;
+16cb : 38847708;
+16cc : FBFFEC0D;
+16cd : B9600800;
+16ce : F8000046;
+16cf : B8206000;
+16d0 : 7D810001;
+16d1 : 29620004;
+16d2 : C8010800;
+16d3 : A1816000;
+16d4 : 29610000;
+16d5 : 44410004;
+16d6 : B9600800;
+16d7 : F8000720;
+16d8 : E0000006;
+16d9 : B9600800;
+16da : 34020002;
+16db : 34030000;
+16dc : FBFFED14;
+16dd : 59610008;
+16de : B9800800;
+16df : 2B9D0004;
+16e0 : 2B8B0014;
+16e1 : 2B8C0010;
+16e2 : 2B8D000C;
+16e3 : 2B8E0008;
+16e4 : 379C0014;
+16e5 : C3A00000;
+16e6 : 379CFFFC;
+16e7 : 5B9D0004;
+16e8 : 34030030;
+16e9 : F80040ED;
+16ea : 2B9D0004;
+16eb : 379C0004;
+16ec : C3A00000;
+16ed : 28220028;
+16ee : 34030001;
+16ef : 4443000A;
+16f0 : 34030002;
+16f1 : 44430003;
+16f2 : 5C400009;
+16f3 : E0000006;
+16f4 : 34020012;
+16f5 : 58220084;
+16f6 : 3402000E;
+16f7 : 58220088;
+16f8 : E0000003;
+16f9 : 58200084;
+16fa : 58200088;
+16fb : 28240084;
+16fc : 2825003C;
+16fd : 34020000;
+16fe : B4A42800;
+16ff : 20A30003;
+1700 : 44600003;
+1701 : 34020004;
+1702 : C8431000;
+1703 : B4A22800;
+1704 : 28260040;
+1705 : 28220088;
+1706 : 5825004C;
+1707 : 34030000;
+1708 : B4C23000;
+1709 : 20C70003;
+170a : 44E00003;
+170b : 34030004;
+170c : C8671800;
+170d : B4C31800;
+170e : C8A42000;
+170f : C8621000;
+1710 : 58230050;
+1711 : 58240044;
+1712 : 58220048;
+1713 : C3A00000;
+1714 : 379CFFF8;
+1715 : 5B8B0008;
+1716 : 5B9D0004;
+1717 : 78020001;
+1718 : 38429F04;
+1719 : 28420020;
+171a : B8205800;
+171b : 44400006;
+171c : D8400000;
+171d : B8201000;
+171e : 34010001;
+171f : 4441001C;
+1720 : 4802001C;
+1721 : B9600800;
+1722 : 34020002;
+1723 : FBFFEC94;
+1724 : 5C200006;
+1725 : 34020004;
+1726 : B9600800;
+1727 : FBFFEC90;
+1728 : 34020000;
+1729 : 44220013;
+172a : 29610030;
+172b : 0D600120;
+172c : 2821000C;
+172d : 28220010;
+172e : 340100FF;
+172f : 44410007;
+1730 : 29620024;
+1731 : 34010002;
+1732 : 44410004;
+1733 : 34010006;
+1734 : 59610004;
+1735 : E0000006;
+1736 : 34010004;
+1737 : 59610004;
+1738 : 34020002;
+1739 : B9600800;
+173a : FBFFEC1F;
+173b : 34020000;
+173c : B8400800;
+173d : 2B9D0004;
+173e : 2B8B0008;
+173f : 379C0008;
+1740 : C3A00000;
+1741 : 379CFFE8;
+1742 : 5B8B0008;
+1743 : 5B9D0004;
+1744 : B8205800;
+1745 : B8400800;
+1746 : 41620020;
+1747 : 20420001;
+1748 : 4440002D;
+1749 : 2962010C;
+174a : 29650100;
+174b : 29640104;
+174c : 29630108;
+174d : 596200B4;
+174e : 596500A8;
+174f : 3782000C;
+1750 : 596400AC;
+1751 : 596300B0;
+1752 : F800034B;
+1753 : 416203A7;
+1754 : 41610020;
+1755 : 20420002;
+1756 : 4440000E;
+1757 : 38210002;
+1758 : 31610020;
+1759 : 2D6103CA;
+175a : 296403B0;
+175b : 296303B4;
+175c : 0D61037C;
+175d : 296203B8;
+175e : 296103BC;
+175f : 59640098;
+1760 : 5963009C;
+1761 : 596200A0;
+1762 : 596100A4;
+1763 : E0000012;
+1764 : 202100FD;
+1765 : 31610020;
+1766 : 2B81000C;
+1767 : 356203B0;
+1768 : 59610098;
+1769 : 2B810010;
+176a : 5961009C;
+176b : 2B810014;
+176c : 596100A0;
+176d : 2B810018;
+176e : 596100A4;
+176f : 35610098;
+1770 : F80004D2;
+1771 : B9600800;
+1772 : 596000F8;
+1773 : 596000FC;
+1774 : F80006FB;
+1775 : 34010000;
+1776 : 2B9D0004;
+1777 : 2B8B0008;
+1778 : 379C0018;
+1779 : C3A00000;
+177a : 379CFFE0;
+177b : 5B8B0010;
+177c : 5B8C000C;
+177d : 5B8D0008;
+177e : 5B9D0004;
+177f : B8205800;
+1780 : B8400800;
+1781 : 41620020;
+1782 : 20430001;
+1783 : 5C600004;
+1784 : 78010001;
+1785 : 382177B8;
+1786 : E0000005;
+1787 : 20420002;
+1788 : 5C400007;
+1789 : 78010001;
+178a : 382177F4;
+178b : 78020001;
+178c : 38429254;
+178d : F8002091;
+178e : E0000027;
+178f : 2D64037C;
+1790 : 2D6303CA;
+1791 : 44830007;
+1792 : 78010001;
+1793 : 78020001;
+1794 : 38429254;
+1795 : 3821782C;
+1796 : F8002088;
+1797 : E000001E;
+1798 : 378D0014;
+1799 : B9A01000;
+179a : F8000339;
+179b : 41610020;
+179c : 356C0098;
+179d : B9A01000;
+179e : 202100FD;
+179f : 31610020;
+17a0 : B9800800;
+17a1 : F80004A1;
+17a2 : B9800800;
+17a3 : 356203B0;
+17a4 : F800049E;
+17a5 : 296103B8;
+17a6 : 596100F8;
+17a7 : 296103BC;
+17a8 : 596100FC;
+17a9 : 78010001;
+17aa : 38219F04;
+17ab : 28230028;
+17ac : 44600007;
+17ad : B9801000;
+17ae : B9600800;
+17af : D8600000;
+17b0 : 34020001;
+17b1 : 44220004;
+17b2 : 48010004;
+17b3 : B9600800;
+17b4 : F80006BB;
+17b5 : 34010000;
+17b6 : 2B9D0004;
+17b7 : 2B8B0010;
+17b8 : 2B8C000C;
+17b9 : 2B8D0008;
+17ba : 379C0020;
+17bb : C3A00000;
+17bc : 34010000;
+17bd : C3A00000;
+17be : 379CFFE8;
+17bf : 5B8B0018;
+17c0 : 5B8C0014;
+17c1 : 5B8D0010;
+17c2 : 5B8E000C;
+17c3 : 5B9D0008;
+17c4 : B8406000;
+17c5 : 2822004C;
+17c6 : B8607000;
+17c7 : 28230084;
+17c8 : 404D0000;
+17c9 : 28220034;
+17ca : B5831800;
+17cb : 21AD000F;
+17cc : 2845000C;
+17cd : 28220044;
+17ce : B9A02000;
+17cf : B8205800;
+17d0 : D8A00000;
+17d1 : B8201000;
+17d2 : 3403FFFE;
+17d3 : 34010000;
+17d4 : 4443002F;
+17d5 : 78090001;
+17d6 : 39299768;
+17d7 : 09A1000C;
+17d8 : 4C4C000C;
+17d9 : B5214800;
+17da : 29250000;
+17db : 78040001;
+17dc : B9600800;
+17dd : 34020005;
+17de : 34030001;
+17df : 3884786C;
+17e0 : B9A03000;
+17e1 : FBFFEAF8;
+17e2 : 3401FFFF;
+17e3 : E0000020;
+17e4 : 2968011C;
+17e5 : 296A0118;
+17e6 : B5214800;
+17e7 : 01070010;
+17e8 : 2108FFFF;
+17e9 : 090803E8;
+17ea : 29210000;
+17eb : 3D4A0010;
+17ec : 29660114;
+17ed : 78040001;
+17ee : 01080010;
+17ef : 5B810004;
+17f0 : 34020005;
+17f1 : B9600800;
+17f2 : 34030001;
+17f3 : 3884788C;
+17f4 : B9802800;
+17f5 : B9473800;
+17f6 : FBFFEAE3;
+17f7 : 34010001;
+17f8 : 5DC10005;
+17f9 : 11620110;
+17fa : 34010080;
+17fb : 204200C0;
+17fc : 44410006;
+17fd : 29610410;
+17fe : 34210001;
+17ff : 59610410;
+1800 : 34010000;
+1801 : E0000002;
+1802 : 34010001;
+1803 : 2B9D0008;
+1804 : 2B8B0018;
+1805 : 2B8C0014;
+1806 : 2B8D0010;
+1807 : 2B8E000C;
+1808 : 379C0018;
+1809 : C3A00000;
+180a : 379CFFFC;
+180b : 5B9D0004;
+180c : 34030008;
+180d : F8003FA8;
+180e : 2B9D0004;
+180f : 379C0004;
+1810 : C3A00000;
+1811 : 379CFFE0;
+1812 : 5B8B0020;
+1813 : 5B8C001C;
+1814 : 5B8D0018;
+1815 : 5B8E0014;
+1816 : 5B8F0010;
+1817 : 5B90000C;
+1818 : 5B910008;
+1819 : 5B9D0004;
+181a : 780E0001;
+181b : 39CE9274;
+181c : 78040001;
+181d : B8406800;
+181e : B8606000;
+181f : 34020003;
+1820 : 34030002;
+1821 : 388479E8;
+1822 : B9C02800;
+1823 : B8207800;
+1824 : 35B10029;
+1825 : FBFFEAB4;
+1826 : 35900029;
+1827 : BA200800;
+1828 : BA001000;
+1829 : FBFFFFE1;
+182a : 5C200033;
+182b : 2D810032;
+182c : 2DAB0032;
+182d : C9615800;
+182e : 35620001;
+182f : 34010002;
+1830 : 54410043;
+1831 : 29E20030;
+1832 : 34030001;
+1833 : 35A10060;
+1834 : 28420014;
+1835 : 5D63000B;
+1836 : FBFFFFD4;
+1837 : 5C20003C;
+1838 : 78040001;
+1839 : B9E00800;
+183a : 34020003;
+183b : 34030001;
+183c : 388478B4;
+183d : B9C02800;
+183e : 34060090;
+183f : E000000E;
+1840 : 3403FFFF;
+1841 : 358C0060;
+1842 : 5D63000E;
+1843 : B9800800;
+1844 : FBFFFFC6;
+1845 : 5C20002E;
+1846 : 78040001;
+1847 : B9E00800;
+1848 : 34020003;
+1849 : 34030001;
+184a : 388478B4;
+184b : B9C02800;
+184c : 34060099;
+184d : FBFFEA8C;
+184e : 340B0000;
+184f : E0000024;
+1850 : B9801000;
+1851 : FBFFFFB9;
+1852 : B8205800;
+1853 : 5C200020;
+1854 : 78040001;
+1855 : B9E00800;
+1856 : 34020003;
+1857 : 34030001;
+1858 : 388478C4;
+1859 : B9C02800;
+185a : 340600A1;
+185b : FBFFEA7E;
+185c : E0000017;
+185d : 41AB001A;
+185e : 4181001A;
+185f : 5D61000E;
+1860 : 29AB001C;
+1861 : 2981001C;
+1862 : 5D61000B;
+1863 : 29AB0020;
+1864 : 29810020;
+1865 : 5D610008;
+1866 : 29A20024;
+1867 : 29810024;
+1868 : 340B0000;
+1869 : 5C41000A;
+186a : 41AB0028;
+186b : 41810028;
+186c : 45610003;
+186d : C9615800;
+186e : E0000005;
+186f : BA200800;
+1870 : BA001000;
+1871 : FBFFFF99;
+1872 : B8205800;
+1873 : B9600800;
+1874 : 2B9D0004;
+1875 : 2B8B0020;
+1876 : 2B8C001C;
+1877 : 2B8D0018;
+1878 : 2B8E0014;
+1879 : 2B8F0010;
+187a : 2B90000C;
+187b : 2B910008;
+187c : 379C0020;
+187d : C3A00000;
+187e : 379CFFFC;
+187f : 5B9D0004;
+1880 : 34020000;
+1881 : 34030010;
+1882 : F8003FD2;
+1883 : 2B9D0004;
+1884 : 379C0004;
+1885 : C3A00000;
+1886 : 379CFFF0;
+1887 : 5B8B0010;
+1888 : 5B8C000C;
+1889 : 5B8D0008;
+188a : 5B9D0004;
+188b : B8206800;
+188c : 28210030;
+188d : 282C0014;
+188e : 282B000C;
+188f : 28210010;
+1890 : 0C200000;
+1891 : 34210008;
+1892 : FBFFFFEC;
+1893 : 29A10030;
+1894 : 28210010;
+1895 : 34210018;
+1896 : FBFFFFE8;
+1897 : B9800800;
+1898 : 34020000;
+1899 : 34030028;
+189a : F8003FBA;
+189b : 29610004;
+189c : 59810000;
+189d : 29610008;
+189e : 0D800008;
+189f : 59810004;
+18a0 : 29610004;
+18a1 : 59810010;
+18a2 : 29610008;
+18a3 : 59810014;
+18a4 : 29620014;
+18a5 : 29610018;
+18a6 : 29630010;
+18a7 : 5982001C;
+18a8 : 59810020;
+18a9 : 59830018;
+18aa : 4161001C;
+18ab : 34020001;
+18ac : 31810024;
+18ad : 4161001D;
+18ae : 31810025;
+18af : 29A10030;
+18b0 : 28210018;
+18b1 : 58220018;
+18b2 : 3402FFA0;
+18b3 : 3022001C;
+18b4 : 2B9D0004;
+18b5 : 2B8B0010;
+18b6 : 2B8C000C;
+18b7 : 2B8D0008;
+18b8 : 379C0010;
+18b9 : C3A00000;
+18ba : 379CFF74;
+18bb : 5B8B0018;
+18bc : 5B8C0014;
+18bd : 5B8D0010;
+18be : 5B8E000C;
+18bf : 5B8F0008;
+18c0 : 5B9D0004;
+18c1 : 2C220120;
+18c2 : B8205800;
+18c3 : 340D0000;
+18c4 : 340C0001;
+18c5 : 5C400014;
+18c6 : 28230000;
+18c7 : B8406800;
+18c8 : 34020006;
+18c9 : 5C620010;
+18ca : FBFFFFBC;
+18cb : 296C0000;
+18cc : E0000113;
+18cd : 09820070;
+18ce : 09A30070;
+18cf : B9600800;
+18d0 : 34420128;
+18d1 : 34630128;
+18d2 : B5621000;
+18d3 : B5631800;
+18d4 : FBFFFF3D;
+18d5 : 48010002;
+18d6 : E0000002;
+18d7 : B9806800;
+18d8 : 358C0001;
+18d9 : 2D660120;
+18da : 48CCFFF3;
+18db : 78040001;
+18dc : B9600800;
+18dd : 34020003;
+18de : 34030001;
+18df : 388478DC;
+18e0 : B9A02800;
+18e1 : FBFFE9F8;
+18e2 : 1D610122;
+18e3 : 442D0022;
+18e4 : 0D6D0122;
+18e5 : 296C0030;
+18e6 : 340F0000;
+18e7 : 340E0001;
+18e8 : E0000015;
+18e9 : 29820000;
+18ea : 09C10418;
+18eb : B4410800;
+18ec : 2C230120;
+18ed : 4460000F;
+18ee : 09E40418;
+18ef : 1C230122;
+18f0 : B4442000;
+18f1 : 1C820122;
+18f2 : 08630070;
+18f3 : 08420070;
+18f4 : 34630128;
+18f5 : B4231800;
+18f6 : 34420128;
+18f7 : B4821000;
+18f8 : FBFFFF19;
+18f9 : 48010002;
+18fa : E0000002;
+18fb : B9C07800;
+18fc : 35CE0001;
+18fd : 2981000C;
+18fe : 2C21000C;
+18ff : 482EFFEA;
+1900 : 2981001C;
+1901 : 442F0004;
+1902 : 34010001;
+1903 : 598F001C;
+1904 : 59810020;
+1905 : 29620024;
+1906 : 34010002;
+1907 : 4441006C;
+1908 : 2D610120;
+1909 : 5C200004;
+190a : 29610000;
+190b : 340C0004;
+190c : 442C00D3;
+190d : 29610030;
+190e : 09AC0070;
+190f : 2821000C;
+1910 : 40240009;
+1911 : 4023000A;
+1912 : 4022000B;
+1913 : 40290004;
+1914 : 40280005;
+1915 : 40270006;
+1916 : 40260007;
+1917 : 40250008;
+1918 : 33890049;
+1919 : 3388004A;
+191a : 3387004B;
+191b : 3386004C;
+191c : 3385004D;
+191d : 3384004E;
+191e : 3383004F;
+191f : 33820050;
+1920 : 28220018;
+1921 : 28240010;
+1922 : 28230014;
+1923 : 5B820044;
+1924 : 4022001C;
+1925 : 5B830040;
+1926 : 35830128;
+1927 : 3382003A;
+1928 : 4022001D;
+1929 : B5631800;
+192a : 5B84003C;
+192b : 33820048;
+192c : 28220004;
+192d : 0F800052;
+192e : 5B820080;
+192f : 28210008;
+1930 : 37820020;
+1931 : 5B810084;
+1932 : B9600800;
+1933 : FBFFFEDE;
+1934 : 29620024;
+1935 : 34040001;
+1936 : 4444002A;
+1937 : 29620030;
+1938 : 78050001;
+1939 : 3406007F;
+193a : 2843000C;
+193b : 38A59284;
+193c : 28670010;
+193d : 48E60004;
+193e : 48010023;
+193f : 5C200019;
+1940 : E0000006;
+1941 : 48010020;
+1942 : 44200004;
+1943 : 2C61000C;
+1944 : 5C24000A;
+1945 : E000002E;
+1946 : 78040001;
+1947 : B9600800;
+1948 : 34020003;
+1949 : 34030001;
+194a : 388478FC;
+194b : FBFFE98E;
+194c : 340C0002;
+194d : E0000092;
+194e : 296303D8;
+194f : 2841001C;
+1950 : 44610023;
+1951 : B56C1000;
+1952 : 37810049;
+1953 : 34420151;
+1954 : 5B85001C;
+1955 : FBFFFEB5;
+1956 : 2B85001C;
+1957 : 5C200010;
+1958 : 78040001;
+1959 : B9600800;
+195a : 34020003;
+195b : 34030001;
+195c : 38847908;
+195d : FBFFE97C;
+195e : 340C0007;
+195f : E0000080;
+1960 : 4C200007;
+1961 : B9600800;
+1962 : FBFFFF24;
+1963 : 78060001;
+1964 : 340C0006;
+1965 : 38C680E0;
+1966 : E0000004;
+1967 : 78060001;
+1968 : 340C0005;
+1969 : 38C678D4;
+196a : 78040001;
+196b : 78050001;
+196c : B9600800;
+196d : 34020003;
+196e : 34030001;
+196f : 38847918;
+1970 : 38A59284;
+1971 : FBFFE968;
+1972 : E000006D;
+1973 : 09A30070;
+1974 : 29620030;
+1975 : B5631800;
+1976 : 2C64015A;
+1977 : 28410014;
+1978 : 284C0018;
+1979 : 28420010;
+197a : 34840001;
+197b : 0C440000;
+197c : 34620188;
+197d : 28440004;
+197e : 28650188;
+197f : 58240004;
+1980 : 58250000;
+1981 : 2C420008;
+1982 : 0C220008;
+1983 : 34620148;
+1984 : 404E0009;
+1985 : 4046000E;
+1986 : 4045000F;
+1987 : 40440010;
+1988 : 404A000A;
+1989 : 4049000B;
+198a : 4048000C;
+198b : 4047000D;
+198c : 302E0010;
+198d : 30240017;
+198e : 302A0011;
+198f : 30290012;
+1990 : 30280013;
+1991 : 30270014;
+1992 : 30260015;
+1993 : 30250016;
+1994 : 34640140;
+1995 : 28850008;
+1996 : 28860004;
+1997 : 2884000C;
+1998 : 346E0138;
+1999 : 5825001C;
+199a : 58260018;
+199b : 58240020;
+199c : 41C4000A;
+199d : 30240024;
+199e : 40420008;
+199f : 30220025;
+19a0 : 4061015C;
+19a1 : 3181001C;
+19a2 : 1DC50008;
+19a3 : 1D810000;
+19a4 : 4425000E;
+19a5 : 78040001;
+19a6 : B9600800;
+19a7 : 34020003;
+19a8 : 34030001;
+19a9 : 38847928;
+19aa : FBFFE92F;
+19ab : 2DC10008;
+19ac : 34020000;
+19ad : 0D810000;
+19ae : 29610038;
+19af : 28230004;
+19b0 : B9600800;
+19b1 : D8600000;
+19b2 : 09AD0070;
+19b3 : B56D0800;
+19b4 : 34210169;
+19b5 : 40220007;
+19b6 : 20420004;
+19b7 : 7C420000;
+19b8 : 59820004;
+19b9 : 40220007;
+19ba : 20420002;
+19bb : 7C420000;
+19bc : 59820008;
+19bd : 40220007;
+19be : 20420001;
+19bf : 5982000C;
+19c0 : 40220007;
+19c1 : 20420010;
+19c2 : 7C420000;
+19c3 : 59820010;
+19c4 : 40220007;
+19c5 : 20420020;
+19c6 : 7C420000;
+19c7 : 59820014;
+19c8 : 40210007;
+19c9 : 20210008;
+19ca : 7C210000;
+19cb : 59810018;
+19cc : 78010001;
+19cd : 38219F04;
+19ce : 2824001C;
+19cf : 44800007;
+19d0 : 35A20168;
+19d1 : B56D6800;
+19d2 : B9600800;
+19d3 : B5621000;
+19d4 : 35A30134;
+19d5 : D8800000;
+19d6 : 78040001;
+19d7 : 78050001;
+19d8 : B9600800;
+19d9 : 34020003;
+19da : 34030001;
+19db : 3884793C;
+19dc : 38A59284;
+19dd : FBFFE8FC;
+19de : 340C0009;
+19df : B9800800;
+19e0 : 2B9D0004;
+19e1 : 2B8B0018;
+19e2 : 2B8C0014;
+19e3 : 2B8D0010;
+19e4 : 2B8E000C;
+19e5 : 2B8F0008;
+19e6 : 379C008C;
+19e7 : C3A00000;
+19e8 : 379CFFE8;
+19e9 : 5B8B0018;
+19ea : 5B8C0014;
+19eb : 5B8D0010;
+19ec : 5B8E000C;
+19ed : 5B8F0008;
+19ee : 5B9D0004;
+19ef : B8206800;
+19f0 : 282B004C;
+19f1 : 3401000F;
+19f2 : 340F0000;
+19f3 : 54410021;
+19f4 : 084E000C;
+19f5 : 78010001;
+19f6 : 38219768;
+19f7 : B42E7000;
+19f8 : 2DCF0004;
+19f9 : 41CC0009;
+19fa : 35610008;
+19fb : 31620000;
+19fc : 0D6F0002;
+19fd : 34020000;
+19fe : 34030008;
+19ff : F8003E55;
+1a00 : 0D600006;
+1a01 : 41C10008;
+1a02 : 31610020;
+1a03 : 34010001;
+1a04 : 45810008;
+1a05 : 45800004;
+1a06 : 34010002;
+1a07 : 5D81000C;
+1a08 : E0000008;
+1a09 : 29A10358;
+1a0a : 4021000B;
+1a0b : E0000003;
+1a0c : 29A10358;
+1a0d : 4021000D;
+1a0e : 31610021;
+1a0f : E0000005;
+1a10 : 29A10358;
+1a11 : 4021000A;
+1a12 : E3FFFFFC;
+1a13 : 316C0021;
+1a14 : B9E00800;
+1a15 : 2B9D0004;
+1a16 : 2B8B0018;
+1a17 : 2B8C0014;
+1a18 : 2B8D0010;
+1a19 : 2B8E000C;
+1a1a : 2B8F0008;
+1a1b : 379C0018;
+1a1c : C3A00000;
+1a1d : 379CFFF0;
+1a1e : 5B8B0010;
+1a1f : 5B8C000C;
+1a20 : 5B8D0008;
+1a21 : 5B9D0004;
+1a22 : B8205800;
+1a23 : 40410000;
+1a24 : B8406000;
+1a25 : 34030002;
+1a26 : 00210004;
+1a27 : 356D03C0;
+1a28 : 316103A0;
+1a29 : 40410000;
+1a2a : 2021000F;
+1a2b : 316103A1;
+1a2c : 40410001;
+1a2d : 2021000F;
+1a2e : 316103A2;
+1a2f : 2C410002;
+1a30 : 0D6103A4;
+1a31 : 40410004;
+1a32 : 34420006;
+1a33 : 316103A6;
+1a34 : 356103A7;
+1a35 : F8003DA1;
+1a36 : 29820008;
+1a37 : 2981000C;
+1a38 : 34030008;
+1a39 : 596203B8;
+1a3a : 596103BC;
+1a3b : 35820014;
+1a3c : 596003B0;
+1a3d : 596003B4;
+1a3e : B9A00800;
+1a3f : F8003D97;
+1a40 : 2D81001C;
+1a41 : 0D6103C8;
+1a42 : 2D81001E;
+1a43 : 0D6103CA;
+1a44 : 41810021;
+1a45 : 316103CC;
+1a46 : 29610030;
+1a47 : 28210014;
+1a48 : 2C220008;
+1a49 : 4440000A;
+1a4a : B9A01000;
+1a4b : 34030008;
+1a4c : F8003D69;
+1a4d : 5C200009;
+1a4e : 29610030;
+1a4f : 28210014;
+1a50 : 2C220008;
+1a51 : 2D6103C8;
+1a52 : 5C410004;
+1a53 : 41610020;
+1a54 : 38210001;
+1a55 : E0000003;
+1a56 : 41610020;
+1a57 : 202100FE;
+1a58 : 31610020;
+1a59 : 34010000;
+1a5a : 2B9D0004;
+1a5b : 2B8B0010;
+1a5c : 2B8C000C;
+1a5d : 2B8D0008;
+1a5e : 379C0010;
+1a5f : C3A00000;
+1a60 : 379CFFF4;
+1a61 : 5B8B000C;
+1a62 : 5B8C0008;
+1a63 : 5B9D0004;
+1a64 : 34030022;
+1a65 : B8205800;
+1a66 : B8406000;
+1a67 : B8400800;
+1a68 : 34020000;
+1a69 : F8003DEB;
+1a6a : 29610358;
+1a6b : 34030008;
+1a6c : 4021000E;
+1a6d : 31810001;
+1a6e : 29610030;
+1a6f : 2821000C;
+1a70 : 4021001E;
+1a71 : 31810004;
+1a72 : 29620358;
+1a73 : 35810014;
+1a74 : F8003D62;
+1a75 : 29610358;
+1a76 : 2C210008;
+1a77 : 0D81001C;
+1a78 : 2B9D0004;
+1a79 : 2B8B000C;
+1a7a : 2B8C0008;
+1a7b : 379C000C;
+1a7c : C3A00000;
+1a7d : 379CFFF0;
+1a7e : 5B8B0010;
+1a7f : 5B8C000C;
+1a80 : 5B8D0008;
+1a81 : 5B9D0004;
+1a82 : B8405800;
+1a83 : 34020000;
+1a84 : 282D004C;
+1a85 : B8206000;
+1a86 : FBFFFF62;
+1a87 : 2D82037E;
+1a88 : 34420001;
+1a89 : 0D82037E;
+1a8a : 34020002;
+1a8b : 31A20006;
+1a8c : 2D82037E;
+1a8d : 0DA2001E;
+1a8e : 29630000;
+1a8f : 29620004;
+1a90 : 0DA30022;
+1a91 : 59A20024;
+1a92 : 29630008;
+1a93 : 2D62000C;
+1a94 : 3C630010;
+1a95 : B8621000;
+1a96 : 59A20028;
+1a97 : 2B9D0004;
+1a98 : 2B8B0010;
+1a99 : 2B8C000C;
+1a9a : 2B8D0008;
+1a9b : 379C0010;
+1a9c : C3A00000;
+1a9d : 28230028;
+1a9e : 2C240022;
+1a9f : 28210024;
+1aa0 : 58440000;
+1aa1 : 58410004;
+1aa2 : 00610010;
+1aa3 : 3C630010;
+1aa4 : 58410008;
+1aa5 : 5843000C;
+1aa6 : C3A00000;
+1aa7 : 379CFFF4;
+1aa8 : 5B8B000C;
+1aa9 : 5B8C0008;
+1aaa : 5B9D0004;
+1aab : B8205800;
+1aac : 2C210022;
+1aad : B8406000;
+1aae : 34030008;
+1aaf : 0C410004;
+1ab0 : 29610024;
+1ab1 : 58410000;
+1ab2 : 29610028;
+1ab3 : 58410008;
+1ab4 : 2D61002C;
+1ab5 : 0C41000C;
+1ab6 : 4161002F;
+1ab7 : 3041000E;
+1ab8 : 41610030;
+1ab9 : 58410010;
+1aba : 41610031;
+1abb : 58410014;
+1abc : 2D610032;
+1abd : 58410018;
+1abe : 41610034;
+1abf : 3041001C;
+1ac0 : 3441001D;
+1ac1 : 35620035;
+1ac2 : F8003D14;
+1ac3 : 2D61003D;
+1ac4 : 0D810026;
+1ac5 : 4161003F;
+1ac6 : 31810028;
+1ac7 : 78010001;
+1ac8 : 38219F04;
+1ac9 : 28230038;
+1aca : 44600004;
+1acb : B9600800;
+1acc : B9801000;
+1acd : D8600000;
+1ace : 2B9D0004;
+1acf : 2B8B000C;
+1ad0 : 2B8C0008;
+1ad1 : 379C000C;
+1ad2 : C3A00000;
+1ad3 : 28230028;
+1ad4 : 2C240022;
+1ad5 : 28210024;
+1ad6 : 58440000;
+1ad7 : 58410004;
+1ad8 : 00610010;
+1ad9 : 3C630010;
+1ada : 58410008;
+1adb : 5843000C;
+1adc : C3A00000;
+1add : 379CFFF4;
+1ade : 5B8B000C;
+1adf : 5B8C0008;
+1ae0 : 5B9D0004;
+1ae1 : B8406000;
+1ae2 : B8205800;
+1ae3 : 2C220022;
+1ae4 : 28210028;
+1ae5 : 29630024;
+1ae6 : 59820000;
+1ae7 : 00220010;
+1ae8 : 3C210010;
+1ae9 : 59830004;
+1aea : 59820008;
+1aeb : 5981000C;
+1aec : 3562002C;
+1aed : 35810010;
+1aee : 34030008;
+1aef : F8003CE7;
+1af0 : 2D610034;
+1af1 : 0D810018;
+1af2 : 2B9D0004;
+1af3 : 2B8B000C;
+1af4 : 2B8C0008;
+1af5 : 379C000C;
+1af6 : C3A00000;
+1af7 : 379CFFD8;
+1af8 : 5B8B0010;
+1af9 : 5B8C000C;
+1afa : 5B8D0008;
+1afb : 5B9D0004;
+1afc : 3402000B;
+1afd : B8205800;
+1afe : 282C004C;
+1aff : FBFFFEE9;
+1b00 : B8206800;
+1b01 : 2D610394;
+1b02 : 35850007;
+1b03 : 37840014;
+1b04 : 34210001;
+1b05 : 0D610394;
+1b06 : 29610030;
+1b07 : 34020001;
+1b08 : 28230018;
+1b09 : 3461000C;
+1b0a : 5B810014;
+1b0b : 34610008;
+1b0c : 5B810018;
+1b0d : 34610004;
+1b0e : 5B81001C;
+1b0f : 34610018;
+1b10 : 5B810020;
+1b11 : 34610010;
+1b12 : 34630014;
+1b13 : 5B810024;
+1b14 : 5B830028;
+1b15 : 31800006;
+1b16 : 31800007;
+1b17 : 34030000;
+1b18 : 34010006;
+1b19 : 28860000;
+1b1a : 28C60000;
+1b1b : 44C00005;
+1b1c : 40A70000;
+1b1d : BC433000;
+1b1e : B8C73000;
+1b1f : 30A60000;
+1b20 : 34630001;
+1b21 : 34840004;
+1b22 : 5C61FFF7;
+1b23 : 2D610394;
+1b24 : 34020000;
+1b25 : 3403000A;
+1b26 : 0D81001E;
+1b27 : 35810022;
+1b28 : F8003D2C;
+1b29 : 29610030;
+1b2a : 28220018;
+1b2b : 28210014;
+1b2c : 2C420000;
+1b2d : 0D82002C;
+1b2e : 40210024;
+1b2f : 3181002F;
+1b30 : 29610030;
+1b31 : 28210014;
+1b32 : 28210018;
+1b33 : 31810030;
+1b34 : 29610030;
+1b35 : 28210014;
+1b36 : 2821001C;
+1b37 : 31810031;
+1b38 : 29610030;
+1b39 : 28230014;
+1b3a : 28610020;
+1b3b : 0D810032;
+1b3c : 40610025;
+1b3d : 34030008;
+1b3e : 31810034;
+1b3f : 29610030;
+1b40 : 28220014;
+1b41 : 35810035;
+1b42 : 34420010;
+1b43 : F8003C93;
+1b44 : 29610030;
+1b45 : 78030001;
+1b46 : 38639F04;
+1b47 : 28220010;
+1b48 : 28210018;
+1b49 : 2C420000;
+1b4a : 0D82003D;
+1b4b : 4021001C;
+1b4c : 3181003F;
+1b4d : 28630034;
+1b4e : 44600004;
+1b4f : B9600800;
+1b50 : D8600000;
+1b51 : B8206800;
+1b52 : B9600800;
+1b53 : B9A01000;
+1b54 : 34030000;
+1b55 : FBFFFC69;
+1b56 : 2B9D0004;
+1b57 : 2B8B0010;
+1b58 : 2B8C000C;
+1b59 : 2B8D0008;
+1b5a : 379C0028;
+1b5b : C3A00000;
+1b5c : 379CFFE4;
+1b5d : 5B8B000C;
+1b5e : 5B8C0008;
+1b5f : 5B9D0004;
+1b60 : 28220038;
+1b61 : 378C0010;
+1b62 : B8205800;
+1b63 : 28430000;
+1b64 : B9801000;
+1b65 : D8600000;
+1b66 : B9801000;
+1b67 : B9600800;
+1b68 : FBFFFF15;
+1b69 : B8201000;
+1b6a : 34030001;
+1b6b : B9600800;
+1b6c : FBFFFC52;
+1b6d : 5C200017;
+1b6e : 34020008;
+1b6f : B9600800;
+1b70 : 296C004C;
+1b71 : FBFFFE77;
+1b72 : B8201000;
+1b73 : 2D61037E;
+1b74 : 0D81001E;
+1b75 : 29630110;
+1b76 : 29610114;
+1b77 : 0D830022;
+1b78 : 59810024;
+1b79 : 2961011C;
+1b7a : 29640118;
+1b7b : 00230010;
+1b7c : 3C840010;
+1b7d : 2021FFFF;
+1b7e : B8831800;
+1b7f : 59830028;
+1b80 : 5981000C;
+1b81 : 34030000;
+1b82 : B9600800;
+1b83 : FBFFFC3B;
+1b84 : 2B9D0004;
+1b85 : 2B8B000C;
+1b86 : 2B8C0008;
+1b87 : 379C001C;
+1b88 : C3A00000;
+1b89 : 379CFFE4;
+1b8a : 5B8B000C;
+1b8b : 5B8C0008;
+1b8c : 5B9D0004;
+1b8d : 28220038;
+1b8e : B8205800;
+1b8f : 28430000;
+1b90 : 37820010;
+1b91 : D8600000;
+1b92 : B9600800;
+1b93 : 34020001;
+1b94 : 296C004C;
+1b95 : FBFFFE53;
+1b96 : B8201000;
+1b97 : 2D610380;
+1b98 : 34210001;
+1b99 : 2021FFFF;
+1b9a : 0D610380;
+1b9b : 0D81001E;
+1b9c : 2B810014;
+1b9d : 2B830010;
+1b9e : 59810024;
+1b9f : 0D830022;
+1ba0 : 2B810018;
+1ba1 : 2F83001C;
+1ba2 : 3C210010;
+1ba3 : B8231800;
+1ba4 : 59830028;
+1ba5 : B9600800;
+1ba6 : 34030001;
+1ba7 : FBFFFC17;
+1ba8 : 2B9D0004;
+1ba9 : 2B8B000C;
+1baa : 2B8C0008;
+1bab : 379C001C;
+1bac : C3A00000;
+1bad : 379CFFEC;
+1bae : 5B8B0014;
+1baf : 5B8C0010;
+1bb0 : 5B8D000C;
+1bb1 : 5B8E0008;
+1bb2 : 5B9D0004;
+1bb3 : 282B004C;
+1bb4 : B8406800;
+1bb5 : 34020009;
+1bb6 : B8206000;
+1bb7 : FBFFFE31;
+1bb8 : 59600008;
+1bb9 : 29A3000C;
+1bba : B8207000;
+1bbb : 29A10008;
+1bbc : 2062FFFF;
+1bbd : 5962000C;
+1bbe : 2D8203CA;
+1bbf : 3C210010;
+1bc0 : 00630010;
+1bc1 : 0D62001E;
+1bc2 : 29A20000;
+1bc3 : 29A40004;
+1bc4 : B8231800;
+1bc5 : 0D620022;
+1bc6 : 59640024;
+1bc7 : 59630028;
+1bc8 : 358203C0;
+1bc9 : 3561002C;
+1bca : 34030008;
+1bcb : F8003C0B;
+1bcc : 2D8103C8;
+1bcd : B9C01000;
+1bce : 34030000;
+1bcf : 0D610034;
+1bd0 : B9800800;
+1bd1 : FBFFFBED;
+1bd2 : 2B9D0004;
+1bd3 : 2B8B0014;
+1bd4 : 2B8C0010;
+1bd5 : 2B8D000C;
+1bd6 : 2B8E0008;
+1bd7 : 379C0014;
+1bd8 : C3A00000;
+1bd9 : 379CFFE8;
+1bda : 5B8B0018;
+1bdb : 5B8C0014;
+1bdc : 5B8D0010;
+1bdd : 5B8E000C;
+1bde : 5B8F0008;
+1bdf : 5B9D0004;
+1be0 : 28230000;
+1be1 : B8205800;
+1be2 : 28240004;
+1be3 : 48030006;
+1be4 : B8640800;
+1be5 : 340D0000;
+1be6 : 340C0001;
+1be7 : 44200009;
+1be8 : E000000E;
+1be9 : 14620018;
+1bea : 34010080;
+1beb : 204200C0;
+1bec : 340DFFFF;
+1bed : 340CFFFF;
+1bee : 5C410008;
+1bef : E0000005;
+1bf0 : 29620008;
+1bf1 : 340DFFFF;
+1bf2 : 340CFFFF;
+1bf3 : 48220003;
+1bf4 : 340D0000;
+1bf5 : 340C0001;
+1bf6 : B9A00800;
+1bf7 : B9801000;
+1bf8 : F8003AEB;
+1bf9 : 2964000C;
+1bfa : 29630008;
+1bfb : 59610000;
+1bfc : 59620004;
+1bfd : B9A00800;
+1bfe : B9801000;
+1bff : F8003AE4;
+1c00 : 59610008;
+1c01 : 5962000C;
+1c02 : 7804CA00;
+1c03 : E000000F;
+1c04 : 29660004;
+1c05 : 29650000;
+1c06 : 34213B9A;
+1c07 : 34C3FFFF;
+1c08 : F4C33000;
+1c09 : 59630004;
+1c0a : B4441800;
+1c0b : F4431000;
+1c0c : 34A5FFFF;
+1c0d : B4C52800;
+1c0e : B4410800;
+1c0f : 59650000;
+1c10 : 59610008;
+1c11 : 5963000C;
+1c12 : 29610008;
+1c13 : 2962000C;
+1c14 : 4801FFF0;
+1c15 : E000000F;
+1c16 : 29650004;
+1c17 : 29660000;
+1c18 : 35EFC465;
+1c19 : 34A20001;
+1c1a : F4A22800;
+1c1b : 59620004;
+1c1c : B5C31000;
+1c1d : F5C27000;
+1c1e : B4A62800;
+1c1f : B5CF7000;
+1c20 : 59650000;
+1c21 : 596E0008;
+1c22 : 5962000C;
+1c23 : E0000004;
+1c24 : 34013B9A;
+1c25 : 7804CA00;
+1c26 : 78033600;
+1c27 : 296F0008;
+1c28 : 296E000C;
+1c29 : 49E1FFED;
+1c2a : 5DE10002;
+1c2b : 55C4FFEB;
+1c2c : 29630000;
+1c2d : 29640004;
+1c2e : B9A00800;
+1c2f : B9801000;
+1c30 : F8003AB3;
+1c31 : 59610000;
+1c32 : 59620004;
+1c33 : B9E00800;
+1c34 : B9C01000;
+1c35 : B9A01800;
+1c36 : B9802000;
+1c37 : F8003AAC;
+1c38 : 59610008;
+1c39 : 5962000C;
+1c3a : 2B9D0004;
+1c3b : 2B8B0018;
+1c3c : 2B8C0014;
+1c3d : 2B8D0010;
+1c3e : 2B8E000C;
+1c3f : 2B8F0008;
+1c40 : 379C0018;
+1c41 : C3A00000;
+1c42 : 379CFFFC;
+1c43 : 5B9D0004;
+1c44 : 28460004;
+1c45 : 28240004;
+1c46 : 28470000;
+1c47 : 28250000;
+1c48 : B4C42000;
+1c49 : F4C43000;
+1c4a : B4E52800;
+1c4b : B4C52800;
+1c4c : 58250000;
+1c4d : 58240004;
+1c4e : 2844000C;
+1c4f : 28450008;
+1c50 : 2822000C;
+1c51 : 28260008;
+1c52 : B4821000;
+1c53 : F4822000;
+1c54 : B4A62800;
+1c55 : B4852000;
+1c56 : 58240008;
+1c57 : 5822000C;
+1c58 : FBFFFF81;
+1c59 : 2B9D0004;
+1c5a : 379C0004;
+1c5b : C3A00000;
+1c5c : 379CFFFC;
+1c5d : 5B9D0004;
+1c5e : 28440004;
+1c5f : 28260004;
+1c60 : 28450000;
+1c61 : 28270000;
+1c62 : C8C42000;
+1c63 : F4863000;
+1c64 : C8E52800;
+1c65 : C8A62800;
+1c66 : 58250000;
+1c67 : 58240004;
+1c68 : 28460008;
+1c69 : 2825000C;
+1c6a : 2842000C;
+1c6b : 28240008;
+1c6c : C8A21000;
+1c6d : F4452800;
+1c6e : C8862000;
+1c6f : C8852000;
+1c70 : 58240008;
+1c71 : 5822000C;
+1c72 : FBFFFF67;
+1c73 : 2B9D0004;
+1c74 : 379C0004;
+1c75 : C3A00000;
+1c76 : 379CFFE8;
+1c77 : 5B8B0018;
+1c78 : 5B8C0014;
+1c79 : 5B8D0010;
+1c7a : 5B8E000C;
+1c7b : 5B8F0008;
+1c7c : 5B9D0004;
+1c7d : B8205800;
+1c7e : 282F0008;
+1c7f : 296C000C;
+1c80 : 282D0000;
+1c81 : 282E0004;
+1c82 : 018C0001;
+1c83 : 3DE1001F;
+1c84 : 15EF0001;
+1c85 : B82C6000;
+1c86 : 15A2001F;
+1c87 : 596F0008;
+1c88 : 596C000C;
+1c89 : 21C10001;
+1c8a : 38420001;
+1c8b : 4420000B;
+1c8c : 1441001F;
+1c8d : 34031DCD;
+1c8e : 78046500;
+1c8f : F8003A54;
+1c90 : B44C6000;
+1c91 : F44C1000;
+1c92 : B42F0800;
+1c93 : B4410800;
+1c94 : 59610008;
+1c95 : 596C000C;
+1c96 : 3DA2001F;
+1c97 : 01C10001;
+1c98 : 15AD0001;
+1c99 : B8410800;
+1c9a : 596D0000;
+1c9b : 59610004;
+1c9c : 2B9D0004;
+1c9d : 2B8B0018;
+1c9e : 2B8C0014;
+1c9f : 2B8D0010;
+1ca0 : 2B8E000C;
+1ca1 : 2B8F0008;
+1ca2 : 379C0018;
+1ca3 : C3A00000;
+1ca4 : 379CFFF8;
+1ca5 : 5B8B0008;
+1ca6 : 5B9D0004;
+1ca7 : 28220004;
+1ca8 : 28250000;
+1ca9 : 78030001;
+1caa : C8022000;
+1cab : 38637948;
+1cac : 4805000C;
+1cad : 78030001;
+1cae : B8A22000;
+1caf : 38637C58;
+1cb0 : 5C800007;
+1cb1 : 28250008;
+1cb2 : 78030001;
+1cb3 : 38637948;
+1cb4 : 48850003;
+1cb5 : 78030001;
+1cb6 : 38637C58;
+1cb7 : B8402000;
+1cb8 : 28220008;
+1cb9 : 2821000C;
+1cba : 3C460010;
+1cbb : 00250010;
+1cbc : B8C52800;
+1cbd : 14460010;
+1cbe : 48060002;
+1cbf : E0000008;
+1cc0 : C8010800;
+1cc1 : 7C250000;
+1cc2 : C8021000;
+1cc3 : C8452800;
+1cc4 : 3CA50010;
+1cc5 : 00210010;
+1cc6 : B8A12800;
+1cc7 : 780B0001;
+1cc8 : 396BB5F0;
+1cc9 : 78020001;
+1cca : B9600800;
+1ccb : 3842794C;
+1ccc : F8001B44;
+1ccd : B9600800;
+1cce : 2B9D0004;
+1ccf : 2B8B0008;
+1cd0 : 379C0008;
+1cd1 : C3A00000;
+1cd2 : 379CFFCC;
+1cd3 : 5B8B002C;
+1cd4 : 5B8C0028;
+1cd5 : 5B8D0024;
+1cd6 : 5B8E0020;
+1cd7 : 5B8F001C;
+1cd8 : 5B900018;
+1cd9 : 5B910014;
+1cda : 5B920010;
+1cdb : 5B93000C;
+1cdc : 5B940008;
+1cdd : 5B9D0004;
+1cde : 284D0010;
+1cdf : B8207000;
+1ce0 : B8405800;
+1ce1 : B8606000;
+1ce2 : 28530014;
+1ce3 : 49A0000C;
+1ce4 : 5DA00002;
+1ce5 : 5E6D000A;
+1ce6 : 29810000;
+1ce7 : 59610008;
+1ce8 : 29810004;
+1ce9 : 5961000C;
+1cea : 29810000;
+1ceb : 48010002;
+1cec : E0000003;
+1ced : 59600008;
+1cee : 5960000C;
+1cef : 29C10030;
+1cf0 : 29720008;
+1cf1 : 2971000C;
+1cf2 : 28210008;
+1cf3 : 340F003F;
+1cf4 : 1C210018;
+1cf5 : 3430FFFF;
+1cf6 : C9E17800;
+1cf7 : B9E01800;
+1cf8 : BA400800;
+1cf9 : BA201000;
+1cfa : F8003A1F;
+1cfb : B8220800;
+1cfc : 36140001;
+1cfd : 35EF0001;
+1cfe : 3610FFFF;
+1cff : 5C20FFF8;
+1d00 : BA801800;
+1d01 : 34020001;
+1d02 : F8003A08;
+1d03 : B8201800;
+1d04 : 49A30004;
+1d05 : 5DA30005;
+1d06 : 56620002;
+1d07 : E0000003;
+1d08 : 59630010;
+1d09 : 59620014;
+1d0a : 29640010;
+1d0b : 29650014;
+1d0c : 48640004;
+1d0d : 5C640008;
+1d0e : 54450002;
+1d0f : E0000006;
+1d10 : 34A10001;
+1d11 : F4A12800;
+1d12 : 59610014;
+1d13 : B4A42000;
+1d14 : 59640010;
+1d15 : 29810000;
+1d16 : 48010002;
+1d17 : E0000003;
+1d18 : 59920000;
+1d19 : 59910004;
+1d1a : 29810000;
+1d1b : 48010002;
+1d1c : E0000003;
+1d1d : 59800000;
+1d1e : 59800004;
+1d1f : 2963000C;
+1d20 : 29660008;
+1d21 : 29810000;
+1d22 : 3C620001;
+1d23 : 3CC50001;
+1d24 : F4623800;
+1d25 : B4431800;
+1d26 : B4E52800;
+1d27 : F4431000;
+1d28 : B4A62800;
+1d29 : B4451000;
+1d2a : 29840004;
+1d2b : 48220004;
+1d2c : 5C22001D;
+1d2d : 54830002;
+1d2e : E000001B;
+1d2f : 3C260010;
+1d30 : 00850010;
+1d31 : 78040001;
+1d32 : B9C00800;
+1d33 : 34020004;
+1d34 : 34030001;
+1d35 : 38847958;
+1d36 : B8C52800;
+1d37 : FBFFE5A2;
+1d38 : 29640014;
+1d39 : 29630010;
+1d3a : 2965000C;
+1d3b : 34810001;
+1d3c : F4812000;
+1d3d : 3CA20001;
+1d3e : B4832000;
+1d3f : 29630008;
+1d40 : F4A22800;
+1d41 : B4221000;
+1d42 : 3C630001;
+1d43 : F4220800;
+1d44 : B4A31800;
+1d45 : B4831800;
+1d46 : B4230800;
+1d47 : 59810000;
+1d48 : 59820004;
+1d49 : 296D0014;
+1d4a : 29610010;
+1d4b : 2964000C;
+1d4c : 35A2FFFF;
+1d4d : F5A21800;
+1d4e : 3421FFFF;
+1d4f : B4610800;
+1d50 : 29630008;
+1d51 : F8003992;
+1d52 : 29830004;
+1d53 : 29840000;
+1d54 : B4621000;
+1d55 : F4621800;
+1d56 : B4810800;
+1d57 : B4610800;
+1d58 : 5B810030;
+1d59 : 5B820034;
+1d5a : 37810030;
+1d5b : B9A01000;
+1d5c : FBFFEB12;
+1d5d : 2B810034;
+1d5e : 2B860030;
+1d5f : 78040001;
+1d60 : 5961000C;
+1d61 : 59660008;
+1d62 : 59860000;
+1d63 : 59810004;
+1d64 : 00270010;
+1d65 : 29650014;
+1d66 : 3CC60010;
+1d67 : B9C00800;
+1d68 : 34020004;
+1d69 : 34030001;
+1d6a : 38847970;
+1d6b : B8C73000;
+1d6c : FBFFE56D;
+1d6d : 2B9D0004;
+1d6e : 2B8B002C;
+1d6f : 2B8C0028;
+1d70 : 2B8D0024;
+1d71 : 2B8E0020;
+1d72 : 2B8F001C;
+1d73 : 2B900018;
+1d74 : 2B910014;
+1d75 : 2B920010;
+1d76 : 2B93000C;
+1d77 : 2B940008;
+1d78 : 379C0034;
+1d79 : C3A00000;
+1d7a : 379CFFD4;
+1d7b : 5B8B001C;
+1d7c : 5B8C0018;
+1d7d : 5B8D0014;
+1d7e : 5B8E0010;
+1d7f : 5B8F000C;
+1d80 : 5B900008;
+1d81 : 5B9D0004;
+1d82 : 282E0000;
+1d83 : B8208000;
+1d84 : 28410004;
+1d85 : 29CB0004;
+1d86 : 284D0000;
+1d87 : B8406000;
+1d88 : 296F0024;
+1d89 : 29620020;
+1d8a : 78050001;
+1d8b : B42F7800;
+1d8c : F42F0800;
+1d8d : B5A26800;
+1d8e : B42D6800;
+1d8f : 29C10008;
+1d90 : 38A58EE4;
+1d91 : 28A40000;
+1d92 : 1C220016;
+1d93 : 34030000;
+1d94 : 596D0020;
+1d95 : 1441001F;
+1d96 : 596F0024;
+1d97 : F800394C;
+1d98 : 00440010;
+1d99 : 3C230010;
+1d9a : 3C420010;
+1d9b : B8831800;
+1d9c : 49A3000B;
+1d9d : 5DA30002;
+1d9e : 55E20009;
+1d9f : C8021000;
+1da0 : 7C410000;
+1da1 : C8031800;
+1da2 : C8611800;
+1da3 : 486D0004;
+1da4 : 5C6D0005;
+1da5 : 544F0002;
+1da6 : E0000003;
+1da7 : 59630020;
+1da8 : 59620024;
+1da9 : 29620020;
+1daa : 29630024;
+1dab : 48400003;
+1dac : 5C400004;
+1dad : 44620003;
+1dae : 340B0000;
+1daf : E0000002;
+1db0 : 340BFFFF;
+1db1 : 5B820028;
+1db2 : 5B83002C;
+1db3 : 45600007;
+1db4 : C8031800;
+1db5 : 7C610000;
+1db6 : C8021000;
+1db7 : C8411000;
+1db8 : 5B820028;
+1db9 : 5B83002C;
+1dba : 29C20008;
+1dbb : 37810028;
+1dbc : 1C420016;
+1dbd : FBFFEAB1;
+1dbe : 45600009;
+1dbf : 2B81002C;
+1dc0 : 2B820028;
+1dc1 : C8010800;
+1dc2 : 7C230000;
+1dc3 : C8021000;
+1dc4 : C8431000;
+1dc5 : 5B820028;
+1dc6 : 5B81002C;
+1dc7 : 29820000;
+1dc8 : 29830004;
+1dc9 : 48400003;
+1dca : 5C400004;
+1dcb : 44620003;
+1dcc : 340B0000;
+1dcd : E0000002;
+1dce : 340BFFFF;
+1dcf : 5B820020;
+1dd0 : 5B830024;
+1dd1 : 45600007;
+1dd2 : C8031800;
+1dd3 : 7C610000;
+1dd4 : C8021000;
+1dd5 : C8411000;
+1dd6 : 5B820020;
+1dd7 : 5B830024;
+1dd8 : 2A010000;
+1dd9 : 28220008;
+1dda : 37810020;
+1ddb : 1C420014;
+1ddc : FBFFEA92;
+1ddd : 45600009;
+1dde : 2B810024;
+1ddf : 2B820020;
+1de0 : C8010800;
+1de1 : 7C230000;
+1de2 : C8021000;
+1de3 : C8431000;
+1de4 : 5B820020;
+1de5 : 5B810024;
+1de6 : 2B83002C;
+1de7 : 2B820024;
+1de8 : 2B810020;
+1de9 : 2B840028;
+1dea : B4621000;
+1deb : F4621800;
+1dec : B4810800;
+1ded : B4610800;
+1dee : 2B9D0004;
+1def : 2B8B001C;
+1df0 : 2B8C0018;
+1df1 : 2B8D0014;
+1df2 : 2B8E0010;
+1df3 : 2B8F000C;
+1df4 : 2B900008;
+1df5 : 379C002C;
+1df6 : C3A00000;
+1df7 : 379CFFF8;
+1df8 : 5B8B0008;
+1df9 : 5B9D0004;
+1dfa : 28220030;
+1dfb : 28240038;
+1dfc : B8205800;
+1dfd : 28430004;
+1dfe : 58600038;
+1dff : 5860003C;
+1e00 : 28430014;
+1e01 : 0C200120;
+1e02 : 0C600008;
+1e03 : 28830014;
+1e04 : 44600013;
+1e05 : D8600000;
+1e06 : 3402FFFF;
+1e07 : 5C220008;
+1e08 : 78040001;
+1e09 : B9600800;
+1e0a : 34020004;
+1e0b : 34030001;
+1e0c : 38847994;
+1e0d : FBFFE4CC;
+1e0e : 34010000;
+1e0f : 29620030;
+1e10 : C8010800;
+1e11 : 3C21000A;
+1e12 : 28420004;
+1e13 : 1423001F;
+1e14 : 58410024;
+1e15 : 58430020;
+1e16 : E000000D;
+1e17 : 28420008;
+1e18 : 28420010;
+1e19 : 20420001;
+1e1a : 5C430005;
+1e1b : 28840008;
+1e1c : 34020000;
+1e1d : 34030000;
+1e1e : D8800000;
+1e1f : 29610030;
+1e20 : 28210004;
+1e21 : 58200020;
+1e22 : 58200024;
+1e23 : B9600800;
+1e24 : 34020004;
+1e25 : FBFFE534;
+1e26 : 29610030;
+1e27 : 78040001;
+1e28 : 34020004;
+1e29 : 28260004;
+1e2a : 34030001;
+1e2b : B9600800;
+1e2c : 28C50020;
+1e2d : 28C60024;
+1e2e : 388479B0;
+1e2f : FBFFE4AA;
+1e30 : 2B9D0004;
+1e31 : 2B8B0008;
+1e32 : 379C0008;
+1e33 : C3A00000;
+1e34 : 379CFFE0;
+1e35 : 5B8B0010;
+1e36 : 5B8C000C;
+1e37 : 5B8D0008;
+1e38 : 5B9D0004;
+1e39 : B8606000;
+1e3a : 28850000;
+1e3b : 28830004;
+1e3c : B8205800;
+1e3d : 28810008;
+1e3e : 2884000C;
+1e3f : 59850000;
+1e40 : 59830004;
+1e41 : 5984000C;
+1e42 : 59810008;
+1e43 : B9800800;
+1e44 : FBFFFE18;
+1e45 : B9800800;
+1e46 : FBFFFE5E;
+1e47 : 78040001;
+1e48 : B8202800;
+1e49 : 34020004;
+1e4a : B9600800;
+1e4b : 34030001;
+1e4c : 388479D0;
+1e4d : FBFFE48C;
+1e4e : 29810004;
+1e4f : 29820000;
+1e50 : B8411000;
+1e51 : 34010000;
+1e52 : 44400017;
+1e53 : 29620030;
+1e54 : 28420008;
+1e55 : 28420010;
+1e56 : 20420001;
+1e57 : 5C400012;
+1e58 : 29610038;
+1e59 : 378D0014;
+1e5a : B9A01000;
+1e5b : 28230000;
+1e5c : B9600800;
+1e5d : D8600000;
+1e5e : B9A00800;
+1e5f : B9801000;
+1e60 : FBFFFDFC;
+1e61 : 29610038;
+1e62 : B9A01000;
+1e63 : 28230004;
+1e64 : B9600800;
+1e65 : D8600000;
+1e66 : B9600800;
+1e67 : FBFFFF90;
+1e68 : 34010001;
+1e69 : 2B9D0004;
+1e6a : 2B8B0010;
+1e6b : 2B8C000C;
+1e6c : 2B8D0008;
+1e6d : 379C0020;
+1e6e : C3A00000;
+1e6f : 379CFFFC;
+1e70 : 5B9D0004;
+1e71 : B8201000;
+1e72 : 28210030;
+1e73 : 284600A8;
+1e74 : 284500AC;
+1e75 : 284400B0;
+1e76 : 284300B4;
+1e77 : 28210004;
+1e78 : 34420098;
+1e79 : 58260000;
+1e7a : 58250004;
+1e7b : 58240008;
+1e7c : 5823000C;
+1e7d : FBFFFDDF;
+1e7e : 2B9D0004;
+1e7f : 379C0004;
+1e80 : C3A00000;
+1e81 : 379CFFE4;
+1e82 : 5B8B001C;
+1e83 : 5B8C0018;
+1e84 : 5B8D0014;
+1e85 : 5B8E0010;
+1e86 : 5B8F000C;
+1e87 : 5B900008;
+1e88 : 5B9D0004;
+1e89 : 28220030;
+1e8a : 2823009C;
+1e8b : B8205800;
+1e8c : 284D0004;
+1e8d : 284C0010;
+1e8e : 28220098;
+1e8f : B8431000;
+1e90 : 5C40000B;
+1e91 : 282300A0;
+1e92 : 282400A4;
+1e93 : B8641800;
+1e94 : 5C620007;
+1e95 : 78040001;
+1e96 : 34020004;
+1e97 : 34030002;
+1e98 : 38847A14;
+1e99 : FBFFE440;
+1e9a : E0000088;
+1e9b : 296400C8;
+1e9c : 296300CC;
+1e9d : 296200D0;
+1e9e : 296100D4;
+1e9f : 35AE0010;
+1ea0 : 357000B8;
+1ea1 : 59A40010;
+1ea2 : 59A30014;
+1ea3 : 59A20018;
+1ea4 : 59A1001C;
+1ea5 : BA001000;
+1ea6 : B9C00800;
+1ea7 : FBFFFDB5;
+1ea8 : 35610098;
+1ea9 : FBFFFDFB;
+1eaa : 78040001;
+1eab : B8202800;
+1eac : 34020004;
+1ead : 34030002;
+1eae : 388479EC;
+1eaf : B9600800;
+1eb0 : FBFFE429;
+1eb1 : 356100A8;
+1eb2 : FBFFFDF2;
+1eb3 : 78040001;
+1eb4 : B8202800;
+1eb5 : 34020004;
+1eb6 : 34030002;
+1eb7 : 388479F4;
+1eb8 : B9600800;
+1eb9 : FBFFE420;
+1eba : BA000800;
+1ebb : FBFFFDE9;
+1ebc : 78040001;
+1ebd : B8202800;
+1ebe : 34020004;
+1ebf : 34030002;
+1ec0 : 38847A34;
+1ec1 : B9600800;
+1ec2 : FBFFE417;
+1ec3 : 356100C8;
+1ec4 : FBFFFDE0;
+1ec5 : 78040001;
+1ec6 : B8202800;
+1ec7 : 34020004;
+1ec8 : 34030002;
+1ec9 : 38847A3C;
+1eca : B9600800;
+1ecb : FBFFE40E;
+1ecc : B9A00800;
+1ecd : FBFFFDD7;
+1ece : 78040001;
+1ecf : B8202800;
+1ed0 : 34020004;
+1ed1 : 34030001;
+1ed2 : 38847A44;
+1ed3 : B9600800;
+1ed4 : FBFFE405;
+1ed5 : B9C00800;
+1ed6 : FBFFFDCE;
+1ed7 : 78040001;
+1ed8 : B8202800;
+1ed9 : 34020004;
+1eda : B9600800;
+1edb : 34030001;
+1edc : 38847A5C;
+1edd : FBFFE3FC;
+1ede : 29610030;
+1edf : 358F0018;
+1ee0 : 28230004;
+1ee1 : 28650000;
+1ee2 : 28640004;
+1ee3 : 28620008;
+1ee4 : 2861000C;
+1ee5 : 59850018;
+1ee6 : 5984001C;
+1ee7 : 59820020;
+1ee8 : 59810024;
+1ee9 : 34620010;
+1eea : B9E00800;
+1eeb : FBFFFD57;
+1eec : B9E00800;
+1eed : FBFFFD89;
+1eee : B9E00800;
+1eef : FBFFFDB5;
+1ef0 : 78040001;
+1ef1 : B8202800;
+1ef2 : 34020004;
+1ef3 : B9600800;
+1ef4 : 34030001;
+1ef5 : 38847A74;
+1ef6 : FBFFE3E3;
+1ef7 : 2981001C;
+1ef8 : 298E0018;
+1ef9 : B9C17000;
+1efa : 5DC00028;
+1efb : 35A20028;
+1efc : B9600800;
+1efd : 35830020;
+1efe : FBFFFDD4;
+1eff : B9A02000;
+1f00 : B9600800;
+1f01 : B9E01000;
+1f02 : 35830008;
+1f03 : FBFFFF31;
+1f04 : B8206800;
+1f05 : 5C2E001D;
+1f06 : 35610030;
+1f07 : 35820010;
+1f08 : FBFFFE72;
+1f09 : 29630030;
+1f0a : 28630008;
+1f0b : 28640010;
+1f0c : 20840001;
+1f0d : 5C8D000B;
+1f0e : 3C210010;
+1f0f : 00420010;
+1f10 : B8221000;
+1f11 : 29610038;
+1f12 : C8021000;
+1f13 : 28230010;
+1f14 : 5C640002;
+1f15 : 2823000C;
+1f16 : B9600800;
+1f17 : D8600000;
+1f18 : 29610030;
+1f19 : 78040001;
+1f1a : 34020004;
+1f1b : 28210004;
+1f1c : 34030002;
+1f1d : 388479FC;
+1f1e : 28250024;
+1f1f : B9600800;
+1f20 : 14A5000A;
+1f21 : FBFFE3B8;
+1f22 : 2B9D0004;
+1f23 : 2B8B001C;
+1f24 : 2B8C0018;
+1f25 : 2B8D0014;
+1f26 : 2B8E0010;
+1f27 : 2B8F000C;
+1f28 : 2B900008;
+1f29 : 379C001C;
+1f2a : C3A00000;
+1f2b : 379CFFF0;
+1f2c : 5B8B0010;
+1f2d : 5B8C000C;
+1f2e : 5B8D0008;
+1f2f : 5B9D0004;
+1f30 : 282B000C;
+1f31 : B8206000;
+1f32 : 34010001;
+1f33 : 59610000;
+1f34 : 29810024;
+1f35 : 48200002;
+1f36 : 34010001;
+1f37 : 0D61000C;
+1f38 : 29810008;
+1f39 : 5C200002;
+1f3a : 59820008;
+1f3b : 298D0008;
+1f3c : 35610010;
+1f3d : 3403000C;
+1f3e : B9A01000;
+1f3f : F8003897;
+1f40 : 2D62000C;
+1f41 : 34010001;
+1f42 : 5C410004;
+1f43 : 29810000;
+1f44 : 28210024;
+1f45 : 64210002;
+1f46 : 59610020;
+1f47 : 29A10020;
+1f48 : 2D67000C;
+1f49 : 34020000;
+1f4a : 3161001C;
+1f4b : 29A10024;
+1f4c : 34060002;
+1f4d : 34050001;
+1f4e : 3161001D;
+1f4f : 29A10028;
+1f50 : 3404FFFF;
+1f51 : 3161001E;
+1f52 : E000000D;
+1f53 : 08410418;
+1f54 : 29880000;
+1f55 : B5010800;
+1f56 : 44600004;
+1f57 : 28230024;
+1f58 : 44660002;
+1f59 : 59600020;
+1f5a : 582203D8;
+1f5b : 58250000;
+1f5c : 58200010;
+1f5d : 0C240122;
+1f5e : 34420001;
+1f5f : 29630020;
+1f60 : 48E2FFF3;
+1f61 : 44600007;
+1f62 : 340100FF;
+1f63 : 59610010;
+1f64 : 78010001;
+1f65 : 38217A98;
+1f66 : 340200FF;
+1f67 : F80018B7;
+1f68 : 78010001;
+1f69 : 38219F04;
+1f6a : 28230004;
+1f6b : 34010000;
+1f6c : 44600004;
+1f6d : B9800800;
+1f6e : B9A01000;
+1f6f : D8600000;
+1f70 : 2B9D0004;
+1f71 : 2B8B0010;
+1f72 : 2B8C000C;
+1f73 : 2B8D0008;
+1f74 : 379C0010;
+1f75 : C3A00000;
+1f76 : 379CFFFC;
+1f77 : 5B9D0004;
+1f78 : 78020001;
+1f79 : 38429F04;
+1f7a : 28430008;
+1f7b : 34020000;
+1f7c : 44600003;
+1f7d : D8600000;
+1f7e : B8201000;
+1f7f : B8400800;
+1f80 : 2B9D0004;
+1f81 : 379C0004;
+1f82 : C3A00000;
+1f83 : 78010001;
+1f84 : 38219F74;
+1f85 : 28220000;
+1f86 : 78010001;
+1f87 : 38219DA8;
+1f88 : E0000004;
+1f89 : 28440000;
+1f8a : 44640004;
+1f8b : 3421000C;
+1f8c : 28230000;
+1f8d : 5C60FFFC;
+1f8e : 28210004;
+1f8f : C3A00000;
+1f90 : 379CFFF0;
+1f91 : 5B8B0008;
+1f92 : 5B9D0004;
+1f93 : 5B81000C;
+1f94 : 5B820010;
+1f95 : B8605800;
+1f96 : B8401800;
+1f97 : 5C20000E;
+1f98 : 78020001;
+1f99 : 38428EE8;
+1f9a : 28410000;
+1f9b : 5461000A;
+1f9c : 78010001;
+1f9d : 78020001;
+1f9e : 3821B60C;
+1f9f : 38427ABC;
+1fa0 : 5D600003;
+1fa1 : 78020001;
+1fa2 : 38427AC4;
+1fa3 : F800186D;
+1fa4 : E0000010;
+1fa5 : 78030001;
+1fa6 : 38638EC8;
+1fa7 : 28620000;
+1fa8 : 3781000C;
+1fa9 : FBFFE8C5;
+1faa : B8202000;
+1fab : 78020001;
+1fac : 78010001;
+1fad : 2B830010;
+1fae : 3821B60C;
+1faf : 38427AC8;
+1fb0 : 5D600003;
+1fb1 : 78020001;
+1fb2 : 38427AD4;
+1fb3 : F800185D;
+1fb4 : 78010001;
+1fb5 : 3821B60C;
+1fb6 : 2B9D0004;
+1fb7 : 2B8B0008;
+1fb8 : 379C0010;
+1fb9 : C3A00000;
+1fba : 379CFF10;
+1fbb : 5B8B0010;
+1fbc : 5B8C000C;
+1fbd : 5B8D0008;
+1fbe : 5B9D0004;
+1fbf : 78010001;
+1fc0 : 38219F74;
+1fc1 : 28210000;
+1fc2 : 282B0018;
+1fc3 : 78010001;
+1fc4 : 3821C294;
+1fc5 : 28220000;
+1fc6 : 34010000;
+1fc7 : 444000DB;
+1fc8 : 780C0001;
+1fc9 : 398CB608;
+1fca : 29810000;
+1fcb : 5C200008;
+1fcc : F8001E3E;
+1fcd : 78020001;
+1fce : 384296F8;
+1fcf : 28420000;
+1fd0 : A4401000;
+1fd1 : B4410800;
+1fd2 : 59810000;
+1fd3 : 78010001;
+1fd4 : 3821BFB4;
+1fd5 : 28210000;
+1fd6 : 29620058;
+1fd7 : 5C220007;
+1fd8 : 78010001;
+1fd9 : 3821B0D8;
+1fda : 28230000;
+1fdb : 34020003;
+1fdc : 34010000;
+1fdd : 446200C5;
+1fde : F8001E2C;
+1fdf : 78030001;
+1fe0 : 78020001;
+1fe1 : 386396F8;
+1fe2 : 3842B608;
+1fe3 : 28630000;
+1fe4 : 28420000;
+1fe5 : B4621000;
+1fe6 : C8220800;
+1fe7 : 4C200007;
+1fe8 : 78010001;
+1fe9 : 3821B0D8;
+1fea : 28230000;
+1feb : 34020003;
+1fec : 34010000;
+1fed : 5C6200B5;
+1fee : F8001E1C;
+1fef : 78020001;
+1ff0 : 3842B608;
+1ff1 : 58410000;
+1ff2 : 29620058;
+1ff3 : 78010001;
+1ff4 : 3821BFB4;
+1ff5 : 58220000;
+1ff6 : 378100DC;
+1ff7 : 378200E8;
+1ff8 : F8002317;
+1ff9 : 34020000;
+1ffa : 37810014;
+1ffb : F8000326;
+1ffc : 378100F0;
+1ffd : 378200EC;
+1ffe : F8001DD8;
+1fff : 2B8300EC;
+2000 : 2B8400F0;
+2001 : 2B820040;
+2002 : 78010001;
+2003 : 38217ADC;
+2004 : F800181A;
+2005 : 2B820048;
+2006 : 78010001;
+2007 : 38217AF0;
+2008 : 7C420000;
+2009 : F8001815;
+200a : FBFFFF79;
+200b : B8201000;
+200c : 78010001;
+200d : 38217AFC;
+200e : F8001810;
+200f : 78010001;
+2010 : 3821B0D8;
+2011 : 28220000;
+2012 : 34010003;
+2013 : 5C41000A;
+2014 : 29620010;
+2015 : 78010001;
+2016 : 38217B04;
+2017 : 20420001;
+2018 : F8001806;
+2019 : 78010001;
+201a : 38217B0C;
+201b : 35620060;
+201c : F8001802;
+201d : 34010000;
+201e : 378200E4;
+201f : 780D0001;
+2020 : F80033E2;
+2021 : 340C0000;
+2022 : 39AD7B18;
+2023 : E0000008;
+2024 : B9800800;
+2025 : F8003442;
+2026 : B8201800;
+2027 : B9801000;
+2028 : B9A00800;
+2029 : F80017F5;
+202a : 358C0001;
+202b : 2B8100E4;
+202c : 482CFFF8;
+202d : 2B8200E0;
+202e : 2B8300E8;
+202f : 78010001;
+2030 : 38217B24;
+2031 : F80017ED;
+2032 : 78010001;
+2033 : 3821B0D8;
+2034 : 28220000;
+2035 : 34010003;
+2036 : 5C41004E;
+2037 : 29620044;
+2038 : 29610040;
+2039 : 34030000;
+203a : FBFFFF56;
+203b : B8201000;
+203c : 78010001;
+203d : 38217B34;
+203e : F80017E0;
+203f : 29620054;
+2040 : 29610050;
+2041 : 34030000;
+2042 : FBFFFF4E;
+2043 : B8201000;
+2044 : 78010001;
+2045 : 38217B3C;
+2046 : F80017D8;
+2047 : 29620018;
+2048 : 2963001C;
+2049 : 78010001;
+204a : 38217B44;
+204b : F80017D3;
+204c : 29620020;
+204d : 29630024;
+204e : 78010001;
+204f : 38217B58;
+2050 : F80017CE;
+2051 : 29620054;
+2052 : 29630044;
+2053 : 78010001;
+2054 : 3C420001;
+2055 : 38217B6C;
+2056 : C8621000;
+2057 : F80017C7;
+2058 : 29620018;
+2059 : 29610044;
+205a : 29630040;
+205b : 1444001F;
+205c : C8221000;
+205d : F4410800;
+205e : C8641800;
+205f : C8611800;
+2060 : 2961001C;
+2061 : 1424001F;
+2062 : C8410800;
+2063 : F4221000;
+2064 : C8641800;
+2065 : C8621000;
+2066 : 29630020;
+2067 : 1464001F;
+2068 : C8231800;
+2069 : F4610800;
+206a : C8441000;
+206b : C8410800;
+206c : 29620024;
+206d : 1444001F;
+206e : C8621000;
+206f : F4431800;
+2070 : C8240800;
+2071 : C8230800;
+2072 : 34030000;
+2073 : FBFFFF1D;
+2074 : B8201000;
+2075 : 78010001;
+2076 : 38217B78;
+2077 : F80017A7;
+2078 : 2962008C;
+2079 : 78010001;
+207a : 38217B84;
+207b : F80017A3;
+207c : 29620048;
+207d : 78010001;
+207e : 38217B8C;
+207f : F800179F;
+2080 : 29620058;
+2081 : 78010001;
+2082 : 38217B98;
+2083 : F800179B;
+2084 : 3401FFFF;
+2085 : F80033ED;
+2086 : B8206000;
+2087 : 34010000;
+2088 : F80033EA;
+2089 : B8205800;
+208a : 34010001;
+208b : F80033E7;
+208c : 78050001;
+208d : B8202000;
+208e : B8A00800;
+208f : B9801000;
+2090 : B9601800;
+2091 : 38217BA4;
+2092 : F800178C;
+2093 : 78010001;
+2094 : 38217BB8;
+2095 : F8002175;
+2096 : 2023FFFF;
+2097 : 08632710;
+2098 : B8201000;
+2099 : 14420010;
+209a : 14630010;
+209b : 78010001;
+209c : 38217BBC;
+209d : F8001781;
+209e : 78010001;
+209f : 38218798;
+20a0 : F800177E;
+20a1 : 34010001;
+20a2 : 2B9D0004;
+20a3 : 2B8B0010;
+20a4 : 2B8C000C;
+20a5 : 2B8D0008;
+20a6 : 379C00F0;
+20a7 : C3A00000;
+20a8 : 379CFF0C;
+20a9 : 5B8B0014;
+20aa : 5B8C0010;
+20ab : 5B9D000C;
+20ac : F8001DF6;
+20ad : B8205800;
+20ae : F8001DFA;
+20af : A02B1000;
+20b0 : 34010000;
+20b1 : 5C40005F;
+20b2 : 780B0001;
+20b3 : 396BB624;
+20b4 : 29610000;
+20b5 : 5C220004;
+20b6 : F8001D54;
+20b7 : 3421FC17;
+20b8 : 59610000;
+20b9 : 780B0001;
+20ba : F8001D50;
+20bb : 396BB624;
+20bc : 29620000;
+20bd : C8220800;
+20be : 3422FC18;
+20bf : 34010000;
+20c0 : 48020050;
+20c1 : F8001D49;
+20c2 : 59610000;
+20c3 : 34010000;
+20c4 : F8001DCC;
+20c5 : 378100F4;
+20c6 : 378200F0;
+20c7 : F8001D0F;
+20c8 : 2B8100F4;
+20c9 : 2B8200F0;
+20ca : 780B0001;
+20cb : 396B9F74;
+20cc : F8001E0D;
+20cd : 378100E0;
+20ce : 378200EC;
+20cf : F8002240;
+20d0 : 2B8300EC;
+20d1 : 2B8100E0;
+20d2 : 2B8200E4;
+20d3 : F8001E0C;
+20d4 : 34020000;
+20d5 : 37810018;
+20d6 : F800024B;
+20d7 : 2B810044;
+20d8 : 2B82004C;
+20d9 : 7C210000;
+20da : 7C420000;
+20db : F8001DE9;
+20dc : 29610000;
+20dd : 40210003;
+20de : F8001DEF;
+20df : 78010001;
+20e0 : 3821B0D8;
+20e1 : 28220000;
+20e2 : 34010003;
+20e3 : 5C410012;
+20e4 : 29610000;
+20e5 : 28290018;
+20e6 : 292A0048;
+20e7 : 29260054;
+20e8 : 29240044;
+20e9 : 29210010;
+20ea : 29230040;
+20eb : 29250050;
+20ec : 41220017;
+20ed : 2928008C;
+20ee : 5B8A0004;
+20ef : 3CC70001;
+20f0 : 29290058;
+20f1 : 20210001;
+20f2 : C8873800;
+20f3 : 5B890008;
+20f4 : F8001DBB;
+20f5 : 34010000;
+20f6 : 378200E8;
+20f7 : F800330B;
+20f8 : 2B8200E8;
+20f9 : 34010008;
+20fa : 4C220002;
+20fb : 5B8100E8;
+20fc : 340B0000;
+20fd : 340C0000;
+20fe : E0000007;
+20ff : B9600800;
+2100 : F8003367;
+2101 : 20210001;
+2102 : BC2B0800;
+2103 : 356B0001;
+2104 : B9816000;
+2105 : 2B8100E8;
+2106 : 482BFFF9;
+2107 : B9800800;
+2108 : F8001DCB;
+2109 : 78010001;
+210a : 38217BB8;
+210b : F80020FF;
+210c : F8001DDA;
+210d : 34010001;
+210e : F8001D82;
+210f : 34010001;
+2110 : 2B9D000C;
+2111 : 2B8B0014;
+2112 : 2B8C0010;
+2113 : 379C00F4;
+2114 : C3A00000;
+2115 : 379CFFF4;
+2116 : 5B8B000C;
+2117 : 5B8C0008;
+2118 : 5B9D0004;
+2119 : 780B0001;
+211a : 396B9F74;
+211b : 29610000;
+211c : 78020001;
+211d : 38427BCC;
+211e : 282C0018;
+211f : 34010004;
+2120 : F8000AC8;
+2121 : FBFFFE62;
+2122 : 78020001;
+2123 : B8201800;
+2124 : 38427BDC;
+2125 : 34010007;
+2126 : F8000AC2;
+2127 : 29810010;
+2128 : 44200005;
+2129 : 29610000;
+212a : 28220000;
+212b : 34010009;
+212c : 44410007;
+212d : 78020001;
+212e : 34010001;
+212f : 38427BE0;
+2130 : F8000AB8;
+2131 : 34010000;
+2132 : E0000006;
+2133 : 78020001;
+2134 : 34010004;
+2135 : 38427BF8;
+2136 : F8000AB2;
+2137 : 34010001;
+2138 : 2B9D0004;
+2139 : 2B8B000C;
+213a : 2B8C0008;
+213b : 379C000C;
+213c : C3A00000;
+213d : 379CFEE4;
+213e : 5B8B0020;
+213f : 5B8C001C;
+2140 : 5B8D0018;
+2141 : 5B8E0014;
+2142 : 5B8F0010;
+2143 : 5B90000C;
+2144 : 5B910008;
+2145 : 5B9D0004;
+2146 : 78010001;
+2147 : 38219F74;
+2148 : 28210000;
+2149 : 780C0001;
+214a : 398CB62C;
+214b : 282B0018;
+214c : 29810000;
+214d : 5C200008;
+214e : F8001CBC;
+214f : 78020001;
+2150 : 384296F8;
+2151 : 28420000;
+2152 : A4401000;
+2153 : B4410800;
+2154 : 59810000;
+2155 : F8001CB5;
+2156 : 78030001;
+2157 : 78020001;
+2158 : 386396F8;
+2159 : 3842B62C;
+215a : 28630000;
+215b : 28420000;
+215c : B4621000;
+215d : C8220800;
+215e : 4C200007;
+215f : 78010001;
+2160 : 3821B628;
+2161 : 28210000;
+2162 : 29620058;
+2163 : 340C0000;
+2164 : 442201B2;
+2165 : F8001CA5;
+2166 : 78020001;
+2167 : 3842B62C;
+2168 : 58410000;
+2169 : 29620058;
+216a : 78010001;
+216b : 3821B628;
+216c : 58220000;
+216d : F8000A9A;
+216e : 78030001;
+216f : 386396E8;
+2170 : 28630000;
+2171 : 78020001;
+2172 : 34010004;
+2173 : 38427C14;
+2174 : F8000A74;
+2175 : 78020001;
+2176 : 34010087;
+2177 : 38427C30;
+2178 : F8000A70;
+2179 : 37810104;
+217a : 37820114;
+217b : F8002194;
+217c : 78020001;
+217d : 34010004;
+217e : 38427C3C;
+217f : F8000A69;
+2180 : 2B820108;
+2181 : 2B810104;
+2182 : 34030000;
+2183 : F80009B4;
+2184 : 78020001;
+2185 : B8201800;
+2186 : 38427BDC;
+2187 : 34010007;
+2188 : F8000A60;
+2189 : 34020000;
+218a : 37810028;
+218b : F8000196;
+218c : 78020001;
+218d : 34010004;
+218e : 38427C5C;
+218f : F8000A59;
+2190 : 78020001;
+2191 : 78030001;
+2192 : 34010007;
+2193 : 38427C6C;
+2194 : 38637C74;
+2195 : F8000A53;
+2196 : 2B810054;
+2197 : 44200005;
+2198 : 78020001;
+2199 : 34010002;
+219a : 38427C7C;
+219b : E0000004;
+219c : 78020001;
+219d : 34010001;
+219e : 38427C88;
+219f : F8000A49;
+21a0 : 3781011C;
+21a1 : 37820118;
+21a2 : F8001C34;
+21a3 : 2B830118;
+21a4 : 2B84011C;
+21a5 : 78020001;
+21a6 : 34010087;
+21a7 : 38427C94;
+21a8 : F8000A40;
+21a9 : 2B810054;
+21aa : 340C0001;
+21ab : 4420016B;
+21ac : 78020001;
+21ad : 38427CA8;
+21ae : 34010007;
+21af : F8000A39;
+21b0 : 378D010C;
+21b1 : B9A00800;
+21b2 : F8000D0E;
+21b3 : 378300F0;
+21b4 : B8600800;
+21b5 : B9A01000;
+21b6 : 5B830024;
+21b7 : F8000856;
+21b8 : 78010001;
+21b9 : 3821B8F8;
+21ba : 28210000;
+21bb : 2B830024;
+21bc : 442C000A;
+21bd : 44200004;
+21be : 34020002;
+21bf : 5C22000F;
+21c0 : E000000A;
+21c1 : 78020001;
+21c2 : 34010001;
+21c3 : 38427CB0;
+21c4 : F8000A24;
+21c5 : E0000009;
+21c6 : 78020001;
+21c7 : 34010002;
+21c8 : 38427CC0;
+21c9 : E0000004;
+21ca : 78020001;
+21cb : 34010002;
+21cc : 38427CD0;
+21cd : F8000A1B;
+21ce : 78020001;
+21cf : 34010087;
+21d0 : 38427CE8;
+21d1 : 780D0001;
+21d2 : F8000A16;
+21d3 : 39AD9F74;
+21d4 : 29A10000;
+21d5 : 28210358;
+21d6 : 28210010;
+21d7 : 282E0008;
+21d8 : 5DC0004B;
+21d9 : 78020001;
+21da : 34010001;
+21db : 38427CF0;
+21dc : F8000A0C;
+21dd : FBFFFF38;
+21de : 340C0001;
+21df : 442E0137;
+21e0 : 78020001;
+21e1 : 34010087;
+21e2 : 38427CF8;
+21e3 : F8000A05;
+21e4 : 29A10000;
+21e5 : 28210030;
+21e6 : 28210010;
+21e7 : 28250008;
+21e8 : 2823000C;
+21e9 : 28220010;
+21ea : 28240014;
+21eb : B8A32800;
+21ec : 44A00014;
+21ed : 3C420010;
+21ee : 00840010;
+21ef : B8442000;
+21f0 : 48600005;
+21f1 : 6C820000;
+21f2 : 64610000;
+21f3 : A0410800;
+21f4 : 44200006;
+21f5 : 78020001;
+21f6 : 34010007;
+21f7 : 38427D18;
+21f8 : F80009F0;
+21f9 : E000011C;
+21fa : 78020001;
+21fb : 34010007;
+21fc : 38427D24;
+21fd : C8042000;
+21fe : F80009EA;
+21ff : E0000117;
+2200 : 00840010;
+2201 : 3C430010;
+2202 : 780B0001;
+2203 : 396B7D30;
+2204 : B8641800;
+2205 : B9601000;
+2206 : 34010007;
+2207 : F80009E1;
+2208 : 78020001;
+2209 : 34010087;
+220a : 38427D38;
+220b : F80009DD;
+220c : 29A10000;
+220d : B9601000;
+220e : 28210030;
+220f : 28210010;
+2210 : 28240020;
+2211 : 2C230024;
+2212 : 34010007;
+2213 : 3C840010;
+2214 : B8831800;
+2215 : F80009D3;
+2216 : 78020001;
+2217 : 34010087;
+2218 : 38427D58;
+2219 : F80009CF;
+221a : 29A10000;
+221b : B9601000;
+221c : 28210030;
+221d : 28240004;
+221e : 34010007;
+221f : 28830020;
+2220 : 28840024;
+2221 : F80009C7;
+2222 : E00000F4;
+2223 : 78010001;
+2224 : 3821B0D8;
+2225 : 28210000;
+2226 : 34020001;
+2227 : 4841000E;
+2228 : 34020002;
+2229 : 4C410004;
+222a : 34020003;
+222b : 5C22000A;
+222c : E0000005;
+222d : 78020001;
+222e : 34010007;
+222f : 38427D78;
+2230 : E0000008;
+2231 : 78020001;
+2232 : 34010007;
+2233 : 38427D84;
+2234 : E0000004;
+2235 : 78020001;
+2236 : 34010001;
+2237 : 38427D90;
+2238 : F80009B0;
+2239 : 2B81005C;
+223a : 44200005;
+223b : 78020001;
+223c : 34010002;
+223d : 38427D9C;
+223e : E0000004;
+223f : 78020001;
+2240 : 34010001;
+2241 : 38427DA4;
+2242 : F80009A6;
+2243 : 2B810078;
+2244 : 44200007;
+2245 : 2B81007C;
+2246 : 44200005;
+2247 : 78020001;
+2248 : 34010002;
+2249 : 38427DAC;
+224a : E0000004;
+224b : 78020001;
+224c : 34010001;
+224d : 38427DB8;
+224e : F800099A;
+224f : FBFFFEC6;
+2250 : 340C0001;
+2251 : 442000C5;
+2252 : 78020001;
+2253 : 34010087;
+2254 : 38427DC8;
+2255 : F8000993;
+2256 : 78020001;
+2257 : 34010007;
+2258 : 384279E8;
+2259 : 35630060;
+225a : F800098E;
+225b : 78020001;
+225c : 34010087;
+225d : 38427DE4;
+225e : F800098A;
+225f : 2961005C;
+2260 : 44200005;
+2261 : 78020001;
+2262 : 34010002;
+2263 : 38427E00;
+2264 : E0000004;
+2265 : 78020001;
+2266 : 34010001;
+2267 : 38427E04;
+2268 : F8000980;
+2269 : 34010000;
+226a : 37820110;
+226b : 78100001;
+226c : 780F0001;
+226d : 780E0001;
+226e : 780D0001;
+226f : F8003193;
+2270 : 340C0000;
+2271 : 3A107E0C;
+2272 : 39EF7E2C;
+2273 : 39CE7E34;
+2274 : 39AD8798;
+2275 : E0000015;
+2276 : 34010087;
+2277 : BA001000;
+2278 : B9801800;
+2279 : F800096F;
+227a : B9800800;
+227b : F80031EC;
+227c : B8208800;
+227d : 20210001;
+227e : 44200004;
+227f : 34010002;
+2280 : B9E01000;
+2281 : F8000967;
+2282 : 22310002;
+2283 : 46200004;
+2284 : 34010002;
+2285 : B9C01000;
+2286 : F8000962;
+2287 : B9A00800;
+2288 : F8001596;
+2289 : 358C0001;
+228a : 2B810110;
+228b : 482CFFEB;
+228c : 78020001;
+228d : 34010004;
+228e : 38427E40;
+228f : F8000959;
+2290 : 78020001;
+2291 : 34010087;
+2292 : 38427E58;
+2293 : F8000955;
+2294 : 29620044;
+2295 : 29610040;
+2296 : 34030001;
+2297 : 780C0001;
+2298 : FBFFFCF8;
+2299 : 398C7E70;
+229a : B8201800;
+229b : B9801000;
+229c : 34010007;
+229d : F800094B;
+229e : 78020001;
+229f : 34010087;
+22a0 : 38427E78;
+22a1 : F8000947;
+22a2 : 29620054;
+22a3 : 29610050;
+22a4 : 34030001;
+22a5 : 780D0001;
+22a6 : FBFFFCEA;
+22a7 : B8201800;
+22a8 : B9801000;
+22a9 : 34010007;
+22aa : F800093E;
+22ab : 78020001;
+22ac : 34010087;
+22ad : 38427E90;
+22ae : F800093A;
+22af : 29630018;
+22b0 : 2964001C;
+22b1 : 39AD7EB0;
+22b2 : B9A01000;
+22b3 : 34010007;
+22b4 : F8000934;
+22b5 : 78020001;
+22b6 : 34010087;
+22b7 : 38427EC8;
+22b8 : F8000930;
+22b9 : 29640024;
+22ba : 29630020;
+22bb : B9A01000;
+22bc : 34010007;
+22bd : F800092B;
+22be : 296D0054;
+22bf : 29610044;
+22c0 : 78020001;
+22c1 : 3DAD0001;
+22c2 : 38427EE8;
+22c3 : C82D6800;
+22c4 : 34010087;
+22c5 : F8000923;
+22c6 : 78020001;
+22c7 : B9A01800;
+22c8 : 34010007;
+22c9 : 38427F00;
+22ca : F800091E;
+22cb : 29610018;
+22cc : 29620044;
+22cd : 296E0040;
+22ce : 1423001F;
+22cf : C8410800;
+22d0 : F4221000;
+22d1 : C9C37000;
+22d2 : C9C27000;
+22d3 : 2962001C;
+22d4 : 296D0024;
+22d5 : 1443001F;
+22d6 : C8221000;
+22d7 : F4410800;
+22d8 : C9C37000;
+22d9 : C9C17000;
+22da : 29610020;
+22db : 1423001F;
+22dc : C8410800;
+22dd : F4221000;
+22de : C9C37000;
+22df : 15A3001F;
+22e0 : C82D6800;
+22e1 : C9C27000;
+22e2 : F5A10800;
+22e3 : C9C37000;
+22e4 : 78020001;
+22e5 : C9C17000;
+22e6 : 38427F0C;
+22e7 : 34010087;
+22e8 : F8000900;
+22e9 : B9A01000;
+22ea : 34030001;
+22eb : B9C00800;
+22ec : FBFFFCA4;
+22ed : B8201800;
+22ee : B9801000;
+22ef : 34010007;
+22f0 : F80008F8;
+22f1 : 78020001;
+22f2 : 34010087;
+22f3 : 38427F24;
+22f4 : F80008F4;
+22f5 : 2963008C;
+22f6 : 78020001;
+22f7 : 34010007;
+22f8 : 38427F34;
+22f9 : F80008EF;
+22fa : 78020001;
+22fb : 34010087;
+22fc : 38427F40;
+22fd : F80008EB;
+22fe : 29630048;
+22ff : 78020001;
+2300 : 34010007;
+2301 : 38427F50;
+2302 : F80008E6;
+2303 : 78020001;
+2304 : 34010087;
+2305 : 38427F5C;
+2306 : F80008E2;
+2307 : 29630084;
+2308 : 78020001;
+2309 : 34010007;
+230a : 38427F68;
+230b : F80008DD;
+230c : 78020001;
+230d : 34010087;
+230e : 38427F74;
+230f : F80008D9;
+2310 : 29630058;
+2311 : 78020001;
+2312 : 34010007;
+2313 : 38427F84;
+2314 : F80008D4;
+2315 : 340C0001;
+2316 : B9800800;
+2317 : 2B9D0004;
+2318 : 2B8B0020;
+2319 : 2B8C001C;
+231a : 2B8D0018;
+231b : 2B8E0014;
+231c : 2B8F0010;
+231d : 2B90000C;
+231e : 2B910008;
+231f : 379C011C;
+2320 : C3A00000;
+2321 : 379CFFF4;
+2322 : 5B8B0008;
+2323 : 5B9D0004;
+2324 : B8205800;
+2325 : FBFFE1F4;
+2326 : 34020003;
+2327 : 5C220003;
+2328 : 34010002;
+2329 : E0000002;
+232a : 34010001;
+232b : 59610028;
+232c : 3562004C;
+232d : 35610048;
+232e : F80016A4;
+232f : 34010000;
+2330 : 59600040;
+2331 : 59600044;
+2332 : 59600088;
+2333 : 5960008C;
+2334 : 3782000C;
+2335 : 34030000;
+2336 : F8003098;
+2337 : 44200006;
+2338 : 2B81000C;
+2339 : 596100A0;
+233a : 34010001;
+233b : 596100A4;
+233c : E0000003;
+233d : 596000A0;
+233e : 596000A4;
+233f : 34010000;
+2340 : F800166A;
+2341 : 5961002C;
+2342 : 34010001;
+2343 : 59610054;
+2344 : 59610050;
+2345 : 34010000;
+2346 : F8003023;
+2347 : 59610034;
+2348 : 34011F40;
+2349 : 596100B4;
+234a : 78010001;
+234b : 38219700;
+234c : 28210000;
+234d : 596100B8;
+234e : 596100BC;
+234f : 35610014;
+2350 : F800160F;
+2351 : 34010000;
+2352 : 5960001C;
+2353 : 2B9D0004;
+2354 : 2B8B0008;
+2355 : 379C000C;
+2356 : C3A00000;
+2357 : C3A00000;
+2358 : 379CFFFC;
+2359 : 5B9D0004;
+235a : B8201000;
+235b : 78010001;
+235c : 38217FA4;
+235d : F80014C1;
+235e : 2B9D0004;
+235f : 379C0004;
+2360 : C3A00000;
+2361 : 379CFFF8;
+2362 : 5B8B0008;
+2363 : 5B9D0004;
+2364 : 780B0001;
+2365 : 396BB684;
+2366 : 29650000;
+2367 : 78020001;
+2368 : 34240001;
+2369 : B8201800;
+236a : 3842B630;
+236b : B4220800;
+236c : C8A31800;
+236d : B4821000;
+236e : F80034A1;
+236f : 29610000;
+2370 : 3421FFFF;
+2371 : 59610000;
+2372 : 2B9D0004;
+2373 : 2B8B0008;
+2374 : 379C0008;
+2375 : C3A00000;
+2376 : 379CFFCC;
+2377 : 5B8B0010;
+2378 : 5B8C000C;
+2379 : 5B8D0008;
+237a : 5B9D0004;
+237b : 378B0014;
+237c : 34020000;
+237d : 34030024;
+237e : B9600800;
+237f : F80034D5;
+2380 : 78030001;
+2381 : B9600800;
+2382 : 34040000;
+2383 : 34020000;
+2384 : 3863B630;
+2385 : 34080020;
+2386 : 34070008;
+2387 : E0000004;
+2388 : 34840001;
+2389 : 34210004;
+238a : 44870017;
+238b : B4432800;
+238c : E0000004;
+238d : 30A00000;
+238e : 34420001;
+238f : 34A50001;
+2390 : 40A60000;
+2391 : 44C8FFFC;
+2392 : 44C0000D;
+2393 : B4432800;
+2394 : 58250000;
+2395 : E0000002;
+2396 : 34420001;
+2397 : B4432800;
+2398 : 40A50000;
+2399 : 7CA90000;
+239a : 7CA60020;
+239b : A1263000;
+239c : 5CC0FFFA;
+239d : 5CA6FFEB;
+239e : E0000003;
+239f : 340C0000;
+23a0 : 448C0021;
+23a1 : 2B810014;
+23a2 : 340C0000;
+23a3 : 40220000;
+23a4 : 34010023;
+23a5 : 4441001C;
+23a6 : 780B0001;
+23a7 : 780C0001;
+23a8 : 396BAE18;
+23a9 : 398CAEE0;
+23aa : E0000011;
+23ab : 29610000;
+23ac : F80034E9;
+23ad : B8206800;
+23ae : 5C20000C;
+23af : 29620004;
+23b0 : 37810018;
+23b1 : D8400000;
+23b2 : B8206000;
+23b3 : 4C2D000E;
+23b4 : 29620000;
+23b5 : 78010001;
+23b6 : B9801800;
+23b7 : 38217FAC;
+23b8 : F8001466;
+23b9 : E0000008;
+23ba : 356B0008;
+23bb : 2B820014;
+23bc : 558BFFEF;
+23bd : 78010001;
+23be : 38217FC4;
+23bf : F800145F;
+23c0 : 340CFFEA;
+23c1 : B9800800;
+23c2 : 2B9D0004;
+23c3 : 2B8B0010;
+23c4 : 2B8C000C;
+23c5 : 2B8D0008;
+23c6 : 379C0034;
+23c7 : C3A00000;
+23c8 : 78010001;
+23c9 : 38219FAC;
+23ca : 78020001;
+23cb : 28260000;
+23cc : 3405003B;
+23cd : 34010000;
+23ce : 3842B630;
+23cf : 34040050;
+23d0 : E0000005;
+23d1 : B4223800;
+23d2 : 30E30000;
+23d3 : 34210001;
+23d4 : 44240005;
+23d5 : B4C11800;
+23d6 : 40630000;
+23d7 : 44600002;
+23d8 : 5C65FFF9;
+23d9 : 78020001;
+23da : 3842B630;
+23db : B4411000;
+23dc : 30400000;
+23dd : 78020001;
+23de : 38429FAC;
+23df : 28430000;
+23e0 : 3404003B;
+23e1 : B4611800;
+23e2 : 58430000;
+23e3 : 40650000;
+23e4 : 5CA40003;
+23e5 : 34630001;
+23e6 : 58430000;
+23e7 : 5C200006;
+23e8 : 78020001;
+23e9 : 78030001;
+23ea : 38429FAC;
+23eb : 38639F78;
+23ec : 58430000;
+23ed : C3A00000;
+23ee : 379CFFF8;
+23ef : 5B8B0008;
+23f0 : 5B9D0004;
+23f1 : B8201000;
+23f2 : 78010001;
+23f3 : 3821B630;
+23f4 : 44410003;
+23f5 : 34030050;
+23f6 : F8003590;
+23f7 : 78010001;
+23f8 : 3821B630;
+23f9 : F8003511;
+23fa : 78020001;
+23fb : 3842B684;
+23fc : 780B0001;
+23fd : 58410000;
+23fe : 396BBFD0;
+23ff : 34010001;
+2400 : 59610000;
+2401 : FBFFFF75;
+2402 : 59600000;
+2403 : 2B9D0004;
+2404 : 2B8B0008;
+2405 : 379C0008;
+2406 : C3A00000;
+2407 : 78010001;
+2408 : 3821B68C;
+2409 : 58200000;
+240a : 78010001;
+240b : 3821B684;
+240c : 58200000;
+240d : 78010001;
+240e : 3821B688;
+240f : 58200000;
+2410 : C3A00000;
+2411 : 379CFFF4;
+2412 : 5B8B000C;
+2413 : 5B8C0008;
+2414 : 5B9D0004;
+2415 : 780B0001;
+2416 : 396BB688;
+2417 : 29610000;
+2418 : 340C0001;
+2419 : 442C0010;
+241a : 34020002;
+241b : 4422009D;
+241c : 34020000;
+241d : 5C2000A5;
+241e : 78010001;
+241f : 38217FE0;
+2420 : F80013FE;
+2421 : 78010001;
+2422 : 3821B68C;
+2423 : 58200000;
+2424 : 78010001;
+2425 : 3821B684;
+2426 : 58200000;
+2427 : 596C0000;
+2428 : E000008E;
+2429 : F80014FE;
+242a : 34020000;
+242b : 48010097;
+242c : 3402001B;
+242d : 44220008;
+242e : 78020001;
+242f : 3842B690;
+2430 : 28430000;
+2431 : 6424005B;
+2432 : 00650010;
+2433 : A0A42000;
+2434 : 44800006;
+2435 : 78010001;
+2436 : 3821B690;
+2437 : 78020001;
+2438 : 58220000;
+2439 : E0000003;
+243a : B8230800;
+243b : 58410000;
+243c : 78010001;
+243d : 3821B690;
+243e : 282B0000;
+243f : 34020001;
+2440 : 216100FF;
+2441 : 44200081;
+2442 : 3401007E;
+2443 : 4561002E;
+2444 : 49610006;
+2445 : 34010009;
+2446 : 4561006D;
+2447 : 3401000D;
+2448 : 5D610042;
+2449 : E0000020;
+244a : 78020001;
+244b : 38428EEC;
+244c : 28410000;
+244d : 45610010;
+244e : 78020001;
+244f : 38428EF0;
+2450 : 28410000;
+2451 : 45610004;
+2452 : 3401007F;
+2453 : 5D610037;
+2454 : E0000027;
+2455 : 78010001;
+2456 : 3821B68C;
+2457 : 28220000;
+2458 : 4C02005B;
+2459 : 3442FFFF;
+245a : 58220000;
+245b : 34010044;
+245c : E000000B;
+245d : 78010001;
+245e : 78020001;
+245f : 3821B68C;
+2460 : 3842B684;
+2461 : 28230000;
+2462 : 28420000;
+2463 : 4C620050;
+2464 : 34630001;
+2465 : 58230000;
+2466 : 34010043;
+2467 : FBFFFEF1;
+2468 : E000004B;
+2469 : 78010001;
+246a : 38218798;
+246b : F80013B3;
+246c : 78010001;
+246d : 3821B688;
+246e : 34020002;
+246f : 58220000;
+2470 : E0000043;
+2471 : 78010001;
+2472 : 78020001;
+2473 : 3821B68C;
+2474 : 3842B684;
+2475 : 28210000;
+2476 : 28420000;
+2477 : 4422003C;
+2478 : FBFFFEE9;
+2479 : 34010050;
+247a : E3FFFFED;
+247b : 780B0001;
+247c : 396BB68C;
+247d : 29610000;
+247e : 4C010035;
+247f : 34010044;
+2480 : FBFFFED8;
+2481 : 34010050;
+2482 : FBFFFED6;
+2483 : 29610000;
+2484 : 3421FFFF;
+2485 : FBFFFEDC;
+2486 : 29610000;
+2487 : 3421FFFF;
+2488 : 59610000;
+2489 : E000002A;
+248a : 78010001;
+248b : A1610800;
+248c : 5C200027;
+248d : 78010001;
+248e : 3821B684;
+248f : 28240000;
+2490 : 3401004F;
+2491 : 48810022;
+2492 : 78010001;
+2493 : 3821B68C;
+2494 : 28230000;
+2495 : 44640008;
+2496 : 78020001;
+2497 : 34610001;
+2498 : 3842B630;
+2499 : B4220800;
+249a : B4621000;
+249b : C8831800;
+249c : F8003373;
+249d : 78010001;
+249e : 3821B68C;
+249f : 28230000;
+24a0 : 78020001;
+24a1 : 3842B630;
+24a2 : B4431000;
+24a3 : 304B0000;
+24a4 : 34620001;
+24a5 : 58220000;
+24a6 : 78010001;
+24a7 : 3821B684;
+24a8 : 28220000;
+24a9 : 34420001;
+24aa : 58220000;
+24ab : 34010040;
+24ac : FBFFFEAC;
+24ad : 78020001;
+24ae : 3842B690;
+24af : 28420000;
+24b0 : 78010001;
+24b1 : 38217FE8;
+24b2 : F800136C;
+24b3 : 78010001;
+24b4 : 3821B690;
+24b5 : 58200000;
+24b6 : 34020001;
+24b7 : E000000B;
+24b8 : 78020001;
+24b9 : 3842B684;
+24ba : 28420000;
+24bb : 78010001;
+24bc : 3821B630;
+24bd : B4220800;
+24be : 30200000;
+24bf : FBFFFEB7;
+24c0 : 59600000;
+24c1 : E3FFFFF5;
+24c2 : B8400800;
+24c3 : 2B9D0004;
+24c4 : 2B8B000C;
+24c5 : 2B8C0008;
+24c6 : 379C000C;
+24c7 : C3A00000;
+24c8 : 379CFFF4;
+24c9 : 5B8B000C;
+24ca : 5B8C0008;
+24cb : 5B9D0004;
+24cc : 34040001;
+24cd : B8205800;
+24ce : B8406000;
+24cf : 44200006;
+24d0 : 40220000;
+24d1 : 3401002D;
+24d2 : 5C410003;
+24d3 : 356B0001;
+24d4 : 3404FFFF;
+24d5 : 34010000;
+24d6 : 34020000;
+24d7 : 34080009;
+24d8 : 34070005;
+24d9 : E0000028;
+24da : 3465FFD0;
+24db : 20A600FF;
+24dc : 54C8000B;
+24dd : 0046001C;
+24de : 3C230004;
+24df : 14A1001F;
+24e0 : B8C31800;
+24e1 : 3C460004;
+24e2 : B4611800;
+24e3 : B4C51000;
+24e4 : F4C23000;
+24e5 : B4C30800;
+24e6 : E000001A;
+24e7 : 3466FFBF;
+24e8 : 20C500FF;
+24e9 : 54A70008;
+24ea : 0049001C;
+24eb : 3C250004;
+24ec : 3C420004;
+24ed : B9252800;
+24ee : 14C1001F;
+24ef : 3463FFC9;
+24f0 : E000000A;
+24f1 : 3466FF9F;
+24f2 : 20C500FF;
+24f3 : 54A70011;
+24f4 : 0049001C;
+24f5 : 3C250004;
+24f6 : 3C420004;
+24f7 : 14C1001F;
+24f8 : B9252800;
+24f9 : 3463FFA9;
+24fa : F4C33000;
+24fb : B4621000;
+24fc : B4C13000;
+24fd : F4621800;
+24fe : B4C52800;
+24ff : B4650800;
+2500 : 356B0001;
+2501 : 45600003;
+2502 : 41630000;
+2503 : 5C60FFD7;
+2504 : 1483001F;
+2505 : F80031DE;
+2506 : 59810000;
+2507 : B9600800;
+2508 : 59820004;
+2509 : 2B9D0004;
+250a : 2B8B000C;
+250b : 2B8C0008;
+250c : 379C000C;
+250d : C3A00000;
+250e : 379CFFF0;
+250f : 5B8B0008;
+2510 : 5B9D0004;
+2511 : B8405800;
+2512 : 3782000C;
+2513 : FBFFFFB5;
+2514 : 2B820010;
+2515 : 59620000;
+2516 : 2B9D0004;
+2517 : 2B8B0008;
+2518 : 379C0010;
+2519 : C3A00000;
+251a : 34040001;
+251b : 44200006;
+251c : 40250000;
+251d : 3403002D;
+251e : 5CA30003;
+251f : 34210001;
+2520 : 3404FFFF;
+2521 : 34030000;
+2522 : 34060009;
+2523 : E0000007;
+2524 : 34A5FFD0;
+2525 : 20A700FF;
+2526 : 54E60007;
+2527 : 0863000A;
+2528 : 34210001;
+2529 : B4A31800;
+252a : 44200003;
+252b : 40250000;
+252c : 5CA0FFF8;
+252d : 88641800;
+252e : 58430000;
+252f : C3A00000;
+2530 : 379CFFEC;
+2531 : 5B8B0014;
+2532 : 5B8C0010;
+2533 : 5B8D000C;
+2534 : 5B8E0008;
+2535 : 5B9D0004;
+2536 : 78010001;
+2537 : 3821BF74;
+2538 : 40210000;
+2539 : 4420002C;
+253a : 780D0001;
+253b : 780C0001;
+253c : 780B0001;
+253d : 39ADB684;
+253e : 398C7FEC;
+253f : 396BB630;
+2540 : FBFFFE88;
+2541 : 59A10000;
+2542 : 5C200009;
+2543 : 780B0001;
+2544 : 780E0001;
+2545 : 780D0001;
+2546 : 340C0000;
+2547 : 396BB630;
+2548 : 39CEB684;
+2549 : 39AD7FEC;
+254a : E0000007;
+254b : B9800800;
+254c : B9601000;
+254d : F80012D1;
+254e : B9600800;
+254f : FBFFFE9F;
+2550 : E3FFFFF0;
+2551 : B9600800;
+2552 : 34020050;
+2553 : B9801800;
+2554 : F8002322;
+2555 : 59C10000;
+2556 : 48200006;
+2557 : 5D80000E;
+2558 : 78010001;
+2559 : 38217FFC;
+255a : F80012C4;
+255b : E000000A;
+255c : B5610800;
+255d : 3020FFFF;
+255e : B9601000;
+255f : B9A00800;
+2560 : F80012BE;
+2561 : B9600800;
+2562 : FBFFFE8C;
+2563 : 340C0001;
+2564 : E3FFFFED;
+2565 : 2B9D0004;
+2566 : 2B8B0014;
+2567 : 2B8C0010;
+2568 : 2B8D000C;
+2569 : 2B8E0008;
+256a : 379C0014;
+256b : C3A00000;
+256c : 379CFFEC;
+256d : 5B8B0014;
+256e : 5B8C0010;
+256f : 5B8D000C;
+2570 : 5B8E0008;
+2571 : 5B9D0004;
+2572 : 78010001;
+2573 : 38218014;
+2574 : 780E0001;
+2575 : 780D0001;
+2576 : 780C0001;
+2577 : F80012A7;
+2578 : 340B0000;
+2579 : 39CEB684;
+257a : 39AD79E8;
+257b : 398CB630;
+257c : FBFFFE4C;
+257d : 59C10000;
+257e : 44200007;
+257f : B9A00800;
+2580 : B9801000;
+2581 : 356B0001;
+2582 : F800129C;
+2583 : 216B00FF;
+2584 : E3FFFFF8;
+2585 : 5D610004;
+2586 : 78010001;
+2587 : 3821802C;
+2588 : F8001296;
+2589 : 2B9D0004;
+258a : 2B8B0014;
+258b : 2B8C0010;
+258c : 2B8D000C;
+258d : 2B8E0008;
+258e : 379C0014;
+258f : C3A00000;
+2590 : 379CFFF8;
+2591 : 5B8B0008;
+2592 : 5B9D0004;
+2593 : 78010001;
+2594 : 3821C2AC;
+2595 : 28210000;
+2596 : 78030001;
+2597 : 386396E8;
+2598 : 28620000;
+2599 : 282B000C;
+259a : 78030001;
+259b : 78010001;
+259c : 386380E0;
+259d : 38218038;
+259e : F8001280;
+259f : 78050001;
+25a0 : 78030001;
+25a1 : 78040001;
+25a2 : 38A596EC;
+25a3 : 386396F0;
+25a4 : 388496F4;
+25a5 : 28A20000;
+25a6 : 28630000;
+25a7 : 28840000;
+25a8 : 78010001;
+25a9 : 38218050;
+25aa : F8001274;
+25ab : 216B000F;
+25ac : 356B0001;
+25ad : 78010001;
+25ae : 34020080;
+25af : 3D6B0004;
+25b0 : 38218064;
+25b1 : 34030800;
+25b2 : F800126C;
+25b3 : 3561FF80;
+25b4 : 3402000F;
+25b5 : 50410006;
+25b6 : 78010001;
+25b7 : 3821808C;
+25b8 : B9601000;
+25b9 : 35630010;
+25ba : F8001264;
+25bb : 34010000;
+25bc : 2B9D0004;
+25bd : 2B8B0008;
+25be : 379C0008;
+25bf : C3A00000;
+25c0 : 379CFFE0;
+25c1 : 5B8B0020;
+25c2 : 5B8C001C;
+25c3 : 5B8D0018;
+25c4 : 5B8E0014;
+25c5 : 5B8F0010;
+25c6 : 5B90000C;
+25c7 : 5B910008;
+25c8 : 5B9D0004;
+25c9 : 28220000;
+25ca : 44400006;
+25cb : 780E0001;
+25cc : B8205800;
+25cd : 39CE9FB0;
+25ce : 340F0008;
+25cf : E0000033;
+25d0 : 3401FFFF;
+25d1 : FBFFE025;
+25d2 : 3C210002;
+25d3 : 78020001;
+25d4 : 38429298;
+25d5 : B4411000;
+25d6 : 3401FFFF;
+25d7 : 284C0000;
+25d8 : FBFFDF45;
+25d9 : 3C210002;
+25da : 78030001;
+25db : 386392A0;
+25dc : B4611800;
+25dd : 286B0000;
+25de : FBFFDF3B;
+25df : 3C210002;
+25e0 : 78040001;
+25e1 : 388492A8;
+25e2 : B4812000;
+25e3 : 28840000;
+25e4 : 78010001;
+25e5 : 382180BC;
+25e6 : B9801000;
+25e7 : B9601800;
+25e8 : F8001236;
+25e9 : 34010000;
+25ea : E000001B;
+25eb : B9C06000;
+25ec : 340D0000;
+25ed : 29610000;
+25ee : 29820000;
+25ef : F80032A6;
+25f0 : B8208000;
+25f1 : 5C200006;
+25f2 : 29820004;
+25f3 : 29810008;
+25f4 : D8400000;
+25f5 : 4A010010;
+25f6 : E0000004;
+25f7 : 35AD0001;
+25f8 : 358C000C;
+25f9 : 5DAFFFF4;
+25fa : 356B0004;
+25fb : 5DAF0007;
+25fc : 2A220000;
+25fd : 78010001;
+25fe : 382180C8;
+25ff : F800121F;
+2600 : 3401FFEA;
+2601 : E0000004;
+2602 : 29610000;
+2603 : B9608800;
+2604 : 5C20FFE7;
+2605 : 2B9D0004;
+2606 : 2B8B0020;
+2607 : 2B8C001C;
+2608 : 2B8D0018;
+2609 : 2B8E0014;
+260a : 2B8F0010;
+260b : 2B90000C;
+260c : 2B910008;
+260d : 379C0020;
+260e : C3A00000;
+260f : 379CFFF0;
+2610 : 5B8B0010;
+2611 : 5B8C000C;
+2612 : 5B8D0008;
+2613 : 5B9D0004;
+2614 : 78010001;
+2615 : 38218128;
+2616 : 780B0001;
+2617 : 780D0001;
+2618 : 780C0001;
+2619 : F8001205;
+261a : 396BAE18;
+261b : 39ADAEE0;
+261c : 398C8140;
+261d : E0000005;
+261e : 29620000;
+261f : B9800800;
+2620 : 356B0008;
+2621 : F80011FD;
+2622 : 55ABFFFC;
+2623 : 34010000;
+2624 : 2B9D0004;
+2625 : 2B8B0010;
+2626 : 2B8C000C;
+2627 : 2B8D0008;
+2628 : 379C0010;
+2629 : C3A00000;
+262a : 379CFFEC;
+262b : 5B8B0010;
+262c : 5B8C000C;
+262d : 5B8D0008;
+262e : 5B9D0004;
+262f : 340B0000;
+2630 : B8406800;
+2631 : 340C0006;
+2632 : 37820014;
+2633 : FBFFFEDB;
+2634 : 2B830014;
+2635 : B5AB1000;
+2636 : 356B0001;
+2637 : 30430000;
+2638 : 40220000;
+2639 : 6442003A;
+263a : B4220800;
+263b : 5D6CFFF7;
+263c : 2B9D0004;
+263d : 2B8B0010;
+263e : 2B8C000C;
+263f : 2B8D0008;
+2640 : 379C0014;
+2641 : C3A00000;
+2642 : 379CFFF8;
+2643 : 5B8B0008;
+2644 : 5B9D0004;
+2645 : B8404000;
+2646 : 41030000;
+2647 : 41040001;
+2648 : 41050002;
+2649 : 41060003;
+264a : 41070004;
+264b : 41080005;
+264c : 78020001;
+264d : 38428150;
+264e : B8205800;
+264f : F80011C1;
+2650 : B9600800;
+2651 : 2B9D0004;
+2652 : 2B8B0008;
+2653 : 379C0008;
+2654 : C3A00000;
+2655 : 379CFFD0;
+2656 : 5B8B0008;
+2657 : 5B9D0004;
+2658 : B8205800;
+2659 : 28210000;
+265a : 44200005;
+265b : 78020001;
+265c : 38428170;
+265d : F8003238;
+265e : 5C200004;
+265f : 3781002C;
+2660 : F80012FF;
+2661 : E000002B;
+2662 : 29610000;
+2663 : 78020001;
+2664 : 38428174;
+2665 : F8003230;
+2666 : 5C200008;
+2667 : 378B002C;
+2668 : B9600800;
+2669 : F80012F6;
+266a : B9601000;
+266b : 34010000;
+266c : F8001F23;
+266d : E000001F;
+266e : 29610000;
+266f : 78020001;
+2670 : 3842817C;
+2671 : F8003224;
+2672 : 5C20000B;
+2673 : 29630004;
+2674 : 44610009;
+2675 : 378B002C;
+2676 : B8600800;
+2677 : B9601000;
+2678 : FBFFFFB2;
+2679 : B9600800;
+267a : F80012D1;
+267b : F80013CC;
+267c : E0000010;
+267d : 29610000;
+267e : 78020001;
+267f : 38428180;
+2680 : F8003215;
+2681 : B8201800;
+2682 : 3402FFEA;
+2683 : 5C200011;
+2684 : 29610004;
+2685 : 4423000F;
+2686 : 378B002C;
+2687 : B9601000;
+2688 : FBFFFFA2;
+2689 : 34010000;
+268a : B9601000;
+268b : F8001F6D;
+268c : 3782002C;
+268d : 3781000C;
+268e : FBFFFFB4;
+268f : B8201000;
+2690 : 78010001;
+2691 : 38218188;
+2692 : F800118C;
+2693 : 34020000;
+2694 : B8400800;
+2695 : 2B9D0004;
+2696 : 2B8B0008;
+2697 : 379C0030;
+2698 : C3A00000;
+2699 : 379CFFE8;
+269a : 5B8B0018;
+269b : 5B8C0014;
+269c : 5B8D0010;
+269d : 5B8E000C;
+269e : 5B8F0008;
+269f : 5B9D0004;
+26a0 : B8205800;
+26a1 : 28210000;
+26a2 : 44200024;
+26a3 : 78020001;
+26a4 : 384281A0;
+26a5 : F80031F0;
+26a6 : 5C20000D;
+26a7 : 78010001;
+26a8 : 78020001;
+26a9 : 3821AEEC;
+26aa : 3842B0AC;
+26ab : E0000006;
+26ac : 5820001C;
+26ad : 58200018;
+26ae : 58200014;
+26af : 58200010;
+26b0 : 34210020;
+26b1 : 5441FFFB;
+26b2 : E000002C;
+26b3 : 29610000;
+26b4 : 78020001;
+26b5 : 384281A8;
+26b6 : F80031DF;
+26b7 : B8201000;
+26b8 : 5C20000E;
+26b9 : 29610004;
+26ba : 44220005;
+26bb : F8000554;
+26bc : 78020001;
+26bd : 3842B0B4;
+26be : 58410000;
+26bf : 78020001;
+26c0 : 3842B0B4;
+26c1 : 28420000;
+26c2 : 78010001;
+26c3 : 382181AC;
+26c4 : F800115A;
+26c5 : E0000019;
+26c6 : 78010001;
+26c7 : 382181CC;
+26c8 : 780B0001;
+26c9 : 780D0001;
+26ca : 780C0001;
+26cb : F8001153;
+26cc : 396BAEEC;
+26cd : 39ADB0AC;
+26ce : 398C81FC;
+26cf : E000000E;
+26d0 : 29610018;
+26d1 : 340203E8;
+26d2 : 296F0010;
+26d3 : F80030A2;
+26d4 : 296E0014;
+26d5 : 2965001C;
+26d6 : 29660000;
+26d7 : B8202000;
+26d8 : B9E01000;
+26d9 : B9800800;
+26da : B9C01800;
+26db : F8001143;
+26dc : 356B0020;
+26dd : 55ABFFF3;
+26de : 34010000;
+26df : 2B9D0004;
+26e0 : 2B8B0018;
+26e1 : 2B8C0014;
+26e2 : 2B8D0010;
+26e3 : 2B8E000C;
+26e4 : 2B8F0008;
+26e5 : 379C0018;
+26e6 : C3A00000;
+26e7 : 379CFFFC;
+26e8 : 5B9D0004;
+26e9 : 78020000;
+26ea : 384200A0;
+26eb : 28420000;
+26ec : 78010001;
+26ed : 38218220;
+26ee : F8001130;
+26ef : 34010000;
+26f0 : 2B9D0004;
+26f1 : 379C0004;
+26f2 : C3A00000;
+26f3 : 379CFFF8;
+26f4 : 5B9D0004;
+26f5 : B8201000;
+26f6 : 28210000;
+26f7 : 4420000D;
+26f8 : 28420004;
+26f9 : 5C40000B;
+26fa : 37820008;
+26fb : FBFFFE1F;
+26fc : 2B820008;
+26fd : 78010001;
+26fe : 382196F8;
+26ff : 084203E8;
+2700 : 58220000;
+2701 : 78010001;
+2702 : 38218798;
+2703 : E0000003;
+2704 : 78010001;
+2705 : 38218224;
+2706 : F8001118;
+2707 : 34010000;
+2708 : 2B9D0004;
+2709 : 379C0008;
+270a : C3A00000;
+270b : 379CFFF8;
+270c : 5B8B0008;
+270d : 5B9D0004;
+270e : B8205800;
+270f : 28210000;
+2710 : 5C200011;
+2711 : 78010001;
+2712 : 3821C294;
+2713 : 28220000;
+2714 : 340B0000;
+2715 : 64420000;
+2716 : 58220000;
+2717 : 78010001;
+2718 : 3821BFB4;
+2719 : 28230000;
+271a : 3463FFFF;
+271b : 58230000;
+271c : 5C4B002B;
+271d : 78010001;
+271e : 38218248;
+271f : F80010FF;
+2720 : E0000027;
+2721 : 78020001;
+2722 : 3842825C;
+2723 : F8003172;
+2724 : 5C200007;
+2725 : F80012A3;
+2726 : B8201000;
+2727 : 78010001;
+2728 : 38218A24;
+2729 : F80010F5;
+272a : E000001C;
+272b : 29610000;
+272c : 78020001;
+272d : 3842712C;
+272e : F8003167;
+272f : 5C20000B;
+2730 : 78010001;
+2731 : 3821C294;
+2732 : 34020001;
+2733 : 58220000;
+2734 : 78010001;
+2735 : 3821BFB4;
+2736 : 28220000;
+2737 : 3442FFFF;
+2738 : 58220000;
+2739 : E000000D;
+273a : 29610000;
+273b : 78020001;
+273c : 38428260;
+273d : F8003158;
+273e : 340BFFEA;
+273f : 5C200008;
+2740 : 78010001;
+2741 : 3821C294;
+2742 : 58200000;
+2743 : 78010001;
+2744 : 38218248;
+2745 : F80010D9;
+2746 : 340B0000;
+2747 : B9600800;
+2748 : 2B9D0004;
+2749 : 2B8B0008;
+274a : 379C0008;
+274b : C3A00000;
+274c : 379CFFB8;
+274d : 5B8B0028;
+274e : 5B8C0024;
+274f : 5B8D0020;
+2750 : 5B8E001C;
+2751 : 5B8F0018;
+2752 : 5B900014;
+2753 : 5B910010;
+2754 : 5B92000C;
+2755 : 5B930008;
+2756 : 5B9D0004;
+2757 : B8205800;
+2758 : 28210000;
+2759 : 442000C8;
+275a : 78020001;
+275b : 38428280;
+275c : F8003139;
+275d : 5C200008;
+275e : F8001ECA;
+275f : 3403FFFF;
+2760 : 34020000;
+2761 : 5C2300C4;
+2762 : 78010001;
+2763 : 38218288;
+2764 : E000003C;
+2765 : 29610010;
+2766 : 44200045;
+2767 : 29610000;
+2768 : 78020001;
+2769 : 3842829C;
+276a : F800312B;
+276b : 5C200040;
+276c : 29610004;
+276d : 34020010;
+276e : 356C0004;
+276f : F800324A;
+2770 : 3C210018;
+2771 : 34030000;
+2772 : 14210018;
+2773 : 3784002C;
+2774 : E0000007;
+2775 : 29820000;
+2776 : B4832800;
+2777 : B4431000;
+2778 : 40420000;
+2779 : 34630001;
+277a : 30A20000;
+277b : B0601000;
+277c : 4822FFF9;
+277d : B4820800;
+277e : 34030020;
+277f : 3404000F;
+2780 : E0000005;
+2781 : 34420001;
+2782 : 30230000;
+2783 : B0401000;
+2784 : 34210001;
+2785 : 4C82FFFC;
+2786 : 29610008;
+2787 : F8000488;
+2788 : 5B810040;
+2789 : 2961000C;
+278a : F8000485;
+278b : 5B810044;
+278c : 29610010;
+278d : F8000482;
+278e : 5B81003C;
+278f : 34020001;
+2790 : 3781002C;
+2791 : 34030000;
+2792 : F8001EF6;
+2793 : 3C220018;
+2794 : 3401FFFE;
+2795 : 14420018;
+2796 : 5C410006;
+2797 : 78010001;
+2798 : 382182A0;
+2799 : F8001085;
+279a : 3402FFE4;
+279b : E000008A;
+279c : 3401FFFF;
+279d : 5C410006;
+279e : 78010001;
+279f : 382182B0;
+27a0 : F800107E;
+27a1 : 3402FFFB;
+27a2 : E0000083;
+27a3 : 4C400004;
+27a4 : 78010001;
+27a5 : 382182BC;
+27a6 : E0000023;
+27a7 : 78010001;
+27a8 : 382182D8;
+27a9 : F8001075;
+27aa : E0000075;
+27ab : 29610000;
+27ac : 78020001;
+27ad : 384282E8;
+27ae : F80030E7;
+27af : 5C200030;
+27b0 : 78100001;
+27b1 : 780F0001;
+27b2 : 780E0001;
+27b3 : 340C0000;
+27b4 : 34110000;
+27b5 : 3792002C;
+27b6 : 3A108304;
+27b7 : 3793003C;
+27b8 : 39EF7FE8;
+27b9 : 39CE830C;
+27ba : BA400800;
+27bb : 34020000;
+27bc : B9801800;
+27bd : F8001ECB;
+27be : 3C2B0018;
+27bf : 156B0018;
+27c0 : 5D600005;
+27c1 : 78010001;
+27c2 : 382182F0;
+27c3 : F800105B;
+27c4 : E000005B;
+27c5 : 4D600007;
+27c6 : 78010001;
+27c7 : 382182BC;
+27c8 : B9601000;
+27c9 : F8001055;
+27ca : 3402FFF2;
+27cb : E000005A;
+27cc : 358C0001;
+27cd : BA000800;
+27ce : B9801000;
+27cf : F800104F;
+27d0 : BA406800;
+27d1 : 41A20000;
+27d2 : B9E00800;
+27d3 : 35AD0001;
+27d4 : F800104A;
+27d5 : 5DB3FFFC;
+27d6 : 2B820040;
+27d7 : 2B830044;
+27d8 : 2B84003C;
+27d9 : 36310001;
+27da : B9C00800;
+27db : B2208800;
+27dc : F8001042;
+27dd : 4971FFDD;
+27de : E0000041;
+27df : 29610000;
+27e0 : 78020001;
+27e1 : 3842832C;
+27e2 : F80030B3;
+27e3 : 5C200032;
+27e4 : F8001707;
+27e5 : 3C2C0018;
+27e6 : 3401FFED;
+27e7 : 158C0018;
+27e8 : 5D810006;
+27e9 : 78010001;
+27ea : 38218334;
+27eb : F8001033;
+27ec : 3402FFED;
+27ed : E0000038;
+27ee : 780B0001;
+27ef : 396BBFBC;
+27f0 : 780D0001;
+27f1 : 3401FFFB;
+27f2 : 356E0010;
+27f3 : 39AD7FE8;
+27f4 : 5D810004;
+27f5 : 78010001;
+27f6 : 38218340;
+27f7 : E3FFFFA9;
+27f8 : 41620000;
+27f9 : B9A00800;
+27fa : 356B0001;
+27fb : F8001023;
+27fc : 5D6EFFFC;
+27fd : 78010001;
+27fe : 38218798;
+27ff : F800101F;
+2800 : 3401FFFA;
+2801 : 5D810006;
+2802 : 78010001;
+2803 : 38218350;
+2804 : F800101A;
+2805 : 3402FFFA;
+2806 : E000001F;
+2807 : 78020001;
+2808 : 78030001;
+2809 : 78040001;
+280a : 3842BF40;
+280b : 3863BF44;
+280c : 3884A808;
+280d : 28420000;
+280e : 28630000;
+280f : 28840000;
+2810 : 78010001;
+2811 : 38218368;
+2812 : F800100C;
+2813 : B9801000;
+2814 : E0000011;
+2815 : 29610004;
+2816 : 4420000B;
+2817 : 29610000;
+2818 : 78020001;
+2819 : 38428390;
+281a : F800307B;
+281b : 5C200006;
+281c : 29610004;
+281d : F80003F2;
+281e : F80011F7;
+281f : 34020000;
+2820 : E0000005;
+2821 : 78010001;
+2822 : 3821826C;
+2823 : F8000FFB;
+2824 : 3402FFEA;
+2825 : B8400800;
+2826 : 2B9D0004;
+2827 : 2B8B0028;
+2828 : 2B8C0024;
+2829 : 2B8D0020;
+282a : 2B8E001C;
+282b : 2B8F0018;
+282c : 2B900014;
+282d : 2B910010;
+282e : 2B92000C;
+282f : 2B930008;
+2830 : 379C0048;
+2831 : C3A00000;
+2832 : 379CFFE8;
+2833 : 5B8B0010;
+2834 : 5B8C000C;
+2835 : 5B8D0008;
+2836 : 5B9D0004;
+2837 : B8205800;
+2838 : 28210000;
+2839 : 78020001;
+283a : 38428398;
+283b : F800305A;
+283c : 5C200011;
+283d : 2963000C;
+283e : 3402FFEA;
+283f : 44610086;
+2840 : 29610004;
+2841 : F80003CE;
+2842 : B8206800;
+2843 : 29610008;
+2844 : F80003CB;
+2845 : B8206000;
+2846 : 2961000C;
+2847 : F80003C8;
+2848 : B8201800;
+2849 : B9801000;
+284a : B9A00800;
+284b : F8002A54;
+284c : E0000078;
+284d : 29610000;
+284e : 78020001;
+284f : 384283A0;
+2850 : F8003045;
+2851 : B8201800;
+2852 : 5C200007;
+2853 : 29610004;
+2854 : 3402FFEA;
+2855 : 44230070;
+2856 : F80003B9;
+2857 : F8002B12;
+2858 : E0000060;
+2859 : 29610000;
+285a : 78020001;
+285b : 38428264;
+285c : F8003039;
+285d : 5C200003;
+285e : F8002BAF;
+285f : E0000065;
+2860 : 29610000;
+2861 : 78020001;
+2862 : 384283A4;
+2863 : F8003032;
+2864 : 5C20000D;
+2865 : 29630008;
+2866 : 3402FFEA;
+2867 : 4461005E;
+2868 : 29610004;
+2869 : F80003A6;
+286a : B8206000;
+286b : 29610008;
+286c : F80003A3;
+286d : B8201000;
+286e : B9800800;
+286f : F8002B0B;
+2870 : E0000054;
+2871 : 29610000;
+2872 : 78020001;
+2873 : 384283A8;
+2874 : F8003021;
+2875 : B8201800;
+2876 : 5C20000E;
+2877 : 29610004;
+2878 : 3402FFEA;
+2879 : 4423004C;
+287a : F8000395;
+287b : 37820018;
+287c : 37830014;
+287d : F8002B25;
+287e : 2B820018;
+287f : 2B830014;
+2880 : 78010001;
+2881 : 382183AC;
+2882 : F8000F9C;
+2883 : E0000041;
+2884 : 29610000;
+2885 : 78020001;
+2886 : 384280E4;
+2887 : F800300E;
+2888 : B8201800;
+2889 : 5C200007;
+288a : 29610004;
+288b : 3402FFEA;
+288c : 44230039;
+288d : F8000382;
+288e : F8002ABD;
+288f : E0000035;
+2890 : 29610000;
+2891 : 78020001;
+2892 : 384280EC;
+2893 : F8003002;
+2894 : B8201800;
+2895 : 5C200007;
+2896 : 29610004;
+2897 : 3402FFEA;
+2898 : 4423002D;
+2899 : F8000376;
+289a : F8002AC2;
+289b : E0000029;
+289c : 29610000;
+289d : 78020001;
+289e : 384283B4;
+289f : F8002FF6;
+28a0 : 5C20000D;
+28a1 : 29630008;
+28a2 : 3402FFEA;
+28a3 : 44610022;
+28a4 : 29610004;
+28a5 : F800036A;
+28a6 : B8206000;
+28a7 : 29610008;
+28a8 : F8000367;
+28a9 : B8201000;
+28aa : B9800800;
+28ab : F8002BD6;
+28ac : E0000018;
+28ad : 29610000;
+28ae : 78020001;
+28af : 384283BC;
+28b0 : F8002FE5;
+28b1 : B8201800;
+28b2 : 5C20000B;
+28b3 : 29610004;
+28b4 : 3402FFEA;
+28b5 : 44230010;
+28b6 : F8000359;
+28b7 : F8002BBB;
+28b8 : B8201000;
+28b9 : 78010001;
+28ba : 38217FC0;
+28bb : F8000F63;
+28bc : E0000008;
+28bd : 29610000;
+28be : 78020001;
+28bf : 384283C4;
+28c0 : F8002FD5;
+28c1 : 3402FFEA;
+28c2 : 5C200003;
+28c3 : F8002C6D;
+28c4 : 34020000;
+28c5 : B8400800;
+28c6 : 2B9D0004;
+28c7 : 2B8B0010;
+28c8 : 2B8C000C;
+28c9 : 2B8D0008;
+28ca : 379C0018;
+28cb : C3A00000;
+28cc : 379CFFF0;
+28cd : 5B8B000C;
+28ce : 5B8C0008;
+28cf : 5B9D0004;
+28d0 : B8205800;
+28d1 : 28210000;
+28d2 : 4420000B;
+28d3 : 78020001;
+28d4 : 384283D4;
+28d5 : F8002FC0;
+28d6 : B8206000;
+28d7 : 5C200006;
+28d8 : 37810010;
+28d9 : F8001796;
+28da : 340BFFFF;
+28db : 49810021;
+28dc : E000001C;
+28dd : 29610000;
+28de : 340B0000;
+28df : 5C20001D;
+28e0 : 37810010;
+28e1 : 34020000;
+28e2 : F8001E78;
+28e3 : 4D61000A;
+28e4 : 2B820010;
+28e5 : 78010001;
+28e6 : 382183DC;
+28e7 : F8000F37;
+28e8 : 2B820010;
+28e9 : 78010001;
+28ea : 38219700;
+28eb : 58220000;
+28ec : E0000010;
+28ed : 78010001;
+28ee : 38218404;
+28ef : F8000F2F;
+28f0 : 37810010;
+28f1 : F800177E;
+28f2 : 340BFFFF;
+28f3 : 48010009;
+28f4 : 2B820010;
+28f5 : 78010001;
+28f6 : 38219700;
+28f7 : 58220000;
+28f8 : 37810010;
+28f9 : 34020001;
+28fa : F8001E60;
+28fb : B8205800;
+28fc : B9600800;
+28fd : 2B9D0004;
+28fe : 2B8B000C;
+28ff : 2B8C0008;
+2900 : 379C0010;
+2901 : C3A00000;
+2902 : 379CFFE8;
+2903 : 5B8B000C;
+2904 : 5B8C0008;
+2905 : 5B9D0004;
+2906 : B8205800;
+2907 : 37820018;
+2908 : 37810010;
+2909 : F8001A06;
+290a : 29610008;
+290b : 44200014;
+290c : 29610000;
+290d : 78020001;
+290e : 3842817C;
+290f : F8002F86;
+2910 : 5C20000F;
+2911 : FBFFDC08;
+2912 : 34030003;
+2913 : 3402FFF0;
+2914 : 44230040;
+2915 : 29610004;
+2916 : F80002F9;
+2917 : B8206000;
+2918 : 29610008;
+2919 : F80002F6;
+291a : B8201800;
+291b : B9801000;
+291c : 1581001F;
+291d : 34040003;
+291e : E0000020;
+291f : 29610000;
+2920 : 4420000F;
+2921 : 78020001;
+2922 : 38428438;
+2923 : F8002F72;
+2924 : 5C20000B;
+2925 : FBFFDBF4;
+2926 : 34020003;
+2927 : 44220023;
+2928 : 29610004;
+2929 : F80002E6;
+292a : B8201000;
+292b : 34030000;
+292c : 1421001F;
+292d : 34040001;
+292e : E0000010;
+292f : 29610000;
+2930 : 44200010;
+2931 : 78020001;
+2932 : 38428440;
+2933 : F8002F62;
+2934 : 5C20000C;
+2935 : FBFFDBE4;
+2936 : 34020003;
+2937 : 44220013;
+2938 : 29610004;
+2939 : F80002D6;
+293a : B8201800;
+293b : 34020000;
+293c : 34010000;
+293d : 34040002;
+293e : F80019B1;
+293f : E0000014;
+2940 : 29610000;
+2941 : 44200009;
+2942 : 78020001;
+2943 : 38428448;
+2944 : F8002F51;
+2945 : 5C200005;
+2946 : 78010001;
+2947 : 382183AC;
+2948 : 2B820014;
+2949 : E0000008;
+294a : 2B820014;
+294b : 2B810010;
+294c : 34030000;
+294d : F80001EA;
+294e : B8201000;
+294f : 78010001;
+2950 : 3821844C;
+2951 : 2B830018;
+2952 : F8000ECC;
+2953 : 34020000;
+2954 : B8400800;
+2955 : 2B9D0004;
+2956 : 2B8B000C;
+2957 : 2B8C0008;
+2958 : 379C0018;
+2959 : C3A00000;
+295a : 78010001;
+295b : 3821B0B0;
+295c : 34020001;
+295d : 58220000;
+295e : 34010000;
+295f : C3A00000;
+2960 : 379CFFEC;
+2961 : 5B8B0014;
+2962 : 5B8C0010;
+2963 : 5B8D000C;
+2964 : 5B8E0008;
+2965 : 5B9D0004;
+2966 : B8205800;
+2967 : 28210000;
+2968 : 5C200003;
+2969 : F80015EF;
+296a : E0000057;
+296b : 29610004;
+296c : 340CFFEA;
+296d : 44200055;
+296e : 2962000C;
+296f : 44400008;
+2970 : F800029F;
+2971 : 5C200006;
+2972 : 2961000C;
+2973 : 340D0050;
+2974 : F800029B;
+2975 : 3C2E000A;
+2976 : E0000007;
+2977 : 2961000C;
+2978 : 340E0001;
+2979 : 340D0050;
+297a : 44200003;
+297b : F8000294;
+297c : 202D00FF;
+297d : 29610000;
+297e : 78020001;
+297f : 38428470;
+2980 : F8002F15;
+2981 : 5C20000D;
+2982 : 29620008;
+2983 : 4441000B;
+2984 : 29610004;
+2985 : F800028A;
+2986 : B8206000;
+2987 : 29610008;
+2988 : F8000287;
+2989 : B8201000;
+298a : B9C01800;
+298b : B9800800;
+298c : B9A02000;
+298d : E0000010;
+298e : 29610000;
+298f : 78020001;
+2990 : 38428470;
+2991 : F8002F04;
+2992 : 5C20000D;
+2993 : 780C0001;
+2994 : 398CBFA4;
+2995 : 29820004;
+2996 : 44410009;
+2997 : 29610004;
+2998 : F8000277;
+2999 : 5C200006;
+299a : 2982000C;
+299b : 29830008;
+299c : 34040000;
+299d : F8001F7C;
+299e : E0000023;
+299f : 29610000;
+29a0 : 78020001;
+29a1 : 38428474;
+29a2 : F8002EF3;
+29a3 : 5C20000D;
+29a4 : 29620008;
+29a5 : 4441000B;
+29a6 : 29610004;
+29a7 : F8000268;
+29a8 : B8206000;
+29a9 : 29610008;
+29aa : F8000265;
+29ab : B8201000;
+29ac : B9C01800;
+29ad : B9800800;
+29ae : B9A02000;
+29af : E0000011;
+29b0 : 29610000;
+29b1 : 78020001;
+29b2 : 38428474;
+29b3 : F8002EE2;
+29b4 : 340CFFEA;
+29b5 : 5C20000D;
+29b6 : 780D0001;
+29b7 : 39ADBFA4;
+29b8 : 29A20004;
+29b9 : 44410009;
+29ba : 29610004;
+29bb : F8000254;
+29bc : 5C200006;
+29bd : 29A2000C;
+29be : 29A30008;
+29bf : 34040000;
+29c0 : F8001F19;
+29c1 : 340C0000;
+29c2 : B9800800;
+29c3 : 2B9D0004;
+29c4 : 2B8B0014;
+29c5 : 2B8C0010;
+29c6 : 2B8D000C;
+29c7 : 2B8E0008;
+29c8 : 379C0014;
+29c9 : C3A00000;
+29ca : 379CFFF8;
+29cb : 5B8B0008;
+29cc : 5B9D0004;
+29cd : B8205800;
+29ce : 28210000;
+29cf : 4420000C;
+29d0 : 78020001;
+29d1 : 38428484;
+29d2 : F8002EC3;
+29d3 : 5C200008;
+29d4 : 34010001;
+29d5 : FBFFE695;
+29d6 : 78010001;
+29d7 : 382196FC;
+29d8 : 34020001;
+29d9 : 58220000;
+29da : E000000B;
+29db : 29610000;
+29dc : 44200009;
+29dd : 78020001;
+29de : 3842848C;
+29df : F8002EB6;
+29e0 : 5C200005;
+29e1 : FBFFE689;
+29e2 : 78010001;
+29e3 : 382196FC;
+29e4 : 58200000;
+29e5 : 78010001;
+29e6 : 382196FC;
+29e7 : 28210000;
+29e8 : 78020001;
+29e9 : 38428480;
+29ea : 44200003;
+29eb : 78020001;
+29ec : 3842847C;
+29ed : 78010001;
+29ee : 38218494;
+29ef : F8000E2F;
+29f0 : 34010000;
+29f1 : 2B9D0004;
+29f2 : 2B8B0008;
+29f3 : 379C0008;
+29f4 : C3A00000;
+29f5 : 379CFFEC;
+29f6 : 5B8B0010;
+29f7 : 5B8C000C;
+29f8 : 5B8D0008;
+29f9 : 5B9D0004;
+29fa : 340B0000;
+29fb : B8406800;
+29fc : 340C0004;
+29fd : 37820014;
+29fe : FBFFFB1C;
+29ff : 2B830014;
+2a00 : B5AB1000;
+2a01 : 356B0001;
+2a02 : 30430000;
+2a03 : 40220000;
+2a04 : 6442002E;
+2a05 : B4220800;
+2a06 : 5D6CFFF7;
+2a07 : 2B9D0004;
+2a08 : 2B8B0010;
+2a09 : 2B8C000C;
+2a0a : 2B8D0008;
+2a0b : 379C0014;
+2a0c : C3A00000;
+2a0d : 379CFFF8;
+2a0e : 5B8B0008;
+2a0f : 5B9D0004;
+2a10 : B8403000;
+2a11 : 40C30000;
+2a12 : 40C40001;
+2a13 : 40C50002;
+2a14 : 40C60003;
+2a15 : 78020001;
+2a16 : 384284B0;
+2a17 : B8205800;
+2a18 : F8000DF8;
+2a19 : B9600800;
+2a1a : 2B9D0004;
+2a1b : 2B8B0008;
+2a1c : 379C0008;
+2a1d : C3A00000;
+2a1e : 379CFFE0;
+2a1f : 5B8B0008;
+2a20 : 5B9D0004;
+2a21 : B8205800;
+2a22 : 28210000;
+2a23 : 44200005;
+2a24 : 78020001;
+2a25 : 38428170;
+2a26 : F8002E6F;
+2a27 : 5C200004;
+2a28 : 37810020;
+2a29 : F8000497;
+2a2a : E0000012;
+2a2b : 29610000;
+2a2c : 78020001;
+2a2d : 3842817C;
+2a2e : F8002E67;
+2a2f : B8201800;
+2a30 : 3402FFEA;
+2a31 : 5C200024;
+2a32 : 29610004;
+2a33 : 44230022;
+2a34 : 78020001;
+2a35 : 3842B8F8;
+2a36 : 34030002;
+2a37 : 58430000;
+2a38 : 37820020;
+2a39 : FBFFFFBC;
+2a3a : 37810020;
+2a3b : F800048E;
+2a3c : 378B000C;
+2a3d : 37820020;
+2a3e : B9600800;
+2a3f : FBFFFFCE;
+2a40 : 78010001;
+2a41 : 3821B8F8;
+2a42 : 28210000;
+2a43 : 34020001;
+2a44 : 44220009;
+2a45 : 44200004;
+2a46 : 34020002;
+2a47 : 5C22000D;
+2a48 : E0000008;
+2a49 : 78010001;
+2a4a : 382184BC;
+2a4b : F8000DD3;
+2a4c : E0000008;
+2a4d : 78010001;
+2a4e : 382184D8;
+2a4f : E0000003;
+2a50 : 78010001;
+2a51 : 382184F8;
+2a52 : B9601000;
+2a53 : F8000DCB;
+2a54 : 34020000;
+2a55 : B8400800;
+2a56 : 2B9D0004;
+2a57 : 2B8B0008;
+2a58 : 379C0020;
+2a59 : C3A00000;
+2a5a : 379CFFFC;
+2a5b : 5B9D0004;
+2a5c : 28210000;
+2a5d : 44200005;
+2a5e : FBFFD8A1;
+2a5f : 78020001;
+2a60 : 3842B0CC;
+2a61 : 58410000;
+2a62 : 78020001;
+2a63 : 3842B0CC;
+2a64 : 28420000;
+2a65 : 78010001;
+2a66 : 38218520;
+2a67 : F8000DB7;
+2a68 : 34010000;
+2a69 : 2B9D0004;
+2a6a : 379C0004;
+2a6b : C3A00000;
+2a6c : 379CFFF4;
+2a6d : 5B8B000C;
+2a6e : 5B8C0008;
+2a6f : 5B9D0004;
+2a70 : B8205800;
+2a71 : 28210000;
+2a72 : 4420000B;
+2a73 : 78020001;
+2a74 : 38428280;
+2a75 : F8002E20;
+2a76 : B8206000;
+2a77 : 5C200006;
+2a78 : F8001D24;
+2a79 : 4C2C0026;
+2a7a : 78010001;
+2a7b : 38218540;
+2a7c : E000000E;
+2a7d : 29610004;
+2a7e : 44200011;
+2a7f : 29610000;
+2a80 : 78020001;
+2a81 : 3842829C;
+2a82 : F8002E13;
+2a83 : B8206000;
+2a84 : 5C20000B;
+2a85 : B9600800;
+2a86 : F8001D3C;
+2a87 : 4C2C0005;
+2a88 : 78010001;
+2a89 : 38218560;
+2a8a : F8000D94;
+2a8b : E0000014;
+2a8c : 78010001;
+2a8d : 3821857C;
+2a8e : E3FFFFFC;
+2a8f : 29610000;
+2a90 : 44200008;
+2a91 : 78020001;
+2a92 : 384282E8;
+2a93 : F8002E02;
+2a94 : 5C200004;
+2a95 : FBFFFAD7;
+2a96 : F8001DA0;
+2a97 : E0000008;
+2a98 : 29610000;
+2a99 : 44200006;
+2a9a : 78020001;
+2a9b : 38428584;
+2a9c : F8002DF9;
+2a9d : 5C200002;
+2a9e : FBFFFA92;
+2a9f : 34010000;
+2aa0 : 2B9D0004;
+2aa1 : 2B8B000C;
+2aa2 : 2B8C0008;
+2aa3 : 379C000C;
+2aa4 : C3A00000;
+2aa5 : 379CFFF4;
+2aa6 : 5B8B0008;
+2aa7 : 5B9D0004;
+2aa8 : B8205800;
+2aa9 : 28210000;
+2aaa : 44200027;
+2aab : 78020001;
+2aac : 38428170;
+2aad : F8002DE8;
+2aae : 44200023;
+2aaf : 29610000;
+2ab0 : 78020001;
+2ab1 : 3842817C;
+2ab2 : F8002DE3;
+2ab3 : B8201000;
+2ab4 : 5C200013;
+2ab5 : 29610004;
+2ab6 : 44220011;
+2ab7 : 3782000C;
+2ab8 : FBFFFA62;
+2ab9 : 2B82000C;
+2aba : 34030FFE;
+2abb : 3441FFFF;
+2abc : 50610007;
+2abd : 29630004;
+2abe : 78010001;
+2abf : 3821858C;
+2ac0 : F8000D5E;
+2ac1 : 3402FFEA;
+2ac2 : E0000017;
+2ac3 : 78010001;
+2ac4 : 38219704;
+2ac5 : 58220000;
+2ac6 : E000000A;
+2ac7 : 29610000;
+2ac8 : 78020001;
+2ac9 : 38428260;
+2aca : F8002DCB;
+2acb : 3402FFEA;
+2acc : 5C20000D;
+2acd : 78010001;
+2ace : 38219704;
+2acf : 58200000;
+2ad0 : F8000F77;
+2ad1 : 78010001;
+2ad2 : 38219704;
+2ad3 : 28220000;
+2ad4 : 78010001;
+2ad5 : 382185A4;
+2ad6 : B8401800;
+2ad7 : F8000D47;
+2ad8 : 34020000;
+2ad9 : B8400800;
+2ada : 2B9D0004;
+2adb : 2B8B0008;
+2adc : 379C000C;
+2add : C3A00000;
+2ade : 379CFFDC;
+2adf : 5B8B0010;
+2ae0 : 5B8C000C;
+2ae1 : 5B8D0008;
+2ae2 : 5B9D0004;
+2ae3 : B8205800;
+2ae4 : 28210000;
+2ae5 : 5C200012;
+2ae6 : 37820020;
+2ae7 : 3783001C;
+2ae8 : 37840018;
+2ae9 : 37810024;
+2aea : F800132E;
+2aeb : 78010001;
+2aec : 382185C8;
+2aed : F8000D31;
+2aee : 2B820024;
+2aef : 2B830020;
+2af0 : 2B84001C;
+2af1 : 2B850018;
+2af2 : 78010001;
+2af3 : 382185E0;
+2af4 : F8000D2A;
+2af5 : 340C0000;
+2af6 : E000003A;
+2af7 : 78020001;
+2af8 : 3842860C;
+2af9 : F8002D9C;
+2afa : B8201000;
+2afb : 5C200007;
+2afc : 29610004;
+2afd : 44220005;
+2afe : F8000111;
+2aff : B8205800;
+2b00 : 34020001;
+2b01 : E000000C;
+2b02 : 29610000;
+2b03 : 78020001;
+2b04 : 38428624;
+2b05 : F8002D90;
+2b06 : B8201000;
+2b07 : 5C20000F;
+2b08 : 29610004;
+2b09 : 4422000D;
+2b0a : F8000105;
+2b0b : B8205800;
+2b0c : 34020000;
+2b0d : 37830014;
+2b0e : F8001324;
+2b0f : B8206000;
+2b10 : 5C200020;
+2b11 : 78010001;
+2b12 : 38218610;
+2b13 : B9601000;
+2b14 : 2B830014;
+2b15 : E000001A;
+2b16 : 29610000;
+2b17 : 78020001;
+2b18 : 38428628;
+2b19 : F8002D7C;
+2b1a : B8201000;
+2b1b : 340CFFEA;
+2b1c : 5C200014;
+2b1d : 29610004;
+2b1e : 44220012;
+2b1f : 29620008;
+2b20 : 44400010;
+2b21 : F80000EE;
+2b22 : B8206800;
+2b23 : 29610008;
+2b24 : F80000EB;
+2b25 : B8201000;
+2b26 : 5B810014;
+2b27 : B9A00800;
+2b28 : F8001351;
+2b29 : B8206000;
+2b2a : 5C200006;
+2b2b : 2B820014;
+2b2c : 78010001;
+2b2d : 3821862C;
+2b2e : B9A01800;
+2b2f : F8000CEF;
+2b30 : B9800800;
+2b31 : 2B9D0004;
+2b32 : 2B8B0010;
+2b33 : 2B8C000C;
+2b34 : 2B8D0008;
+2b35 : 379C0024;
+2b36 : C3A00000;
+2b37 : 379CFFD0;
+2b38 : 5B8B0030;
+2b39 : 5B8C002C;
+2b3a : 5B8D0028;
+2b3b : 5B8E0024;
+2b3c : 5B8F0020;
+2b3d : 5B90001C;
+2b3e : 5B910018;
+2b3f : 5B920014;
+2b40 : 5B930010;
+2b41 : 5B94000C;
+2b42 : 5B9D0008;
+2b43 : B8609000;
+2b44 : 78030001;
+2b45 : 38638EF4;
+2b46 : B8406000;
+2b47 : B8400800;
+2b48 : 28620000;
+2b49 : F8002C3C;
+2b4a : 78030001;
+2b4b : 38638EF4;
+2b4c : 28620000;
+2b4d : B8205800;
+2b4e : B9800800;
+2b4f : F8002C26;
+2b50 : B820A000;
+2b51 : 3402003C;
+2b52 : B9600800;
+2b53 : F8002C32;
+2b54 : 34020E10;
+2b55 : B8207800;
+2b56 : B9600800;
+2b57 : F8002C2E;
+2b58 : 3402003C;
+2b59 : F8002C1C;
+2b5a : B8208000;
+2b5b : 34020E10;
+2b5c : B9600800;
+2b5d : F8002C18;
+2b5e : B8208800;
+2b5f : BA807000;
+2b60 : 340B07B2;
+2b61 : E000000F;
+2b62 : 3402016D;
+2b63 : 5D80000B;
+2b64 : 34020064;
+2b65 : B9600800;
+2b66 : F8002BEF;
+2b67 : 3402016E;
+2b68 : 5C2C0006;
+2b69 : 34020190;
+2b6a : B9600800;
+2b6b : F8002BEA;
+2b6c : 64220000;
+2b6d : 3442016D;
+2b6e : C9C27000;
+2b6f : 356B0001;
+2b70 : 216C0003;
+2b71 : 3402016D;
+2b72 : 5D80000B;
+2b73 : 34020064;
+2b74 : B9600800;
+2b75 : F8002BE0;
+2b76 : 3402016E;
+2b77 : 5C2C0006;
+2b78 : 34020190;
+2b79 : B9600800;
+2b7a : F8002BDB;
+2b7b : 64220000;
+2b7c : 3442016D;
+2b7d : 51C2FFE5;
+2b7e : 34020064;
+2b7f : B9600800;
+2b80 : F8002BD5;
+2b81 : 34020190;
+2b82 : B8209800;
+2b83 : B9600800;
+2b84 : F8002BD1;
+2b85 : 78020001;
+2b86 : 340D0000;
+2b87 : 64250000;
+2b88 : 384292BC;
+2b89 : E000000D;
+2b8a : 34040000;
+2b8b : 5D800004;
+2b8c : 34040001;
+2b8d : 5E6C0002;
+2b8e : B8A02000;
+2b8f : 0884000C;
+2b90 : B48D2000;
+2b91 : 3C840002;
+2b92 : 35AD0001;
+2b93 : B4442000;
+2b94 : 28810000;
+2b95 : C9C17000;
+2b96 : 34040000;
+2b97 : 5D800004;
+2b98 : 34040001;
+2b99 : 5E6C0002;
+2b9a : B8A02000;
+2b9b : 0884000C;
+2b9c : B48D2000;
+2b9d : 3C840002;
+2b9e : B4442000;
+2b9f : 28810000;
+2ba0 : 51C1FFEA;
+2ba1 : 34010001;
+2ba2 : 35CE0001;
+2ba3 : 4641001D;
+2ba4 : 780C0001;
+2ba5 : 34010002;
+2ba6 : 398CB694;
+2ba7 : 46410028;
+2ba8 : 36810004;
+2ba9 : 34020007;
+2baa : F8002BDB;
+2bab : 3C210002;
+2bac : 78130001;
+2bad : 78020001;
+2bae : 3DAD0002;
+2baf : 38429338;
+2bb0 : 3A73931C;
+2bb1 : B6619800;
+2bb2 : B44D6800;
+2bb3 : 78120001;
+2bb4 : 2A630000;
+2bb5 : 29A40000;
+2bb6 : 3A52865C;
+2bb7 : B9800800;
+2bb8 : BA401000;
+2bb9 : B9C02800;
+2bba : B9603000;
+2bbb : BA203800;
+2bbc : BA004000;
+2bbd : 5B8F0004;
+2bbe : F8000C52;
+2bbf : E000001A;
+2bc0 : 78010001;
+2bc1 : 3DAD0002;
+2bc2 : 38219338;
+2bc3 : B42D6800;
+2bc4 : 29A30000;
+2bc5 : 78010001;
+2bc6 : 78020001;
+2bc7 : 3842867C;
+2bc8 : B9C02000;
+2bc9 : BA202800;
+2bca : BA003000;
+2bcb : B9E03800;
+2bcc : 3821B694;
+2bcd : F8000C43;
+2bce : E000000B;
+2bcf : 78020001;
+2bd0 : B9800800;
+2bd1 : 38428694;
+2bd2 : B9601800;
+2bd3 : 35A40001;
+2bd4 : B9C02800;
+2bd5 : BA203000;
+2bd6 : BA003800;
+2bd7 : B9E04000;
+2bd8 : F8000C38;
+2bd9 : 78010001;
+2bda : 3821B694;
+2bdb : 2B9D0008;
+2bdc : 2B8B0030;
+2bdd : 2B8C002C;
+2bde : 2B8D0028;
+2bdf : 2B8E0024;
+2be0 : 2B8F0020;
+2be1 : 2B90001C;
+2be2 : 2B910018;
+2be3 : 2B920014;
+2be4 : 2B930010;
+2be5 : 2B94000C;
+2be6 : 379C0030;
+2be7 : C3A00000;
+2be8 : 379CFFDC;
+2be9 : 5B8B0008;
+2bea : 5B9D0004;
+2beb : 5B840014;
+2bec : 20240080;
+2bed : 64840000;
+2bee : 5B830010;
+2bef : 78030001;
+2bf0 : B8204800;
+2bf1 : B8600800;
+2bf2 : 34030002;
+2bf3 : 5B82000C;
+2bf4 : B8405800;
+2bf5 : 382186B4;
+2bf6 : C8641000;
+2bf7 : 2123007F;
+2bf8 : 5B850018;
+2bf9 : 5B86001C;
+2bfa : 5B870020;
+2bfb : 5B880024;
+2bfc : F8000C22;
+2bfd : 37820010;
+2bfe : B9600800;
+2bff : F8000BFD;
+2c00 : 78010001;
+2c01 : 382186C0;
+2c02 : F8000C1C;
+2c03 : 2B9D0004;
+2c04 : 2B8B0008;
+2c05 : 379C0024;
+2c06 : C3A00000;
+2c07 : 379CFFFC;
+2c08 : 5B9D0004;
+2c09 : 78010001;
+2c0a : 382186D0;
+2c0b : F8000C13;
+2c0c : 2B9D0004;
+2c0d : 379C0004;
+2c0e : C3A00000;
+2c0f : 40240000;
+2c10 : 3402002D;
+2c11 : 34030001;
+2c12 : 5C820003;
+2c13 : 34210001;
+2c14 : 3403FFFF;
+2c15 : 34020000;
+2c16 : 34050009;
+2c17 : E0000004;
+2c18 : 0842000A;
+2c19 : 34210001;
+2c1a : B4821000;
+2c1b : 40240000;
+2c1c : 3484FFD0;
+2c1d : 208600FF;
+2c1e : 50A6FFFA;
+2c1f : 88430800;
+2c20 : C3A00000;
+2c21 : 379CFFF4;
+2c22 : 5B8B000C;
+2c23 : 5B8C0008;
+2c24 : 5B9D0004;
+2c25 : B8206000;
+2c26 : F80011E4;
+2c27 : 342B0001;
+2c28 : F80011E2;
+2c29 : 5C2BFFFF;
+2c2a : B9800800;
+2c2b : E0000002;
+2c2c : 3421FFFF;
+2c2d : 4820FFFF;
+2c2e : F80011DC;
+2c2f : C82B0800;
+2c30 : 2B9D0004;
+2c31 : 2B8B000C;
+2c32 : 2B8C0008;
+2c33 : 379C000C;
+2c34 : C3A00000;
+2c35 : 379CFFF0;
+2c36 : 5B8B0010;
+2c37 : 5B8C000C;
+2c38 : 5B8D0008;
+2c39 : 5B9D0004;
+2c3a : 340B0400;
+2c3b : 340C0400;
+2c3c : E0000003;
+2c3d : B58B6000;
+2c3e : 3D6B0001;
+2c3f : B9800800;
+2c40 : FBFFFFE1;
+2c41 : 4420FFFC;
+2c42 : 158C0001;
+2c43 : 156B0002;
+2c44 : E0000009;
+2c45 : B56C6800;
+2c46 : B9A00800;
+2c47 : FBFFFFDA;
+2c48 : 5C200002;
+2c49 : B9A06000;
+2c4a : 0161001F;
+2c4b : B42B5800;
+2c4c : 156B0001;
+2c4d : 5D60FFF8;
+2c4e : 78010001;
+2c4f : 3821B6D4;
+2c50 : 582C0000;
+2c51 : 78010001;
+2c52 : B9801000;
+2c53 : 38218728;
+2c54 : F8000BCA;
+2c55 : 2B9D0004;
+2c56 : 2B8B0010;
+2c57 : 2B8C000C;
+2c58 : 2B8D0008;
+2c59 : 379C0010;
+2c5a : C3A00000;
+2c5b : 379CFFFC;
+2c5c : 5B9D0004;
+2c5d : 78020001;
+2c5e : 3842B6D4;
+2c5f : 28430000;
+2c60 : 34042710;
+2c61 : 0865000A;
+2c62 : E0000004;
+2c63 : 3442FFFF;
+2c64 : 4840FFFF;
+2c65 : 3421D8F0;
+2c66 : 50810003;
+2c67 : B8A01000;
+2c68 : E3FFFFFC;
+2c69 : 88230800;
+2c6a : 340203E8;
+2c6b : F8002B0A;
+2c6c : E0000002;
+2c6d : 3421FFFF;
+2c6e : 4820FFFF;
+2c6f : 34010000;
+2c70 : 2B9D0004;
+2c71 : 379C0004;
+2c72 : C3A00000;
+2c73 : B8202800;
+2c74 : 5C800002;
+2c75 : B8602000;
+2c76 : B8803000;
+2c77 : 50640002;
+2c78 : B8603000;
+2c79 : B4260800;
+2c7a : E000000E;
+2c7b : 2C460002;
+2c7c : 2847000C;
+2c7d : B4E63800;
+2c7e : 40E60000;
+2c7f : 30A60000;
+2c80 : 2C470002;
+2c81 : 2C460006;
+2c82 : 34A50001;
+2c83 : 34E70001;
+2c84 : 20E7FFFF;
+2c85 : 0C470002;
+2c86 : 5CC70002;
+2c87 : 0C400002;
+2c88 : 5CA1FFF3;
+2c89 : 5083000B;
+2c8a : 2C410002;
+2c8b : B4610800;
+2c8c : C8242000;
+2c8d : 0C440002;
+2c8e : 2C410006;
+2c8f : E0000003;
+2c90 : C8812000;
+2c91 : 0C440002;
+2c92 : 2C440002;
+2c93 : 5481FFFD;
+2c94 : B8600800;
+2c95 : C3A00000;
+2c96 : B4432800;
+2c97 : E000000D;
+2c98 : 2C240000;
+2c99 : 2826000C;
+2c9a : 40470000;
+2c9b : 34420001;
+2c9c : B4C43000;
+2c9d : 30C70000;
+2c9e : 34840001;
+2c9f : 2C260006;
+2ca0 : 2084FFFF;
+2ca1 : 0C240000;
+2ca2 : 5CC40002;
+2ca3 : 0C200000;
+2ca4 : 5C45FFF4;
+2ca5 : B8600800;
+2ca6 : C3A00000;
+2ca7 : 379CFFC8;
+2ca8 : 5B8B001C;
+2ca9 : 5B8C0018;
+2caa : 5B8D0014;
+2cab : 5B8E0010;
+2cac : 5B8F000C;
+2cad : 5B900008;
+2cae : 5B9D0004;
+2caf : 780B0001;
+2cb0 : 780C0001;
+2cb1 : 396BB8E8;
+2cb2 : 398CB708;
+2cb3 : B9600800;
+2cb4 : B9801000;
+2cb5 : 340301E0;
+2cb6 : 37840020;
+2cb7 : F8000FC0;
+2cb8 : B8206800;
+2cb9 : 340F0000;
+2cba : 4C010061;
+2cbb : 2D62000C;
+2cbc : 0F800038;
+2cbd : 38018100;
+2cbe : 5C41000E;
+2cbf : B9801000;
+2cc0 : 34030002;
+2cc1 : 37810038;
+2cc2 : F8002B14;
+2cc3 : 78010001;
+2cc4 : 78020001;
+2cc5 : 3821B8F4;
+2cc6 : 3842B70A;
+2cc7 : 34030002;
+2cc8 : 780C0001;
+2cc9 : F8002B0D;
+2cca : 35ADFFFC;
+2ccb : 398CB70C;
+2ccc : 78010001;
+2ccd : 2F820038;
+2cce : 38219704;
+2ccf : 28210000;
+2cd0 : 20420FFF;
+2cd1 : 340F0000;
+2cd2 : 5C410049;
+2cd3 : 41820000;
+2cd4 : 34010045;
+2cd5 : 34030000;
+2cd6 : 5C410008;
+2cd7 : 41820009;
+2cd8 : 34010011;
+2cd9 : 5C410005;
+2cda : 41830016;
+2cdb : 41810017;
+2cdc : 3C630008;
+2cdd : B8611800;
+2cde : 78010001;
+2cdf : 78020001;
+2ce0 : 3821B8E8;
+2ce1 : 3842B6D8;
+2ce2 : 2C27000C;
+2ce3 : 34460030;
+2ce4 : 34040000;
+2ce5 : 340B0000;
+2ce6 : E000000C;
+2ce7 : 28410000;
+2ce8 : 44200009;
+2ce9 : 2C25000C;
+2cea : 5CA70007;
+2ceb : 2C25000E;
+2cec : 5C600003;
+2ced : 44A30038;
+2cee : E0000003;
+2cef : 5CA30002;
+2cf0 : B8202000;
+2cf1 : 34420004;
+2cf2 : 5C46FFF5;
+2cf3 : 44800002;
+2cf4 : B8805800;
+2cf5 : 340F0001;
+2cf6 : 45600025;
+2cf7 : 2D700028;
+2cf8 : 35A10028;
+2cf9 : 48300022;
+2cfa : 356E0024;
+2cfb : 3782003A;
+2cfc : 34030002;
+2cfd : B9C00800;
+2cfe : 0F8D003A;
+2cff : FBFFFF97;
+2d00 : CA016800;
+2d01 : 21ADFFFF;
+2d02 : 0D6D0028;
+2d03 : 37820020;
+2d04 : 34030018;
+2d05 : B9C00800;
+2d06 : FBFFFF90;
+2d07 : C9A16800;
+2d08 : 21ADFFFF;
+2d09 : 78020001;
+2d0a : 0D6D0028;
+2d0b : 3842B8E8;
+2d0c : 3403000E;
+2d0d : B9C00800;
+2d0e : FBFFFF88;
+2d0f : C9A16800;
+2d10 : 2F83003A;
+2d11 : 21ADFFFF;
+2d12 : 0D6D0028;
+2d13 : B9C00800;
+2d14 : B9801000;
+2d15 : FBFFFF81;
+2d16 : C9A10800;
+2d17 : 0D610028;
+2d18 : 2D61002C;
+2d19 : 34210001;
+2d1a : 0D61002C;
+2d1b : B9E00800;
+2d1c : 2B9D0004;
+2d1d : 2B8B001C;
+2d1e : 2B8C0018;
+2d1f : 2B8D0014;
+2d20 : 2B8E0010;
+2d21 : 2B8F000C;
+2d22 : 2B900008;
+2d23 : 379C0038;
+2d24 : C3A00000;
+2d25 : B8205800;
+2d26 : E3FFFFCB;
+2d27 : 379CFFFC;
+2d28 : 5B9D0004;
+2d29 : B8400800;
+2d2a : F8000C35;
+2d2b : 34010000;
+2d2c : 2B9D0004;
+2d2d : 379C0004;
+2d2e : C3A00000;
+2d2f : 78020001;
+2d30 : 3842B6D8;
+2d31 : 34430030;
+2d32 : E0000004;
+2d33 : 28440000;
+2d34 : 34420004;
+2d35 : 5881001C;
+2d36 : 5C43FFFD;
+2d37 : C3A00000;
+2d38 : 379CFF24;
+2d39 : 5B8B0014;
+2d3a : 5B8C0010;
+2d3b : 5B8D000C;
+2d3c : 5B8E0008;
+2d3d : 5B9D0004;
+2d3e : 78050001;
+2d3f : B8205800;
+2d40 : B8406000;
+2d41 : B8607000;
+2d42 : B8806800;
+2d43 : 38A5B6D8;
+2d44 : 34010000;
+2d45 : 3402000C;
+2d46 : 28A30000;
+2d47 : 34A50004;
+2d48 : 5C600009;
+2d49 : 3C220002;
+2d4a : 78050001;
+2d4b : 38A5B6D8;
+2d4c : B4A22800;
+2d4d : 58AB0000;
+2d4e : 3402000C;
+2d4f : 5C22000A;
+2d50 : E0000003;
+2d51 : 34210001;
+2d52 : 5C22FFF4;
+2d53 : 78010001;
+2d54 : 78020001;
+2d55 : 38429368;
+2d56 : 38218740;
+2d57 : F8000AC7;
+2d58 : E0000020;
+2d59 : 78020001;
+2d5a : 37810018;
+2d5b : 3842875C;
+2d5c : FBFFF5C5;
+2d5d : 4801001B;
+2d5e : B9600800;
+2d5f : 34020000;
+2d60 : 34030012;
+2d61 : F8002AF3;
+2d62 : 45800005;
+2d63 : B9600800;
+2d64 : B9801000;
+2d65 : 34030012;
+2d66 : F8002A70;
+2d67 : 0D60000E;
+2d68 : 5DC00004;
+2d69 : 34010800;
+2d6a : 0D61000C;
+2d6b : 0D6D000E;
+2d6c : 35610012;
+2d6d : F8000BF2;
+2d6e : 2B8100D0;
+2d6f : 0D600026;
+2d70 : 0D600024;
+2d71 : 5961001C;
+2d72 : 2B8100B8;
+2d73 : 0D60002C;
+2d74 : 59610020;
+2d75 : 2D61002A;
+2d76 : 0D610028;
+2d77 : E0000002;
+2d78 : 340B0000;
+2d79 : B9600800;
+2d7a : 2B9D0004;
+2d7b : 2B8B0014;
+2d7c : 2B8C0010;
+2d7d : 2B8D000C;
+2d7e : 2B8E0008;
+2d7f : 379C00DC;
+2d80 : C3A00000;
+2d81 : 78020001;
+2d82 : 3842B6D8;
+2d83 : 34430030;
+2d84 : E0000005;
+2d85 : 28440000;
+2d86 : 5C810002;
+2d87 : 58400000;
+2d88 : 34420004;
+2d89 : 5C43FFFC;
+2d8a : 34010000;
+2d8b : C3A00000;
+2d8c : 379CFFE8;
+2d8d : 5B8B0018;
+2d8e : 5B8C0014;
+2d8f : 5B8D0010;
+2d90 : 5B8E000C;
+2d91 : 5B8F0008;
+2d92 : 5B9D0004;
+2d93 : B8205800;
+2d94 : 59620010;
+2d95 : B8407000;
+2d96 : B8807800;
+2d97 : B8A06000;
+2d98 : 282D0008;
+2d99 : 44600005;
+2d9a : B8A00800;
+2d9b : 3402FC18;
+2d9c : F800298C;
+2d9d : B42D6800;
+2d9e : C9CF2000;
+2d9f : B8801800;
+2da0 : 4C800002;
+2da1 : B48C1800;
+2da2 : 0181001F;
+2da3 : B42C0800;
+2da4 : 14210001;
+2da5 : B4242000;
+2da6 : 4C800002;
+2da7 : B48C2000;
+2da8 : 49840002;
+2da9 : C88C2000;
+2daa : 09820003;
+2dab : 1445001F;
+2dac : 00A5001E;
+2dad : B4A21000;
+2dae : 14420002;
+2daf : 48620006;
+2db0 : 1582001F;
+2db1 : 0042001E;
+2db2 : B44C1000;
+2db3 : 14420002;
+2db4 : 4C62000D;
+2db5 : B4812000;
+2db6 : 596D0008;
+2db7 : 5964000C;
+2db8 : 4984000A;
+2db9 : C88C2000;
+2dba : 5964000C;
+2dbb : B9800800;
+2dbc : 340203E8;
+2dbd : F800296B;
+2dbe : B5A10800;
+2dbf : 59610008;
+2dc0 : E0000002;
+2dc1 : 5963000C;
+2dc2 : 78030001;
+2dc3 : 38638EE8;
+2dc4 : 29610008;
+2dc5 : 28620000;
+2dc6 : 4C41000D;
+2dc7 : 78030001;
+2dc8 : 38638EDC;
+2dc9 : 28620000;
+2dca : 29630000;
+2dcb : B4220800;
+2dcc : 29620004;
+2dcd : 59610008;
+2dce : 34410001;
+2dcf : F4411000;
+2dd0 : 59610004;
+2dd1 : B4431000;
+2dd2 : 59620000;
+2dd3 : 2B9D0004;
+2dd4 : 2B8B0018;
+2dd5 : 2B8C0014;
+2dd6 : 2B8D0010;
+2dd7 : 2B8E000C;
+2dd8 : 2B8F0008;
+2dd9 : 379C0018;
+2dda : C3A00000;
+2ddb : 379CFFB4;
+2ddc : 5B8B0024;
+2ddd : 5B8C0020;
+2dde : 5B8D001C;
+2ddf : 5B8E0018;
+2de0 : 5B8F0014;
+2de1 : 5B900010;
+2de2 : 5B91000C;
+2de3 : 5B920008;
+2de4 : 5B9D0004;
+2de5 : B8406800;
+2de6 : 2C22002C;
+2de7 : B8A05800;
+2de8 : B8206000;
+2de9 : B8609000;
+2dea : B8807800;
+2deb : 34050000;
+2dec : 44400056;
+2ded : 342E0024;
+2dee : 2C310028;
+2def : 3442FFFF;
+2df0 : 0C22002C;
+2df1 : 34030002;
+2df2 : B9C01000;
+2df3 : 34040000;
+2df4 : 3781004E;
+2df5 : FBFFFE7E;
+2df6 : B6218800;
+2df7 : 2231FFFF;
+2df8 : 0D910028;
+2df9 : B9C01000;
+2dfa : 34030018;
+2dfb : 34040000;
+2dfc : 37810028;
+2dfd : FBFFFE76;
+2dfe : B6218800;
+2dff : 2231FFFF;
+2e00 : 37900040;
+2e01 : 0D910028;
+2e02 : B9C01000;
+2e03 : 3403000E;
+2e04 : 34040000;
+2e05 : BA000800;
+2e06 : FBFFFE6D;
+2e07 : B6218800;
+2e08 : 2F83004E;
+2e09 : 2231FFFF;
+2e0a : B9C01000;
+2e0b : B9E02000;
+2e0c : 0D910028;
+2e0d : BA400800;
+2e0e : FBFFFE65;
+2e0f : B6210800;
+2e10 : 0D810028;
+2e11 : 2F81004C;
+2e12 : 78030001;
+2e13 : 38639704;
+2e14 : 0DA1000C;
+2e15 : 28610000;
+2e16 : 37820046;
+2e17 : 34030006;
+2e18 : 0DA10010;
+2e19 : B9A00800;
+2e1a : F80029BC;
+2e1b : 35A10006;
+2e1c : BA001000;
+2e1d : 34030006;
+2e1e : F80029B8;
+2e1f : 4560001F;
+2e20 : 2B810038;
+2e21 : 59610014;
+2e22 : 2B81002C;
+2e23 : 59610018;
+2e24 : 34010000;
+2e25 : F800260C;
+2e26 : B8206800;
+2e27 : 35620010;
+2e28 : 34030000;
+2e29 : 34010000;
+2e2a : F80025A4;
+2e2b : 2B810030;
+2e2c : 43820028;
+2e2d : 2B83002C;
+2e2e : 59610000;
+2e2f : 2B810034;
+2e30 : 7C420000;
+2e31 : 2984001C;
+2e32 : 59610004;
+2e33 : 2B810038;
+2e34 : 5960000C;
+2e35 : 34051F40;
+2e36 : 59610008;
+2e37 : 21A100FF;
+2e38 : 64210000;
+2e39 : A0220800;
+2e3a : 29620010;
+2e3b : 5961001C;
+2e3c : B9600800;
+2e3d : FBFFFF4F;
+2e3e : 2F81004E;
+2e3f : B9E02800;
+2e40 : 502F0002;
+2e41 : B8202800;
+2e42 : B8A00800;
+2e43 : 2B9D0004;
+2e44 : 2B8B0024;
+2e45 : 2B8C0020;
+2e46 : 2B8D001C;
+2e47 : 2B8E0018;
+2e48 : 2B8F0014;
+2e49 : 2B900010;
+2e4a : 2B91000C;
+2e4b : 2B920008;
+2e4c : 379C004C;
+2e4d : C3A00000;
+2e4e : 379CFFC0;
+2e4f : 5B8B0014;
+2e50 : 5B8C0010;
+2e51 : 5B8D000C;
+2e52 : 5B8E0008;
+2e53 : 5B9D0004;
+2e54 : B8206000;
+2e55 : B8607000;
+2e56 : 37810030;
+2e57 : 34030006;
+2e58 : B8A05800;
+2e59 : B8806800;
+2e5a : F800297C;
+2e5b : 37810036;
+2e5c : 35820012;
+2e5d : 34030006;
+2e5e : F8002978;
+2e5f : 78010001;
+2e60 : 38219704;
+2e61 : 28250000;
+2e62 : 2D81000C;
+2e63 : 44A00009;
+2e64 : 34028100;
+2e65 : 0F82003C;
+2e66 : 2D820018;
+2e67 : 0F810040;
+2e68 : 3C42000D;
+2e69 : B8452800;
+2e6a : 0F85003E;
+2e6b : E0000002;
+2e6c : 0F81003C;
+2e6d : 37810030;
+2e6e : B9C01000;
+2e6f : B9A01800;
+2e70 : 37840018;
+2e71 : F8000EC0;
+2e72 : 4560000A;
+2e73 : 2B820020;
+2e74 : 5960000C;
+2e75 : 59620000;
+2e76 : 2B820024;
+2e77 : 59620004;
+2e78 : 2B820028;
+2e79 : 59620008;
+2e7a : 43820018;
+2e7b : 5962001C;
+2e7c : 2B9D0004;
+2e7d : 2B8B0014;
+2e7e : 2B8C0010;
+2e7f : 2B8D000C;
+2e80 : 2B8E0008;
+2e81 : 379C0040;
+2e82 : C3A00000;
+2e83 : C3A00000;
+2e84 : 379CFFE4;
+2e85 : 5B8B0008;
+2e86 : 5B9D0004;
+2e87 : 78010001;
+2e88 : 34020000;
+2e89 : 34030000;
+2e8a : 34040044;
+2e8b : 3821A010;
+2e8c : FBFFFEAC;
+2e8d : 78020001;
+2e8e : 3842B8FC;
+2e8f : 58410000;
+2e90 : 78010001;
+2e91 : 34040025;
+2e92 : 34020000;
+2e93 : 34030000;
+2e94 : 3821A044;
+2e95 : FBFFFEA3;
+2e96 : 78020001;
+2e97 : 378B000C;
+2e98 : 3842B90C;
+2e99 : 58410000;
+2e9a : 34030012;
+2e9b : B9600800;
+2e9c : 34020000;
+2e9d : F80029B7;
+2e9e : 34010800;
+2e9f : 0F810018;
+2ea0 : 78010001;
+2ea1 : B9601000;
+2ea2 : 34030001;
+2ea3 : 34040000;
+2ea4 : 3821A078;
+2ea5 : FBFFFE93;
+2ea6 : 78020001;
+2ea7 : 3842B908;
+2ea8 : 58410000;
+2ea9 : FBFFFFDA;
+2eaa : 2B9D0004;
+2eab : 2B8B0008;
+2eac : 379C001C;
+2ead : C3A00000;
+2eae : 34010000;
+2eaf : C3A00000;
+2eb0 : 34030000;
+2eb1 : 34040000;
+2eb2 : E0000005;
+2eb3 : 2C250000;
+2eb4 : 34840001;
+2eb5 : 34210002;
+2eb6 : B4651800;
+2eb7 : 4844FFFC;
+2eb8 : 00610010;
+2eb9 : 2063FFFF;
+2eba : B4611800;
+2ebb : 00610010;
+2ebc : B4231800;
+2ebd : A4600800;
+2ebe : 2021FFFF;
+2ebf : C3A00000;
+2ec0 : 379CFFFC;
+2ec1 : 5B9D0004;
+2ec2 : 78020001;
+2ec3 : 3842B910;
+2ec4 : 34030004;
+2ec5 : F8002911;
+2ec6 : 2B9D0004;
+2ec7 : 379C0004;
+2ec8 : C3A00000;
+2ec9 : 379CFFF4;
+2eca : 5B8B000C;
+2ecb : 5B8C0008;
+2ecc : 5B9D0004;
+2ecd : 78030001;
+2ece : 780B0001;
+2ecf : 396BB910;
+2ed0 : 3863C2B8;
+2ed1 : B8201000;
+2ed2 : 286C0000;
+2ed3 : B9600800;
+2ed4 : 34030004;
+2ed5 : F8002901;
+2ed6 : 41620000;
+2ed7 : 41610001;
+2ed8 : 358C0018;
+2ed9 : 3C420018;
+2eda : 3C210010;
+2edb : B8410800;
+2edc : 41620003;
+2edd : B8220800;
+2ede : 41620002;
+2edf : 3C420008;
+2ee0 : B8220800;
+2ee1 : E0000002;
+2ee2 : 59810000;
+2ee3 : 29820000;
+2ee4 : 5C41FFFE;
+2ee5 : 5C200004;
+2ee6 : 78010001;
+2ee7 : 3821B8F8;
+2ee8 : 58200000;
+2ee9 : 78010001;
+2eea : 3821B904;
+2eeb : 58200000;
+2eec : 2B9D0004;
+2eed : 2B8B000C;
+2eee : 2B8C0008;
+2eef : 379C000C;
+2ef0 : C3A00000;
+2ef1 : 379CFFFC;
+2ef2 : 5B9D0004;
+2ef3 : B8201000;
+2ef4 : 3401FFFF;
+2ef5 : 44400006;
+2ef6 : 34410010;
+2ef7 : 78020001;
+2ef8 : 3842B910;
+2ef9 : 34030004;
+2efa : F80028BB;
+2efb : 2B9D0004;
+2efc : 379C0004;
+2efd : C3A00000;
+2efe : 379CFE30;
+2eff : 5B8B0020;
+2f00 : 5B8C001C;
+2f01 : 5B8D0018;
+2f02 : 5B8E0014;
+2f03 : 5B8F0010;
+2f04 : 5B90000C;
+2f05 : 5B910008;
+2f06 : 5B9D0004;
+2f07 : 78010001;
+2f08 : 3821C2A4;
+2f09 : 28220000;
+2f0a : 34010001;
+2f0b : 5C410006;
+2f0c : 78010001;
+2f0d : 3821B8F8;
+2f0e : 28230000;
+2f0f : 5C620002;
+2f10 : 58200000;
+2f11 : 78020001;
+2f12 : 3842B8FC;
+2f13 : 28410000;
+2f14 : 378C0024;
+2f15 : 378201B4;
+2f16 : 34040190;
+2f17 : B9801800;
+2f18 : 34050000;
+2f19 : FBFFFEC2;
+2f1a : 78040001;
+2f1b : 3884B8F8;
+2f1c : B8201000;
+2f1d : 28810000;
+2f1e : 340B0000;
+2f1f : 5C200023;
+2f20 : 4D620004;
+2f21 : B9800800;
+2f22 : F8000235;
+2f23 : B8205800;
+2f24 : F8000EE6;
+2f25 : 78020001;
+2f26 : 3842B900;
+2f27 : 28430000;
+2f28 : 5C600003;
+2f29 : 58410000;
+2f2a : E0000005;
+2f2b : 346303E8;
+2f2c : C8230800;
+2f2d : 48010015;
+2f2e : 58430000;
+2f2f : 78010001;
+2f30 : 3821B904;
+2f31 : 28230000;
+2f32 : 378B0024;
+2f33 : 378C01B4;
+2f34 : 34630001;
+2f35 : 58230000;
+2f36 : B9601000;
+2f37 : B9800800;
+2f38 : F80001BB;
+2f39 : 78050001;
+2f3a : 38A5B8FC;
+2f3b : B8202000;
+2f3c : 28A10000;
+2f3d : B9601800;
+2f3e : B9801000;
+2f3f : 34050000;
+2f40 : FBFFFF0E;
+2f41 : 340B0001;
+2f42 : 780D0001;
+2f43 : 39ADB908;
+2f44 : 29A10000;
+2f45 : 378E01B4;
+2f46 : 378C0024;
+2f47 : B9C01000;
+2f48 : B9801800;
+2f49 : 34040080;
+2f4a : 34050000;
+2f4b : FBFFFE90;
+2f4c : B8208800;
+2f4d : 340F0000;
+2f4e : 4C010014;
+2f4f : 78030001;
+2f50 : 3863B8F8;
+2f51 : 28610000;
+2f52 : 44200010;
+2f53 : B9800800;
+2f54 : FBFFFF9D;
+2f55 : B8208000;
+2f56 : 5C20000C;
+2f57 : B9800800;
+2f58 : BA201000;
+2f59 : F80000BD;
+2f5a : B8202000;
+2f5b : 340F0001;
+2f5c : 4E010006;
+2f5d : 29A10000;
+2f5e : B9C01000;
+2f5f : B9801800;
+2f60 : 34050000;
+2f61 : FBFFFEED;
+2f62 : 780D0001;
+2f63 : 39ADB90C;
+2f64 : 29A10000;
+2f65 : 379001B4;
+2f66 : 378C0024;
+2f67 : BA001000;
+2f68 : B9801800;
+2f69 : 34040020;
+2f6a : 34050000;
+2f6b : FBFFFE70;
+2f6c : 340E0000;
+2f6d : 4C01001C;
+2f6e : B9800800;
+2f6f : FBFFFF82;
+2f70 : 5C200019;
+2f71 : 378101C8;
+2f72 : 34020000;
+2f73 : F800139C;
+2f74 : 78020001;
+2f75 : 38428EF8;
+2f76 : 28410000;
+2f77 : 2B8201CC;
+2f78 : 34030004;
+2f79 : 340E0001;
+2f7a : B4410800;
+2f7b : 5B8101D0;
+2f7c : 378201D0;
+2f7d : 37810040;
+2f7e : F8002858;
+2f7f : B9800800;
+2f80 : 34020020;
+2f81 : 34030000;
+2f82 : F80000F5;
+2f83 : 29A10000;
+2f84 : BA001000;
+2f85 : B9801800;
+2f86 : 34040020;
+2f87 : 34050000;
+2f88 : FBFFFEC6;
+2f89 : FBFFFF25;
+2f8a : B5EB5800;
+2f8b : B5610800;
+2f8c : B42E7000;
+2f8d : 7DC10000;
+2f8e : 2B9D0004;
+2f8f : 2B8B0020;
+2f90 : 2B8C001C;
+2f91 : 2B8D0018;
+2f92 : 2B8E0014;
+2f93 : 2B8F0010;
+2f94 : 2B90000C;
+2f95 : 2B910008;
+2f96 : 379C01D0;
+2f97 : C3A00000;
+2f98 : 379CFF34;
+2f99 : 5B8B0028;
+2f9a : 5B8C0024;
+2f9b : 5B8D0020;
+2f9c : 5B8E001C;
+2f9d : 5B8F0018;
+2f9e : 5B900014;
+2f9f : 5B910010;
+2fa0 : 5B92000C;
+2fa1 : 5B930008;
+2fa2 : 5B9D0004;
+2fa3 : 78010001;
+2fa4 : 3821B8F8;
+2fa5 : 28210000;
+2fa6 : 340B0000;
+2fa7 : 44200047;
+2fa8 : 780C0001;
+2fa9 : 398CBBF4;
+2faa : 29810000;
+2fab : 378F00AC;
+2fac : 378E002C;
+2fad : B9E01000;
+2fae : B9C01800;
+2faf : 34040080;
+2fb0 : 34050000;
+2fb1 : FBFFFE2A;
+2fb2 : 4C01003C;
+2fb3 : 3402001B;
+2fb4 : 340B0001;
+2fb5 : 4C410039;
+2fb6 : 378D00C8;
+2fb7 : B9A00800;
+2fb8 : FBFFFF08;
+2fb9 : 43810032;
+2fba : 5C200034;
+2fbb : 43810033;
+2fbc : 5C2B0032;
+2fbd : 37900044;
+2fbe : BA000800;
+2fbf : B9A01000;
+2fc0 : 34030004;
+2fc1 : F80027F4;
+2fc2 : 5C20002C;
+2fc3 : 379100C0;
+2fc4 : 37930034;
+2fc5 : BA601000;
+2fc6 : 34030006;
+2fc7 : BA200800;
+2fc8 : F800280E;
+2fc9 : 3792003A;
+2fca : BA401000;
+2fcb : 34030004;
+2fcc : 378100CC;
+2fcd : F8002809;
+2fce : 34010008;
+2fcf : 3381002E;
+2fd0 : 34010006;
+2fd1 : 33810030;
+2fd2 : 34010004;
+2fd3 : 33810031;
+2fd4 : 34010002;
+2fd5 : 33810033;
+2fd6 : BA600800;
+2fd7 : 3380002C;
+2fd8 : 338B002D;
+2fd9 : 3380002F;
+2fda : 33800032;
+2fdb : F8000984;
+2fdc : B9A01000;
+2fdd : 34030004;
+2fde : BA400800;
+2fdf : F80027F7;
+2fe0 : BA201000;
+2fe1 : 34030006;
+2fe2 : 3781003E;
+2fe3 : F80027F3;
+2fe4 : 378200CC;
+2fe5 : 34030004;
+2fe6 : BA000800;
+2fe7 : F80027EF;
+2fe8 : 29810000;
+2fe9 : B9E01000;
+2fea : B9C01800;
+2feb : 3404001C;
+2fec : 34050000;
+2fed : FBFFFE61;
+2fee : B9600800;
+2fef : 2B9D0004;
+2ff0 : 2B8B0028;
+2ff1 : 2B8C0024;
+2ff2 : 2B8D0020;
+2ff3 : 2B8E001C;
+2ff4 : 2B8F0018;
+2ff5 : 2B900014;
+2ff6 : 2B910010;
+2ff7 : 2B92000C;
+2ff8 : 2B930008;
+2ff9 : 379C00CC;
+2ffa : C3A00000;
+2ffb : 379CFFE4;
+2ffc : 5B8B0008;
+2ffd : 5B9D0004;
+2ffe : 378B000C;
+2fff : B9600800;
+3000 : 34020000;
+3001 : 34030012;
+3002 : F8002852;
+3003 : B9600800;
+3004 : 340200FF;
+3005 : 34030006;
+3006 : F800284E;
+3007 : 34010806;
+3008 : 0F810018;
+3009 : 78010001;
+300a : B9601000;
+300b : 34030001;
+300c : 34040000;
+300d : 3821A0AC;
+300e : FBFFFD2A;
+300f : 78020001;
+3010 : 3842BBF4;
+3011 : 58410000;
+3012 : 2B9D0004;
+3013 : 2B8B0008;
+3014 : 379C001C;
+3015 : C3A00000;
+3016 : 379CFFE0;
+3017 : 5B8B0018;
+3018 : 5B8C0014;
+3019 : 5B8D0010;
+301a : 5B8E000C;
+301b : 5B8F0008;
+301c : 5B9D0004;
+301d : 378D001C;
+301e : B8205800;
+301f : B9A00800;
+3020 : FBFFFEA0;
+3021 : 41620000;
+3022 : 34010045;
+3023 : 340C0000;
+3024 : 5C41004A;
+3025 : 356E0010;
+3026 : B9A01000;
+3027 : B9C00800;
+3028 : 34030004;
+3029 : F800278C;
+302a : B8201000;
+302b : 5C200043;
+302c : 41640009;
+302d : 34030001;
+302e : 416D0002;
+302f : 41610003;
+3030 : B8406000;
+3031 : 5C83003D;
+3032 : 41630014;
+3033 : 34020008;
+3034 : 5C62003A;
+3035 : 3DAD0008;
+3036 : B9A16800;
+3037 : 35ADFFE8;
+3038 : 34010040;
+3039 : 4C2D0002;
+303a : 340D0040;
+303b : 356F000C;
+303c : B9E01000;
+303d : 34030004;
+303e : 37810020;
+303f : F8002797;
+3040 : 35AC0018;
+3041 : 34010045;
+3042 : 31610000;
+3043 : 15810008;
+3044 : 3782001C;
+3045 : 31610002;
+3046 : 3401003F;
+3047 : 31610008;
+3048 : 34010001;
+3049 : 31610009;
+304a : 34030004;
+304b : 31600001;
+304c : 316C0003;
+304d : 31600004;
+304e : 31600005;
+304f : 31600006;
+3050 : 31600007;
+3051 : 3160000A;
+3052 : 3160000B;
+3053 : B9E00800;
+3054 : F8002782;
+3055 : 34030004;
+3056 : 37820020;
+3057 : B9C00800;
+3058 : F800277E;
+3059 : 35AD0005;
+305a : 01A1001F;
+305b : 31600014;
+305c : B42D6800;
+305d : 15A20001;
+305e : 31600015;
+305f : 31600016;
+3060 : 31600017;
+3061 : 35610014;
+3062 : FBFFFE4E;
+3063 : 2021FFFF;
+3064 : 00220008;
+3065 : 31610017;
+3066 : 31620016;
+3067 : B9600800;
+3068 : 3402000A;
+3069 : FBFFFE47;
+306a : 2021FFFF;
+306b : 00220008;
+306c : 3161000B;
+306d : 3162000A;
+306e : B9800800;
+306f : 2B9D0004;
+3070 : 2B8B0018;
+3071 : 2B8C0014;
+3072 : 2B8D0010;
+3073 : 2B8E000C;
+3074 : 2B8F0008;
+3075 : 379C0020;
+3076 : C3A00000;
+3077 : 379CFFCC;
+3078 : 5B8B0028;
+3079 : 5B8C0024;
+307a : 5B8D0020;
+307b : 5B8E001C;
+307c : 5B8F0018;
+307d : 5B900014;
+307e : 5B910010;
+307f : 5B92000C;
+3080 : 5B930008;
+3081 : 5B9D0004;
+3082 : B8205800;
+3083 : B8406800;
+3084 : B8606000;
+3085 : 5C600012;
+3086 : 3562000C;
+3087 : 34030004;
+3088 : 37810030;
+3089 : F800274D;
+308a : 378C002C;
+308b : 35620010;
+308c : 34030004;
+308d : B9800800;
+308e : F8002748;
+308f : 35620014;
+3090 : 34030002;
+3091 : 37810036;
+3092 : F8002744;
+3093 : 37810034;
+3094 : 35620016;
+3095 : 34030002;
+3096 : F8002740;
+3097 : 35710008;
+3098 : B9801000;
+3099 : 34030004;
+309a : BA200800;
+309b : F800273B;
+309c : 35AEFFEC;
+309d : 3570000C;
+309e : 358F0004;
+309f : B9E01000;
+30a0 : 34030004;
+30a1 : 15D20008;
+30a2 : BA000800;
+30a3 : F8002733;
+30a4 : 225200FF;
+30a5 : 21CE00FF;
+30a6 : 34010011;
+30a7 : 31610011;
+30a8 : 31720012;
+30a9 : 316E0013;
+30aa : 35820008;
+30ab : 34030002;
+30ac : 31600010;
+30ad : 35610014;
+30ae : F8002728;
+30af : 34030002;
+30b0 : 3582000A;
+30b1 : 35610016;
+30b2 : F8002724;
+30b3 : 35A2FFF9;
+30b4 : 0041001F;
+30b5 : 316E0019;
+30b6 : 31720018;
+30b7 : 3160001A;
+30b8 : 3160001B;
+30b9 : B56D7000;
+30ba : B4221000;
+30bb : 41D20000;
+30bc : 14420001;
+30bd : 31C00000;
+30be : BA200800;
+30bf : FBFFFDF1;
+30c0 : 2023FFFF;
+30c1 : 31D20000;
+30c2 : 35730010;
+30c3 : 5C600002;
+30c4 : 3803FFFF;
+30c5 : 00610008;
+30c6 : 3163001B;
+30c7 : 3161001A;
+30c8 : 34010045;
+30c9 : 31610000;
+30ca : 15A10008;
+30cb : B9801000;
+30cc : 31610002;
+30cd : 3401003F;
+30ce : 31610008;
+30cf : 34010011;
+30d0 : 31610009;
+30d1 : 31600001;
+30d2 : 316D0003;
+30d3 : 31600004;
+30d4 : 31600005;
+30d5 : 31600006;
+30d6 : 31600007;
+30d7 : 3160000A;
+30d8 : 3160000B;
+30d9 : BA000800;
+30da : 34030004;
+30db : F80026FB;
+30dc : B9E01000;
+30dd : 34030004;
+30de : BA600800;
+30df : F80026F7;
+30e0 : B9600800;
+30e1 : 3402000A;
+30e2 : FBFFFDCE;
+30e3 : 2021FFFF;
+30e4 : 00220008;
+30e5 : 3161000B;
+30e6 : 3162000A;
+30e7 : 2B9D0004;
+30e8 : 2B8B0028;
+30e9 : 2B8C0024;
+30ea : 2B8D0020;
+30eb : 2B8E001C;
+30ec : 2B8F0018;
+30ed : 2B900014;
+30ee : 2B910010;
+30ef : 2B92000C;
+30f0 : 2B930008;
+30f1 : 379C0034;
+30f2 : C3A00000;
+30f3 : 379CFFE4;
+30f4 : 5B8B0010;
+30f5 : 5B8C000C;
+30f6 : 5B8D0008;
+30f7 : 5B9D0004;
+30f8 : B8405800;
+30f9 : B8206800;
+30fa : 34020001;
+30fb : 34010006;
+30fc : 3162001C;
+30fd : 3162001D;
+30fe : 3161001E;
+30ff : 3160001F;
+3100 : 35610020;
+3101 : B8606000;
+3102 : F800085D;
+3103 : 41620024;
+3104 : 41610020;
+3105 : 34030002;
+3106 : 98410800;
+3107 : 31610020;
+3108 : 41620025;
+3109 : 41610021;
+310a : 316C0025;
+310b : 98410800;
+310c : 31610021;
+310d : 41610022;
+310e : 15820008;
+310f : 98410800;
+3110 : 31610022;
+3111 : 41610023;
+3112 : 31620024;
+3113 : 34020000;
+3114 : 982C0800;
+3115 : 31610023;
+3116 : 35610026;
+3117 : F800273D;
+3118 : 35610028;
+3119 : 34020000;
+311a : 34030004;
+311b : F8002739;
+311c : 3561002C;
+311d : 34020000;
+311e : 34030004;
+311f : F8002735;
+3120 : 35610030;
+3121 : 34020000;
+3122 : 34030004;
+3123 : F8002731;
+3124 : 35610034;
+3125 : 34020000;
+3126 : 34030004;
+3127 : F800272D;
+3128 : 356C0038;
+3129 : 34020000;
+312a : 34030010;
+312b : B9800800;
+312c : F8002728;
+312d : B9800800;
+312e : F8000831;
+312f : 35610048;
+3130 : 34020000;
+3131 : 34030040;
+3132 : F8002722;
+3133 : 35610088;
+3134 : 34020000;
+3135 : 34030080;
+3136 : F800271E;
+3137 : 35610108;
+3138 : 34020000;
+3139 : 34030040;
+313a : F800271A;
+313b : 378C0014;
+313c : B9800800;
+313d : 34020000;
+313e : 34030004;
+313f : F8002715;
+3140 : 37810018;
+3141 : 340200FF;
+3142 : 34030004;
+3143 : F8002711;
+3144 : 34010044;
+3145 : 0F81001C;
+3146 : 34010043;
+3147 : 0F81001E;
+3148 : B9801800;
+3149 : B9600800;
+314a : 34020148;
+314b : FBFFFF2C;
+314c : B9A00800;
+314d : 340200FF;
+314e : 34030006;
+314f : F8002705;
+3150 : 34010148;
+3151 : 2B9D0004;
+3152 : 2B8B0010;
+3153 : 2B8C000C;
+3154 : 2B8D0008;
+3155 : 379C001C;
+3156 : C3A00000;
+3157 : 379CFFE0;
+3158 : 5B8B0014;
+3159 : 5B8C0010;
+315a : 5B8D000C;
+315b : 5B8E0008;
+315c : 5B9D0004;
+315d : 378D0018;
+315e : B8205800;
+315f : B9A00800;
+3160 : B8407000;
+3161 : F80007FE;
+3162 : 34010148;
+3163 : 340C0000;
+3164 : 5DC1001B;
+3165 : 41610014;
+3166 : 5C200019;
+3167 : 41620015;
+3168 : 34010043;
+3169 : 5C410016;
+316a : 35610038;
+316b : B9A01000;
+316c : 34030006;
+316d : F8002648;
+316e : 5C200011;
+316f : 78010001;
+3170 : 34020001;
+3171 : 3821B8F8;
+3172 : 58220000;
+3173 : 3561002C;
+3174 : FBFFFD55;
+3175 : 37810020;
+3176 : FBFFFD4A;
+3177 : 43820020;
+3178 : 43830021;
+3179 : 43840022;
+317a : 43850023;
+317b : 78010001;
+317c : 38218774;
+317d : F80006A1;
+317e : 340C0001;
+317f : B9800800;
+3180 : 2B9D0004;
+3181 : 2B8B0014;
+3182 : 2B8C0010;
+3183 : 2B8D000C;
+3184 : 2B8E0008;
+3185 : 379C0020;
+3186 : C3A00000;
+3187 : 379CFFD0;
+3188 : 5B8B001C;
+3189 : 5B8C0018;
+318a : 5B8D0014;
+318b : 5B8E0010;
+318c : 5B8F000C;
+318d : 5B900008;
+318e : 5B9D0004;
+318f : 208400FF;
+3190 : 20900008;
+3191 : 204200FF;
+3192 : 7E100000;
+3193 : B8207800;
+3194 : 344B0001;
+3195 : 208D0004;
+3196 : B8606000;
+3197 : 40210000;
+3198 : B5EB5800;
+3199 : 7DAD0000;
+319a : 5E000007;
+319b : C8221000;
+319c : 34010001;
+319d : EC220800;
+319e : B9A07000;
+319f : A1A10800;
+31a0 : 44300007;
+31a1 : 34010002;
+31a2 : 31610000;
+31a3 : 34010001;
+31a4 : 31610001;
+31a5 : 340E0000;
+31a6 : 34020002;
+31a7 : 65A10000;
+31a8 : 7C430002;
+31a9 : A0611800;
+31aa : 34010000;
+31ab : 5C600035;
+31ac : 68420002;
+31ad : A04D1000;
+31ae : 44430002;
+31af : 340E0001;
+31b0 : 34010002;
+31b1 : 33810030;
+31b2 : 41810011;
+31b3 : 5B8B0020;
+31b4 : 33810031;
+31b5 : 2981000C;
+31b6 : 5B81002C;
+31b7 : 45C00004;
+31b8 : 41610001;
+31b9 : 34210001;
+31ba : 31610001;
+31bb : 20840001;
+31bc : 44800009;
+31bd : 29830008;
+31be : 3401FFFC;
+31bf : 44600021;
+31c0 : 35610002;
+31c1 : 37820020;
+31c2 : D8600000;
+31c3 : 4801001D;
+31c4 : E0000005;
+31c5 : 29830004;
+31c6 : 35610002;
+31c7 : 37820020;
+31c8 : D8600000;
+31c9 : 64220000;
+31ca : A04E7000;
+31cb : 45C0000C;
+31cc : 41610000;
+31cd : 37820020;
+31ce : 34210001;
+31cf : 31610000;
+31d0 : 34010001;
+31d1 : 31610001;
+31d2 : 29830004;
+31d3 : 35610002;
+31d4 : D8600000;
+31d5 : 5C200003;
+31d6 : E000000A;
+31d7 : 5C4E0008;
+31d8 : 48010008;
+31d9 : BA0D6800;
+31da : 34210002;
+31db : 45A00005;
+31dc : 34020002;
+31dd : 31E20000;
+31de : E0000002;
+31df : 34010000;
+31e0 : 2B9D0004;
+31e1 : 2B8B001C;
+31e2 : 2B8C0018;
+31e3 : 2B8D0014;
+31e4 : 2B8E0010;
+31e5 : 2B8F000C;
+31e6 : 2B900008;
+31e7 : 379C0030;
+31e8 : C3A00000;
+31e9 : 379CFFFC;
+31ea : 5B8B0004;
+31eb : 78040001;
+31ec : 388493A0;
+31ed : 3442FFFF;
+31ee : 348A001C;
+31ef : 34030000;
+31f0 : 340900FD;
+31f1 : 340800F9;
+31f2 : 340700FF;
+31f3 : 3406FFA2;
+31f4 : E0000011;
+31f5 : 40850000;
+31f6 : 5CA90004;
+31f7 : B4232800;
+31f8 : 30A60000;
+31f9 : E000000A;
+31fa : 5CA80005;
+31fb : B4232800;
+31fc : 40A50000;
+31fd : B4651800;
+31fe : E0000005;
+31ff : 5CA70004;
+3200 : B4232800;
+3201 : C8435800;
+3202 : 30AB0000;
+3203 : 34630001;
+3204 : 34840001;
+3205 : 5C8AFFF0;
+3206 : 2B8B0004;
+3207 : 379C0004;
+3208 : C3A00000;
+3209 : 379CFFF8;
+320a : 5B8B0008;
+320b : 5B9D0004;
+320c : 40230006;
+320d : 34040020;
+320e : 4C830002;
+320f : 34030020;
+3210 : 206B00FF;
+3211 : B42B1800;
+3212 : 3404FFA2;
+3213 : 30640007;
+3214 : 4063000A;
+3215 : 34040004;
+3216 : 4C830002;
+3217 : 34030004;
+3218 : B5635800;
+3219 : 216B00FF;
+321a : B42B1800;
+321b : 3062000D;
+321c : 34020001;
+321d : 30620010;
+321e : 40620016;
+321f : 34030028;
+3220 : 4C620002;
+3221 : 34020028;
+3222 : B5621000;
+3223 : 204200FF;
+3224 : B4221800;
+3225 : 34420019;
+3226 : 34040005;
+3227 : 204B00FF;
+3228 : 30640017;
+3229 : 30600018;
+322a : B9601000;
+322b : FBFFFFBE;
+322c : B9600800;
+322d : 2B9D0004;
+322e : 2B8B0008;
+322f : 379C0008;
+3230 : C3A00000;
+3231 : 379CFEFC;
+3232 : 5B8B0028;
+3233 : 5B8C0024;
+3234 : 5B8D0020;
+3235 : 5B8E001C;
+3236 : 5B8F0018;
+3237 : 5B900014;
+3238 : 5B910010;
+3239 : 5B92000C;
+323a : 5B930008;
+323b : 5B9D0004;
+323c : 78010001;
+323d : 3821BC78;
+323e : 28210000;
+323f : 378B002C;
+3240 : 378200F4;
+3241 : B9601800;
+3242 : 340400C8;
+3243 : 34050000;
+3244 : FBFFFB97;
+3245 : 34020038;
+3246 : 340C0000;
+3247 : 504100A6;
+3248 : B9600800;
+3249 : FBFFFCA8;
+324a : 5C2000A3;
+324b : 78010001;
+324c : 78020001;
+324d : 3821C29C;
+324e : 384293A0;
+324f : 78030001;
+3250 : 40250000;
+3251 : 344E001C;
+3252 : B9600800;
+3253 : 34040000;
+3254 : 340D0006;
+3255 : 38639384;
+3256 : 340B00A0;
+3257 : 340A00A1;
+3258 : 340900A3;
+3259 : 34080001;
+325a : E0000028;
+325b : 40460000;
+325c : 34C70007;
+325d : 20E700FF;
+325e : 54ED0014;
+325f : 3CE70002;
+3260 : B4673800;
+3261 : 28E60000;
+3262 : C0C00000;
+3263 : B4813000;
+3264 : 40C6001C;
+3265 : B4862000;
+3266 : E000001A;
+3267 : B4812800;
+3268 : 40A5001C;
+3269 : 51050017;
+326a : E000000B;
+326b : B4813000;
+326c : 40C6001C;
+326d : 44CB000E;
+326e : 44CA000F;
+326f : 44C90010;
+3270 : 5D800010;
+3271 : E0000004;
+3272 : B4813800;
+3273 : 40E7001C;
+3274 : 44E6000C;
+3275 : 78010001;
+3276 : 3821C29C;
+3277 : 30250000;
+3278 : 34020005;
+3279 : 37810048;
+327a : E000005B;
+327b : 340C0002;
+327c : E0000004;
+327d : 340C0004;
+327e : E0000002;
+327f : 340C0001;
+3280 : 34840001;
+3281 : 34420001;
+3282 : 5C4EFFD9;
+3283 : 78010001;
+3284 : 3821C29C;
+3285 : 30250000;
+3286 : 37810048;
+3287 : B4246800;
+3288 : 780B0001;
+3289 : 34840001;
+328a : B4247800;
+328b : 396BA0E0;
+328c : 21930003;
+328d : 21900004;
+328e : 39920008;
+328f : E000003F;
+3290 : 41B10000;
+3291 : 46600002;
+3292 : 5431003B;
+3293 : 222200FF;
+3294 : 50220002;
+3295 : B8208800;
+3296 : 29610000;
+3297 : 223100FF;
+3298 : B9E01000;
+3299 : BA201800;
+329a : F800251B;
+329b : 3C250018;
+329c : B9807000;
+329d : 14A50018;
+329e : 4600000A;
+329f : 48A00007;
+32a0 : 4163000C;
+32a1 : 41A10000;
+32a2 : 64A20000;
+32a3 : F0610800;
+32a4 : A0410800;
+32a5 : 44200003;
+32a6 : 4171000C;
+32a7 : BA407000;
+32a8 : 4163000C;
+32a9 : 64A10000;
+32aa : E4711000;
+32ab : A0411000;
+32ac : 5C400003;
+32ad : 21C10008;
+32ae : 4422001E;
+32af : 5E000003;
+32b0 : 21C10008;
+32b1 : 44300004;
+32b2 : 29620000;
+32b3 : B9E00800;
+32b4 : F8002522;
+32b5 : 29650004;
+32b6 : 29630008;
+32b7 : B9A00800;
+32b8 : BA201000;
+32b9 : B9C02000;
+32ba : D8A00000;
+32bb : 4C01000C;
+32bc : 5E000003;
+32bd : 21CE0008;
+32be : 45D00005;
+32bf : 41A30000;
+32c0 : 4162000C;
+32c1 : B4621000;
+32c2 : 31A20000;
+32c3 : 4164000C;
+32c4 : B5E47800;
+32c5 : B5E17800;
+32c6 : E000000A;
+32c7 : 44200006;
+32c8 : C8011000;
+32c9 : 204200FF;
+32ca : 37810048;
+32cb : E000000A;
+32cc : 48A10007;
+32cd : 356B0010;
+32ce : 4161000C;
+32cf : 5C20FFC1;
+32d0 : 45600003;
+32d1 : 4161000C;
+32d2 : 5C200006;
+32d3 : 37810048;
+32d4 : 34020002;
+32d5 : FBFFFF34;
+32d6 : B8205800;
+32d7 : E0000007;
+32d8 : 37810048;
+32d9 : C9E15800;
+32da : B9601000;
+32db : FBFFFF0E;
+32dc : 340C0000;
+32dd : 480B0010;
+32de : 378C002C;
+32df : 356B001C;
+32e0 : B9800800;
+32e1 : B9601000;
+32e2 : 34030000;
+32e3 : FBFFFD94;
+32e4 : 78050001;
+32e5 : 38A5BC78;
+32e6 : 28A10000;
+32e7 : B9801800;
+32e8 : 378200F4;
+32e9 : B9602000;
+32ea : 34050000;
+32eb : FBFFFB63;
+32ec : 340C0001;
+32ed : B9800800;
+32ee : 2B9D0004;
+32ef : 2B8B0028;
+32f0 : 2B8C0024;
+32f1 : 2B8D0020;
+32f2 : 2B8E001C;
+32f3 : 2B8F0018;
+32f4 : 2B900014;
+32f5 : 2B910010;
+32f6 : 2B92000C;
+32f7 : 2B930008;
+32f8 : 379C0104;
+32f9 : C3A00000;
+32fa : 379CFFEC;
+32fb : 5B8B0010;
+32fc : 5B8C000C;
+32fd : 5B8D0008;
+32fe : 5B9D0004;
+32ff : B8403000;
+3300 : 40C50011;
+3301 : 40220000;
+3302 : B8606000;
+3303 : 402B0001;
+3304 : 3404FFFD;
+3305 : 5CA2001E;
+3306 : 34220002;
+3307 : 34010004;
+3308 : 44A10013;
+3309 : 34010042;
+330a : 44A10004;
+330b : 34010002;
+330c : 34040000;
+330d : 5CA10016;
+330e : 340D0004;
+330f : 3404FFFD;
+3310 : 556D0013;
+3311 : 37810014;
+3312 : B9601800;
+3313 : 5B800014;
+3314 : F80024C2;
+3315 : 2B810014;
+3316 : C9AB6800;
+3317 : 3DAD0003;
+3318 : 802D6800;
+3319 : 598D0000;
+331a : E0000008;
+331b : 40C10013;
+331c : 55610007;
+331d : B8600800;
+331e : B58B6000;
+331f : B9601800;
+3320 : F80024B6;
+3321 : 31800000;
+3322 : 35640002;
+3323 : B8800800;
+3324 : 2B9D0004;
+3325 : 2B8B0010;
+3326 : 2B8C000C;
+3327 : 2B8D0008;
+3328 : 379C0014;
+3329 : C3A00000;
+332a : 379CFFFC;
+332b : 5B9D0004;
+332c : 40430012;
+332d : 2844000C;
+332e : B4831800;
+332f : FBFFFFCB;
+3330 : 2B9D0004;
+3331 : 379C0004;
+3332 : C3A00000;
+3333 : 379CFFCC;
+3334 : 5B8B0020;
+3335 : 5B8C001C;
+3336 : 5B8D0018;
+3337 : 5B8E0014;
+3338 : 5B8F0010;
+3339 : 5B90000C;
+333a : 5B910008;
+333b : 5B9D0004;
+333c : 402E0000;
+333d : 204200FF;
+333e : 208400FF;
+333f : 344C0001;
+3340 : C9C27000;
+3341 : 20820001;
+3342 : B8207800;
+3343 : B42C6000;
+3344 : 3401FFFC;
+3345 : 5C400068;
+3346 : 208D0004;
+3347 : 7DAD0000;
+3348 : 20900008;
+3349 : 7E100000;
+334a : B8605800;
+334b : 21B100FF;
+334c : E0000023;
+334d : B9C01800;
+334e : 4C2E0002;
+334f : B8201800;
+3350 : 29610000;
+3351 : B9801000;
+3352 : 206300FF;
+3353 : F8002462;
+3354 : 5E00000A;
+3355 : B0200800;
+3356 : 64220000;
+3357 : A0511800;
+3358 : 44700003;
+3359 : 41630010;
+335a : 4C6E0004;
+335b : 68210000;
+335c : A2210800;
+335d : 4420000B;
+335e : 29620000;
+335f : 41630010;
+3360 : B9800800;
+3361 : 340E0000;
+3362 : F8002474;
+3363 : 41610010;
+3364 : 34020001;
+3365 : B5810800;
+3366 : 30220000;
+3367 : E000000D;
+3368 : 44410006;
+3369 : 41610010;
+336a : 34210001;
+336b : 45C10006;
+336c : 45A00002;
+336d : 49C10006;
+336e : 356B0014;
+336f : 41610010;
+3370 : 5C20FFDD;
+3371 : B9A07000;
+3372 : E0000002;
+3373 : 340E0001;
+3374 : 41620010;
+3375 : 34010000;
+3376 : 44400037;
+3377 : 41610011;
+3378 : 33820034;
+3379 : 5B8C0024;
+337a : 33810035;
+337b : 2961000C;
+337c : 5B810030;
+337d : 45C00004;
+337e : 41810001;
+337f : 34210001;
+3380 : 31810001;
+3381 : 41610010;
+3382 : 29630004;
+3383 : 37910024;
+3384 : 34210001;
+3385 : B5810800;
+3386 : BA201000;
+3387 : D8600000;
+3388 : 64230000;
+3389 : A06E7000;
+338a : 45C00019;
+338b : 356B0014;
+338c : 41630010;
+338d : 34010000;
+338e : 4460001F;
+338f : 29620000;
+3390 : B9800800;
+3391 : F8002445;
+3392 : 41610010;
+3393 : 34020001;
+3394 : B5810800;
+3395 : 30220000;
+3396 : 41620011;
+3397 : 41610010;
+3398 : 29630004;
+3399 : 33820035;
+339a : 2962000C;
+339b : 33810034;
+339c : 34210001;
+339d : 5B820030;
+339e : B5810800;
+339f : BA201000;
+33a0 : D8600000;
+33a1 : 5C200003;
+33a2 : E000000B;
+33a3 : 5C6E0009;
+33a4 : 48010009;
+33a5 : 41620010;
+33a6 : BA0D6800;
+33a7 : 34420001;
+33a8 : B4220800;
+33a9 : 45A00004;
+33aa : 31E20000;
+33ab : E0000002;
+33ac : 34010000;
+33ad : 2B9D0004;
+33ae : 2B8B0020;
+33af : 2B8C001C;
+33b0 : 2B8D0018;
+33b1 : 2B8E0014;
+33b2 : 2B8F0010;
+33b3 : 2B90000C;
+33b4 : 2B910008;
+33b5 : 379C0034;
+33b6 : C3A00000;
+33b7 : 379CFFD0;
+33b8 : 5B8B0030;
+33b9 : 5B8C002C;
+33ba : 5B8D0028;
+33bb : 5B8E0024;
+33bc : 5B8F0020;
+33bd : 5B90001C;
+33be : 5B910018;
+33bf : 5B920014;
+33c0 : 5B930010;
+33c1 : 5B94000C;
+33c2 : 5B950008;
+33c3 : 5B9D0004;
+33c4 : 208400FF;
+33c5 : 40310000;
+33c6 : 204200FF;
+33c7 : 008D0003;
+33c8 : 344E0001;
+33c9 : 208F0004;
+33ca : B8208000;
+33cb : CA228800;
+33cc : B42E7000;
+33cd : 21AD0001;
+33ce : B8605800;
+33cf : 340C0000;
+33d0 : 20950003;
+33d1 : 20940001;
+33d2 : 7DF30000;
+33d3 : E0000034;
+33d4 : B8A09000;
+33d5 : 5DA00005;
+33d6 : BA209000;
+33d7 : 4CB10002;
+33d8 : B8A09000;
+33d9 : 225200FF;
+33da : 46A00002;
+33db : 5E25002B;
+33dc : 5DA0000C;
+33dd : 29610000;
+33de : B9C01000;
+33df : BA401800;
+33e0 : F80023D5;
+33e1 : 3C2C0018;
+33e2 : 158C0018;
+33e3 : 5D8D0006;
+33e4 : 45EC0009;
+33e5 : 41610010;
+33e6 : 5C320007;
+33e7 : E000001F;
+33e8 : 45800005;
+33e9 : 69810000;
+33ea : A0331000;
+33eb : 5C400002;
+33ec : 45A20019;
+33ed : 45E00007;
+33ee : 29620000;
+33ef : 41630010;
+33f0 : B9C00800;
+33f1 : F80023E5;
+33f2 : 41610010;
+33f3 : 32010000;
+33f4 : 46800008;
+33f5 : 29630008;
+33f6 : 44600014;
+33f7 : 41610010;
+33f8 : B9601000;
+33f9 : B5C10800;
+33fa : D8600000;
+33fb : 48010012;
+33fc : 41610010;
+33fd : 29630004;
+33fe : B9601000;
+33ff : B5C10800;
+3400 : D8600000;
+3401 : 44200005;
+3402 : 41620010;
+3403 : B4220800;
+3404 : E0000009;
+3405 : 5C2D0007;
+3406 : 356B0014;
+3407 : 41650010;
+3408 : 5CA0FFCC;
+3409 : E0000003;
+340a : 3401FFFC;
+340b : E0000002;
+340c : 34010000;
+340d : 2B9D0004;
+340e : 2B8B0030;
+340f : 2B8C002C;
+3410 : 2B8D0028;
+3411 : 2B8E0024;
+3412 : 2B8F0020;
+3413 : 2B90001C;
+3414 : 2B910018;
+3415 : 2B920014;
+3416 : 2B930010;
+3417 : 2B94000C;
+3418 : 2B950008;
+3419 : 379C0030;
+341a : C3A00000;
+341b : 379CFFE4;
+341c : 5B8B0010;
+341d : 5B8C000C;
+341e : 5B8D0008;
+341f : 5B9D0004;
+3420 : B8206000;
+3421 : 342D0002;
+3422 : 30220000;
+3423 : 34010043;
+3424 : B8605800;
+3425 : 54410008;
+3426 : 34010041;
+3427 : 50410009;
+3428 : 34010002;
+3429 : 44410007;
+342a : 34010004;
+342b : 5C410029;
+342c : E000001C;
+342d : 34010046;
+342e : 5C410026;
+342f : E0000009;
+3430 : 29610000;
+3431 : 3782001C;
+3432 : 34030004;
+3433 : 5B81001C;
+3434 : B9A00800;
+3435 : F80023A1;
+3436 : 34010004;
+3437 : E000000F;
+3438 : 78010001;
+3439 : 3821C29C;
+343a : 40210000;
+343b : 34020000;
+343c : 44200019;
+343d : 28610000;
+343e : 37820014;
+343f : 5B810014;
+3440 : 28610004;
+3441 : 34030008;
+3442 : 5B810018;
+3443 : B9A00800;
+3444 : F8002392;
+3445 : 34010008;
+3446 : 31810001;
+3447 : E000000A;
+3448 : B8600800;
+3449 : 3402001F;
+344a : F800256F;
+344b : 202300FF;
+344c : 31830001;
+344d : B9A00800;
+344e : B9601000;
+344f : 34630001;
+3450 : F8002386;
+3451 : 41820001;
+3452 : 34420002;
+3453 : E0000002;
+3454 : 34020000;
+3455 : B8400800;
+3456 : 2B9D0004;
+3457 : 2B8B0010;
+3458 : 2B8C000C;
+3459 : 2B8D0008;
+345a : 379C001C;
+345b : C3A00000;
+345c : 379CFFE8;
+345d : 5B8B0014;
+345e : 5B8C0010;
+345f : 5B8D000C;
+3460 : 5B8E0008;
+3461 : 5B9D0004;
+3462 : 284D000C;
+3463 : B8207000;
+3464 : B8405800;
+3465 : 34010001;
+3466 : 78020001;
+3467 : 3842BCA0;
+3468 : 45A10005;
+3469 : 3404FFFD;
+346a : 5DA0002C;
+346b : 78020001;
+346c : 3842BCA4;
+346d : 29610000;
+346e : 34050001;
+346f : 28420000;
+3470 : 402C0000;
+3471 : 40210001;
+3472 : 34040000;
+3473 : 5C250023;
+3474 : 4C2C0022;
+3475 : 34410002;
+3476 : 49810020;
+3477 : 34010002;
+3478 : 5D810006;
+3479 : 340100A3;
+347a : 3404FFFC;
+347b : 4461001B;
+347c : 5B820018;
+347d : E0000014;
+347e : 340100A3;
+347f : 5C61000C;
+3480 : B9C00800;
+3481 : B9601000;
+3482 : 37830018;
+3483 : FBFFFE77;
+3484 : B8202000;
+3485 : 4C010011;
+3486 : 2B820018;
+3487 : 3581FFFD;
+3488 : F80009F1;
+3489 : 3404FFFB;
+348a : 4801000C;
+348b : 3581FFFD;
+348c : B9A01000;
+348d : 37830018;
+348e : F80009A4;
+348f : 3404FFFB;
+3490 : 48010006;
+3491 : 41620011;
+3492 : B9C00800;
+3493 : 37830018;
+3494 : FBFFFF87;
+3495 : B8202000;
+3496 : B8800800;
+3497 : 2B9D0004;
+3498 : 2B8B0014;
+3499 : 2B8C0010;
+349a : 2B8D000C;
+349b : 2B8E0008;
+349c : 379C0018;
+349d : C3A00000;
+349e : 379CFFFC;
+349f : 5B9D0004;
+34a0 : 340300A3;
+34a1 : FBFFFFBB;
+34a2 : 2B9D0004;
+34a3 : 379C0004;
+34a4 : C3A00000;
+34a5 : 379CFFFC;
+34a6 : 5B9D0004;
+34a7 : 340300A0;
+34a8 : FBFFFFB4;
+34a9 : 2B9D0004;
+34aa : 379C0004;
+34ab : C3A00000;
+34ac : 379CFFE4;
+34ad : 5B8B0014;
+34ae : 5B8C0010;
+34af : 5B8D000C;
+34b0 : 5B8E0008;
+34b1 : 5B9D0004;
+34b2 : B8406000;
+34b3 : 2842000C;
+34b4 : 34030001;
+34b5 : B8206800;
+34b6 : 44430019;
+34b7 : 34030002;
+34b8 : 5C430031;
+34b9 : 78020001;
+34ba : 3842BC7C;
+34bb : 28430000;
+34bc : 28650054;
+34bd : 28640050;
+34be : 3CA20001;
+34bf : 3C840001;
+34c0 : F4A22800;
+34c1 : C8021000;
+34c2 : B4A42000;
+34c3 : 7C450000;
+34c4 : C8042000;
+34c5 : C8852000;
+34c6 : 28650040;
+34c7 : 28630044;
+34c8 : B4852000;
+34c9 : B4431800;
+34ca : F4431000;
+34cb : 5B83001C;
+34cc : B4441000;
+34cd : 5B820018;
+34ce : E0000017;
+34cf : 78020001;
+34d0 : 3842BC7C;
+34d1 : 28430000;
+34d2 : 78050001;
+34d3 : 38A58EC8;
+34d4 : 286E00A8;
+34d5 : 2C6B00AC;
+34d6 : 286200A4;
+34d7 : 3DC10010;
+34d8 : 28A40000;
+34d9 : B82B5800;
+34da : 286100A0;
+34db : 34030000;
+34dc : 15CE0010;
+34dd : F8002206;
+34de : B5621000;
+34df : F5625800;
+34e0 : B5C11800;
+34e1 : B5631800;
+34e2 : 5B830018;
+34e3 : 5B82001C;
+34e4 : B9A00800;
+34e5 : 41820011;
+34e6 : 37830018;
+34e7 : FBFFFF34;
+34e8 : E0000002;
+34e9 : 3401FFFF;
+34ea : 2B9D0004;
+34eb : 2B8B0014;
+34ec : 2B8C0010;
+34ed : 2B8D000C;
+34ee : 2B8E0008;
+34ef : 379C001C;
+34f0 : C3A00000;
+34f1 : 379CFFF8;
+34f2 : 5B9D0004;
+34f3 : 2843000C;
+34f4 : 40450011;
+34f5 : 40420012;
+34f6 : 28630000;
+34f7 : B4621000;
+34f8 : 28440000;
+34f9 : 28430004;
+34fa : 4880000E;
+34fb : 5C800005;
+34fc : 78060001;
+34fd : 38C68EFC;
+34fe : 28C20000;
+34ff : 54620009;
+3500 : 3402FFFF;
+3501 : 4844000B;
+3502 : 5C82000B;
+3503 : 78040001;
+3504 : 38848F00;
+3505 : 28820000;
+3506 : 54430006;
+3507 : E0000006;
+3508 : 78060001;
+3509 : 38C68ED4;
+350a : 28C30000;
+350b : E0000002;
+350c : 78038000;
+350d : 5B830008;
+350e : B8A01000;
+350f : 37830008;
+3510 : FBFFFF0B;
+3511 : 2B9D0004;
+3512 : 379C0008;
+3513 : C3A00000;
+3514 : 379CFFFC;
+3515 : 5B9D0004;
+3516 : 2844000C;
+3517 : 40430012;
+3518 : 40420011;
+3519 : 28840000;
+351a : B4831800;
+351b : FBFFFF00;
+351c : 2B9D0004;
+351d : 379C0004;
+351e : C3A00000;
+351f : 379CFFFC;
+3520 : 5B9D0004;
+3521 : 2844000C;
+3522 : 40430012;
+3523 : 40420011;
+3524 : B4831800;
+3525 : FBFFFEF6;
+3526 : 2B9D0004;
+3527 : 379C0004;
+3528 : C3A00000;
+3529 : 379CFF98;
+352a : 5B8B0034;
+352b : 5B8C0030;
+352c : 5B8D002C;
+352d : 5B8E0028;
+352e : 5B8F0024;
+352f : 5B900020;
+3530 : 5B91001C;
+3531 : 5B920018;
+3532 : 5B930014;
+3533 : 5B940010;
+3534 : 5B95000C;
+3535 : 5B960008;
+3536 : 5B9D0004;
+3537 : B8208000;
+3538 : 28410000;
+3539 : B8407000;
+353a : 340D0000;
+353b : 40360001;
+353c : 402C0000;
+353d : 340B0001;
+353e : 378F0038;
+353f : 3415FFFF;
+3540 : 34140002;
+3541 : 34130003;
+3542 : 34120004;
+3543 : 34110005;
+3544 : 21A300FF;
+3545 : B9E00800;
+3546 : 34020000;
+3547 : F8001141;
+3548 : B8201800;
+3549 : 4420001C;
+354a : 4435001B;
+354b : 5ECB000D;
+354c : 5D940009;
+354d : 378B0058;
+354e : 34030010;
+354f : B9600800;
+3550 : B9E01000;
+3551 : F8002285;
+3552 : B9601800;
+3553 : 33800068;
+3554 : E000000D;
+3555 : 45930007;
+3556 : 45920008;
+3557 : 45910009;
+3558 : 356B0001;
+3559 : 35AD0001;
+355a : 4C6BFFEA;
+355b : E000000A;
+355c : 3783004C;
+355d : E0000004;
+355e : 37830050;
+355f : E0000002;
+3560 : 37830048;
+3561 : 41C20011;
+3562 : BA000800;
+3563 : FBFFFEB8;
+3564 : E0000002;
+3565 : 34010000;
+3566 : 2B9D0004;
+3567 : 2B8B0034;
+3568 : 2B8C0030;
+3569 : 2B8D002C;
+356a : 2B8E0028;
+356b : 2B8F0024;
+356c : 2B900020;
+356d : 2B91001C;
+356e : 2B920018;
+356f : 2B930014;
+3570 : 2B940010;
+3571 : 2B95000C;
+3572 : 2B960008;
+3573 : 379C0068;
+3574 : C3A00000;
+3575 : 379CFFF0;
+3576 : 5B8B000C;
+3577 : 5B8C0008;
+3578 : 5B9D0004;
+3579 : B8405800;
+357a : 2842000C;
+357b : B8206000;
+357c : 34010001;
+357d : 5C41000A;
+357e : 34010000;
+357f : F800042B;
+3580 : 34220001;
+3581 : 5B820010;
+3582 : 41620011;
+3583 : B9800800;
+3584 : 37830010;
+3585 : FBFFFE96;
+3586 : E0000002;
+3587 : 3401FFFF;
+3588 : 2B9D0004;
+3589 : 2B8B000C;
+358a : 2B8C0008;
+358b : 379C0010;
+358c : C3A00000;
+358d : 379CFFF4;
+358e : 5B8B000C;
+358f : 5B8C0008;
+3590 : 5B9D0004;
+3591 : 284B000C;
+3592 : B9601800;
+3593 : FBFFFD67;
+3594 : B8206000;
+3595 : 4C01000A;
+3596 : 29620000;
+3597 : 34010001;
+3598 : 5C410005;
+3599 : FBFFCFAE;
+359a : FBFFCF87;
+359b : 34010064;
+359c : E0000002;
+359d : 340100C8;
+359e : 59610000;
+359f : B9800800;
+35a0 : 2B9D0004;
+35a1 : 2B8B000C;
+35a2 : 2B8C0008;
+35a3 : 379C000C;
+35a4 : C3A00000;
+35a5 : 379CFFF0;
+35a6 : 5B8B0010;
+35a7 : 5B8C000C;
+35a8 : 5B8D0008;
+35a9 : 5B9D0004;
+35aa : 284B000C;
+35ab : B9601800;
+35ac : FBFFFD4E;
+35ad : B8206800;
+35ae : 4C010050;
+35af : 29620000;
+35b0 : 34010002;
+35b1 : 4441001E;
+35b2 : 48410004;
+35b3 : 34010001;
+35b4 : 5C410048;
+35b5 : E0000020;
+35b6 : 34010003;
+35b7 : 44410004;
+35b8 : 34010032;
+35b9 : 5C410043;
+35ba : E000003D;
+35bb : 78020001;
+35bc : 3842BC80;
+35bd : 28410014;
+35be : 78030001;
+35bf : 3863BF40;
+35c0 : 58610000;
+35c1 : 28410018;
+35c2 : 78030001;
+35c3 : 3863BF44;
+35c4 : 58610000;
+35c5 : 28410010;
+35c6 : 78030001;
+35c7 : 3863A808;
+35c8 : 58610000;
+35c9 : 78010001;
+35ca : 3821879C;
+35cb : F8000253;
+35cc : FBFFCF7B;
+35cd : FBFFCF54;
+35ce : E000002C;
+35cf : 78010001;
+35d0 : 78020001;
+35d1 : 3821BC80;
+35d2 : 3842BFBC;
+35d3 : 34030010;
+35d4 : F8002202;
+35d5 : 780C0001;
+35d6 : 398CBC80;
+35d7 : 41810000;
+35d8 : 5C200003;
+35d9 : 340100CB;
+35da : E0000023;
+35db : 34020010;
+35dc : B9800800;
+35dd : F80023DC;
+35de : B8201000;
+35df : 3403000F;
+35e0 : 34010020;
+35e1 : E0000004;
+35e2 : B44C2000;
+35e3 : 30810000;
+35e4 : 34420001;
+35e5 : 4C62FFFD;
+35e6 : 34020001;
+35e7 : B9800800;
+35e8 : 34030000;
+35e9 : F800109F;
+35ea : B8201000;
+35eb : 3401FFFE;
+35ec : 5C410003;
+35ed : 340100CA;
+35ee : E000000F;
+35ef : 3401FFFF;
+35f0 : 5C410003;
+35f1 : 340100C9;
+35f2 : E000000B;
+35f3 : F80008F8;
+35f4 : 44200006;
+35f5 : 34010065;
+35f6 : E0000007;
+35f7 : F8001031;
+35f8 : 3402FFFF;
+35f9 : 44220003;
+35fa : 34010064;
+35fb : E0000002;
+35fc : 340100C8;
+35fd : 59610000;
+35fe : B9A00800;
+35ff : 2B9D0004;
+3600 : 2B8B0010;
+3601 : 2B8C000C;
+3602 : 2B8D0008;
+3603 : 379C0010;
+3604 : C3A00000;
+3605 : 379CFFC8;
+3606 : 5B8B0024;
+3607 : 5B8C0020;
+3608 : 5B8D001C;
+3609 : 5B8E0018;
+360a : 5B8F0014;
+360b : 5B900010;
+360c : 5B91000C;
+360d : 5B920008;
+360e : 5B9D0004;
+360f : B8207800;
+3610 : 28410000;
+3611 : B8406800;
+3612 : 340C0001;
+3613 : 40320001;
+3614 : 402E0000;
+3615 : 34010000;
+3616 : F8000C14;
+3617 : B8202000;
+3618 : 34110002;
+3619 : 34100003;
+361a : E0000025;
+361b : 5E4C0020;
+361c : 288B0004;
+361d : 5DD10007;
+361e : 28830000;
+361f : 78020001;
+3620 : 37810028;
+3621 : 38427BDC;
+3622 : F80001EE;
+3623 : E000001F;
+3624 : 5DD00017;
+3625 : 78018000;
+3626 : 5D610006;
+3627 : 78020001;
+3628 : 37810028;
+3629 : 384287C8;
+362a : F80001E6;
+362b : E0000017;
+362c : 4D600006;
+362d : 78020001;
+362e : 37810028;
+362f : 38427948;
+3630 : C80B5800;
+3631 : F80001DF;
+3632 : 2164FFFF;
+3633 : 08842710;
+3634 : 78020001;
+3635 : 15630010;
+3636 : 00840010;
+3637 : 37810028;
+3638 : 384287D0;
+3639 : F80001D7;
+363a : E0000008;
+363b : B8800800;
+363c : F8000BEE;
+363d : B8202000;
+363e : 358C0001;
+363f : 5C80FFDC;
+3640 : 34010000;
+3641 : E0000005;
+3642 : 41A20011;
+3643 : B9E00800;
+3644 : 37830028;
+3645 : FBFFFDD6;
+3646 : 2B9D0004;
+3647 : 2B8B0024;
+3648 : 2B8C0020;
+3649 : 2B8D001C;
+364a : 2B8E0018;
+364b : 2B8F0014;
+364c : 2B900010;
+364d : 2B91000C;
+364e : 2B920008;
+364f : 379C0038;
+3650 : C3A00000;
+3651 : 379CFFE4;
+3652 : 5B8B0010;
+3653 : 5B8C000C;
+3654 : 5B8D0008;
+3655 : 5B9D0004;
+3656 : 284D000C;
+3657 : B8206000;
+3658 : B8405800;
+3659 : 21A10002;
+365a : 44200009;
+365b : F80007AF;
+365c : 3402000A;
+365d : F8002118;
+365e : 5B81001C;
+365f : 41620011;
+3660 : B9800800;
+3661 : 3783001C;
+3662 : E0000013;
+3663 : 21A20004;
+3664 : 44410004;
+3665 : 37810014;
+3666 : 34020000;
+3667 : F8000CA8;
+3668 : 21AD0001;
+3669 : 45A00009;
+366a : 2B820018;
+366b : 2B810014;
+366c : 34030002;
+366d : FBFFF4CA;
+366e : B8201800;
+366f : 41620011;
+3670 : B9800800;
+3671 : E0000004;
+3672 : 41620011;
+3673 : B9800800;
+3674 : 37830014;
+3675 : FBFFFDA6;
+3676 : 2B9D0004;
+3677 : 2B8B0010;
+3678 : 2B8C000C;
+3679 : 2B8D0008;
+367a : 379C001C;
+367b : C3A00000;
+367c : 379CFFF4;
+367d : 5B9D0004;
+367e : 78010001;
+367f : 34020000;
+3680 : 34030000;
+3681 : 340400A1;
+3682 : 3821A1A8;
+3683 : FBFFF6B5;
+3684 : 78020001;
+3685 : 3842BC78;
+3686 : 58410000;
+3687 : 78010001;
+3688 : 38219828;
+3689 : 28210018;
+368a : 78020001;
+368b : 3842BC7C;
+368c : 78030001;
+368d : 78040001;
+368e : 58410000;
+368f : 3863BCA4;
+3690 : 3781000C;
+3691 : 37820008;
+3692 : 3884BCA0;
+3693 : F8000785;
+3694 : 4383000F;
+3695 : 4382000B;
+3696 : 78010001;
+3697 : 3821A190;
+3698 : 30230008;
+3699 : 30220009;
+369a : 78010001;
+369b : 3821A19C;
+369c : 30230008;
+369d : 30220009;
+369e : 2B9D0004;
+369f : 379C000C;
+36a0 : C3A00000;
+36a1 : 78030001;
+36a2 : 3863BDB4;
+36a3 : 2C650000;
+36a4 : 78040001;
+36a5 : 3884BDCC;
+36a6 : 3C210001;
+36a7 : B4852000;
+36a8 : 34A50002;
+36a9 : 30810000;
+36aa : 30820001;
+36ab : 0C650000;
+36ac : C3A00000;
+36ad : 379CFFC0;
+36ae : 5B8B0014;
+36af : 5B8C0010;
+36b0 : 5B8D000C;
+36b1 : 5B8E0008;
+36b2 : 5B9D0004;
+36b3 : 34020008;
+36b4 : 542200BE;
+36b5 : 3C210002;
+36b6 : 78020001;
+36b7 : 384293BC;
+36b8 : B4411000;
+36b9 : 28410000;
+36ba : 780C0001;
+36bb : 398CBDB4;
+36bc : C0200000;
+36bd : 34010000;
+36be : 34020000;
+36bf : FBFFFFE2;
+36c0 : E00000AC;
+36c1 : 34010001;
+36c2 : 34020007;
+36c3 : FBFFFFDE;
+36c4 : 2D820000;
+36c5 : 78010001;
+36c6 : 3821BDCC;
+36c7 : B4220800;
+36c8 : 34020004;
+36c9 : E0000009;
+36ca : 34010002;
+36cb : 34020007;
+36cc : FBFFFFD5;
+36cd : 2D820000;
+36ce : 78010001;
+36cf : 3821BDCC;
+36d0 : B4220800;
+36d1 : 34020003;
+36d2 : 30220000;
+36d3 : 34210001;
+36d4 : F800028B;
+36d5 : 340B0007;
+36d6 : E0000097;
+36d7 : 34010003;
+36d8 : 34020002;
+36d9 : FBFFFFC8;
+36da : 2D820000;
+36db : 78010001;
+36dc : 3821BDCC;
+36dd : B4220800;
+36de : 34020028;
+36df : 30200000;
+36e0 : 30220001;
+36e1 : 340B0002;
+36e2 : E000008B;
+36e3 : 780D0001;
+36e4 : 39AD875C;
+36e5 : B9A00800;
+36e6 : F8002224;
+36e7 : 342B0001;
+36e8 : 216200FF;
+36e9 : 34010004;
+36ea : FBFFFFB7;
+36eb : 2D820000;
+36ec : 78010001;
+36ed : 3821BDCC;
+36ee : B4410800;
+36ef : B9A01000;
+36f0 : F80021F6;
+36f1 : E000007C;
+36f2 : 37810040;
+36f3 : FBFFF7CD;
+36f4 : 78020001;
+36f5 : 37810040;
+36f6 : 38428F90;
+36f7 : 34030004;
+36f8 : 780C0001;
+36f9 : 780E0001;
+36fa : F80020BB;
+36fb : 398CBDB4;
+36fc : 39CEBDCC;
+36fd : 378D0018;
+36fe : 4420000D;
+36ff : 37820040;
+3700 : B9A00800;
+3701 : FBFFF30C;
+3702 : B9A00800;
+3703 : F8002207;
+3704 : B8205800;
+3705 : 2D810000;
+3706 : B9A01000;
+3707 : 34210002;
+3708 : B42E0800;
+3709 : F80021DD;
+370a : E0000014;
+370b : 37810038;
+370c : F8000253;
+370d : 43830038;
+370e : 43840039;
+370f : 4385003A;
+3710 : 4386003B;
+3711 : 4387003C;
+3712 : 4388003D;
+3713 : 78020001;
+3714 : 38428150;
+3715 : B9A00800;
+3716 : F80000FA;
+3717 : 2D810000;
+3718 : B9A01000;
+3719 : 34030011;
+371a : 34210002;
+371b : B42E0800;
+371c : F800226A;
+371d : 340B0011;
+371e : 34010005;
+371f : 216200FF;
+3720 : E0000026;
+3721 : 2D8E0000;
+3722 : 780D0001;
+3723 : 39ADBDCC;
+3724 : 35CE0002;
+3725 : 780B0001;
+3726 : B5CD7000;
+3727 : 396BC284;
+3728 : 34030004;
+3729 : B9601000;
+372a : B9C00800;
+372b : F800225B;
+372c : B9600800;
+372d : 34020004;
+372e : F800228B;
+372f : B5C15800;
+3730 : 78020001;
+3731 : B9600800;
+3732 : 38427E6C;
+3733 : 780E0001;
+3734 : F80021B2;
+3735 : 39CE96E8;
+3736 : 29C20000;
+3737 : 356B0002;
+3738 : B9600800;
+3739 : 34030020;
+373a : F800224C;
+373b : 29C10000;
+373c : 34020020;
+373d : F800227C;
+373e : B5610800;
+373f : 2D8B0000;
+3740 : 356B0002;
+3741 : B56D5800;
+3742 : C82B5800;
+3743 : 216B00FF;
+3744 : 34010006;
+3745 : B9601000;
+3746 : FBFFFF5B;
+3747 : E0000026;
+3748 : 78020001;
+3749 : 37810040;
+374a : 38428F90;
+374b : 34030004;
+374c : F8002069;
+374d : 340B0000;
+374e : 4420001F;
+374f : 34010008;
+3750 : 3402000C;
+3751 : 780C0001;
+3752 : FBFFFF4F;
+3753 : 398CBDB4;
+3754 : 2D810000;
+3755 : 780B0001;
+3756 : 396BBDCC;
+3757 : B5610800;
+3758 : 34020005;
+3759 : 34030002;
+375a : 30220000;
+375b : 34020001;
+375c : 30230006;
+375d : 30220001;
+375e : 3022000A;
+375f : 37810040;
+3760 : FBFFF760;
+3761 : 37820040;
+3762 : 37810018;
+3763 : FBFFF2AA;
+3764 : 2D810000;
+3765 : 37820040;
+3766 : 34030004;
+3767 : 34210002;
+3768 : B5610800;
+3769 : F800206D;
+376a : 340B000C;
+376b : E0000002;
+376c : 340B0000;
+376d : 78010001;
+376e : 3821BDB4;
+376f : 2C220000;
+3770 : B5625800;
+3771 : 0C2B0000;
+3772 : 2B9D0004;
+3773 : 2B8B0014;
+3774 : 2B8C0010;
+3775 : 2B8D000C;
+3776 : 2B8E0008;
+3777 : 379C0040;
+3778 : C3A00000;
+3779 : 379CFFF4;
+377a : 5B8B000C;
+377b : 5B8C0008;
+377c : 5B9D0004;
+377d : 78010001;
+377e : 34020000;
+377f : 3403009E;
+3780 : 3821BDCC;
+3781 : F80020D3;
+3782 : 78010001;
+3783 : 3821BDB4;
+3784 : 0C200000;
+3785 : 78010001;
+3786 : 382187F8;
+3787 : F8000097;
+3788 : 340B0001;
+3789 : 340C0009;
+378a : B9600800;
+378b : 356B0001;
+378c : FBFFFF21;
+378d : 5D6CFFFD;
+378e : 34010000;
+378f : FBFFFF1E;
+3790 : 2B9D0004;
+3791 : 2B8B000C;
+3792 : 2B8C0008;
+3793 : 379C000C;
+3794 : C3A00000;
+3795 : 379CFFEC;
+3796 : 5B8B000C;
+3797 : 5B8C0008;
+3798 : 5B9D0004;
+3799 : 78010001;
+379a : 3821BE78;
+379b : 28220000;
+379c : 34032710;
+379d : 4C620034;
+379e : 378C0010;
+379f : B9800800;
+37a0 : F80001BF;
+37a1 : 378B0017;
+37a2 : B9600800;
+37a3 : FBFFF71D;
+37a4 : 78020001;
+37a5 : 34030006;
+37a6 : B9800800;
+37a7 : 3842BE6C;
+37a8 : F800200D;
+37a9 : B8201800;
+37aa : 5C20000B;
+37ab : 78020001;
+37ac : 3842B8F8;
+37ad : 28410000;
+37ae : 44230012;
+37af : 78020001;
+37b0 : B9600800;
+37b1 : 3842BE74;
+37b2 : 34030004;
+37b3 : F8002002;
+37b4 : 4420000C;
+37b5 : FBFFFFC4;
+37b6 : 78010001;
+37b7 : 37820010;
+37b8 : 34030006;
+37b9 : 3821BE6C;
+37ba : F800201C;
+37bb : 78010001;
+37bc : 3821BE74;
+37bd : 37820017;
+37be : 34030004;
+37bf : F8002017;
+37c0 : 78010001;
+37c1 : 78040001;
+37c2 : 3821BDB0;
+37c3 : 3884BDB4;
+37c4 : 28210000;
+37c5 : 2C840000;
+37c6 : 78020001;
+37c7 : 78030001;
+37c8 : 3842BDB8;
+37c9 : 3863BDCC;
+37ca : 34050000;
+37cb : FBFFF683;
+37cc : 78010001;
+37cd : 3821BE78;
+37ce : 58200000;
+37cf : 34010001;
+37d0 : E0000004;
+37d1 : 34420001;
+37d2 : 58220000;
+37d3 : 34010000;
+37d4 : 2B9D0004;
+37d5 : 2B8B000C;
+37d6 : 2B8C0008;
+37d7 : 379C0014;
+37d8 : C3A00000;
+37d9 : 379CFFE4;
+37da : 5B8B0008;
+37db : 5B9D0004;
+37dc : 378B000C;
+37dd : B9600800;
+37de : 34020000;
+37df : 34030012;
+37e0 : F8002074;
+37e1 : 340188CC;
+37e2 : 0F810018;
+37e3 : 78010001;
+37e4 : 34040000;
+37e5 : B9601000;
+37e6 : 34030001;
+37e7 : 3821BE7C;
+37e8 : FBFFF550;
+37e9 : 78020001;
+37ea : 780B0001;
+37eb : 396BBDB8;
+37ec : 3842BDB0;
+37ed : 58410000;
+37ee : 34030012;
+37ef : B9600800;
+37f0 : 34020000;
+37f1 : F8002063;
+37f2 : 78020001;
+37f3 : 38428F98;
+37f4 : 34030006;
+37f5 : B9600800;
+37f6 : F8001FE0;
+37f7 : FBFFFF82;
+37f8 : 2B9D0004;
+37f9 : 2B8B0008;
+37fa : 379C001C;
+37fb : C3A00000;
+37fc : 379CFFF4;
+37fd : 5B8B000C;
+37fe : 5B8C0008;
+37ff : 5B9D0004;
+3800 : 780B0001;
+3801 : B8202000;
+3802 : 396BBEB0;
+3803 : B8401800;
+3804 : B9600800;
+3805 : B8801000;
+3806 : F8000027;
+3807 : B8206000;
+3808 : B9600800;
+3809 : F800010C;
+380a : B9800800;
+380b : 2B9D0004;
+380c : 2B8B000C;
+380d : 2B8C0008;
+380e : 379C000C;
+380f : C3A00000;
+3810 : 379CFFE0;
+3811 : 5B9D0004;
+3812 : 5B83000C;
+3813 : 3783000C;
+3814 : 5B820008;
+3815 : 5B840010;
+3816 : 5B850014;
+3817 : 5B860018;
+3818 : 5B87001C;
+3819 : 5B880020;
+381a : F8000013;
+381b : 2B9D0004;
+381c : 379C0020;
+381d : C3A00000;
+381e : 379CFFDC;
+381f : 5B9D0004;
+3820 : 5B82000C;
+3821 : 3782000C;
+3822 : 5B810008;
+3823 : 5B830010;
+3824 : 5B840014;
+3825 : 5B850018;
+3826 : 5B86001C;
+3827 : 5B870020;
+3828 : 5B880024;
+3829 : FBFFFFD3;
+382a : 2B9D0004;
+382b : 379C0024;
+382c : C3A00000;
+382d : 379CFF9C;
+382e : 5B8B0044;
+382f : 5B8C0040;
+3830 : 5B8D003C;
+3831 : 5B8E0038;
+3832 : 5B8F0034;
+3833 : 5B900030;
+3834 : 5B91002C;
+3835 : 5B920028;
+3836 : 5B930024;
+3837 : 5B940020;
+3838 : 5B95001C;
+3839 : 5B960018;
+383a : 5B970014;
+383b : 5B980010;
+383c : 5B99000C;
+383d : 5B9B0008;
+383e : 5B9D0004;
+383f : 78160001;
+3840 : B820C800;
+3841 : B840A000;
+3842 : B8209800;
+3843 : 34180025;
+3844 : 34090069;
+3845 : 34080070;
+3846 : 34070058;
+3847 : 341B002A;
+3848 : 340A0030;
+3849 : 34170010;
+384a : 37950058;
+384b : 3AD68810;
+384c : E0000096;
+384d : 340F0000;
+384e : 34110020;
+384f : 340D000A;
+3850 : 44380004;
+3851 : 32610000;
+3852 : E000003C;
+3853 : 34110030;
+3854 : 36940001;
+3855 : 42810000;
+3856 : 44290040;
+3857 : 5429000F;
+3858 : 4427003B;
+3859 : 54270008;
+385a : 443B001A;
+385b : 543B0004;
+385c : 44200088;
+385d : 5C38001A;
+385e : E000002F;
+385f : 5C2A0018;
+3860 : E0000016;
+3861 : 34020063;
+3862 : 4422001C;
+3863 : 34040064;
+3864 : 5C240013;
+3865 : E0000031;
+3866 : 4428002D;
+3867 : 54280006;
+3868 : 3402006E;
+3869 : 44220078;
+386a : 3404006F;
+386b : 5C24000C;
+386c : E0000024;
+386d : 34020075;
+386e : 44220028;
+386f : 34040078;
+3870 : 44240023;
+3871 : 34020073;
+3872 : 5C220005;
+3873 : E0000010;
+3874 : 286D0000;
+3875 : 34630004;
+3876 : 45E0FFDD;
+3877 : 3421FFD0;
+3878 : 202200FF;
+3879 : 34040009;
+387a : 5444FFDA;
+387b : 09EF000A;
+387c : B42F7800;
+387d : E3FFFFD7;
+387e : 28610000;
+387f : 34630004;
+3880 : 32610000;
+3881 : 36730001;
+3882 : E000005F;
+3883 : B8600800;
+3884 : 28210000;
+3885 : 34630004;
+3886 : E0000004;
+3887 : 32620000;
+3888 : 34210001;
+3889 : 36730001;
+388a : 40220000;
+388b : 5C40FFFC;
+388c : E0000055;
+388d : 32780000;
+388e : 36730001;
+388f : E0000052;
+3890 : 3401000A;
+3891 : 45A10004;
+3892 : E0000004;
+3893 : 340D0010;
+3894 : E0000002;
+3895 : 340D0008;
+3896 : 28650000;
+3897 : 34720004;
+3898 : B8A07000;
+3899 : 5DE00002;
+389a : 340F0001;
+389b : 00A6001F;
+389c : 65A3000A;
+389d : 34100000;
+389e : A0C31800;
+389f : 44600003;
+38a0 : C8057000;
+38a1 : 34100001;
+38a2 : 340C0010;
+38a3 : E0000015;
+38a4 : B9C00800;
+38a5 : B9A01000;
+38a6 : 5B87004C;
+38a7 : 5B880050;
+38a8 : 5B890054;
+38a9 : 5B8A0048;
+38aa : F8001EDB;
+38ab : B6C11800;
+38ac : 40630000;
+38ad : 358CFFFF;
+38ae : B6AC5800;
+38af : B9C00800;
+38b0 : 31630000;
+38b1 : B9A01000;
+38b2 : F8001EC3;
+38b3 : 2B8A0048;
+38b4 : 2B890054;
+38b5 : 2B880050;
+38b6 : 2B87004C;
+38b7 : B8207000;
+38b8 : 7D840000;
+38b9 : 7DC30000;
+38ba : A0831800;
+38bb : 5C60FFE9;
+38bc : 5D970004;
+38bd : 34020030;
+38be : 33820067;
+38bf : 340C000F;
+38c0 : 66220020;
+38c1 : A2021000;
+38c2 : 4440000B;
+38c3 : 358CFFFF;
+38c4 : B6AC1000;
+38c5 : 3403002D;
+38c6 : 30430000;
+38c7 : 34100000;
+38c8 : E0000005;
+38c9 : 358CFFFF;
+38ca : B6AC1000;
+38cb : 30510000;
+38cc : E0000003;
+38cd : CAEF0800;
+38ce : B4300800;
+38cf : 4981FFFA;
+38d0 : 46000005;
+38d1 : 358CFFFF;
+38d2 : B6AC0800;
+38d3 : 3402002D;
+38d4 : 30220000;
+38d5 : CAEC1800;
+38d6 : BA600800;
+38d7 : 3404000F;
+38d8 : E0000006;
+38d9 : B6AC1000;
+38da : 40420000;
+38db : 358C0001;
+38dc : 30220000;
+38dd : 34210001;
+38de : 4C8CFFFB;
+38df : B6639800;
+38e0 : BA401800;
+38e1 : 36940001;
+38e2 : 42810000;
+38e3 : 5C20FF6A;
+38e4 : CA790800;
+38e5 : 32600000;
+38e6 : 2B9D0004;
+38e7 : 2B8B0044;
+38e8 : 2B8C0040;
+38e9 : 2B8D003C;
+38ea : 2B8E0038;
+38eb : 2B8F0034;
+38ec : 2B900030;
+38ed : 2B91002C;
+38ee : 2B920028;
+38ef : 2B930024;
+38f0 : 2B940020;
+38f1 : 2B95001C;
+38f2 : 2B960018;
+38f3 : 2B970014;
+38f4 : 2B980010;
+38f5 : 2B99000C;
+38f6 : 2B9B0008;
+38f7 : 379C0064;
+38f8 : C3A00000;
+38f9 : 78010001;
+38fa : 3821C28C;
+38fb : 28220000;
+38fc : 78010001;
+38fd : 3821C2B4;
+38fe : 58220000;
+38ff : 340103C6;
+3900 : 58410004;
+3901 : C3A00000;
+3902 : 379CFFF8;
+3903 : 5B8B0008;
+3904 : 5B9D0004;
+3905 : B8205800;
+3906 : 3401000A;
+3907 : 5D610003;
+3908 : 3401000D;
+3909 : FBFFFFF9;
+390a : 78020001;
+390b : 3842C2B4;
+390c : 28420000;
+390d : 28410000;
+390e : 20210001;
+390f : 5C20FFFE;
+3910 : 584B0008;
+3911 : 2B9D0004;
+3912 : 2B8B0008;
+3913 : 379C0008;
+3914 : C3A00000;
+3915 : 379CFFF4;
+3916 : 5B8B000C;
+3917 : 5B8C0008;
+3918 : 5B9D0004;
+3919 : B8206000;
+391a : B8205800;
+391b : E0000004;
+391c : B8400800;
+391d : 356B0001;
+391e : FBFFFFE4;
+391f : 41620000;
+3920 : 5C40FFFC;
+3921 : C96C0800;
+3922 : 2B9D0004;
+3923 : 2B8B000C;
+3924 : 2B8C0008;
+3925 : 379C000C;
+3926 : C3A00000;
+3927 : 78010001;
+3928 : 3821C2B4;
+3929 : 28220000;
+392a : 3401FFFF;
+392b : 28430000;
+392c : 20630002;
+392d : 44600003;
+392e : 2841000C;
+392f : 202100FF;
+3930 : C3A00000;
+3931 : 78020001;
+3932 : 14210002;
+3933 : 3842C2B0;
+3934 : 28420000;
+3935 : 202100FF;
+3936 : 3C210010;
+3937 : 5841002C;
+3938 : 28410030;
+3939 : 4C20FFFF;
+393a : 28410030;
+393b : 2021FFFF;
+393c : C3A00000;
+393d : 14210002;
+393e : 78030001;
+393f : 3863C2B0;
+3940 : 202100FF;
+3941 : 28630000;
+3942 : 2042FFFF;
+3943 : 78048000;
+3944 : 3C210010;
+3945 : B8441000;
+3946 : B8411000;
+3947 : 5862002C;
+3948 : 28610030;
+3949 : 4C20FFFF;
+394a : C3A00000;
+394b : 40240002;
+394c : 40230003;
+394d : 78020001;
+394e : 3C840018;
+394f : 3C630010;
+3950 : 3842C2B0;
+3951 : B8831800;
+3952 : 40240005;
+3953 : 28420000;
+3954 : B8641800;
+3955 : 40240004;
+3956 : 3C840008;
+3957 : B8641800;
+3958 : 58430028;
+3959 : 40230001;
+395a : 40210000;
+395b : 3C210008;
+395c : B8610800;
+395d : 58410024;
+395e : C3A00000;
+395f : 78020001;
+3960 : 3842C2B0;
+3961 : 28430000;
+3962 : 28630028;
+3963 : 30230005;
+3964 : 28430000;
+3965 : 28630028;
+3966 : 00630008;
+3967 : 30230004;
+3968 : 28430000;
+3969 : 28630028;
+396a : 00630010;
+396b : 30230003;
+396c : 28430000;
+396d : 28630028;
+396e : 00630018;
+396f : 30230002;
+3970 : 28430000;
+3971 : 28630024;
+3972 : 30230001;
+3973 : 28420000;
+3974 : 28420024;
+3975 : 00420008;
+3976 : 30220000;
+3977 : C3A00000;
+3978 : 379CFFF4;
+3979 : 5B8B000C;
+397a : 5B8C0008;
+397b : 5B9D0004;
+397c : 780B0001;
+397d : B8406000;
+397e : 396BC2B0;
+397f : 5C200004;
+3980 : 29610000;
+3981 : 58200000;
+3982 : E0000022;
+3983 : 29610000;
+3984 : 58200000;
+3985 : 28220034;
+3986 : 78010001;
+3987 : 38218824;
+3988 : FBFFFE96;
+3989 : F80000BE;
+398a : 29610000;
+398b : 340200E0;
+398c : 58220000;
+398d : 78010001;
+398e : 3821BF30;
+398f : 34020800;
+3990 : 582C0000;
+3991 : 34010000;
+3992 : FBFFFFAB;
+3993 : 340100C8;
+3994 : F800047B;
+3995 : 34010000;
+3996 : 38028000;
+3997 : FBFFFFA6;
+3998 : 34010000;
+3999 : 34020000;
+399a : FBFFFFA3;
+399b : 34010010;
+399c : 34020000;
+399d : FBFFFFA0;
+399e : 7D820000;
+399f : 34010000;
+39a0 : C8021000;
+39a1 : 20421200;
+39a2 : 34420140;
+39a3 : FBFFFF9A;
+39a4 : 34010000;
+39a5 : 2B9D0004;
+39a6 : 2B8B000C;
+39a7 : 2B8C0008;
+39a8 : 379C000C;
+39a9 : C3A00000;
+39aa : 379CFFF0;
+39ab : 5B8B000C;
+39ac : 5B8C0008;
+39ad : 5B9D0004;
+39ae : 78020001;
+39af : 3842BF30;
+39b0 : 284B0000;
+39b1 : B8206000;
+39b2 : 34010004;
+39b3 : FBFFFF7E;
+39b4 : 7D6B0000;
+39b5 : 0F810012;
+39b6 : 34010004;
+39b7 : C80B5800;
+39b8 : FBFFFF79;
+39b9 : 216B0020;
+39ba : 0F810012;
+39bb : 356B0004;
+39bc : 45800004;
+39bd : 34010014;
+39be : FBFFFF73;
+39bf : 0D810000;
+39c0 : 2F810012;
+39c1 : A1610800;
+39c2 : E42B0800;
+39c3 : 2B9D0004;
+39c4 : 2B8B000C;
+39c5 : 2B8C0008;
+39c6 : 379C0010;
+39c7 : C3A00000;
+39c8 : 379CFFFC;
+39c9 : 5B9D0004;
+39ca : 34010040;
+39cb : FBFFFF66;
+39cc : 00210004;
+39cd : 2021001F;
+39ce : 08210320;
+39cf : 2B9D0004;
+39d0 : 379C0004;
+39d1 : C3A00000;
+39d2 : 379CFFF4;
+39d3 : 5B8B000C;
+39d4 : 5B8C0008;
+39d5 : 5B9D0004;
+39d6 : 78030001;
+39d7 : 3863BF40;
+39d8 : B8405800;
+39d9 : 28620000;
+39da : 58220000;
+39db : 78010001;
+39dc : 3821BF44;
+39dd : 282C0000;
+39de : 34010040;
+39df : FBFFFF52;
+39e0 : 00210004;
+39e1 : 2021001F;
+39e2 : 08210320;
+39e3 : B42C0800;
+39e4 : 59610000;
+39e5 : 34010000;
+39e6 : 2B9D0004;
+39e7 : 2B8B000C;
+39e8 : 2B8C0008;
+39e9 : 379C000C;
+39ea : C3A00000;
+39eb : 379CFFFC;
+39ec : 5B9D0004;
+39ed : 34010040;
+39ee : FBFFFF43;
+39ef : 38220001;
+39f0 : 34010040;
+39f1 : FBFFFF4C;
+39f2 : 34010000;
+39f3 : 2B9D0004;
+39f4 : 379C0004;
+39f5 : C3A00000;
+39f6 : 379CFFFC;
+39f7 : 5B9D0004;
+39f8 : 34010040;
+39f9 : FBFFFF38;
+39fa : 3402FFFE;
+39fb : A0221000;
+39fc : 34010040;
+39fd : FBFFFF40;
+39fe : 34010000;
+39ff : 2B9D0004;
+3a00 : 379C0004;
+3a01 : C3A00000;
+3a02 : 379CFFF8;
+3a03 : 5B8B0008;
+3a04 : 5B9D0004;
+3a05 : 780B0001;
+3a06 : 396BC2B0;
+3a07 : 29610000;
+3a08 : 28220004;
+3a09 : 38420010;
+3a0a : 58220004;
+3a0b : 34010001;
+3a0c : F8000403;
+3a0d : 29610000;
+3a0e : 28210004;
+3a0f : 20210020;
+3a10 : 7C210000;
+3a11 : 2B9D0004;
+3a12 : 2B8B0008;
+3a13 : 379C0008;
+3a14 : C3A00000;
+3a15 : 379CFFF8;
+3a16 : 5B8B0008;
+3a17 : 5B9D0004;
+3a18 : B8205800;
+3a19 : 34010044;
+3a1a : FBFFFF17;
+3a1b : 38220020;
+3a1c : 45600003;
+3a1d : 3402FFDF;
+3a1e : A0221000;
+3a1f : 34010044;
+3a20 : FBFFFF1D;
+3a21 : 34010000;
+3a22 : 2B9D0004;
+3a23 : 2B8B0008;
+3a24 : 379C0008;
+3a25 : C3A00000;
+3a26 : 379CFFF8;
+3a27 : 5B8B0008;
+3a28 : 5B9D0004;
+3a29 : 78020001;
+3a2a : 3842BFA0;
+3a2b : 28420000;
+3a2c : 780B0001;
+3a2d : 396BC2B0;
+3a2e : 59620000;
+3a2f : FBFFFF1C;
+3a30 : 34010001;
+3a31 : FBFFFFE4;
+3a32 : 78020001;
+3a33 : 38428F04;
+3a34 : 28410000;
+3a35 : 78040001;
+3a36 : 38848F08;
+3a37 : 58200000;
+3a38 : 29610000;
+3a39 : 28830000;
+3a3a : 34020003;
+3a3b : 58200000;
+3a3c : 5822000C;
+3a3d : 58230008;
+3a3e : 78030001;
+3a3f : 38638F0C;
+3a40 : 58220004;
+3a41 : 28620000;
+3a42 : 5822003C;
+3a43 : 2B9D0004;
+3a44 : 2B8B0008;
+3a45 : 379C0008;
+3a46 : C3A00000;
+3a47 : 379CFFE8;
+3a48 : 5B8B0010;
+3a49 : 5B8C000C;
+3a4a : 5B8D0008;
+3a4b : 5B9D0004;
+3a4c : 78010001;
+3a4d : 38219704;
+3a4e : 28220000;
+3a4f : 78010001;
+3a50 : 3821A7E0;
+3a51 : 44400003;
+3a52 : 78010001;
+3a53 : 3821A7E8;
+3a54 : 282B0000;
+3a55 : 5D600004;
+3a56 : 78010001;
+3a57 : 3821882C;
+3a58 : E0000036;
+3a59 : 78030001;
+3a5a : 38638F10;
+3a5b : 282C0004;
+3a5c : 29620000;
+3a5d : 28610000;
+3a5e : 44410011;
+3a5f : B9600800;
+3a60 : 780400FF;
+3a61 : E000000D;
+3a62 : 28230000;
+3a63 : 3C660018;
+3a64 : 00650018;
+3a65 : B8C52800;
+3a66 : A0643000;
+3a67 : 00C60008;
+3a68 : 2063FF00;
+3a69 : 3C630008;
+3a6a : B8A62800;
+3a6b : B8A31800;
+3a6c : 58230000;
+3a6d : 34210004;
+3a6e : 5581FFF4;
+3a6f : 78040001;
+3a70 : 38848F10;
+3a71 : 29630000;
+3a72 : 28810000;
+3a73 : 44610005;
+3a74 : 78010001;
+3a75 : 38218844;
+3a76 : FBFFFDA8;
+3a77 : E00000AB;
+3a78 : 78010001;
+3a79 : 3821BF34;
+3a7a : 28220000;
+3a7b : 356B0004;
+3a7c : 5C400016;
+3a7d : 29630008;
+3a7e : 34021234;
+3a7f : 0063000D;
+3a80 : 2063FFFF;
+3a81 : 5C62000B;
+3a82 : 29630010;
+3a83 : 34025678;
+3a84 : 0063000D;
+3a85 : 2063FFFF;
+3a86 : 5C620006;
+3a87 : 29630018;
+3a88 : 34424444;
+3a89 : 0063000D;
+3a8a : 2063FFFF;
+3a8b : 44620005;
+3a8c : 78010001;
+3a8d : 3821886C;
+3a8e : FBFFFD90;
+3a8f : E0000093;
+3a90 : 34020001;
+3a91 : 58220000;
+3a92 : 37810014;
+3a93 : FBFFFECC;
+3a94 : 78060001;
+3a95 : 38C68F14;
+3a96 : 28C50000;
+3a97 : 29670008;
+3a98 : 29660010;
+3a99 : 29610018;
+3a9a : A0E53800;
+3a9b : A0C53000;
+3a9c : A0250800;
+3a9d : 59670008;
+3a9e : 59660010;
+3a9f : 59610018;
+3aa0 : 43880014;
+3aa1 : 43890015;
+3aa2 : 35640008;
+3aa3 : 3D080008;
+3aa4 : 35630010;
+3aa5 : B9094000;
+3aa6 : 3D08000D;
+3aa7 : 35620018;
+3aa8 : B8E83800;
+3aa9 : 59670008;
+3aaa : 43870016;
+3aab : 43880017;
+3aac : 3809CAFE;
+3aad : 3CE70008;
+3aae : B8E83800;
+3aaf : 3CE7000D;
+3ab0 : 34080001;
+3ab1 : B8C73000;
+3ab2 : 59660010;
+3ab3 : 43860018;
+3ab4 : 43870019;
+3ab5 : 3CC60008;
+3ab6 : B8C73000;
+3ab7 : 3CC6000D;
+3ab8 : B8260800;
+3ab9 : 78060001;
+3aba : 38C68F18;
+3abb : 59610018;
+3abc : 28C70000;
+3abd : B9600800;
+3abe : E000000B;
+3abf : 28260000;
+3ac0 : 00CA000D;
+3ac1 : 214AFFFF;
+3ac2 : 5D490006;
+3ac3 : 20CA0007;
+3ac4 : 5D480004;
+3ac5 : A0C53000;
+3ac6 : B8C73000;
+3ac7 : 58260000;
+3ac8 : 34210008;
+3ac9 : 5581FFF6;
+3aca : 78070001;
+3acb : 38E78F14;
+3acc : 78060001;
+3acd : B9600800;
+3ace : 34050000;
+3acf : 340A0AAA;
+3ad0 : 34090007;
+3ad1 : 28E80000;
+3ad2 : 38C69704;
+3ad3 : E0000010;
+3ad4 : 28270000;
+3ad5 : 00ED000D;
+3ad6 : 21ADFFFF;
+3ad7 : 5DAA000B;
+3ad8 : 00ED0007;
+3ad9 : 21AD001F;
+3ada : 5DA90008;
+3adb : A0E83800;
+3adc : 58270000;
+3add : 28C50000;
+3ade : 3CA5000D;
+3adf : B8A73800;
+3ae0 : 58270000;
+3ae1 : B8202800;
+3ae2 : 34210008;
+3ae3 : 5581FFF1;
+3ae4 : 78010001;
+3ae5 : 3821C2B0;
+3ae6 : 28210000;
+3ae7 : 34060000;
+3ae8 : 58200014;
+3ae9 : E000000F;
+3aea : 29670000;
+3aeb : 29690004;
+3aec : 356B0008;
+3aed : 20E80FFF;
+3aee : 3D290014;
+3aef : 00E7000C;
+3af0 : 58280018;
+3af1 : B9273800;
+3af2 : 3CE70008;
+3af3 : 20C9003F;
+3af4 : 38E70040;
+3af5 : B8E93800;
+3af6 : 58270014;
+3af7 : 34C60001;
+3af8 : 558BFFF2;
+3af9 : 44A0000B;
+3afa : 78080001;
+3afb : 39088F14;
+3afc : 28A70000;
+3afd : 29060000;
+3afe : 78080001;
+3aff : 39088F1C;
+3b00 : A0E63000;
+3b01 : 29070000;
+3b02 : B8C73000;
+3b03 : 58A60000;
+3b04 : 78070001;
+3b05 : 38E78F14;
+3b06 : 28860000;
+3b07 : 28E50000;
+3b08 : 78080001;
+3b09 : 39088F20;
+3b0a : A0C53000;
+3b0b : 58860000;
+3b0c : 28660000;
+3b0d : A0C53000;
+3b0e : 58660000;
+3b0f : 28460000;
+3b10 : A0C52800;
+3b11 : 58450000;
+3b12 : 28860000;
+3b13 : 29050000;
+3b14 : B8C52800;
+3b15 : 58850000;
+3b16 : 28650000;
+3b17 : 78040ACF;
+3b18 : B8A42000;
+3b19 : 78050001;
+3b1a : 58640000;
+3b1b : 38A58F24;
+3b1c : 28440000;
+3b1d : 28A30000;
+3b1e : B8831800;
+3b1f : 58430000;
+3b20 : 34020080;
+3b21 : 58220014;
+3b22 : 2B9D0004;
+3b23 : 2B8B0010;
+3b24 : 2B8C000C;
+3b25 : 2B8D0008;
+3b26 : 379C0018;
+3b27 : C3A00000;
+3b28 : 78030001;
+3b29 : 3863C2AC;
+3b2a : 44400004;
+3b2b : 28620000;
+3b2c : 58410004;
+3b2d : C3A00000;
+3b2e : 28620000;
+3b2f : 58410008;
+3b30 : C3A00000;
+3b31 : 78030001;
+3b32 : 3863C2AC;
+3b33 : 44400004;
+3b34 : 28620000;
+3b35 : 58410004;
+3b36 : C3A00000;
+3b37 : 28620000;
+3b38 : 58410008;
+3b39 : C3A00000;
+3b3a : 34020000;
+3b3b : E0000003;
+3b3c : 34000000;
+3b3d : 34420001;
+3b3e : 5C41FFFE;
+3b3f : C3A00000;
+3b40 : 379CFFF8;
+3b41 : 5B8B0008;
+3b42 : 5B9D0004;
+3b43 : 202100FF;
+3b44 : 082B000C;
+3b45 : 78020001;
+3b46 : 3842A7F0;
+3b47 : B44B5800;
+3b48 : 29610004;
+3b49 : 34020000;
+3b4a : FBFFFFDE;
+3b4b : 29610008;
+3b4c : FBFFFFEE;
+3b4d : 29610000;
+3b4e : 34020000;
+3b4f : FBFFFFD9;
+3b50 : 29610008;
+3b51 : FBFFFFE9;
+3b52 : 2B9D0004;
+3b53 : 2B8B0008;
+3b54 : 379C0008;
+3b55 : C3A00000;
+3b56 : 379CFFF8;
+3b57 : 5B8B0008;
+3b58 : 5B9D0004;
+3b59 : 202100FF;
+3b5a : 082B000C;
+3b5b : 78020001;
+3b5c : 3842A7F0;
+3b5d : B44B5800;
+3b5e : 29610004;
+3b5f : 34020001;
+3b60 : FBFFFFC8;
+3b61 : 29610008;
+3b62 : FBFFFFD8;
+3b63 : 29610000;
+3b64 : 34020001;
+3b65 : FBFFFFC3;
+3b66 : 29610008;
+3b67 : FBFFFFD3;
+3b68 : 29610004;
+3b69 : 34020000;
+3b6a : FBFFFFBE;
+3b6b : 29610008;
+3b6c : FBFFFFCE;
+3b6d : 29610000;
+3b6e : 34020000;
+3b6f : FBFFFFB9;
+3b70 : 29610008;
+3b71 : FBFFFFC9;
+3b72 : 2B9D0004;
+3b73 : 2B8B0008;
+3b74 : 379C0008;
+3b75 : C3A00000;
+3b76 : 379CFFF8;
+3b77 : 5B8B0008;
+3b78 : 5B9D0004;
+3b79 : 202100FF;
+3b7a : 082B000C;
+3b7b : 78020001;
+3b7c : 3842A7F0;
+3b7d : B44B5800;
+3b7e : 29610004;
+3b7f : 34020000;
+3b80 : FBFFFFA8;
+3b81 : 29610008;
+3b82 : FBFFFFB8;
+3b83 : 29610000;
+3b84 : 34020001;
+3b85 : FBFFFFA3;
+3b86 : 29610008;
+3b87 : FBFFFFB3;
+3b88 : 29610004;
+3b89 : 34020001;
+3b8a : FBFFFF9E;
+3b8b : 29610008;
+3b8c : FBFFFFAE;
+3b8d : 2B9D0004;
+3b8e : 2B8B0008;
+3b8f : 379C0008;
+3b90 : C3A00000;
+3b91 : 379CFFE8;
+3b92 : 5B8B0018;
+3b93 : 5B8C0014;
+3b94 : 5B8D0010;
+3b95 : 5B8E000C;
+3b96 : 5B8F0008;
+3b97 : 5B9D0004;
+3b98 : 202100FF;
+3b99 : 082B000C;
+3b9a : 78030001;
+3b9b : 3863A7F0;
+3b9c : 204F00FF;
+3b9d : 340E0008;
+3b9e : B46B5800;
+3b9f : 29610004;
+3ba0 : 21E20080;
+3ba1 : 35CEFFFF;
+3ba2 : FBFFFF86;
+3ba3 : 29610008;
+3ba4 : 3DEF0001;
+3ba5 : 21CE00FF;
+3ba6 : FBFFFF94;
+3ba7 : 29610000;
+3ba8 : 34020001;
+3ba9 : 356D0004;
+3baa : FBFFFF7E;
+3bab : 29610008;
+3bac : 356C0008;
+3bad : 21EF00FF;
+3bae : FBFFFF8C;
+3baf : 29610000;
+3bb0 : 34020000;
+3bb1 : FBFFFF77;
+3bb2 : 29610008;
+3bb3 : FBFFFF87;
+3bb4 : 5DC0FFEB;
+3bb5 : 29A10000;
+3bb6 : 34020001;
+3bb7 : FBFFFF71;
+3bb8 : 29810000;
+3bb9 : FBFFFF81;
+3bba : 29610000;
+3bbb : 34020001;
+3bbc : FBFFFF6C;
+3bbd : 29810000;
+3bbe : FBFFFF7C;
+3bbf : 78010001;
+3bc0 : 3821C2AC;
+3bc1 : 28210000;
+3bc2 : 29AE0000;
+3bc3 : 34020000;
+3bc4 : 28210004;
+3bc5 : A02E7000;
+3bc6 : 29610000;
+3bc7 : FBFFFF61;
+3bc8 : 29810000;
+3bc9 : FBFFFF71;
+3bca : 29A10000;
+3bcb : 34020000;
+3bcc : FBFFFF5C;
+3bcd : 29810000;
+3bce : FBFFFF6C;
+3bcf : 7DC10000;
+3bd0 : 2B9D0004;
+3bd1 : 2B8B0018;
+3bd2 : 2B8C0014;
+3bd3 : 2B8D0010;
+3bd4 : 2B8E000C;
+3bd5 : 2B8F0008;
+3bd6 : 379C0018;
+3bd7 : C3A00000;
+3bd8 : 379CFFE0;
+3bd9 : 5B8B0020;
+3bda : 5B8C001C;
+3bdb : 5B8D0018;
+3bdc : 5B8E0014;
+3bdd : 5B8F0010;
+3bde : 5B90000C;
+3bdf : 5B910008;
+3be0 : 5B9D0004;
+3be1 : 202100FF;
+3be2 : 082B000C;
+3be3 : 78040001;
+3be4 : 3884A7F0;
+3be5 : B48B5800;
+3be6 : 29610004;
+3be7 : B8408000;
+3be8 : 34020001;
+3be9 : 207100FF;
+3bea : FBFFFF3E;
+3beb : 29610008;
+3bec : 780F0001;
+3bed : 340E0008;
+3bee : FBFFFF4C;
+3bef : 29610000;
+3bf0 : 34020000;
+3bf1 : 340D0000;
+3bf2 : FBFFFF36;
+3bf3 : 29610008;
+3bf4 : 39EFC2AC;
+3bf5 : FBFFFF45;
+3bf6 : 29610000;
+3bf7 : 34020001;
+3bf8 : 3DAD0001;
+3bf9 : FBFFFF2F;
+3bfa : 29610008;
+3bfb : 21AD00FF;
+3bfc : FBFFFF3E;
+3bfd : 29E10000;
+3bfe : 29620004;
+3bff : 28210004;
+3c00 : A0220800;
+3c01 : 44200002;
+3c02 : 39AD0001;
+3c03 : 29610000;
+3c04 : 34020000;
+3c05 : 35CEFFFF;
+3c06 : FBFFFF22;
+3c07 : 29610008;
+3c08 : 356C0008;
+3c09 : FBFFFF31;
+3c0a : 5DC0FFEC;
+3c0b : 462E0004;
+3c0c : 29610004;
+3c0d : 34020001;
+3c0e : E0000003;
+3c0f : 29610004;
+3c10 : 34020000;
+3c11 : FBFFFF17;
+3c12 : 29810000;
+3c13 : FBFFFF27;
+3c14 : 29610000;
+3c15 : 34020001;
+3c16 : FBFFFF12;
+3c17 : 29810000;
+3c18 : FBFFFF22;
+3c19 : 29610000;
+3c1a : 34020000;
+3c1b : FBFFFF0D;
+3c1c : 29810000;
+3c1d : FBFFFF1D;
+3c1e : 320D0000;
+3c1f : 2B9D0004;
+3c20 : 2B8B0020;
+3c21 : 2B8C001C;
+3c22 : 2B8D0018;
+3c23 : 2B8E0014;
+3c24 : 2B8F0010;
+3c25 : 2B90000C;
+3c26 : 2B910008;
+3c27 : 379C0020;
+3c28 : C3A00000;
+3c29 : 379CFFF8;
+3c2a : 5B8B0008;
+3c2b : 5B9D0004;
+3c2c : 202100FF;
+3c2d : 082B000C;
+3c2e : 78020001;
+3c2f : 3842A7F0;
+3c30 : B44B5800;
+3c31 : 29610000;
+3c32 : 34020001;
+3c33 : FBFFFEF5;
+3c34 : 29610008;
+3c35 : FBFFFF05;
+3c36 : 29610004;
+3c37 : 34020001;
+3c38 : FBFFFEF0;
+3c39 : 29610008;
+3c3a : FBFFFF00;
+3c3b : 2B9D0004;
+3c3c : 2B8B0008;
+3c3d : 379C0008;
+3c3e : C3A00000;
+3c3f : 379CFFF4;
+3c40 : 5B8B000C;
+3c41 : 5B8C0008;
+3c42 : 5B9D0004;
+3c43 : 202B00FF;
+3c44 : B9600800;
+3c45 : 204C00FF;
+3c46 : FBFFFEFA;
+3c47 : 3D820001;
+3c48 : B9600800;
+3c49 : 204200FE;
+3c4a : FBFFFF47;
+3c4b : B8206000;
+3c4c : B9600800;
+3c4d : FBFFFF29;
+3c4e : 65810000;
+3c4f : 2B9D0004;
+3c50 : 2B8B000C;
+3c51 : 2B8C0008;
+3c52 : 379C000C;
+3c53 : C3A00000;
+3c54 : 20210003;
+3c55 : 3C210010;
+3c56 : B8221000;
+3c57 : 78010001;
+3c58 : 3821C2BC;
+3c59 : 28210000;
+3c5a : 58220004;
+3c5b : C3A00000;
+3c5c : 379CFFF8;
+3c5d : 5B8B0008;
+3c5e : 5B9D0004;
+3c5f : 78010001;
+3c60 : 3821C2BC;
+3c61 : 28210000;
+3c62 : 780B0001;
+3c63 : 34040001;
+3c64 : 28230000;
+3c65 : 396BC2A0;
+3c66 : 00620018;
+3c67 : 2042000F;
+3c68 : 44440006;
+3c69 : 78010001;
+3c6a : 38218894;
+3c6b : FBFFFBB3;
+3c6c : 59600000;
+3c6d : E0000006;
+3c6e : 59620000;
+3c6f : 34020007;
+3c70 : 58220040;
+3c71 : 38630400;
+3c72 : 58230000;
+3c73 : 2B9D0004;
+3c74 : 2B8B0008;
+3c75 : 379C0008;
+3c76 : C3A00000;
+3c77 : 379CFFD0;
+3c78 : 5B8B0024;
+3c79 : 5B8C0020;
+3c7a : 5B8D001C;
+3c7b : 5B8E0018;
+3c7c : 5B8F0014;
+3c7d : 5B900010;
+3c7e : 5B91000C;
+3c7f : 5B920008;
+3c80 : 5B9D0004;
+3c81 : B8608800;
+3c82 : 78030001;
+3c83 : 3863C2BC;
+3c84 : B8806000;
+3c85 : 28640000;
+3c86 : 340B0000;
+3c87 : 28850000;
+3c88 : 20A51000;
+3c89 : 5CA0009C;
+3c8a : 78030001;
+3c8b : 3863C2A0;
+3c8c : 28630000;
+3c8d : B8A05800;
+3c8e : 44650097;
+3c8f : 348F0008;
+3c90 : 780A4000;
+3c91 : 34040000;
+3c92 : 3409000D;
+3c93 : 34080003;
+3c94 : 34070001;
+3c95 : 29F00000;
+3c96 : F1243000;
+3c97 : 020E0010;
+3c98 : 220DFFFF;
+3c99 : 21CE0003;
+3c9a : 65C50000;
+3c9b : A20A8000;
+3c9c : A0A63000;
+3c9d : 7E100000;
+3c9e : 44C00007;
+3c9f : 00830001;
+3ca0 : 34840002;
+3ca1 : 3C630001;
+3ca2 : B4231800;
+3ca3 : 0C6D0000;
+3ca4 : E000001E;
+3ca5 : F5719000;
+3ca6 : 7DC30002;
+3ca7 : A2431800;
+3ca8 : 5C660006;
+3ca9 : 44A30007;
+3caa : 01630001;
+3cab : 3C630001;
+3cac : B4431800;
+3cad : 0C6D0000;
+3cae : 356B0002;
+3caf : E0000013;
+3cb0 : 5DC80007;
+3cb1 : 01630001;
+3cb2 : 356B0001;
+3cb3 : 3C630001;
+3cb4 : B4431800;
+3cb5 : 0C6D0000;
+3cb6 : E000000C;
+3cb7 : 7C860000;
+3cb8 : 65C30002;
+3cb9 : A0C31800;
+3cba : 44650008;
+3cbb : 21A10002;
+3cbc : 340E0002;
+3cbd : 44250009;
+3cbe : 78010001;
+3cbf : 382188C8;
+3cc0 : FBFFFB5E;
+3cc1 : E0000005;
+3cc2 : 5E000003;
+3cc3 : 5DC7FFD2;
+3cc4 : E0000002;
+3cc5 : 34100001;
+3cc6 : 78010001;
+3cc7 : 3821C2BC;
+3cc8 : 28250000;
+3cc9 : 34120800;
+3cca : 34010000;
+3ccb : 34A50008;
+3ccc : 340F0000;
+3ccd : 34020001;
+3cce : 34040002;
+3ccf : 78034000;
+3cd0 : E0000010;
+3cd1 : 44200007;
+3cd2 : 5C220003;
+3cd3 : 3DAF0010;
+3cd4 : E0000005;
+3cd5 : 5C240004;
+3cd6 : B9ED7800;
+3cd7 : E0000002;
+3cd8 : B9A09000;
+3cd9 : 28B00000;
+3cda : 34210001;
+3cdb : 020E0010;
+3cdc : 220DFFFF;
+3cdd : A2038000;
+3cde : 7E100000;
+3cdf : 21CE0003;
+3ce0 : 5E000002;
+3ce1 : 45C2FFF0;
+3ce2 : 3421FFFF;
+3ce3 : 34020002;
+3ce4 : 50410004;
+3ce5 : 45800030;
+3ce6 : 31800000;
+3ce7 : E000002E;
+3ce8 : 4580002D;
+3ce9 : 37810028;
+3cea : 37820030;
+3ceb : F8000624;
+3cec : 78020001;
+3ced : 38428F28;
+3cee : 78030001;
+3cef : 28410000;
+3cf0 : 38638F2C;
+3cf1 : 28620000;
+3cf2 : A1E10800;
+3cf3 : 01EF001C;
+3cf4 : 5041000E;
+3cf5 : 78040001;
+3cf6 : 38848F30;
+3cf7 : 2B830030;
+3cf8 : 28820000;
+3cf9 : 54620009;
+3cfa : 2B84002C;
+3cfb : 2B830028;
+3cfc : 3482FFFF;
+3cfd : F4822000;
+3cfe : 3463FFFF;
+3cff : B4831800;
+3d00 : 5B830028;
+3d01 : 5B82002C;
+3d02 : 2B820028;
+3d03 : 59820008;
+3d04 : 2B82002C;
+3d05 : 5982000C;
+3d06 : 2022000F;
+3d07 : C84F7800;
+3d08 : 65E2FFF1;
+3d09 : 65EF0001;
+3d0a : B84F7800;
+3d0b : 45E00004;
+3d0c : 34020001;
+3d0d : 59820004;
+3d0e : E0000002;
+3d0f : 59800004;
+3d10 : 22520800;
+3d11 : 3C210003;
+3d12 : 66520000;
+3d13 : 59810010;
+3d14 : 31920000;
+3d15 : 78010001;
+3d16 : 3821C27C;
+3d17 : 28220004;
+3d18 : 34420001;
+3d19 : 58220004;
+3d1a : 78010001;
+3d1b : 3821C2BC;
+3d1c : 28210000;
+3d1d : 28210000;
+3d1e : 20212000;
+3d1f : 44200004;
+3d20 : 78010001;
+3d21 : 382188F4;
+3d22 : FBFFFAFC;
+3d23 : 522B0002;
+3d24 : BA205800;
+3d25 : B9600800;
+3d26 : 2B9D0004;
+3d27 : 2B8B0024;
+3d28 : 2B8C0020;
+3d29 : 2B8D001C;
+3d2a : 2B8E0018;
+3d2b : 2B8F0014;
+3d2c : 2B900010;
+3d2d : 2B91000C;
+3d2e : 2B920008;
+3d2f : 379C0030;
+3d30 : C3A00000;
+3d31 : 379CFFD4;
+3d32 : 5B8B0020;
+3d33 : 5B8C001C;
+3d34 : 5B8D0018;
+3d35 : 5B8E0014;
+3d36 : 5B8F0010;
+3d37 : 5B90000C;
+3d38 : 5B910008;
+3d39 : 5B9D0004;
+3d3a : B8406800;
+3d3b : 78020001;
+3d3c : 3842C2A0;
+3d3d : 28420000;
+3d3e : B8207800;
+3d3f : B8606000;
+3d40 : B8805800;
+3d41 : 34010000;
+3d42 : 4440008A;
+3d43 : 2DE3000C;
+3d44 : 38018100;
+3d45 : FC611800;
+3d46 : 3401FFFC;
+3d47 : C8031800;
+3d48 : A0611800;
+3d49 : 34630012;
+3d4a : B46C1000;
+3d4b : 3401003B;
+3d4c : 14710001;
+3d4d : 54410003;
+3d4e : 340C003C;
+3d4f : C9836000;
+3d50 : 35900001;
+3d51 : 34010002;
+3d52 : 34020000;
+3d53 : 02100001;
+3d54 : FBFFFF00;
+3d55 : 340E0000;
+3d56 : E0000006;
+3d57 : 2DE20000;
+3d58 : 34010000;
+3d59 : 35CE0001;
+3d5a : FBFFFEFA;
+3d5b : 35EF0002;
+3d5c : 562EFFFB;
+3d5d : B9A07800;
+3d5e : 340E0000;
+3d5f : 3610FFFF;
+3d60 : E0000006;
+3d61 : 2DE20000;
+3d62 : 34010000;
+3d63 : 35CE0001;
+3d64 : FBFFFEF0;
+3d65 : 35EF0002;
+3d66 : 560EFFFB;
+3d67 : 21820001;
+3d68 : 3E010001;
+3d69 : 5C400004;
+3d6a : B5A16800;
+3d6b : 34010000;
+3d6c : E0000003;
+3d6d : B5A16800;
+3d6e : 34010003;
+3d6f : 2DA20000;
+3d70 : FBFFFEE4;
+3d71 : 45600007;
+3d72 : 34010001;
+3d73 : 34021000;
+3d74 : FBFFFEE0;
+3d75 : 34010001;
+3d76 : 34020000;
+3d77 : FBFFFEDD;
+3d78 : 78010001;
+3d79 : 3821C2BC;
+3d7a : 28220000;
+3d7b : 340D0000;
+3d7c : B8207800;
+3d7d : 28430000;
+3d7e : 341003E8;
+3d7f : 38630001;
+3d80 : 58430000;
+3d81 : 29E10000;
+3d82 : 282E0000;
+3d83 : 21C10002;
+3d84 : 5C200009;
+3d85 : 34010001;
+3d86 : 35AD0001;
+3d87 : F8000088;
+3d88 : 5DB0FFF9;
+3d89 : 78010001;
+3d8a : 38218928;
+3d8b : B9C01000;
+3d8c : FBFFFA92;
+3d8d : 4560003E;
+3d8e : 780D0001;
+3d8f : 340E0000;
+3d90 : 39ADC2BC;
+3d91 : 340F0064;
+3d92 : 29A10000;
+3d93 : 28220000;
+3d94 : 20420800;
+3d95 : 5C40000A;
+3d96 : 34010001;
+3d97 : 35CE0001;
+3d98 : F8000077;
+3d99 : 5DCFFFF9;
+3d9a : 78010001;
+3d9b : 38218958;
+3d9c : FBFFFA82;
+3d9d : 340E0000;
+3d9e : E0000003;
+3d9f : 282E0014;
+3da0 : 21CE0001;
+3da1 : 78010001;
+3da2 : 3821C2BC;
+3da3 : 28210000;
+3da4 : 78020001;
+3da5 : 38428F28;
+3da6 : 282D0018;
+3da7 : 28210014;
+3da8 : 28410000;
+3da9 : 3782002C;
+3daa : A1A16800;
+3dab : 37810024;
+3dac : F8000563;
+3dad : 78030001;
+3dae : 38638F2C;
+3daf : 28610000;
+3db0 : 502D000E;
+3db1 : 78030001;
+3db2 : 38638F30;
+3db3 : 2B82002C;
+3db4 : 28610000;
+3db5 : 54410009;
+3db6 : 2B830028;
+3db7 : 2B820024;
+3db8 : 3461FFFF;
+3db9 : F4611800;
+3dba : 3442FFFF;
+3dbb : B4621000;
+3dbc : 5B820024;
+3dbd : 5B810028;
+3dbe : 2B810024;
+3dbf : 316E0000;
+3dc0 : 3DAD0003;
+3dc1 : 59610008;
+3dc2 : 2B810028;
+3dc3 : 59600004;
+3dc4 : 596D0010;
+3dc5 : 5961000C;
+3dc6 : 78010001;
+3dc7 : 3821C27C;
+3dc8 : 28220000;
+3dc9 : 34420001;
+3dca : 58220000;
+3dcb : B9800800;
+3dcc : 2B9D0004;
+3dcd : 2B8B0020;
+3dce : 2B8C001C;
+3dcf : 2B8D0018;
+3dd0 : 2B8E0014;
+3dd1 : 2B8F0010;
+3dd2 : 2B90000C;
+3dd3 : 2B910008;
+3dd4 : 379C002C;
+3dd5 : C3A00000;
+3dd6 : 78030001;
+3dd7 : 3863C27C;
+3dd8 : 28640000;
+3dd9 : 58240000;
+3dda : 28610004;
+3ddb : 58410000;
+3ddc : C3A00000;
+3ddd : 379CFFF8;
+3dde : 5B9D0004;
+3ddf : 78020001;
+3de0 : 3842C2AC;
+3de1 : 28420000;
+3de2 : 34030004;
+3de3 : 28420010;
+3de4 : 5B820008;
+3de5 : 37820008;
+3de6 : F80019F0;
+3de7 : 2B9D0004;
+3de8 : 379C0008;
+3de9 : C3A00000;
+3dea : 78040001;
+3deb : 3884C2AC;
+3dec : 28840000;
+3ded : 2885000C;
+3dee : 00A50010;
+3def : 3CA5000A;
+3df0 : 58650000;
+3df1 : 28830014;
+3df2 : 58430000;
+3df3 : 2882000C;
+3df4 : 00420008;
+3df5 : 20420003;
+3df6 : 58220000;
+3df7 : C3A00000;
+3df8 : 78020001;
+3df9 : 3842C2C0;
+3dfa : 28420000;
+3dfb : 78030001;
+3dfc : 3863C2AC;
+3dfd : 58620000;
+3dfe : 44200005;
+3dff : 28430018;
+3e00 : 78018000;
+3e01 : B8610800;
+3e02 : E0000006;
+3e03 : 78040001;
+3e04 : 38848ED4;
+3e05 : 28430018;
+3e06 : 28810000;
+3e07 : A0610800;
+3e08 : 58410018;
+3e09 : C3A00000;
+3e0a : 78010001;
+3e0b : 3821C2AC;
+3e0c : 28210000;
+3e0d : 2821001C;
+3e0e : C3A00000;
+3e0f : 78020001;
+3e10 : 3842C2AC;
+3e11 : 28420000;
+3e12 : 2843001C;
+3e13 : B4230800;
+3e14 : 2843001C;
+3e15 : C8611800;
+3e16 : 4803FFFE;
+3e17 : C3A00000;
+3e18 : 78050001;
+3e19 : 38A5C2AC;
+3e1a : 28A50000;
+3e1b : 78060001;
+3e1c : 38C6BF38;
+3e1d : 28A80024;
+3e1e : 28A70024;
+3e1f : 2108FFFF;
+3e20 : 58C80000;
+3e21 : 00E70010;
+3e22 : 78060001;
+3e23 : 38C6BF3C;
+3e24 : 58C70000;
+3e25 : 44200004;
+3e26 : 28A60020;
+3e27 : 00C60010;
+3e28 : 58260000;
+3e29 : 44400004;
+3e2a : 28A10020;
+3e2b : 2021FFFF;
+3e2c : 58410000;
+3e2d : 44600002;
+3e2e : 58680000;
+3e2f : 44800002;
+3e30 : 58870000;
+3e31 : C3A00000;
+3e32 : 379CFFEC;
+3e33 : 5B8B0014;
+3e34 : 5B8C0010;
+3e35 : 5B8D000C;
+3e36 : 5B8E0008;
+3e37 : 5B9D0004;
+3e38 : B8205800;
+3e39 : B8407000;
+3e3a : B8606800;
+3e3b : 3401FFEA;
+3e3c : 44600036;
+3e3d : 780C0001;
+3e3e : 398CBF38;
+3e3f : 29810000;
+3e40 : 5C20000A;
+3e41 : 78010001;
+3e42 : 38218988;
+3e43 : FBFFF9DB;
+3e44 : 78010001;
+3e45 : 3821C2AC;
+3e46 : 28210000;
+3e47 : 28210024;
+3e48 : 2021FFFF;
+3e49 : 59810000;
+3e4a : 780C0001;
+3e4b : 398CBF3C;
+3e4c : 29810000;
+3e4d : 5C20000A;
+3e4e : 78010001;
+3e4f : 382189A0;
+3e50 : FBFFF9CE;
+3e51 : 78010001;
+3e52 : 3821C2AC;
+3e53 : 28210000;
+3e54 : 28210024;
+3e55 : 00210010;
+3e56 : 59810000;
+3e57 : 5DC00006;
+3e58 : 78010001;
+3e59 : 3821BF38;
+3e5a : 28210000;
+3e5b : 51610008;
+3e5c : E000000E;
+3e5d : 34010001;
+3e5e : 5DC1000C;
+3e5f : 78010001;
+3e60 : 3821BF3C;
+3e61 : 28210000;
+3e62 : 542B0004;
+3e63 : 59A00000;
+3e64 : 3401FFEA;
+3e65 : E000000D;
+3e66 : 78010001;
+3e67 : 3821BF38;
+3e68 : 28210000;
+3e69 : B5615800;
+3e6a : 78010001;
+3e6b : 3821C2AC;
+3e6c : 28210000;
+3e6d : 216BFFFF;
+3e6e : 582B0028;
+3e6f : 2821002C;
+3e70 : 59A10000;
+3e71 : 34010000;
+3e72 : 2B9D0004;
+3e73 : 2B8B0014;
+3e74 : 2B8C0010;
+3e75 : 2B8D000C;
+3e76 : 2B8E0008;
+3e77 : 379C0014;
+3e78 : C3A00000;
+3e79 : 78030001;
+3e7a : 3863BF38;
+3e7b : 28640000;
+3e7c : 3403FFEA;
+3e7d : 5024000A;
+3e7e : 78030001;
+3e7f : 3863C2AC;
+3e80 : 28630000;
+3e81 : 2021FFFF;
+3e82 : 5862002C;
+3e83 : 78028000;
+3e84 : B8220800;
+3e85 : 58610028;
+3e86 : 34030000;
+3e87 : B8600800;
+3e88 : C3A00000;
+3e89 : 78010001;
+3e8a : 3821C2AC;
+3e8b : 28210000;
+3e8c : 28220004;
+3e8d : 38420010;
+3e8e : 58220004;
+3e8f : C3A00000;
+3e90 : 78020001;
+3e91 : 3842C2AC;
+3e92 : 44200005;
+3e93 : 28410000;
+3e94 : 28220030;
+3e95 : 38420001;
+3e96 : E0000005;
+3e97 : 28410000;
+3e98 : 3402FFFE;
+3e99 : 28230030;
+3e9a : A0621000;
+3e9b : 58220030;
+3e9c : 78010001;
+3e9d : 3821C2AC;
+3e9e : 28210000;
+3e9f : 28210030;
+3ea0 : 20210001;
+3ea1 : C3A00000;
+3ea2 : 78010001;
+3ea3 : 3821C2AC;
+3ea4 : 28210000;
+3ea5 : 28210030;
+3ea6 : 20210001;
+3ea7 : C3A00000;
+3ea8 : 78010001;
+3ea9 : 3821C2AC;
+3eaa : 28210000;
+3eab : 28210030;
+3eac : 20210100;
+3ead : 7C210000;
+3eae : C3A00000;
+3eaf : 78090001;
+3eb0 : 3929C2AC;
+3eb1 : 29290000;
+3eb2 : 7C210000;
+3eb3 : 2042000F;
+3eb4 : 59210034;
+3eb5 : 29210034;
+3eb6 : 3C420008;
+3eb7 : B8411000;
+3eb8 : 59220034;
+3eb9 : 59230058;
+3eba : 5924005C;
+3ebb : 59250060;
+3ebc : 59260064;
+3ebd : 2B810004;
+3ebe : 59270068;
+3ebf : 5928006C;
+3ec0 : 59210070;
+3ec1 : 2B810008;
+3ec2 : 59210074;
+3ec3 : C3A00000;
+3ec4 : 7C420000;
+3ec5 : 78030001;
+3ec6 : 3863C2AC;
+3ec7 : 7C210000;
+3ec8 : 3C420001;
+3ec9 : 28630000;
+3eca : B8411000;
+3ecb : 58620038;
+3ecc : C3A00000;
+3ecd : 78020001;
+3ece : 3842C2AC;
+3ecf : 28420000;
+3ed0 : 202100FF;
+3ed1 : 5841003C;
+3ed2 : C3A00000;
+3ed3 : 78020001;
+3ed4 : 3842C2AC;
+3ed5 : 28420000;
+3ed6 : 202100FF;
+3ed7 : 58410040;
+3ed8 : C3A00000;
+3ed9 : 78030001;
+3eda : 3863C2AC;
+3edb : 28630000;
+3edc : 58610044;
+3edd : 58620048;
+3ede : C3A00000;
+3edf : 78040001;
+3ee0 : 3884C2AC;
+3ee1 : 28840000;
+3ee2 : 5881004C;
+3ee3 : 58820050;
+3ee4 : 58830054;
+3ee5 : C3A00000;
+3ee6 : 78020001;
+3ee7 : 3842C2AC;
+3ee8 : 28420000;
+3ee9 : 58410078;
+3eea : C3A00000;
+3eeb : 379CFFC4;
+3eec : 5B8B001C;
+3eed : 5B8C0018;
+3eee : 5B8D0014;
+3eef : 5B8E0010;
+3ef0 : 5B8F000C;
+3ef1 : 5B900008;
+3ef2 : 5B9D0004;
+3ef3 : 78010001;
+3ef4 : 3821C2AC;
+3ef5 : 28210000;
+3ef6 : 780C0001;
+3ef7 : 398CBFBC;
+3ef8 : 31800000;
+3ef9 : 28220004;
+3efa : 3401FFED;
+3efb : 20420080;
+3efc : 5C400053;
+3efd : 34010001;
+3efe : FBFFFD2B;
+3eff : 34010001;
+3f00 : FBFFFC40;
+3f01 : 340200A0;
+3f02 : 34010001;
+3f03 : FBFFFC8E;
+3f04 : 34020000;
+3f05 : 34010001;
+3f06 : FBFFFC8B;
+3f07 : 34010001;
+3f08 : FBFFFC4E;
+3f09 : 340200A1;
+3f0a : 34010001;
+3f0b : FBFFFC86;
+3f0c : 378E003F;
+3f0d : B9C01000;
+3f0e : 34030001;
+3f0f : 34010001;
+3f10 : FBFFFCC8;
+3f11 : 34010001;
+3f12 : FBFFFC64;
+3f13 : 34010001;
+3f14 : 438D003F;
+3f15 : FBFFFC2B;
+3f16 : 34010001;
+3f17 : 340200A1;
+3f18 : FBFFFC79;
+3f19 : 340BFFD9;
+3f1a : 3410000F;
+3f1b : 340F0017;
+3f1c : 34010001;
+3f1d : B9C01000;
+3f1e : 34030000;
+3f1f : FBFFFCB9;
+3f20 : 4381003F;
+3f21 : B5A16800;
+3f22 : 21AD00FF;
+3f23 : 55700003;
+3f24 : B56C1000;
+3f25 : 30410000;
+3f26 : 356B0001;
+3f27 : 5D6FFFF5;
+3f28 : 3782003F;
+3f29 : 34010001;
+3f2a : 34030001;
+3f2b : FBFFFCAD;
+3f2c : 34010001;
+3f2d : FBFFFC49;
+3f2e : 4382003F;
+3f2f : 3401FFFB;
+3f30 : 5C4D001F;
+3f31 : 378B0020;
+3f32 : 78020001;
+3f33 : 3842BFBC;
+3f34 : 34030010;
+3f35 : B9600800;
+3f36 : F8001A50;
+3f37 : B9600800;
+3f38 : F8000716;
+3f39 : 78020001;
+3f3a : 3842BF48;
+3f3b : 5C200005;
+3f3c : 34010001;
+3f3d : 58410000;
+3f3e : 3401FFFA;
+3f3f : E0000010;
+3f40 : 2B830034;
+3f41 : 78010001;
+3f42 : 3821BF40;
+3f43 : 58230000;
+3f44 : 2B830038;
+3f45 : 78010001;
+3f46 : 3821BF44;
+3f47 : 58230000;
+3f48 : 2B830030;
+3f49 : 78010001;
+3f4a : 3821A808;
+3f4b : 58230000;
+3f4c : 34010002;
+3f4d : 58410000;
+3f4e : 34010000;
+3f4f : 2B9D0004;
+3f50 : 2B8B001C;
+3f51 : 2B8C0018;
+3f52 : 2B8D0014;
+3f53 : 2B8E0010;
+3f54 : 2B8F000C;
+3f55 : 2B900008;
+3f56 : 379C003C;
+3f57 : C3A00000;
+3f58 : 379CFFE0;
+3f59 : 5B9B0008;
+3f5a : 341B0020;
+3f5b : B77CD800;
+3f5c : 5B8B0020;
+3f5d : 5B8C001C;
+3f5e : 5B8D0018;
+3f5f : 5B8E0014;
+3f60 : 5B8F0010;
+3f61 : 5B90000C;
+3f62 : 5B9D0004;
+3f63 : 780B0001;
+3f64 : 780C0001;
+3f65 : BB807800;
+3f66 : 34020001;
+3f67 : 396BA8D0;
+3f68 : 398C89B8;
+3f69 : E0000012;
+3f6a : BB808000;
+3f6b : 379CFFE4;
+3f6c : 378E000B;
+3f6d : 01CE0003;
+3f6e : 35A2002C;
+3f6f : 3DCE0003;
+3f70 : 34030014;
+3f71 : B9C00800;
+3f72 : F8001864;
+3f73 : 31C00013;
+3f74 : 29A20020;
+3f75 : 29630074;
+3f76 : B9800800;
+3f77 : B9C02000;
+3f78 : FBFFF8A6;
+3f79 : 34020000;
+3f7a : BA00E000;
+3f7b : B9600800;
+3f7c : F800161E;
+3f7d : B8206800;
+3f7e : 5C20FFEC;
+3f7f : B9E0E000;
+3f80 : 2B9D0004;
+3f81 : 2B8B0020;
+3f82 : 2B8C001C;
+3f83 : 2B8D0018;
+3f84 : 2B8E0014;
+3f85 : 2B8F0010;
+3f86 : 2B90000C;
+3f87 : 2B9B0008;
+3f88 : 379C0020;
+3f89 : C3A00000;
+3f8a : 379CFFEC;
+3f8b : 5B8B0014;
+3f8c : 5B8C0010;
+3f8d : 5B8D000C;
+3f8e : 5B8E0008;
+3f8f : 5B9D0004;
+3f90 : 780B0001;
+3f91 : 396BBF4C;
+3f92 : 29610000;
+3f93 : 5C200007;
+3f94 : 78010001;
+3f95 : 3821A8D0;
+3f96 : F80015E2;
+3f97 : 29610000;
+3f98 : 34210001;
+3f99 : 59610000;
+3f9a : 780B0001;
+3f9b : 396BA810;
+3f9c : 780C0001;
+3f9d : 356D00C0;
+3f9e : 398CA8D0;
+3f9f : E0000009;
+3fa0 : 29620008;
+3fa1 : 2963000C;
+3fa2 : 29640010;
+3fa3 : 296E0000;
+3fa4 : B9800800;
+3fa5 : F80016AA;
+3fa6 : 59C10000;
+3fa7 : 356B0018;
+3fa8 : 5D6DFFF8;
+3fa9 : 2B9D0004;
+3faa : 2B8B0014;
+3fab : 2B8C0010;
+3fac : 2B8D000C;
+3fad : 2B8E0008;
+3fae : 379C0014;
+3faf : C3A00000;
+3fb0 : 379CFFF4;
+3fb1 : 5B8B000C;
+3fb2 : 5B8C0008;
+3fb3 : 5B9D0004;
+3fb4 : 34020000;
+3fb5 : B8206000;
+3fb6 : F80007A4;
+3fb7 : B8205800;
+3fb8 : 4C200005;
+3fb9 : 78010001;
+3fba : 382189E0;
+3fbb : B9601000;
+3fbc : E0000004;
+3fbd : 29820000;
+3fbe : 78010001;
+3fbf : 38218A0C;
+3fc0 : FBFFF85E;
+3fc1 : B9600800;
+3fc2 : 2B9D0004;
+3fc3 : 2B8B000C;
+3fc4 : 2B8C0008;
+3fc5 : 379C000C;
+3fc6 : C3A00000;
+3fc7 : 379CFFFC;
+3fc8 : 5B9D0004;
+3fc9 : 78010001;
+3fca : 3821BF50;
+3fcb : 58200000;
+3fcc : 78020001;
+3fcd : 78010001;
+3fce : 3821BF64;
+3fcf : 3842BF54;
+3fd0 : 3403FFFF;
+3fd1 : 58230000;
+3fd2 : 58430000;
+3fd3 : 58200008;
+3fd4 : 58400008;
+3fd5 : 58400004;
+3fd6 : 58200004;
+3fd7 : 5840000C;
+3fd8 : 5820000C;
+3fd9 : 34020000;
+3fda : 34010000;
+3fdb : F800139F;
+3fdc : 2B9D0004;
+3fdd : 379C0004;
+3fde : C3A00000;
+3fdf : 379CFFF4;
+3fe0 : 5B8B000C;
+3fe1 : 5B8C0008;
+3fe2 : 5B9D0004;
+3fe3 : B8206000;
+3fe4 : 34010000;
+3fe5 : F800144C;
+3fe6 : B8205800;
+3fe7 : 34020000;
+3fe8 : 5C200081;
+3fe9 : FBFFFA19;
+3fea : 78030001;
+3feb : 3863BF54;
+3fec : 28650008;
+3fed : 78020001;
+3fee : 3842BF50;
+3fef : B8202000;
+3ff0 : 28420000;
+3ff1 : 44AB0004;
+3ff2 : 34010001;
+3ff3 : 5CA1001D;
+3ff4 : E0000010;
+3ff5 : 34010001;
+3ff6 : 44810005;
+3ff7 : 28610004;
+3ff8 : 34210001;
+3ff9 : 58610004;
+3ffa : E0000002;
+3ffb : 58600004;
+3ffc : 78030001;
+3ffd : 3863BF54;
+3ffe : 28650004;
+3fff : 34010004;
+4000 : 4C250010;
+4001 : 34010001;
+4002 : 58610008;
+4003 : E0000002;
+4004 : 44850003;
+4005 : 58600004;
+4006 : E000000A;
+4007 : 28650004;
+4008 : 34010004;
+4009 : 34A50001;
+400a : 58650004;
+400b : 4C250005;
+400c : 34010002;
+400d : 58610008;
+400e : 3441FE0C;
+400f : 5861000C;
+4010 : 78030001;
+4011 : 3863BF64;
+4012 : 28650008;
+4013 : 44A00004;
+4014 : 34010001;
+4015 : 5CA1001C;
+4016 : E000000F;
+4017 : 44850005;
+4018 : 28610004;
+4019 : 34210001;
+401a : 58610004;
+401b : E0000002;
+401c : 58600004;
+401d : 78030001;
+401e : 3863BF64;
+401f : 28640004;
+4020 : 34010004;
+4021 : 4C240010;
+4022 : 34010001;
+4023 : 58610008;
+4024 : E0000002;
+4025 : 44800003;
+4026 : 58600004;
+4027 : E000000A;
+4028 : 28640004;
+4029 : 34010004;
+402a : 34840001;
+402b : 58640004;
+402c : 4C240005;
+402d : 34010002;
+402e : 58610008;
+402f : 3441FE0C;
+4030 : 5861000C;
+4031 : 3401251B;
+4032 : 4C220030;
+4033 : 78020001;
+4034 : 3842BF54;
+4035 : 28440008;
+4036 : 34010002;
+4037 : 3402FFFF;
+4038 : 5C810031;
+4039 : 78030001;
+403a : 3863BF64;
+403b : 28610008;
+403c : 5C24002D;
+403d : 2862000C;
+403e : 34011F3F;
+403f : E0000002;
+4040 : 3442E0C0;
+4041 : 4841FFFF;
+4042 : 78030001;
+4043 : 3863BF64;
+4044 : 5862000C;
+4045 : 78030001;
+4046 : 3863BF54;
+4047 : 2863000C;
+4048 : 34011F3F;
+4049 : E0000002;
+404a : 3463E0C0;
+404b : 4861FFFF;
+404c : 78040001;
+404d : 3884BF54;
+404e : 5883000C;
+404f : 4C620003;
+4050 : 3444F060;
+4051 : E0000004;
+4052 : 34040000;
+4053 : 4C430002;
+4054 : 34440FA0;
+4055 : B4831800;
+4056 : 0062001F;
+4057 : B4431800;
+4058 : 14620001;
+4059 : 4C400003;
+405a : 34421F40;
+405b : E0000004;
+405c : 34011F3F;
+405d : 4C220002;
+405e : 3442E0C0;
+405f : 59820000;
+4060 : 34020001;
+4061 : E0000008;
+4062 : 78010001;
+4063 : 34420064;
+4064 : 3821BF50;
+4065 : 58220000;
+4066 : 34010000;
+4067 : F8001313;
+4068 : 34020000;
+4069 : B8400800;
+406a : 2B9D0004;
+406b : 2B8B000C;
+406c : 2B8C0008;
+406d : 379C000C;
+406e : C3A00000;
+406f : 379CFFF8;
+4070 : 5B8B0008;
+4071 : 5B9D0004;
+4072 : 78020001;
+4073 : B8205800;
+4074 : B8400800;
+4075 : 38218A2C;
+4076 : FBFFF7A8;
+4077 : E0000003;
+4078 : 34010064;
+4079 : FBFFFD96;
+407a : 34010000;
+407b : FBFFF92F;
+407c : 4420FFFC;
+407d : 34010003;
+407e : 34020000;
+407f : 34030001;
+4080 : F800121F;
+4081 : 78020001;
+4082 : B8400800;
+4083 : 38218A44;
+4084 : FBFFF79A;
+4085 : E0000003;
+4086 : 34010064;
+4087 : FBFFFD88;
+4088 : 34010000;
+4089 : F80012E0;
+408a : 4420FFFC;
+408b : 78020001;
+408c : B8400800;
+408d : 38218798;
+408e : FBFFF790;
+408f : 78020001;
+4090 : B8400800;
+4091 : 38218A54;
+4092 : FBFFF78C;
+4093 : FBFFFF34;
+4094 : B9600800;
+4095 : FBFFFF4A;
+4096 : 4420FFFE;
+4097 : 2B9D0004;
+4098 : 2B8B0008;
+4099 : 379C0008;
+409a : C3A00000;
+409b : 379CFFEC;
+409c : 5B8B0010;
+409d : 5B8C000C;
+409e : 5B8D0008;
+409f : 5B9D0004;
+40a0 : B8405800;
+40a1 : 34020003;
+40a2 : 340C0000;
+40a3 : 340D03E9;
+40a4 : 5C220022;
+40a5 : E0000005;
+40a6 : 458D0027;
+40a7 : FBFFF903;
+40a8 : 44200025;
+40a9 : 358C0001;
+40aa : B9600800;
+40ab : FBFFFF34;
+40ac : 4420FFFA;
+40ad : 4C200002;
+40ae : E0000018;
+40af : 37810014;
+40b0 : 34020000;
+40b1 : F80006A9;
+40b2 : 48010007;
+40b3 : 29620000;
+40b4 : 2B810014;
+40b5 : 3443FF38;
+40b6 : 54610003;
+40b7 : 344200C8;
+40b8 : 5041001D;
+40b9 : 34020001;
+40ba : B9600800;
+40bb : F800069F;
+40bc : 78030001;
+40bd : 29620000;
+40be : 38638A7C;
+40bf : 4C200003;
+40c0 : 78030001;
+40c1 : 38638A74;
+40c2 : 78010001;
+40c3 : 38218A84;
+40c4 : FBFFF75A;
+40c5 : E0000010;
+40c6 : B9600800;
+40c7 : FBFFFEE9;
+40c8 : B8206000;
+40c9 : 48010005;
+40ca : 29610000;
+40cb : FBFFEC64;
+40cc : E0000002;
+40cd : 340CFFFF;
+40ce : B9800800;
+40cf : 2B9D0004;
+40d0 : 2B8B0010;
+40d1 : 2B8C000C;
+40d2 : 2B8D0008;
+40d3 : 379C0014;
+40d4 : C3A00000;
+40d5 : 340C0000;
+40d6 : E3FFFFF4;
+40d7 : 34000000;
+40d8 : 34000000;
+40d9 : 34000000;
+40da : 34000000;
+40db : 34000000;
+40dc : 34000000;
+40dd : C3A00000;
+40de : 379CFFF0;
+40df : 5B8B0010;
+40e0 : 5B8C000C;
+40e1 : 5B8D0008;
+40e2 : 5B9D0004;
+40e3 : B8201800;
+40e4 : B8405800;
+40e5 : 34010800;
+40e6 : B8601000;
+40e7 : 780C0001;
+40e8 : FBFFFA49;
+40e9 : 340D0008;
+40ea : FBFFFFED;
+40eb : 398CC2AC;
+40ec : 34010400;
+40ed : 34020000;
+40ee : FBFFFA43;
+40ef : B1600800;
+40f0 : 4C200004;
+40f1 : 34011000;
+40f2 : 34020001;
+40f3 : E0000003;
+40f4 : 34011000;
+40f5 : 34020000;
+40f6 : FBFFFA3B;
+40f7 : FBFFFFE0;
+40f8 : 34010400;
+40f9 : 34020001;
+40fa : FBFFFA37;
+40fb : 29810000;
+40fc : 3D6B0001;
+40fd : 35ADFFFF;
+40fe : 28210004;
+40ff : 20212000;
+4100 : 7C210000;
+4101 : B9615800;
+4102 : 216B00FF;
+4103 : FBFFFFD4;
+4104 : 5DA0FFE8;
+4105 : 34010400;
+4106 : 34020000;
+4107 : FBFFFA2A;
+4108 : B9600800;
+4109 : 2B9D0004;
+410a : 2B8B0010;
+410b : 2B8C000C;
+410c : 2B8D0008;
+410d : 379C0010;
+410e : C3A00000;
+410f : 379CFFFC;
+4110 : 5B9D0004;
+4111 : 34010800;
+4112 : 34020001;
+4113 : FBFFFA1E;
+4114 : 34010400;
+4115 : 34020000;
+4116 : FBFFFA1B;
+4117 : 34011000;
+4118 : 34020000;
+4119 : FBFFFA18;
+411a : 2B9D0004;
+411b : 379C0004;
+411c : C3A00000;
+411d : 379CFFF0;
+411e : 5B8B0010;
+411f : 5B8C000C;
+4120 : 5B8D0008;
+4121 : 5B9D0004;
+4122 : B8205800;
+4123 : B8406800;
+4124 : 34010001;
+4125 : 34020000;
+4126 : B8606000;
+4127 : FBFFFFB7;
+4128 : 3402000B;
+4129 : 34010000;
+412a : FBFFFFB4;
+412b : 01630010;
+412c : 34010000;
+412d : 206200FF;
+412e : FBFFFFB0;
+412f : 2163FF00;
+4130 : 00620008;
+4131 : 34010000;
+4132 : FBFFFFAC;
+4133 : 216200FF;
+4134 : 34010000;
+4135 : FBFFFFA9;
+4136 : 34010000;
+4137 : 34020000;
+4138 : FBFFFFA6;
+4139 : 340B0000;
+413a : E0000007;
+413b : 34020000;
+413c : 34010000;
+413d : FBFFFFA1;
+413e : B5AB1000;
+413f : 30410000;
+4140 : 356B0001;
+4141 : 498BFFFA;
+4142 : 34020000;
+4143 : 34010001;
+4144 : FBFFFF9A;
+4145 : B9800800;
+4146 : 2B9D0004;
+4147 : 2B8B0010;
+4148 : 2B8C000C;
+4149 : 2B8D0008;
+414a : 379C0010;
+414b : C3A00000;
+414c : 379CFFF8;
+414d : 5B8B0008;
+414e : 5B9D0004;
+414f : 34020000;
+4150 : B8205800;
+4151 : 34010001;
+4152 : FBFFFF8C;
+4153 : 34020006;
+4154 : 34010000;
+4155 : FBFFFF89;
+4156 : 34020000;
+4157 : 34010001;
+4158 : FBFFFF86;
+4159 : 340200D8;
+415a : 34010000;
+415b : FBFFFF83;
+415c : 01620010;
+415d : 34010000;
+415e : 204200FF;
+415f : FBFFFF7F;
+4160 : 2162FF00;
+4161 : 00420008;
+4162 : 34010000;
+4163 : FBFFFF7B;
+4164 : 216200FF;
+4165 : 34010000;
+4166 : FBFFFF78;
+4167 : 34020000;
+4168 : 34010001;
+4169 : FBFFFF75;
+416a : 2B9D0004;
+416b : 2B8B0008;
+416c : 379C0008;
+416d : C3A00000;
+416e : 379CFFF8;
+416f : 5B8B0008;
+4170 : 5B9D0004;
+4171 : 34020000;
+4172 : 34010001;
+4173 : FBFFFF6B;
+4174 : 34020005;
+4175 : 34010000;
+4176 : FBFFFF68;
+4177 : 34020000;
+4178 : 34010000;
+4179 : FBFFFF65;
+417a : B8205800;
+417b : 34020000;
+417c : 34010001;
+417d : FBFFFF61;
+417e : B9600800;
+417f : 2B9D0004;
+4180 : 2B8B0008;
+4181 : 379C0008;
+4182 : C3A00000;
+4183 : 379CFFE8;
+4184 : 5B8B0018;
+4185 : 5B8C0014;
+4186 : 5B8D0010;
+4187 : 5B8E000C;
+4188 : 5B8F0008;
+4189 : 5B9D0004;
+418a : 780B0001;
+418b : 396BBFA4;
+418c : 296C0008;
+418d : B8406800;
+418e : B8207800;
+418f : B8400800;
+4190 : B9801000;
+4191 : F80015F4;
+4192 : 7C2E0000;
+4193 : B9801000;
+4194 : B9A00800;
+4195 : F80015E0;
+4196 : B5C17000;
+4197 : 340C0000;
+4198 : E0000009;
+4199 : 29620008;
+419a : 89821000;
+419b : B44F0800;
+419c : FBFFFFB0;
+419d : FBFFFFD1;
+419e : 20220001;
+419f : 5C40FFFE;
+41a0 : 358C0001;
+41a1 : 49CCFFF8;
+41a2 : B9A00800;
+41a3 : 2B9D0004;
+41a4 : 2B8B0018;
+41a5 : 2B8C0014;
+41a6 : 2B8D0010;
+41a7 : 2B8E000C;
+41a8 : 2B8F0008;
+41a9 : 379C0018;
+41aa : C3A00000;
+41ab : 379CFFF0;
+41ac : 5B8B0010;
+41ad : 5B8C000C;
+41ae : 5B8D0008;
+41af : 5B9D0004;
+41b0 : B8205800;
+41b1 : B8406800;
+41b2 : 34010001;
+41b3 : 34020000;
+41b4 : B8606000;
+41b5 : FBFFFF29;
+41b6 : 34020006;
+41b7 : 34010000;
+41b8 : FBFFFF26;
+41b9 : 34020000;
+41ba : 34010001;
+41bb : FBFFFF23;
+41bc : 34020002;
+41bd : 34010000;
+41be : FBFFFF20;
+41bf : 01630010;
+41c0 : 34010000;
+41c1 : 206200FF;
+41c2 : FBFFFF1C;
+41c3 : 2163FF00;
+41c4 : 00620008;
+41c5 : 34010000;
+41c6 : FBFFFF18;
+41c7 : 216200FF;
+41c8 : 34010000;
+41c9 : FBFFFF15;
+41ca : 340B0000;
+41cb : E0000006;
+41cc : B5AB1000;
+41cd : 40420000;
+41ce : 34010000;
+41cf : 356B0001;
+41d0 : FBFFFF0E;
+41d1 : 498BFFFB;
+41d2 : 34010001;
+41d3 : 34020000;
+41d4 : FBFFFF0A;
+41d5 : FBFFFF99;
+41d6 : 20210001;
+41d7 : 5C20FFFE;
+41d8 : B9800800;
+41d9 : 2B9D0004;
+41da : 2B8B0010;
+41db : 2B8C000C;
+41dc : 2B8D0008;
+41dd : 379C0010;
+41de : C3A00000;
+41df : 379CFFF4;
+41e0 : 5B8B000C;
+41e1 : 5B8C0008;
+41e2 : 5B9D0004;
+41e3 : 780B0001;
+41e4 : 780C0001;
+41e5 : 396BAEE0;
+41e6 : 398CAEEC;
+41e7 : E0000005;
+41e8 : 29620000;
+41e9 : B9600800;
+41ea : 356B000C;
+41eb : D8400000;
+41ec : 558BFFFC;
+41ed : 2B9D0004;
+41ee : 2B8B000C;
+41ef : 2B8C0008;
+41f0 : 379C000C;
+41f1 : C3A00000;
+41f2 : 379CFFF0;
+41f3 : 5B8B0010;
+41f4 : 5B8C000C;
+41f5 : 5B8D0008;
+41f6 : 5B9D0004;
+41f7 : 780B0001;
+41f8 : 780D0001;
+41f9 : 340C0000;
+41fa : 396BAEE0;
+41fb : 39ADAEEC;
+41fc : E0000006;
+41fd : 29620000;
+41fe : B9600800;
+41ff : 356B000C;
+4200 : D8400000;
+4201 : B5816000;
+4202 : 55ABFFFB;
+4203 : 69810000;
+4204 : 2B9D0004;
+4205 : 2B8B0010;
+4206 : 2B8C000C;
+4207 : 2B8D0008;
+4208 : 379C0010;
+4209 : C3A00000;
+420a : 379CFFEC;
+420b : 5B8B0014;
+420c : 5B8C0010;
+420d : 5B8D000C;
+420e : 5B8E0008;
+420f : 5B9D0004;
+4210 : 780B0001;
+4211 : 780D0001;
+4212 : B8207000;
+4213 : 396BAEE0;
+4214 : 39ADAEEC;
+4215 : E000000C;
+4216 : 296C0008;
+4217 : E0000007;
+4218 : B9C01000;
+4219 : F800169D;
+421a : 5C200003;
+421b : 29810004;
+421c : E0000007;
+421d : 358C0008;
+421e : 29810000;
+421f : 5C20FFF9;
+4220 : 356B000C;
+4221 : 55ABFFF5;
+4222 : 78018000;
+4223 : 2B9D0004;
+4224 : 2B8B0014;
+4225 : 2B8C0010;
+4226 : 2B8D000C;
+4227 : 2B8E0008;
+4228 : 379C0014;
+4229 : C3A00000;
+422a : B8201800;
+422b : 5C200008;
+422c : 78010001;
+422d : 78020001;
+422e : 3821AEE0;
+422f : 3842AEEC;
+4230 : 44220003;
+4231 : 28210008;
+4232 : C3A00000;
+4233 : 28620008;
+4234 : 34610008;
+4235 : 5C400016;
+4236 : 78020001;
+4237 : 78040001;
+4238 : 3842AEE0;
+4239 : 3884AEEC;
+423a : E000000F;
+423b : 28410008;
+423c : E000000A;
+423d : 5C230008;
+423e : 78030001;
+423f : 3442000C;
+4240 : 3863AEEC;
+4241 : 34010000;
+4242 : 50430009;
+4243 : 28410008;
+4244 : C3A00000;
+4245 : 34210008;
+4246 : 28250000;
+4247 : 5CA0FFF6;
+4248 : 3442000C;
+4249 : 5482FFF2;
+424a : 34010000;
+424b : C3A00000;
+424c : 379CFFC8;
+424d : 5B8B0038;
+424e : 5B8C0034;
+424f : 5B8D0030;
+4250 : 5B8E002C;
+4251 : 5B8F0028;
+4252 : 5B900024;
+4253 : 5B910020;
+4254 : 5B92001C;
+4255 : 5B930018;
+4256 : 5B940014;
+4257 : 5B950010;
+4258 : 5B96000C;
+4259 : 5B970008;
+425a : 5B9D0004;
+425b : B8207000;
+425c : 34010000;
+425d : B840B800;
+425e : 78140001;
+425f : FBFFFFCB;
+4260 : 78130001;
+4261 : 78120001;
+4262 : 78110001;
+4263 : 78100001;
+4264 : 780F0001;
+4265 : B8206800;
+4266 : 34150000;
+4267 : 340B0000;
+4268 : 3A9480E0;
+4269 : 3A737C58;
+426a : 3A528AB0;
+426b : 78168000;
+426c : 3A3187D0;
+426d : 3A107948;
+426e : 39EF87C8;
+426f : E0000028;
+4270 : 3562000F;
+4271 : B5CB0800;
+4272 : 4AE20006;
+4273 : 78020001;
+4274 : 38428AA8;
+4275 : FBFFF59B;
+4276 : B5615800;
+4277 : E0000021;
+4278 : 29AC0004;
+4279 : BA801800;
+427a : 46A00002;
+427b : BA601800;
+427c : 29A40000;
+427d : BA401000;
+427e : FBFFF592;
+427f : B42B5800;
+4280 : 5D960005;
+4281 : B5CB0800;
+4282 : B9E01000;
+4283 : FBFFF58D;
+4284 : E000000E;
+4285 : 4D800006;
+4286 : B5CB0800;
+4287 : BA001000;
+4288 : FBFFF588;
+4289 : C80C6000;
+428a : B5615800;
+428b : 2184FFFF;
+428c : 08842710;
+428d : 15830010;
+428e : B5CB0800;
+428f : 00840010;
+4290 : BA201000;
+4291 : FBFFF57F;
+4292 : B42B5800;
+4293 : B9A00800;
+4294 : FBFFFF96;
+4295 : B8206800;
+4296 : 36B50001;
+4297 : 5DA0FFD9;
+4298 : B9600800;
+4299 : 2B9D0004;
+429a : 2B8B0038;
+429b : 2B8C0034;
+429c : 2B8D0030;
+429d : 2B8E002C;
+429e : 2B8F0028;
+429f : 2B900024;
+42a0 : 2B910020;
+42a1 : 2B92001C;
+42a2 : 2B930018;
+42a3 : 2B940014;
+42a4 : 2B950010;
+42a5 : 2B96000C;
+42a6 : 2B970008;
+42a7 : 379C0038;
+42a8 : C3A00000;
+42a9 : 379CFFA8;
+42aa : 5B8B0008;
+42ab : 5B9D0004;
+42ac : 378B000C;
+42ad : B9600800;
+42ae : 34020050;
+42af : FBFFFF9D;
+42b0 : 78010001;
+42b1 : B9601000;
+42b2 : 382179E8;
+42b3 : FBFFF56B;
+42b4 : 34010000;
+42b5 : 2B9D0004;
+42b6 : 2B8B0008;
+42b7 : 379C0058;
+42b8 : C3A00000;
+42b9 : 78010001;
+42ba : 3821BFD4;
+42bb : 28210000;
+42bc : 28220008;
+42bd : 2821000C;
+42be : 202100FF;
+42bf : C3A00000;
+42c0 : 78010001;
+42c1 : 78030001;
+42c2 : 38638F34;
+42c3 : 3821BFD4;
+42c4 : 28210000;
+42c5 : 28620000;
+42c6 : 78040001;
+42c7 : 38848F38;
+42c8 : 58220000;
+42c9 : 58200014;
+42ca : 28830000;
+42cb : 58200018;
+42cc : 58200010;
+42cd : 58230000;
+42ce : 58220000;
+42cf : 5820001C;
+42d0 : C3A00000;
+42d1 : 78040001;
+42d2 : 34050002;
+42d3 : 3884BFD4;
+42d4 : 5C25000E;
+42d5 : 28810000;
+42d6 : 1444001F;
+42d7 : 20840007;
+42d8 : B4831800;
+42d9 : F4832000;
+42da : 00630003;
+42db : B4821000;
+42dc : 3C42001D;
+42dd : 58200014;
+42de : 58200018;
+42df : B8431800;
+42e0 : 58230010;
+42e1 : E0000006;
+42e2 : 28810000;
+42e3 : 204200FF;
+42e4 : 58230014;
+42e5 : 58220018;
+42e6 : 58200010;
+42e7 : 78010001;
+42e8 : 3821BFD4;
+42e9 : 28210000;
+42ea : 28220000;
+42eb : 38420004;
+42ec : 58220000;
+42ed : 34010000;
+42ee : C3A00000;
+42ef : 78050001;
+42f0 : 38A5BFD4;
+42f1 : 28A50000;
+42f2 : 202100FF;
+42f3 : 00630003;
+42f4 : 58A20014;
+42f5 : 58A10018;
+42f6 : 58A30010;
+42f7 : 34010003;
+42f8 : 5C810007;
+42f9 : 28A20000;
+42fa : 3401FFF3;
+42fb : A0410800;
+42fc : 38210008;
+42fd : 58A10000;
+42fe : C3A00000;
+42ff : 34010001;
+4300 : 5C810007;
+4301 : 28A2001C;
+4302 : 3401FFE7;
+4303 : A0410800;
+4304 : 38210010;
+4305 : 58A1001C;
+4306 : C3A00000;
+4307 : 34010002;
+4308 : 5C810006;
+4309 : 28A2001C;
+430a : 3401FFC7;
+430b : A0410800;
+430c : 38210020;
+430d : 58A1001C;
+430e : C3A00000;
+430f : 379CFFE0;
+4310 : 5B8B0020;
+4311 : 5B8C001C;
+4312 : 5B8D0018;
+4313 : 5B8E0014;
+4314 : 5B8F0010;
+4315 : 5B90000C;
+4316 : 5B910008;
+4317 : 5B9D0004;
+4318 : B8206000;
+4319 : 78010001;
+431a : 38218F28;
+431b : 282F0000;
+431c : 780B0001;
+431d : B8406800;
+431e : 396BBFD4;
+431f : FBFFFF9A;
+4320 : B8208800;
+4321 : 29610000;
+4322 : B8408000;
+4323 : 282E0004;
+4324 : A1CF7000;
+4325 : FBFFFF94;
+4326 : 5C31FFF9;
+4327 : 5C50FFF8;
+4328 : 45800003;
+4329 : 59810000;
+432a : 59820004;
+432b : 45A00003;
+432c : 3DC10003;
+432d : 59A10000;
+432e : 2B9D0004;
+432f : 2B8B0020;
+4330 : 2B8C001C;
+4331 : 2B8D0018;
+4332 : 2B8E0014;
+4333 : 2B8F0010;
+4334 : 2B90000C;
+4335 : 2B910008;
+4336 : 379C0020;
+4337 : C3A00000;
+4338 : 78010001;
+4339 : 3821BFD4;
+433a : 28210000;
+433b : 28210000;
+433c : 20210004;
+433d : 64210000;
+433e : C3A00000;
+433f : 78020001;
+4340 : 3842BFD4;
+4341 : 28420000;
+4342 : 2843001C;
+4343 : 44200003;
+4344 : 3863000C;
+4345 : E0000003;
+4346 : 3401FFF3;
+4347 : A0611800;
+4348 : 5843001C;
+4349 : 34010000;
+434a : C3A00000;
+434b : 78020001;
+434c : 3842BFD4;
+434d : 28420000;
+434e : 2843001C;
+434f : 44200003;
+4350 : 38630002;
+4351 : E0000003;
+4352 : 3401FFFD;
+4353 : A0611800;
+4354 : 5843001C;
+4355 : 34010000;
+4356 : C3A00000;
+4357 : 379CFFE8;
+4358 : 5B8B0018;
+4359 : 5B8C0014;
+435a : 5B8D0010;
+435b : 5B8E000C;
+435c : 5B8F0008;
+435d : 5B9D0004;
+435e : 282B0004;
+435f : B8806800;
+4360 : B8607800;
+4361 : 41610003;
+4362 : B8406000;
+4363 : 35AEFFFF;
+4364 : FBFFF7DC;
+4365 : 29620004;
+4366 : 41610003;
+4367 : 3C420001;
+4368 : 204200FE;
+4369 : FBFFF828;
+436a : 15820008;
+436b : 41610003;
+436c : 204200FF;
+436d : FBFFF824;
+436e : 41610003;
+436f : 218200FF;
+4370 : 340C0000;
+4371 : FBFFF820;
+4372 : 41610003;
+4373 : FBFFF7E3;
+4374 : 29620004;
+4375 : 41610003;
+4376 : 3C420001;
+4377 : 38420001;
+4378 : 204200FF;
+4379 : FBFFF818;
+437a : E0000005;
+437b : 20A100FF;
+437c : 34030000;
+437d : FBFFF85B;
+437e : 358C0001;
+437f : B5EC1000;
+4380 : 29650000;
+4381 : 49CCFFFA;
+4382 : 20A100FF;
+4383 : 34030001;
+4384 : FBFFF854;
+4385 : 41610003;
+4386 : FBFFF7F0;
+4387 : B9A00800;
+4388 : 2B9D0004;
+4389 : 2B8B0018;
+438a : 2B8C0014;
+438b : 2B8D0010;
+438c : 2B8E000C;
+438d : 2B8F0008;
+438e : 379C0018;
+438f : C3A00000;
+4390 : 379CFFE8;
+4391 : 5B8B0018;
+4392 : 5B8C0014;
+4393 : 5B8D0010;
+4394 : 5B8E000C;
+4395 : 5B8F0008;
+4396 : 5B9D0004;
+4397 : 340D0000;
+4398 : B8406000;
+4399 : B8607000;
+439a : 282B0004;
+439b : E0000021;
+439c : 41610003;
+439d : FBFFF7A3;
+439e : 29620004;
+439f : 41610003;
+43a0 : 3C420001;
+43a1 : 204200FE;
+43a2 : FBFFF7EF;
+43a3 : 15820008;
+43a4 : 41610003;
+43a5 : 204200FF;
+43a6 : FBFFF7EB;
+43a7 : 41610003;
+43a8 : 218200FF;
+43a9 : 358C0001;
+43aa : FBFFF7E7;
+43ab : 41610003;
+43ac : 340200FF;
+43ad : FBFFF7E4;
+43ae : 41610003;
+43af : FBFFF7C7;
+43b0 : 41610003;
+43b1 : FBFFF78F;
+43b2 : 29620004;
+43b3 : 41610003;
+43b4 : 3C420001;
+43b5 : 204200FE;
+43b6 : FBFFF7DB;
+43b7 : B8207800;
+43b8 : 41610003;
+43b9 : FBFFF7BD;
+43ba : 5DE0FFF6;
+43bb : 35AD0001;
+43bc : 49CDFFE0;
+43bd : B9C00800;
+43be : 2B9D0004;
+43bf : 2B8B0018;
+43c0 : 2B8C0014;
+43c1 : 2B8D0010;
+43c2 : 2B8E000C;
+43c3 : 2B8F0008;
+43c4 : 379C0018;
+43c5 : C3A00000;
+43c6 : 379CFFE4;
+43c7 : 5B8B001C;
+43c8 : 5B8C0018;
+43c9 : 5B8D0014;
+43ca : 5B8E0010;
+43cb : 5B8F000C;
+43cc : 5B900008;
+43cd : 5B9D0004;
+43ce : 340C0000;
+43cf : B8406800;
+43d0 : B8607800;
+43d1 : B8807000;
+43d2 : 282B0004;
+43d3 : E0000022;
+43d4 : 41610003;
+43d5 : FBFFF76B;
+43d6 : 29620004;
+43d7 : 41610003;
+43d8 : 3C420001;
+43d9 : 204200FE;
+43da : FBFFF7B7;
+43db : 15A20008;
+43dc : 41610003;
+43dd : 204200FF;
+43de : FBFFF7B3;
+43df : 41610003;
+43e0 : 21A200FF;
+43e1 : 35AD0001;
+43e2 : FBFFF7AF;
+43e3 : B5EC1000;
+43e4 : 41610003;
+43e5 : 40420000;
+43e6 : FBFFF7AB;
+43e7 : 41610003;
+43e8 : FBFFF78E;
+43e9 : 41610003;
+43ea : FBFFF756;
+43eb : 29620004;
+43ec : 41610003;
+43ed : 3C420001;
+43ee : 204200FE;
+43ef : FBFFF7A2;
+43f0 : B8208000;
+43f1 : 41610003;
+43f2 : FBFFF784;
+43f3 : 5E00FFF6;
+43f4 : 358C0001;
+43f5 : 49CCFFDF;
+43f6 : B9C00800;
+43f7 : 2B9D0004;
+43f8 : 2B8B001C;
+43f9 : 2B8C0018;
+43fa : 2B8D0014;
+43fb : 2B8E0010;
+43fc : 2B8F000C;
+43fd : 2B900008;
+43fe : 379C001C;
+43ff : C3A00000;
+4400 : 379CFFFC;
+4401 : 5B9D0004;
+4402 : B8400800;
+4403 : B8601000;
+4404 : FBFFFD7F;
+4405 : 2B9D0004;
+4406 : 379C0004;
+4407 : C3A00000;
+4408 : 379CFFFC;
+4409 : 5B9D0004;
+440a : B8400800;
+440b : B8601000;
+440c : B8801800;
+440d : FBFFFD9E;
+440e : 2B9D0004;
+440f : 379C0004;
+4410 : C3A00000;
+4411 : 379CFFFC;
+4412 : 5B9D0004;
+4413 : 28210004;
+4414 : F8000958;
+4415 : 2B9D0004;
+4416 : 379C0004;
+4417 : C3A00000;
+4418 : 379CFFFC;
+4419 : 5B9D0004;
+441a : 28210004;
+441b : F8000979;
+441c : 2B9D0004;
+441d : 379C0004;
+441e : C3A00000;
+441f : 379CFFFC;
+4420 : 5B9D0004;
+4421 : 28210004;
+4422 : F800095E;
+4423 : 2B9D0004;
+4424 : 379C0004;
+4425 : C3A00000;
+4426 : 379CFFBC;
+4427 : 5B8B0024;
+4428 : 5B8C0020;
+4429 : 5B8D001C;
+442a : 5B8E0018;
+442b : 5B8F0014;
+442c : 5B900010;
+442d : 5B91000C;
+442e : 5B920008;
+442f : 5B9D0004;
+4430 : B8206000;
+4431 : 34010003;
+4432 : B8406800;
+4433 : B8607000;
+4434 : 340BFFFC;
+4435 : 54610072;
+4436 : 78030001;
+4437 : 78040001;
+4438 : 78050001;
+4439 : 38638F3C;
+443a : 38848F40;
+443b : 38A58F44;
+443c : 28620000;
+443d : 780F0001;
+443e : 28830000;
+443f : 28A40000;
+4440 : 39EFA988;
+4441 : B9E00800;
+4442 : F80011DA;
+4443 : 340BFFFF;
+4444 : 48010063;
+4445 : 5DC00017;
+4446 : 78040001;
+4447 : 3884BF82;
+4448 : 30800000;
+4449 : 34020001;
+444a : 37900028;
+444b : 37920038;
+444c : 341100FF;
+444d : B8805800;
+444e : E0000006;
+444f : 40410000;
+4450 : 4431000C;
+4451 : 34420001;
+4452 : 5C52FFFD;
+4453 : E0000060;
+4454 : B9E00800;
+4455 : BA001800;
+4456 : 3404001D;
+4457 : F8001208;
+4458 : 3402001D;
+4459 : 5C220003;
+445a : BA001000;
+445b : E3FFFFF4;
+445c : 34010001;
+445d : 5DA10007;
+445e : 78010001;
+445f : 3821BF82;
+4460 : 40220000;
+4461 : 34010004;
+4462 : 340BFFFE;
+4463 : 44410041;
+4464 : B9CD0800;
+4465 : 5C200007;
+4466 : 78010001;
+4467 : 3821BF82;
+4468 : 40210000;
+4469 : 340B0000;
+446a : 442B003A;
+446b : E0000002;
+446c : 5DA0001A;
+446d : 09C2001D;
+446e : 78010001;
+446f : 3821A988;
+4470 : 34420001;
+4471 : B9801800;
+4472 : 3404001D;
+4473 : F80011EC;
+4474 : 3402001D;
+4475 : 340BFFFF;
+4476 : 5C22002E;
+4477 : B9800800;
+4478 : 3583001C;
+4479 : 34020000;
+447a : 40240000;
+447b : 34210001;
+447c : B4441000;
+447d : 204200FF;
+447e : 5C23FFFC;
+447f : 4181001C;
+4480 : 44220021;
+4481 : 78010001;
+4482 : 38218ACC;
+4483 : FBFFF39B;
+4484 : 340BFFFF;
+4485 : E000001F;
+4486 : 34010001;
+4487 : 5DA1001A;
+4488 : B9800800;
+4489 : 3583001C;
+448a : 34020000;
+448b : 40240000;
+448c : 34210001;
+448d : B4441000;
+448e : 204200FF;
+448f : 5C23FFFC;
+4490 : 780D0001;
+4491 : 3182001C;
+4492 : 39ADBF82;
+4493 : 41A20000;
+4494 : 78010001;
+4495 : 3821A988;
+4496 : 0842001D;
+4497 : B9801800;
+4498 : 3404001D;
+4499 : 34420001;
+449a : F80011F1;
+449b : 3402001D;
+449c : 340BFFFF;
+449d : 5C220007;
+449e : 41A10000;
+449f : 34210001;
+44a0 : 31A10000;
+44a1 : 78010001;
+44a2 : 3821BF82;
+44a3 : 402B0000;
+44a4 : 78010001;
+44a5 : 3821A988;
+44a6 : F80011A6;
+44a7 : B9600800;
+44a8 : 2B9D0004;
+44a9 : 2B8B0024;
+44aa : 2B8C0020;
+44ab : 2B8D001C;
+44ac : 2B8E0018;
+44ad : 2B8F0014;
+44ae : 2B900010;
+44af : 2B91000C;
+44b0 : 2B920008;
+44b1 : 379C0044;
+44b2 : C3A00000;
+44b3 : 41620000;
+44b4 : 34420001;
+44b5 : 204200FF;
+44b6 : 31620000;
+44b7 : 0842001D;
+44b8 : 34420001;
+44b9 : E3FFFF9B;
+44ba : 379CFFFC;
+44bb : 5B9D0004;
+44bc : B8400800;
+44bd : B8601000;
+44be : B8801800;
+44bf : FBFFFC5E;
+44c0 : 2B9D0004;
+44c1 : 379C0004;
+44c2 : C3A00000;
+44c3 : 379CFFD8;
+44c4 : 5B8B0024;
+44c5 : 5B8C0020;
+44c6 : 5B8D001C;
+44c7 : 5B8E0018;
+44c8 : 5B8F0014;
+44c9 : 5B900010;
+44ca : 5B91000C;
+44cb : 5B9B0008;
+44cc : 5B9D0004;
+44cd : B8207800;
+44ce : 78010001;
+44cf : 38218F48;
+44d0 : 282E0000;
+44d1 : 780B0001;
+44d2 : 5B800028;
+44d3 : 396B93F4;
+44d4 : 340C0000;
+44d5 : 340D0007;
+44d6 : 29610000;
+44d7 : 379B0028;
+44d8 : BB601000;
+44d9 : 34030004;
+44da : FBFFFC43;
+44db : 2B810028;
+44dc : 356B0004;
+44dd : 442E0003;
+44de : 358C0001;
+44df : 5D8DFFF7;
+44e0 : 78010001;
+44e1 : 38218F48;
+44e2 : 28220000;
+44e3 : 2B810028;
+44e4 : 4422000A;
+44e5 : 780D0001;
+44e6 : 39AD9410;
+44e7 : 780C0001;
+44e8 : B9A07000;
+44e9 : 340B0000;
+44ea : 398CC1F0;
+44eb : B8408800;
+44ec : 34100006;
+44ed : E000001B;
+44ee : 78010001;
+44ef : 3D8C0002;
+44f0 : 382193F4;
+44f1 : B42C0800;
+44f2 : 282B0000;
+44f3 : 78010001;
+44f4 : 38218AE8;
+44f5 : B9601000;
+44f6 : FBFFF328;
+44f7 : 78030001;
+44f8 : 3863BFA4;
+44f9 : 28620008;
+44fa : 78010001;
+44fb : 3821A988;
+44fc : 58220008;
+44fd : 78020001;
+44fe : 384212E8;
+44ff : 5822001C;
+4500 : 78020001;
+4501 : 38421020;
+4502 : 58220020;
+4503 : 78020001;
+4504 : 58200004;
+4505 : 582B000C;
+4506 : 38421000;
+4507 : E000002B;
+4508 : 29C20000;
+4509 : B9800800;
+450a : BB601800;
+450b : 34040004;
+450c : F8000860;
+450d : 34020004;
+450e : 5C220006;
+450f : 2B810028;
+4510 : 35CE0004;
+4511 : 44310003;
+4512 : 356B0001;
+4513 : 5D70FFF5;
+4514 : 78010001;
+4515 : 38218F48;
+4516 : 28300000;
+4517 : 2B810028;
+4518 : 5C30001C;
+4519 : 3D6B0002;
+451a : 78010001;
+451b : 38219410;
+451c : B42B0800;
+451d : 282B0000;
+451e : 78010001;
+451f : 38218B08;
+4520 : B9601000;
+4521 : FBFFF2FD;
+4522 : 78010001;
+4523 : 3821A988;
+4524 : 34020001;
+4525 : 58220008;
+4526 : 78020001;
+4527 : 38421044;
+4528 : 5822001C;
+4529 : 78020001;
+452a : 3842107C;
+452b : 78030001;
+452c : 3863C1F0;
+452d : 58220020;
+452e : 78020001;
+452f : 58230004;
+4530 : 582B000C;
+4531 : 38421060;
+4532 : 58220024;
+4533 : E000003A;
+4534 : 780B0001;
+4535 : 396BBF78;
+4536 : 780E0001;
+4537 : 596F0000;
+4538 : 59600004;
+4539 : 3411007F;
+453a : 39CEA988;
+453b : 341B0006;
+453c : E000002F;
+453d : 41610003;
+453e : 204200FF;
+453f : B9A07800;
+4540 : FBFFF6FF;
+4541 : 340C0000;
+4542 : 44200026;
+4543 : 29E20000;
+4544 : B9C00800;
+4545 : 37830028;
+4546 : 34040004;
+4547 : FBFFFE10;
+4548 : 2B810028;
+4549 : 35EF0004;
+454a : 44300003;
+454b : 358C0001;
+454c : 5D9BFFF7;
+454d : 2B810028;
+454e : 5C30001A;
+454f : 3D8C0002;
+4550 : 78010001;
+4551 : 38219410;
+4552 : B42C0800;
+4553 : 282C0000;
+4554 : 29630004;
+4555 : 78010001;
+4556 : B9801000;
+4557 : 38218B24;
+4558 : FBFFF2C6;
+4559 : 78010001;
+455a : 3821A988;
+455b : 34020001;
+455c : 58220008;
+455d : 78020001;
+455e : 38420D5C;
+455f : 5822001C;
+4560 : 78020001;
+4561 : 38420F18;
+4562 : 58220020;
+4563 : 78020001;
+4564 : 582B0004;
+4565 : 582C000C;
+4566 : 38420E40;
+4567 : E3FFFFCB;
+4568 : 29610004;
+4569 : 34210001;
+456a : 59610004;
+456b : 29620004;
+456c : 4E22FFD1;
+456d : 78010001;
+456e : 780B0001;
+456f : 34020001;
+4570 : 3821BF74;
+4571 : 396BA988;
+4572 : 30220000;
+4573 : B9600800;
+4574 : F8001004;
+4575 : 780C0001;
+4576 : 34020001;
+4577 : 398C8B48;
+4578 : E0000008;
+4579 : 28820020;
+457a : 2883000C;
+457b : 3080003F;
+457c : B9800800;
+457d : 3484002C;
+457e : FBFFF2A0;
+457f : 34020000;
+4580 : B9600800;
+4581 : F8001019;
+4582 : B8202000;
+4583 : 5C20FFF6;
+4584 : 2B9D0004;
+4585 : 2B8B0024;
+4586 : 2B8C0020;
+4587 : 2B8D001C;
+4588 : 2B8E0018;
+4589 : 2B8F0014;
+458a : 2B900010;
+458b : 2B91000C;
+458c : 2B9B0008;
+458d : 379C0028;
+458e : C3A00000;
+458f : 379CFFF0;
+4590 : 5B8B0010;
+4591 : 5B8C000C;
+4592 : 5B8D0008;
+4593 : 5B9D0004;
+4594 : 78030001;
+4595 : 78040001;
+4596 : 78050001;
+4597 : 38638F3C;
+4598 : 38848F40;
+4599 : 38A58F4C;
+459a : B8405800;
+459b : 780D0001;
+459c : 28620000;
+459d : 28830000;
+459e : 28A40000;
+459f : 39ADA988;
+45a0 : B9A00800;
+45a1 : F800107B;
+45a2 : 3402FFFF;
+45a3 : 4801004E;
+45a4 : B9A00800;
+45a5 : 34020000;
+45a6 : B9601800;
+45a7 : 34040006;
+45a8 : F80010B7;
+45a9 : B8206000;
+45aa : B9A00800;
+45ab : F80010A1;
+45ac : 4D800006;
+45ad : 78010001;
+45ae : 78020001;
+45af : 38218B64;
+45b0 : 384290D4;
+45b1 : FBFFF26D;
+45b2 : 41610000;
+45b3 : 340200FF;
+45b4 : 4422000D;
+45b5 : 41630001;
+45b6 : 41620002;
+45b7 : B8621000;
+45b8 : B8220800;
+45b9 : 41620003;
+45ba : B8220800;
+45bb : 41620004;
+45bc : B8220800;
+45bd : 41620005;
+45be : B8220800;
+45bf : 202100FF;
+45c0 : 5C200008;
+45c1 : 78010001;
+45c2 : 78020001;
+45c3 : 38218B74;
+45c4 : 384290D4;
+45c5 : FBFFF259;
+45c6 : 340CFFFF;
+45c7 : E0000003;
+45c8 : 34020000;
+45c9 : 4D800028;
+45ca : 78010001;
+45cb : 78020001;
+45cc : 384290D4;
+45cd : 38218B8C;
+45ce : FBFFF250;
+45cf : 78010001;
+45d0 : 78020001;
+45d1 : 3821C1F0;
+45d2 : 3842C200;
+45d3 : 34260090;
+45d4 : 34050022;
+45d5 : 34040033;
+45d6 : 28410004;
+45d7 : 202300FF;
+45d8 : 7C670042;
+45d9 : 7C630028;
+45da : A0E31800;
+45db : 5C60000C;
+45dc : 28430000;
+45dd : 340C0000;
+45de : 31650000;
+45df : 31630002;
+45e0 : 00230018;
+45e1 : 31640001;
+45e2 : 31630003;
+45e3 : 00230010;
+45e4 : 00210008;
+45e5 : 31630004;
+45e6 : 31610005;
+45e7 : 34420010;
+45e8 : 5C46FFEE;
+45e9 : 34020000;
+45ea : 45800007;
+45eb : 78010001;
+45ec : 78020001;
+45ed : 384290D4;
+45ee : 38218BA8;
+45ef : FBFFF22F;
+45f0 : 3402FFFF;
+45f1 : B8400800;
+45f2 : 2B9D0004;
+45f3 : 2B8B0010;
+45f4 : 2B8C000C;
+45f5 : 2B8D0008;
+45f6 : 379C0010;
+45f7 : C3A00000;
+45f8 : 379CFFF0;
+45f9 : 5B8B0010;
+45fa : 5B8C000C;
+45fb : 5B8D0008;
+45fc : 5B9D0004;
+45fd : 78030001;
+45fe : 78040001;
+45ff : 78050001;
+4600 : 38638F3C;
+4601 : 38848F40;
+4602 : 38A58F4C;
+4603 : B8406800;
+4604 : 780B0001;
+4605 : 28620000;
+4606 : 28830000;
+4607 : 28A40000;
+4608 : 396BA988;
+4609 : B9600800;
+460a : F8001012;
+460b : B8206000;
+460c : 4801000B;
+460d : 29630070;
+460e : 34020000;
+460f : B9600800;
+4610 : F80010A7;
+4611 : B9600800;
+4612 : 34020000;
+4613 : B9A01800;
+4614 : 34040006;
+4615 : F8001076;
+4616 : B8206000;
+4617 : 78010001;
+4618 : 3821A988;
+4619 : F8001033;
+461a : 34010000;
+461b : 4D800007;
+461c : 78010001;
+461d : 78020001;
+461e : 38218BB8;
+461f : 384293E0;
+4620 : FBFFF1FE;
+4621 : 3401FFFF;
+4622 : 2B9D0004;
+4623 : 2B8B0010;
+4624 : 2B8C000C;
+4625 : 2B8D0008;
+4626 : 379C0010;
+4627 : C3A00000;
+4628 : 379CFFF4;
+4629 : 5B8B000C;
+462a : 5B8C0008;
+462b : 5B9D0004;
+462c : 78030001;
+462d : 78040001;
+462e : 78050001;
+462f : 38638F3C;
+4630 : 38848F40;
+4631 : 38A58F44;
+4632 : 28620000;
+4633 : 780B0001;
+4634 : 28830000;
+4635 : 28A40000;
+4636 : 396BA988;
+4637 : B9600800;
+4638 : F8000FE4;
+4639 : B8201000;
+463a : 3401FFFF;
+463b : 4802000E;
+463c : 29630070;
+463d : B9600800;
+463e : 34020000;
+463f : F8001078;
+4640 : B8206000;
+4641 : 29610070;
+4642 : 5D810002;
+4643 : 340C0001;
+4644 : 78010001;
+4645 : 3821A988;
+4646 : F8001006;
+4647 : 7D810001;
+4648 : C8010800;
+4649 : 2B9D0004;
+464a : 2B8B000C;
+464b : 2B8C0008;
+464c : 379C000C;
+464d : C3A00000;
+464e : 379CFFCC;
+464f : 5B8B0014;
+4650 : 5B8C0010;
+4651 : 5B8D000C;
+4652 : 5B8E0008;
+4653 : 5B9D0004;
+4654 : 340C0000;
+4655 : B8205800;
+4656 : 340D0001;
+4657 : 378E0018;
+4658 : E0000027;
+4659 : B9C00800;
+465a : 34020000;
+465b : B9801800;
+465c : FBFFFDCA;
+465d : 202D00FF;
+465e : 45A00022;
+465f : B9C00800;
+4660 : B9601000;
+4661 : 34030010;
+4662 : F80012D7;
+4663 : 358C0001;
+4664 : 5C20001B;
+4665 : 2B81002C;
+4666 : 00220018;
+4667 : 31610017;
+4668 : 31620014;
+4669 : 00220010;
+466a : 31620015;
+466b : 00220008;
+466c : 2B810030;
+466d : 31620016;
+466e : 00220018;
+466f : 3161001B;
+4670 : 31620018;
+4671 : 00220010;
+4672 : 31620019;
+4673 : 00220008;
+4674 : 2B810028;
+4675 : 3162001A;
+4676 : 00220018;
+4677 : 31610013;
+4678 : 31620010;
+4679 : 00220010;
+467a : 31620011;
+467b : 00220008;
+467c : 34010001;
+467d : 31620012;
+467e : E0000003;
+467f : 49ACFFDA;
+4680 : 34010000;
+4681 : 2B9D0004;
+4682 : 2B8B0014;
+4683 : 2B8C0010;
+4684 : 2B8D000C;
+4685 : 2B8E0008;
+4686 : 379C0034;
+4687 : C3A00000;
+4688 : 379CFF28;
+4689 : 5B8B0044;
+468a : 5B8C0040;
+468b : 5B8D003C;
+468c : 5B8E0038;
+468d : 5B8F0034;
+468e : 5B900030;
+468f : 5B91002C;
+4690 : 5B920028;
+4691 : 5B930024;
+4692 : 5B940020;
+4693 : 5B95001C;
+4694 : 5B960018;
+4695 : 5B970014;
+4696 : 5B980010;
+4697 : 5B99000C;
+4698 : 5B9B0008;
+4699 : 5B9D0004;
+469a : 204200FF;
+469b : B8206000;
+469c : 206300FF;
+469d : 44400044;
+469e : 40220000;
+469f : 40240001;
+46a0 : 403D0005;
+46a1 : 403B0006;
+46a2 : 40390007;
+46a3 : 40380008;
+46a4 : 40370009;
+46a5 : 4036000A;
+46a6 : 4035000B;
+46a7 : 4034000C;
+46a8 : 4033000D;
+46a9 : 4032000E;
+46aa : 4031000F;
+46ab : 40300010;
+46ac : 402F0011;
+46ad : 402E0012;
+46ae : 402D0013;
+46af : 402B0014;
+46b0 : 402A0015;
+46b1 : 40290016;
+46b2 : 40280017;
+46b3 : 40270018;
+46b4 : 40260019;
+46b5 : 4025001A;
+46b6 : 4023001B;
+46b7 : 4021001C;
+46b8 : 338200BC;
+46b9 : 338400BD;
+46ba : 41820002;
+46bb : 338200BE;
+46bc : 41820003;
+46bd : 338200BF;
+46be : 41820004;
+46bf : 338200C0;
+46c0 : 338100D8;
+46c1 : 378100BC;
+46c2 : 339D00C1;
+46c3 : 339B00C2;
+46c4 : 339900C3;
+46c5 : 339800C4;
+46c6 : 339700C5;
+46c7 : 339600C6;
+46c8 : 339500C7;
+46c9 : 339400C8;
+46ca : 339300C9;
+46cb : 339200CA;
+46cc : 339100CB;
+46cd : 339000CC;
+46ce : 338F00CD;
+46cf : 338E00CE;
+46d0 : 338D00CF;
+46d1 : 338B00D0;
+46d2 : 338A00D1;
+46d3 : 338900D2;
+46d4 : 338800D3;
+46d5 : 338700D4;
+46d6 : 338600D5;
+46d7 : 338500D6;
+46d8 : 338300D7;
+46d9 : FBFFFF75;
+46da : 5C200009;
+46db : 78010001;
+46dc : 38218BD4;
+46dd : FBFFF141;
+46de : B9800800;
+46df : 34020001;
+46e0 : 34030000;
+46e1 : FBFFFD45;
+46e2 : E0000063;
+46e3 : 78010001;
+46e4 : 38218BEC;
+46e5 : FBFFF139;
+46e6 : 340D0000;
+46e7 : 340B0001;
+46e8 : 37910048;
+46e9 : 379000DC;
+46ea : E0000046;
+46eb : 09AE001D;
+46ec : 34020000;
+46ed : B9A01800;
+46ee : B62E7800;
+46ef : B9E00800;
+46f0 : FBFFFD36;
+46f1 : B8205800;
+46f2 : 4C010054;
+46f3 : B9E00800;
+46f4 : B9801000;
+46f5 : 34030010;
+46f6 : F8001243;
+46f7 : 5C200038;
+46f8 : 41850014;
+46f9 : 41810015;
+46fa : 41830016;
+46fb : 3CA50018;
+46fc : 3C210010;
+46fd : 3C630008;
+46fe : B8250800;
+46ff : B8611800;
+4700 : 41810017;
+4701 : B60E1000;
+4702 : 3444FF80;
+4703 : B8231800;
+4704 : 00610018;
+4705 : 3041FF80;
+4706 : 00610010;
+4707 : 30830003;
+4708 : 30810001;
+4709 : 00610008;
+470a : 30810002;
+470b : 41850018;
+470c : 41810019;
+470d : 4183001A;
+470e : 3CA50018;
+470f : 3C210010;
+4710 : 3C630008;
+4711 : B8250800;
+4712 : B8611800;
+4713 : 4181001B;
+4714 : 3444FF84;
+4715 : B8231800;
+4716 : 00610018;
+4717 : 3041FF84;
+4718 : 00610010;
+4719 : 30830003;
+471a : 30810001;
+471b : 00610008;
+471c : 30810002;
+471d : 41850010;
+471e : 41810011;
+471f : 41830012;
+4720 : 3CA50018;
+4721 : 3C210010;
+4722 : 3C630008;
+4723 : B8250800;
+4724 : B8611800;
+4725 : 41810013;
+4726 : 3444FF7C;
+4727 : B8231800;
+4728 : 00610018;
+4729 : 3041FF7C;
+472a : 00610010;
+472b : 30830003;
+472c : 30810001;
+472d : 00610008;
+472e : 30810002;
+472f : 35AD0001;
+4730 : 496DFFBB;
+4731 : FBFFFEF7;
+4732 : 3402FFFF;
+4733 : B9607000;
+4734 : 340C0000;
+4735 : 378D0048;
+4736 : 5C22000D;
+4737 : 78010001;
+4738 : 38218288;
+4739 : FBFFF0E5;
+473a : 340BFFFF;
+473b : E000000B;
+473c : 0981001D;
+473d : 34020001;
+473e : 34030000;
+473f : B5A10800;
+4740 : FBFFFCE6;
+4741 : 358C0001;
+4742 : 48010003;
+4743 : B9800800;
+4744 : 49CCFFF8;
+4745 : B8205800;
+4746 : B9600800;
+4747 : 2B9D0004;
+4748 : 2B8B0044;
+4749 : 2B8C0040;
+474a : 2B8D003C;
+474b : 2B8E0038;
+474c : 2B8F0034;
+474d : 2B900030;
+474e : 2B91002C;
+474f : 2B920028;
+4750 : 2B930024;
+4751 : 2B940020;
+4752 : 2B95001C;
+4753 : 2B960018;
+4754 : 2B970014;
+4755 : 2B980010;
+4756 : 2B99000C;
+4757 : 2B9B0008;
+4758 : 379C00D8;
+4759 : C3A00000;
+475a : 379CFFE8;
+475b : 5B8B0014;
+475c : 5B8C0010;
+475d : 5B8D000C;
+475e : 5B8E0008;
+475f : 5B9D0004;
+4760 : 78030001;
+4761 : 78040001;
+4762 : 78050001;
+4763 : 38638F3C;
+4764 : 38848F40;
+4765 : 38A58F50;
+4766 : 204E00FF;
+4767 : 780B0001;
+4768 : 28620000;
+4769 : 28830000;
+476a : 28A40000;
+476b : 396BA988;
+476c : B8206800;
+476d : B9600800;
+476e : F8000EAE;
+476f : 340CFFFF;
+4770 : 48010024;
+4771 : 45C00012;
+4772 : 29630070;
+4773 : 34020000;
+4774 : B9600800;
+4775 : F8000F42;
+4776 : 29A20000;
+4777 : 78018000;
+4778 : 37830018;
+4779 : B8410800;
+477a : 5B810018;
+477b : 34020000;
+477c : B9600800;
+477d : 34040004;
+477e : F8000F0D;
+477f : 7C210004;
+4780 : C8016000;
+4781 : 398C0001;
+4782 : E000000F;
+4783 : 34020000;
+4784 : B9600800;
+4785 : 37830018;
+4786 : 34040004;
+4787 : F8000ED8;
+4788 : 34020004;
+4789 : 5C220008;
+478a : 78020001;
+478b : 38428ED4;
+478c : 2B8C0018;
+478d : 28410000;
+478e : A1810800;
+478f : 018C001F;
+4790 : 59A10000;
+4791 : 78010001;
+4792 : 3821A988;
+4793 : F8000EB9;
+4794 : B9800800;
+4795 : 2B9D0004;
+4796 : 2B8B0014;
+4797 : 2B8C0010;
+4798 : 2B8D000C;
+4799 : 2B8E0008;
+479a : 379C0018;
+479b : C3A00000;
+479c : 379CFFF4;
+479d : 5B8B000C;
+479e : 5B8C0008;
+479f : 5B9D0004;
+47a0 : 78030001;
+47a1 : 78040001;
+47a2 : 78050001;
+47a3 : 38638F3C;
+47a4 : 38848F40;
+47a5 : 38A58F54;
+47a6 : 28620000;
+47a7 : 780B0001;
+47a8 : 28830000;
+47a9 : 28A40000;
+47aa : 396BA988;
+47ab : B9600800;
+47ac : F8000E70;
+47ad : B8201000;
+47ae : 3401FFFF;
+47af : 4802000E;
+47b0 : 29630070;
+47b1 : B9600800;
+47b2 : 34020000;
+47b3 : F8000F04;
+47b4 : B8206000;
+47b5 : 29610070;
+47b6 : 5D810002;
+47b7 : 340C0001;
+47b8 : 78010001;
+47b9 : 3821A988;
+47ba : F8000E92;
+47bb : 7D810001;
+47bc : C8010800;
+47bd : 2B9D0004;
+47be : 2B8B000C;
+47bf : 2B8C0008;
+47c0 : 379C000C;
+47c1 : C3A00000;
+47c2 : 379CFFDC;
+47c3 : 5B8B001C;
+47c4 : 5B8C0018;
+47c5 : 5B8D0014;
+47c6 : 5B8E0010;
+47c7 : 5B8F000C;
+47c8 : 5B900008;
+47c9 : 5B9D0004;
+47ca : 78030001;
+47cb : 78040001;
+47cc : 78050001;
+47cd : 38638F3C;
+47ce : 38848F40;
+47cf : 38A58F54;
+47d0 : 28620000;
+47d1 : 780C0001;
+47d2 : 28830000;
+47d3 : 28A40000;
+47d4 : B8206800;
+47d5 : 398CA988;
+47d6 : 34010020;
+47d7 : 33810027;
+47d8 : B9800800;
+47d9 : F8000E43;
+47da : 340BFFFF;
+47db : 48010051;
+47dc : 0F800024;
+47dd : 378E0026;
+47de : 340B00FF;
+47df : E0000006;
+47e0 : 43810026;
+47e1 : 442B000C;
+47e2 : 2F810024;
+47e3 : 34210001;
+47e4 : 0F810024;
+47e5 : 2F820024;
+47e6 : B9800800;
+47e7 : B9C01800;
+47e8 : 34420002;
+47e9 : 34040001;
+47ea : F8000E75;
+47eb : 34020001;
+47ec : 4422FFF4;
+47ed : 2F810024;
+47ee : 34020100;
+47ef : 50410002;
+47f0 : 0F800024;
+47f1 : 780C0001;
+47f2 : B9A05800;
+47f3 : 398CA988;
+47f4 : 3410000A;
+47f5 : 340F0020;
+47f6 : 378E0027;
+47f7 : E000001E;
+47f8 : F8001112;
+47f9 : 2F820024;
+47fa : 29630004;
+47fb : B8206800;
+47fc : 34420002;
+47fd : B9800800;
+47fe : B9A02000;
+47ff : F8000E8C;
+4800 : 5C2D0028;
+4801 : 2F820024;
+4802 : B4220800;
+4803 : 2022FFFF;
+4804 : 29610008;
+4805 : 0F820024;
+4806 : 44200003;
+4807 : 338F0027;
+4808 : E0000002;
+4809 : 33900027;
+480a : 34420002;
+480b : B9800800;
+480c : B9C01800;
+480d : 34040001;
+480e : F8000E7D;
+480f : 34020001;
+4810 : 356B0004;
+4811 : 5C220017;
+4812 : 2F810024;
+4813 : 34210001;
+4814 : 0F810024;
+4815 : 29610004;
+4816 : 5C20FFE2;
+4817 : B9800800;
+4818 : 34020000;
+4819 : 37830024;
+481a : 34040002;
+481b : F8000E70;
+481c : B8206800;
+481d : 34010002;
+481e : 340BFFFF;
+481f : 5DA1000A;
+4820 : B9800800;
+4821 : 34020000;
+4822 : 37830022;
+4823 : 34040002;
+4824 : F8000E3B;
+4825 : E42D5800;
+4826 : 356BFFFF;
+4827 : E0000002;
+4828 : 340BFFFF;
+4829 : 78010001;
+482a : 3821A988;
+482b : F8000E21;
+482c : B9600800;
+482d : 2B9D0004;
+482e : 2B8B001C;
+482f : 2B8C0018;
+4830 : 2B8D0014;
+4831 : 2B8E0010;
+4832 : 2B8F000C;
+4833 : 2B900008;
+4834 : 379C0024;
+4835 : C3A00000;
+4836 : 379CFFE4;
+4837 : 5B8B0018;
+4838 : 5B8C0014;
+4839 : 5B8D0010;
+483a : 5B8E000C;
+483b : 5B8F0008;
+483c : 5B9D0004;
+483d : 78030001;
+483e : 78040001;
+483f : 78050001;
+4840 : 38638F3C;
+4841 : 38848F40;
+4842 : 38A58F54;
+4843 : 28620000;
+4844 : 780C0001;
+4845 : 28830000;
+4846 : 28A40000;
+4847 : 398CA988;
+4848 : B9800800;
+4849 : F8000DD3;
+484a : 340DFFFF;
+484b : 48010022;
+484c : 78010001;
+484d : 38218C08;
+484e : 780D0001;
+484f : FBFFEFCF;
+4850 : 340B0000;
+4851 : 378F001F;
+4852 : 340E00FF;
+4853 : 39AD7FE8;
+4854 : 35620002;
+4855 : B9800800;
+4856 : B9E01800;
+4857 : 34040001;
+4858 : F8000E07;
+4859 : 34020001;
+485a : 5C22000F;
+485b : 4382001F;
+485c : 444E0005;
+485d : B9A00800;
+485e : 356B0001;
+485f : FBFFEFBF;
+4860 : 216BFFFF;
+4861 : 4381001F;
+4862 : 5C2EFFF2;
+4863 : 340D0000;
+4864 : 5D600006;
+4865 : 78010001;
+4866 : 3821802C;
+4867 : FBFFEFB7;
+4868 : E0000002;
+4869 : 340DFFFF;
+486a : 78010001;
+486b : 3821A988;
+486c : F8000DE0;
+486d : B9A00800;
+486e : 2B9D0004;
+486f : 2B8B0018;
+4870 : 2B8C0014;
+4871 : 2B8D0010;
+4872 : 2B8E000C;
+4873 : 2B8F0008;
+4874 : 379C001C;
+4875 : C3A00000;
+4876 : 379CFFE0;
+4877 : 5B8B0020;
+4878 : 5B8C001C;
+4879 : 5B8D0018;
+487a : 5B8E0014;
+487b : 5B8F0010;
+487c : 5B90000C;
+487d : 5B910008;
+487e : 5B9D0004;
+487f : 78040001;
+4880 : B8206800;
+4881 : 206C00FF;
+4882 : B8800800;
+4883 : 78030001;
+4884 : 78040001;
+4885 : 78050001;
+4886 : 38638F3C;
+4887 : 38848F40;
+4888 : 38A58F54;
+4889 : 205100FF;
+488a : 28620000;
+488b : 28830000;
+488c : 28A40000;
+488d : 3821A988;
+488e : 340BFFFF;
+488f : F8000D8D;
+4890 : 48010022;
+4891 : 5D800005;
+4892 : 78030001;
+4893 : 3863BF80;
+4894 : 34010002;
+4895 : 0C610000;
+4896 : 780C0001;
+4897 : 780E0001;
+4898 : 340B0000;
+4899 : 398CBF80;
+489a : 39CEA988;
+489b : 341000FF;
+489c : 340F000A;
+489d : 2D820000;
+489e : 3441FFFE;
+489f : 5431000F;
+48a0 : 34410001;
+48a1 : 0D810000;
+48a2 : B9A01800;
+48a3 : B9C00800;
+48a4 : 34040001;
+48a5 : F8000DBA;
+48a6 : 34020001;
+48a7 : 5C220007;
+48a8 : 41A10000;
+48a9 : 44300006;
+48aa : 356B0001;
+48ab : 35AD0001;
+48ac : 5C2FFFF1;
+48ad : E0000002;
+48ae : 340BFFFF;
+48af : 78010001;
+48b0 : 3821A988;
+48b1 : F8000D9B;
+48b2 : B9600800;
+48b3 : 2B9D0004;
+48b4 : 2B8B0020;
+48b5 : 2B8C001C;
+48b6 : 2B8D0018;
+48b7 : 2B8E0014;
+48b8 : 2B8F0010;
+48b9 : 2B90000C;
+48ba : 2B910008;
+48bb : 379C0020;
+48bc : C3A00000;
+48bd : 379CFFF8;
+48be : 5B8B0008;
+48bf : 5B9D0004;
+48c0 : 780B0001;
+48c1 : 396BBFA4;
+48c2 : 78020001;
+48c3 : 78030001;
+48c4 : B9600800;
+48c5 : 3842BFB0;
+48c6 : 3863BFAC;
+48c7 : FBFFF523;
+48c8 : 29610000;
+48c9 : 5C200007;
+48ca : 29620008;
+48cb : 5C410005;
+48cc : 78010001;
+48cd : 59600004;
+48ce : 59610008;
+48cf : E0000005;
+48d0 : 78010001;
+48d1 : 3821BFA4;
+48d2 : 34020001;
+48d3 : 58220004;
+48d4 : 34010000;
+48d5 : 2B9D0004;
+48d6 : 2B8B0008;
+48d7 : 379C0008;
+48d8 : C3A00000;
+48d9 : 379CFFEC;
+48da : 5B8B0014;
+48db : 5B8C0010;
+48dc : 5B8D000C;
+48dd : 5B8E0008;
+48de : 5B9D0004;
+48df : B8607000;
+48e0 : 208D00FF;
+48e1 : 64630000;
+48e2 : 64240000;
+48e3 : B8406000;
+48e4 : A0831800;
+48e5 : 340BFFEA;
+48e6 : 5C60002B;
+48e7 : 44830008;
+48e8 : 78010001;
+48e9 : 38218C24;
+48ea : FBFFEF34;
+48eb : 09C20005;
+48ec : B9800800;
+48ed : FBFFF896;
+48ee : E0000012;
+48ef : 34030001;
+48f0 : 5C230012;
+48f1 : 78010001;
+48f2 : B9A01000;
+48f3 : B9801800;
+48f4 : 38218C3C;
+48f5 : FBFFEF29;
+48f6 : 78050001;
+48f7 : 78010001;
+48f8 : 38A5BF78;
+48f9 : 3821A988;
+48fa : 58A00000;
+48fb : 58AD0004;
+48fc : 58250004;
+48fd : B9801000;
+48fe : 34030140;
+48ff : FBFFFA91;
+4900 : 340B0000;
+4901 : E0000010;
+4902 : 34030002;
+4903 : 340B0000;
+4904 : 5C23000D;
+4905 : 78010001;
+4906 : 38218C5C;
+4907 : FBFFEF17;
+4908 : 78010001;
+4909 : 78040001;
+490a : 3821A988;
+490b : 3884C1F0;
+490c : 58240004;
+490d : B9801000;
+490e : B8800800;
+490f : 34030140;
+4910 : F8000484;
+4911 : B9600800;
+4912 : 2B9D0004;
+4913 : 2B8B0014;
+4914 : 2B8C0010;
+4915 : 2B8D000C;
+4916 : 2B8E0008;
+4917 : 379C0014;
+4918 : C3A00000;
+4919 : 379CFFBC;
+491a : 5B8B002C;
+491b : 5B8C0028;
+491c : 5B8D0024;
+491d : 5B8E0020;
+491e : 5B8F001C;
+491f : 5B900018;
+4920 : 5B910014;
+4921 : 5B920010;
+4922 : 5B93000C;
+4923 : 5B940008;
+4924 : 5B9D0004;
+4925 : B8206800;
+4926 : B8405800;
+4927 : B8607000;
+4928 : 34020000;
+4929 : 37810030;
+492a : 34030013;
+492b : 209000FF;
+492c : F8000F28;
+492d : 65C20000;
+492e : 65610000;
+492f : 65B20000;
+4930 : B8410800;
+4931 : 780C0001;
+4932 : A2410800;
+4933 : 398CAC3C;
+4934 : 5C20008B;
+4935 : C80E1000;
+4936 : 35C1013F;
+4937 : A0410800;
+4938 : B42B0800;
+4939 : B9807800;
+493a : 35870100;
+493b : B9802800;
+493c : 35C6FFFF;
+493d : 28A40054;
+493e : 28A3004C;
+493f : 58A1004C;
+4940 : C8831800;
+4941 : 1424001F;
+4942 : 58A40048;
+4943 : B4232000;
+4944 : 58A40054;
+4945 : 34630001;
+4946 : 1484001F;
+4947 : B4610800;
+4948 : 58A40050;
+4949 : B4C10800;
+494a : 34A50040;
+494b : A0220800;
+494c : 5CA7FFF1;
+494d : 78010001;
+494e : 3821AC3C;
+494f : 58200008;
+4950 : 582B000C;
+4951 : 29820110;
+4952 : 78110001;
+4953 : 35F40140;
+4954 : 58220010;
+4955 : 29820114;
+4956 : 37930030;
+4957 : B9E06000;
+4958 : 58220014;
+4959 : 3A318C7C;
+495a : 3582002C;
+495b : 34030012;
+495c : BA600800;
+495d : F8001029;
+495e : 2983000C;
+495f : 29840014;
+4960 : BA200800;
+4961 : BA601000;
+4962 : 358C0040;
+4963 : FBFFEEBB;
+4964 : 5D94FFF6;
+4965 : 46400011;
+4966 : 78010001;
+4967 : B9601000;
+4968 : 38218CA0;
+4969 : FBFFEEB5;
+496a : 09C20005;
+496b : B9600800;
+496c : 340C0000;
+496d : FBFFF816;
+496e : 340E0140;
+496f : B58B0800;
+4970 : B5EC1000;
+4971 : 34030040;
+4972 : 358C0040;
+4973 : FBFFF838;
+4974 : 5D8EFFFB;
+4975 : E0000046;
+4976 : 34010001;
+4977 : 5DA10022;
+4978 : 34010000;
+4979 : BA001000;
+497a : FBFFF2C5;
+497b : 5C200004;
+497c : 78010001;
+497d : 38218CC4;
+497e : E000002A;
+497f : 780E0001;
+4980 : 39CEBF78;
+4981 : 78010001;
+4982 : 59D00004;
+4983 : BA001000;
+4984 : 59C00000;
+4985 : B9601800;
+4986 : 38218CDC;
+4987 : 780C0001;
+4988 : FBFFEE96;
+4989 : 398CA988;
+498a : 598E0004;
+498b : B9800800;
+498c : B9601000;
+498d : 34030140;
+498e : FBFFFA02;
+498f : 340E0000;
+4990 : 34100140;
+4991 : B5CB1000;
+4992 : B5EE1800;
+4993 : B9800800;
+4994 : 34040040;
+4995 : 35CE0040;
+4996 : FBFFFA30;
+4997 : 5DD0FFFA;
+4998 : E0000023;
+4999 : 34010002;
+499a : 5DA10021;
+499b : 780C0001;
+499c : 78010001;
+499d : 3821C1F0;
+499e : 398CA988;
+499f : 34020000;
+49a0 : 59810004;
+49a1 : 37830044;
+49a2 : 34040004;
+49a3 : F80003C9;
+49a4 : 34020004;
+49a5 : 44220005;
+49a6 : 78010001;
+49a7 : 38218D0C;
+49a8 : FBFFEE76;
+49a9 : E0000016;
+49aa : 78010001;
+49ab : B9601000;
+49ac : 38218D28;
+49ad : FBFFEE71;
+49ae : 29810004;
+49af : B9601000;
+49b0 : 34030140;
+49b1 : F80003E3;
+49b2 : 340E0000;
+49b3 : 34100140;
+49b4 : 29810004;
+49b5 : B5CB1000;
+49b6 : B5EE1800;
+49b7 : 34040040;
+49b8 : 35CE0040;
+49b9 : F80003C7;
+49ba : 5DD0FFFA;
+49bb : 34010000;
+49bc : 34020050;
+49bd : FBFFFB06;
+49be : E0000002;
+49bf : 340DFFEA;
+49c0 : B9A00800;
+49c1 : 2B9D0004;
+49c2 : 2B8B002C;
+49c3 : 2B8C0028;
+49c4 : 2B8D0024;
+49c5 : 2B8E0020;
+49c6 : 2B8F001C;
+49c7 : 2B900018;
+49c8 : 2B910014;
+49c9 : 2B920010;
+49ca : 2B93000C;
+49cb : 2B940008;
+49cc : 379C0044;
+49cd : C3A00000;
+49ce : 379CFFE8;
+49cf : 5B8B0018;
+49d0 : 5B8C0014;
+49d1 : 5B8D0010;
+49d2 : 5B8E000C;
+49d3 : 5B8F0008;
+49d4 : 5B9D0004;
+49d5 : 780B0001;
+49d6 : B8207800;
+49d7 : B8407000;
+49d8 : 340D0008;
+49d9 : 340C0001;
+49da : 396BAA40;
+49db : A18E1800;
+49dc : 29640008;
+49dd : 7C620000;
+49de : B9E00800;
+49df : 35ADFFFF;
+49e0 : D8800000;
+49e1 : 3D8C0001;
+49e2 : 5DA0FFF9;
+49e3 : 2B9D0004;
+49e4 : 2B8B0018;
+49e5 : 2B8C0014;
+49e6 : 2B8D0010;
+49e7 : 2B8E000C;
+49e8 : 2B8F0008;
+49e9 : 379C0018;
+49ea : C3A00000;
+49eb : 379CFFE8;
+49ec : 5B8B0018;
+49ed : 5B8C0014;
+49ee : 5B8D0010;
+49ef : 5B8E000C;
+49f0 : 5B8F0008;
+49f1 : 5B9D0004;
+49f2 : 780B0001;
+49f3 : B8207800;
+49f4 : 340E0008;
+49f5 : 340C0000;
+49f6 : 340D0001;
+49f7 : 396BAA40;
+49f8 : 29620004;
+49f9 : B9E00800;
+49fa : 35CEFFFF;
+49fb : D8400000;
+49fc : 7C220000;
+49fd : C8021000;
+49fe : A1A21000;
+49ff : B9826000;
+4a00 : 3DAD0001;
+4a01 : 5DC0FFF7;
+4a02 : 34010064;
+4a03 : FBFFE258;
+4a04 : B9800800;
+4a05 : 2B9D0004;
+4a06 : 2B8B0018;
+4a07 : 2B8C0014;
+4a08 : 2B8D0010;
+4a09 : 2B8E000C;
+4a0a : 2B8F0008;
+4a0b : 379C0018;
+4a0c : C3A00000;
+4a0d : 379CFFC0;
+4a0e : 5B8B0040;
+4a0f : 5B8C003C;
+4a10 : 5B8D0038;
+4a11 : 5B8E0034;
+4a12 : 5B8F0030;
+4a13 : 5B90002C;
+4a14 : 5B910028;
+4a15 : 5B920024;
+4a16 : 5B930020;
+4a17 : 5B94001C;
+4a18 : 5B950018;
+4a19 : 5B960014;
+4a1a : 5B970010;
+4a1b : 5B98000C;
+4a1c : 5B990008;
+4a1d : 5B9D0004;
+4a1e : 34020000;
+4a1f : B8206000;
+4a20 : 34030080;
+4a21 : 34210008;
+4a22 : 780D0001;
+4a23 : F8000E31;
+4a24 : 39ADAA40;
+4a25 : 29A10000;
+4a26 : 340F0000;
+4a27 : 44200061;
+4a28 : B9805800;
+4a29 : 34120000;
+4a2a : 34110000;
+4a2b : 78194000;
+4a2c : 34160001;
+4a2d : 34180008;
+4a2e : 596C0008;
+4a2f : 45E00022;
+4a30 : 29610000;
+4a31 : 78028000;
+4a32 : 34030000;
+4a33 : 59610010;
+4a34 : 29610004;
+4a35 : 59610014;
+4a36 : A0590800;
+4a37 : 44200003;
+4a38 : 78024000;
+4a39 : 34030000;
+4a3a : A0710800;
+4a3b : A0522800;
+4a3c : B8A12800;
+4a3d : 29640010;
+4a3e : 29610014;
+4a3f : 5CA0000E;
+4a40 : A4603000;
+4a41 : A0260800;
+4a42 : 59610014;
+4a43 : 00630001;
+4a44 : 3C41001F;
+4a45 : A4403800;
+4a46 : 00420001;
+4a47 : A0872000;
+4a48 : B8231800;
+4a49 : 59640010;
+4a4a : B8430800;
+4a4b : 5C25FFEB;
+4a4c : E000003C;
+4a4d : B8821000;
+4a4e : B8231800;
+4a4f : 59620010;
+4a50 : 59630014;
+4a51 : 35EE0001;
+4a52 : 29A20000;
+4a53 : 3DCE0004;
+4a54 : B9800800;
+4a55 : B58E7000;
+4a56 : D8400000;
+4a57 : 5C360031;
+4a58 : B9800800;
+4a59 : 340200F0;
+4a5a : FBFFFF74;
+4a5b : 34140040;
+4a5c : 34130000;
+4a5d : 34100001;
+4a5e : 34120000;
+4a5f : 34110000;
+4a60 : 29A20004;
+4a61 : B9800800;
+4a62 : 29D70004;
+4a63 : D8400000;
+4a64 : 29A20004;
+4a65 : B820A800;
+4a66 : B9800800;
+4a67 : A2F0B800;
+4a68 : D8400000;
+4a69 : 46A10008;
+4a6a : 29A30008;
+4a6b : BAA01000;
+4a6c : 7EB50000;
+4a6d : B9800800;
+4a6e : D8600000;
+4a6f : 5EB60011;
+4a70 : E0000007;
+4a71 : 29A30008;
+4a72 : B9800800;
+4a73 : BAE01000;
+4a74 : D8600000;
+4a75 : 46E00009;
+4a76 : E000000A;
+4a77 : 29C10000;
+4a78 : B8330800;
+4a79 : 59C10000;
+4a7a : 29C10004;
+4a7b : B8300800;
+4a7c : 59C10004;
+4a7d : E0000003;
+4a7e : BA539000;
+4a7f : BA308800;
+4a80 : 3E010001;
+4a81 : 3E730001;
+4a82 : F6018000;
+4a83 : 3694FFFF;
+4a84 : B6139800;
+4a85 : B8208000;
+4a86 : 5E80FFDA;
+4a87 : E0000014;
+4a88 : B9E00800;
+4a89 : 2B9D0004;
+4a8a : 2B8B0040;
+4a8b : 2B8C003C;
+4a8c : 2B8D0038;
+4a8d : 2B8E0034;
+4a8e : 2B8F0030;
+4a8f : 2B90002C;
+4a90 : 2B910028;
+4a91 : 2B920024;
+4a92 : 2B930020;
+4a93 : 2B94001C;
+4a94 : 2B950018;
+4a95 : 2B960014;
+4a96 : 2B970010;
+4a97 : 2B98000C;
+4a98 : 2B990008;
+4a99 : 379C0040;
+4a9a : C3A00000;
+4a9b : 35EF0001;
+4a9c : 356B0010;
+4a9d : 5DF8FF91;
+4a9e : E3FFFFEA;
+4a9f : 379CFFF0;
+4aa0 : 5B8B0010;
+4aa1 : 5B8C000C;
+4aa2 : 5B8D0008;
+4aa3 : 5B9D0004;
+4aa4 : B8205800;
+4aa5 : 78010001;
+4aa6 : 3821AA40;
+4aa7 : 28220000;
+4aa8 : 29610000;
+4aa9 : 340C0000;
+4aaa : 340D0040;
+4aab : D8400000;
+4aac : 29610000;
+4aad : 34020055;
+4aae : FBFFFF20;
+4aaf : 29610008;
+4ab0 : 2962000C;
+4ab1 : B9801800;
+4ab2 : 358C0008;
+4ab3 : F8000C48;
+4ab4 : 29610000;
+4ab5 : FBFFFF19;
+4ab6 : 5D8DFFF9;
+4ab7 : 2B9D0004;
+4ab8 : 2B8B0010;
+4ab9 : 2B8C000C;
+4aba : 2B8D0008;
+4abb : 379C0010;
+4abc : C3A00000;
+4abd : 28210000;
+4abe : 78020001;
+4abf : 3842C278;
+4ac0 : 28420000;
+4ac1 : 3C210008;
+4ac2 : 3821000A;
+4ac3 : 58410000;
+4ac4 : 28410000;
+4ac5 : 20230008;
+4ac6 : 5C60FFFE;
+4ac7 : 20210001;
+4ac8 : 18210001;
+4ac9 : C3A00000;
+4aca : 28210000;
+4acb : 78020001;
+4acc : 3842C278;
+4acd : 28420000;
+4ace : 3C210008;
+4acf : 38210009;
+4ad0 : 58410000;
+4ad1 : 28410000;
+4ad2 : 20230008;
+4ad3 : 5C60FFFE;
+4ad4 : 20210001;
+4ad5 : C3A00000;
+4ad6 : 28210000;
+4ad7 : 78030001;
+4ad8 : 3863C278;
+4ad9 : 3C210008;
+4ada : 28630000;
+4adb : 7C420000;
+4adc : 38210008;
+4add : B8221000;
+4ade : 58620000;
+4adf : 28610000;
+4ae0 : 20210008;
+4ae1 : 5C20FFFE;
+4ae2 : C3A00000;
+4ae3 : 78010001;
+4ae4 : 78030001;
+4ae5 : 3821C278;
+4ae6 : 38638F58;
+4ae7 : 28210000;
+4ae8 : 28620000;
+4ae9 : 58220004;
+4aea : C3A00000;
+4aeb : 379CFFC4;
+4aec : 5B8B001C;
+4aed : 5B8C0018;
+4aee : 5B8D0014;
+4aef : 5B8E0010;
+4af0 : 5B8F000C;
+4af1 : 5B900008;
+4af2 : 5B9D0004;
+4af3 : B8206000;
+4af4 : 28210000;
+4af5 : 340BFFFF;
+4af6 : 4420002A;
+4af7 : 29820004;
+4af8 : 44400028;
+4af9 : FBFFE116;
+4afa : 780E0001;
+4afb : B8206800;
+4afc : 340B0000;
+4afd : 3410001F;
+4afe : 378F0020;
+4aff : 39CE8D5C;
+4b00 : E000000B;
+4b01 : FBFFE10E;
+4b02 : 202400FF;
+4b03 : B56D1000;
+4b04 : B5EB0800;
+4b05 : 30240000;
+4b06 : B8401800;
+4b07 : B9C00800;
+4b08 : B8802800;
+4b09 : FBFFED15;
+4b0a : 356B0001;
+4b0b : 29810004;
+4b0c : EE0B1800;
+4b0d : 358C0004;
+4b0e : 7C220000;
+4b0f : A0621000;
+4b10 : 5C40FFF1;
+4b11 : 78010001;
+4b12 : B9602000;
+4b13 : B9A01000;
+4b14 : B9E01800;
+4b15 : 3821C1F0;
+4b16 : F800026A;
+4b17 : B8206000;
+4b18 : B9601800;
+4b19 : 78010001;
+4b1a : FD8B5800;
+4b1b : 38218D80;
+4b1c : B9A01000;
+4b1d : B9802000;
+4b1e : FBFFED00;
+4b1f : C80B5800;
+4b20 : B9600800;
+4b21 : 2B9D0004;
+4b22 : 2B8B001C;
+4b23 : 2B8C0018;
+4b24 : 2B8D0014;
+4b25 : 2B8E0010;
+4b26 : 2B8F000C;
+4b27 : 2B900008;
+4b28 : 379C003C;
+4b29 : C3A00000;
+4b2a : 379CFFC8;
+4b2b : 5B8B0018;
+4b2c : 5B8C0014;
+4b2d : 5B8D0010;
+4b2e : 5B8E000C;
+4b2f : 5B8F0008;
+4b30 : 5B9D0004;
+4b31 : B8205800;
+4b32 : 28210000;
+4b33 : 3405FFFF;
+4b34 : 4420002C;
+4b35 : 29620004;
+4b36 : 4440002A;
+4b37 : FBFFE0D8;
+4b38 : B8207000;
+4b39 : 29610004;
+4b3a : FBFFE0D5;
+4b3b : B8205800;
+4b3c : 34010020;
+4b3d : 4C2B0002;
+4b3e : 340B0020;
+4b3f : 378D001C;
+4b40 : 78010001;
+4b41 : B9602000;
+4b42 : B9C01000;
+4b43 : B9A01800;
+4b44 : 3821C1F0;
+4b45 : F8000227;
+4b46 : B8206000;
+4b47 : 78010001;
+4b48 : B9601800;
+4b49 : 38218DA0;
+4b4a : B9C01000;
+4b4b : B9802000;
+4b4c : FBFFECD2;
+4b4d : E98B5800;
+4b4e : EC0C0800;
+4b4f : 3405FFFF;
+4b50 : B9615800;
+4b51 : 5D60000F;
+4b52 : B9A07800;
+4b53 : 780D0001;
+4b54 : 39AD8D5C;
+4b55 : B5EB0800;
+4b56 : 40240000;
+4b57 : B56E1000;
+4b58 : B9A00800;
+4b59 : B8401800;
+4b5a : B8802800;
+4b5b : 356B0001;
+4b5c : FBFFECC2;
+4b5d : 498BFFF8;
+4b5e : FD8B2800;
+4b5f : C8052800;
+4b60 : B8A00800;
+4b61 : 2B9D0004;
+4b62 : 2B8B0018;
+4b63 : 2B8C0014;
+4b64 : 2B8D0010;
+4b65 : 2B8E000C;
+4b66 : 2B8F0008;
+4b67 : 379C0038;
+4b68 : C3A00000;
+4b69 : 379CFFE4;
+4b6a : 5B8B001C;
+4b6b : 5B8C0018;
+4b6c : 5B8D0014;
+4b6d : 5B8E0010;
+4b6e : 5B8F000C;
+4b6f : 5B900008;
+4b70 : 5B9D0004;
+4b71 : 780D0001;
+4b72 : 39ADC1F0;
+4b73 : B9A00800;
+4b74 : 780B0001;
+4b75 : 780F0001;
+4b76 : 780E0001;
+4b77 : FBFFFE96;
+4b78 : 396BC200;
+4b79 : 340C0000;
+4b7a : 39EF8DC0;
+4b7b : 39CE8DD8;
+4b7c : 34100008;
+4b7d : 29630000;
+4b7e : 29640004;
+4b7f : B8640800;
+4b80 : 44200010;
+4b81 : B9801000;
+4b82 : B9E00800;
+4b83 : FBFFEC9B;
+4b84 : 3D810004;
+4b85 : 34020000;
+4b86 : 34210008;
+4b87 : B5A10800;
+4b88 : F8000015;
+4b89 : 2023FFFF;
+4b8a : 08632710;
+4b8b : B8201000;
+4b8c : 14420010;
+4b8d : 14630010;
+4b8e : B9C00800;
+4b8f : FBFFEC8F;
+4b90 : 358C0001;
+4b91 : 356B0010;
+4b92 : 5D90FFEB;
+4b93 : 34010000;
+4b94 : 2B9D0004;
+4b95 : 2B8B001C;
+4b96 : 2B8C0018;
+4b97 : 2B8D0014;
+4b98 : 2B8E0010;
+4b99 : 2B8F000C;
+4b9a : 2B900008;
+4b9b : 379C001C;
+4b9c : C3A00000;
+4b9d : 379CFFEC;
+4b9e : 5B8B0014;
+4b9f : 5B8C0010;
+4ba0 : 5B8D000C;
+4ba1 : 5B8E0008;
+4ba2 : 5B9D0004;
+4ba3 : 402D000F;
+4ba4 : B8206000;
+4ba5 : 34010028;
+4ba6 : B8407000;
+4ba7 : 45A10005;
+4ba8 : 34010042;
+4ba9 : 45A10003;
+4baa : 34010010;
+4bab : 5DA10034;
+4bac : 21CB0002;
+4bad : 5D60000F;
+4bae : B9800800;
+4baf : FBFFFEF0;
+4bb0 : 29810000;
+4bb1 : 34020044;
+4bb2 : 21CE0001;
+4bb3 : FBFFFE1B;
+4bb4 : 34010000;
+4bb5 : 5DCB002D;
+4bb6 : 780B0001;
+4bb7 : 396BAA40;
+4bb8 : 29620004;
+4bb9 : 29810000;
+4bba : D8400000;
+4bbb : 4420FFFD;
+4bbc : B9800800;
+4bbd : FBFFFEE2;
+4bbe : 29810000;
+4bbf : 780B0001;
+4bc0 : 340200BE;
+4bc1 : 396BBF84;
+4bc2 : FBFFFE0C;
+4bc3 : 356E0008;
+4bc4 : E0000005;
+4bc5 : 29810000;
+4bc6 : FBFFFE25;
+4bc7 : 31610000;
+4bc8 : 356B0001;
+4bc9 : 5D6EFFFC;
+4bca : 78020001;
+4bcb : 3842BF84;
+4bcc : 40410001;
+4bcd : 40430000;
+4bce : 3C210008;
+4bcf : B8230800;
+4bd0 : 34030028;
+4bd1 : DC200800;
+4bd2 : 45A3000B;
+4bd3 : 34030042;
+4bd4 : 45A30009;
+4bd5 : 34030010;
+4bd6 : 5DA3000B;
+4bd7 : 40420006;
+4bd8 : 3C21000F;
+4bd9 : 3C42000C;
+4bda : 3421C000;
+4bdb : B8220800;
+4bdc : E0000006;
+4bdd : 3C21000C;
+4bde : E0000004;
+4bdf : 78018000;
+4be0 : E0000002;
+4be1 : 34010000;
+4be2 : 2B9D0004;
+4be3 : 2B8B0014;
+4be4 : 2B8C0010;
+4be5 : 2B8D000C;
+4be6 : 2B8E0008;
+4be7 : 379C0014;
+4be8 : C3A00000;
+4be9 : 379CFFFC;
+4bea : 5B9D0004;
+4beb : 34030000;
+4bec : B8202000;
+4bed : 34090028;
+4bee : 34080042;
+4bef : 34070010;
+4bf0 : 34060008;
+4bf1 : 40850017;
+4bf2 : 44A90003;
+4bf3 : 44A80002;
+4bf4 : 5CA70006;
+4bf5 : 3C630004;
+4bf6 : 34630008;
+4bf7 : B4230800;
+4bf8 : FBFFFFA5;
+4bf9 : E0000005;
+4bfa : 34630001;
+4bfb : 34840010;
+4bfc : 5C66FFF5;
+4bfd : 78018000;
+4bfe : 2B9D0004;
+4bff : 379C0004;
+4c00 : C3A00000;
+4c01 : 379CFFE0;
+4c02 : 5B8B0020;
+4c03 : 5B8C001C;
+4c04 : 5B8D0018;
+4c05 : 5B8E0014;
+4c06 : 5B8F0010;
+4c07 : 5B90000C;
+4c08 : 5B910008;
+4c09 : 5B9D0004;
+4c0a : B8205800;
+4c0b : B8408000;
+4c0c : B8606000;
+4c0d : FBFFFE92;
+4c0e : 29610000;
+4c0f : 3402000F;
+4c10 : 220E00FF;
+4c11 : FBFFFDBD;
+4c12 : 29610000;
+4c13 : B9C01000;
+4c14 : 2210FF00;
+4c15 : FBFFFDB9;
+4c16 : 16100008;
+4c17 : 29610000;
+4c18 : BA001000;
+4c19 : 340D0000;
+4c1a : FBFFFDB4;
+4c1b : E0000005;
+4c1c : 29610000;
+4c1d : 340200FF;
+4c1e : 35AD0001;
+4c1f : FBFFFDAF;
+4c20 : 498DFFFC;
+4c21 : B9600800;
+4c22 : FBFFFE7D;
+4c23 : 29610000;
+4c24 : 340200AA;
+4c25 : FBFFFDA9;
+4c26 : 29610000;
+4c27 : FBFFFDC4;
+4c28 : B8207800;
+4c29 : 5C2E0021;
+4c2a : 29610000;
+4c2b : FBFFFDC0;
+4c2c : B8207000;
+4c2d : 5C30001F;
+4c2e : 29610000;
+4c2f : 340D0000;
+4c30 : 341100FF;
+4c31 : FBFFFDBA;
+4c32 : B8208000;
+4c33 : E0000005;
+4c34 : 29610000;
+4c35 : FBFFFDB6;
+4c36 : 5C310018;
+4c37 : 35AD0001;
+4c38 : 498DFFFC;
+4c39 : B9600800;
+4c3a : FBFFFE65;
+4c3b : 29610000;
+4c3c : 34020055;
+4c3d : FBFFFD91;
+4c3e : 29610000;
+4c3f : B9E01000;
+4c40 : FBFFFD8E;
+4c41 : 29610000;
+4c42 : B9C01000;
+4c43 : FBFFFD8B;
+4c44 : 29610000;
+4c45 : BA001000;
+4c46 : FBFFFD88;
+4c47 : 34012710;
+4c48 : FBFFE013;
+4c49 : E0000006;
+4c4a : 340CFFFF;
+4c4b : E0000004;
+4c4c : 340CFFFE;
+4c4d : E0000002;
+4c4e : 340CFFFD;
+4c4f : B9800800;
+4c50 : 2B9D0004;
+4c51 : 2B8B0020;
+4c52 : 2B8C001C;
+4c53 : 2B8D0018;
+4c54 : 2B8E0014;
+4c55 : 2B8F0010;
+4c56 : 2B90000C;
+4c57 : 2B910008;
+4c58 : 379C0020;
+4c59 : C3A00000;
+4c5a : 379CFFE0;
+4c5b : 5B8B0020;
+4c5c : 5B8C001C;
+4c5d : 5B8D0018;
+4c5e : 5B8E0014;
+4c5f : 5B8F0010;
+4c60 : 5B90000C;
+4c61 : 5B910008;
+4c62 : 5B9D0004;
+4c63 : B8205800;
+4c64 : B8408800;
+4c65 : B8608000;
+4c66 : B8806000;
+4c67 : FBFFFE38;
+4c68 : 29610000;
+4c69 : 3402000F;
+4c6a : 222E00FF;
+4c6b : FBFFFD63;
+4c6c : 29610000;
+4c6d : B9C01000;
+4c6e : 2231FF00;
+4c6f : FBFFFD5F;
+4c70 : 16310008;
+4c71 : 29610000;
+4c72 : BA201000;
+4c73 : 340D0000;
+4c74 : FBFFFD5A;
+4c75 : E0000006;
+4c76 : B60D1000;
+4c77 : 29610000;
+4c78 : 40420000;
+4c79 : 35AD0001;
+4c7a : FBFFFD54;
+4c7b : 498DFFFB;
+4c7c : B9600800;
+4c7d : FBFFFE22;
+4c7e : 29610000;
+4c7f : 340200AA;
+4c80 : FBFFFD4E;
+4c81 : 29610000;
+4c82 : FBFFFD69;
+4c83 : B8207800;
+4c84 : 5C2E0022;
+4c85 : 29610000;
+4c86 : FBFFFD65;
+4c87 : B8207000;
+4c88 : 5C310020;
+4c89 : 29610000;
+4c8a : 340D0000;
+4c8b : FBFFFD60;
+4c8c : B8208800;
+4c8d : E0000007;
+4c8e : 29610000;
+4c8f : FBFFFD5C;
+4c90 : B60D1000;
+4c91 : 40420000;
+4c92 : 5C220018;
+4c93 : 35AD0001;
+4c94 : 498DFFFA;
+4c95 : B9600800;
+4c96 : FBFFFE09;
+4c97 : 29610000;
+4c98 : 34020055;
+4c99 : FBFFFD35;
+4c9a : 29610000;
+4c9b : B9E01000;
+4c9c : FBFFFD32;
+4c9d : 29610000;
+4c9e : B9C01000;
+4c9f : FBFFFD2F;
+4ca0 : 29610000;
+4ca1 : BA201000;
+4ca2 : FBFFFD2C;
+4ca3 : 34012710;
+4ca4 : FBFFDFB7;
+4ca5 : E0000006;
+4ca6 : 340CFFFF;
+4ca7 : E0000004;
+4ca8 : 340CFFFE;
+4ca9 : E0000002;
+4caa : 340CFFFD;
+4cab : B9800800;
+4cac : 2B9D0004;
+4cad : 2B8B0020;
+4cae : 2B8C001C;
+4caf : 2B8D0018;
+4cb0 : 2B8E0014;
+4cb1 : 2B8F0010;
+4cb2 : 2B90000C;
+4cb3 : 2B910008;
+4cb4 : 379C0020;
+4cb5 : C3A00000;
+4cb6 : 379CFFE4;
+4cb7 : 5B8B001C;
+4cb8 : 5B8C0018;
+4cb9 : 5B8D0014;
+4cba : 5B8E0010;
+4cbb : 5B8F000C;
+4cbc : 5B900008;
+4cbd : 5B9D0004;
+4cbe : B8208000;
+4cbf : 2041001F;
+4cc0 : B8405800;
+4cc1 : B8607000;
+4cc2 : B8806000;
+4cc3 : 340D0000;
+4cc4 : 44200030;
+4cc5 : 3441FFFF;
+4cc6 : B4240800;
+4cc7 : 1422001F;
+4cc8 : B8807800;
+4cc9 : 0042001B;
+4cca : B4410800;
+4ccb : 1562001F;
+4ccc : 14210005;
+4ccd : 0042001B;
+4cce : B44B1000;
+4ccf : 14420005;
+4cd0 : 4422000C;
+4cd1 : 78010001;
+4cd2 : 38218F5C;
+4cd3 : 28220000;
+4cd4 : A1621000;
+4cd5 : 4C400005;
+4cd6 : 3442FFFF;
+4cd7 : 3401FFE0;
+4cd8 : B8411000;
+4cd9 : 34420001;
+4cda : 340F0020;
+4cdb : C9E27800;
+4cdc : BA000800;
+4cdd : B9601000;
+4cde : B9C01800;
+4cdf : B9E02000;
+4ce0 : FBFFFF7A;
+4ce1 : B8206800;
+4ce2 : 48010016;
+4ce3 : B5CF7000;
+4ce4 : B56F5800;
+4ce5 : C98F6000;
+4ce6 : E000000E;
+4ce7 : B9802000;
+4ce8 : 4DEC0002;
+4ce9 : 34040020;
+4cea : BA000800;
+4ceb : B9601000;
+4cec : B9C01800;
+4ced : FBFFFF6D;
+4cee : 48010009;
+4cef : B5A16800;
+4cf0 : 35CE0020;
+4cf1 : 356B0020;
+4cf2 : 358CFFE0;
+4cf3 : E0000002;
+4cf4 : 340F0020;
+4cf5 : 4980FFF2;
+4cf6 : E0000002;
+4cf7 : B8206800;
+4cf8 : B9A00800;
+4cf9 : 2B9D0004;
+4cfa : 2B8B001C;
+4cfb : 2B8C0018;
+4cfc : 2B8D0014;
+4cfd : 2B8E0010;
+4cfe : 2B8F000C;
+4cff : 2B900008;
+4d00 : 379C001C;
+4d01 : C3A00000;
+4d02 : 379CFFEC;
+4d03 : 5B8B0014;
+4d04 : 5B8C0010;
+4d05 : 5B8D000C;
+4d06 : 5B8E0008;
+4d07 : 5B9D0004;
+4d08 : B8405800;
+4d09 : B8206000;
+4d0a : B8607000;
+4d0b : B8806800;
+4d0c : FBFFFD93;
+4d0d : 29810000;
+4d0e : 340200F0;
+4d0f : FBFFFCBF;
+4d10 : 29810000;
+4d11 : 216200FF;
+4d12 : FBFFFCBC;
+4d13 : 2162FF00;
+4d14 : 29810000;
+4d15 : 00420008;
+4d16 : 340B0000;
+4d17 : FBFFFCB7;
+4d18 : E0000006;
+4d19 : 29810000;
+4d1a : FBFFFCD1;
+4d1b : B5CB1000;
+4d1c : 30410000;
+4d1d : 356B0001;
+4d1e : 49ABFFFB;
+4d1f : B9A00800;
+4d20 : 2B9D0004;
+4d21 : 2B8B0014;
+4d22 : 2B8C0010;
+4d23 : 2B8D000C;
+4d24 : 2B8E0008;
+4d25 : 379C0014;
+4d26 : C3A00000;
+4d27 : 379CFFE8;
+4d28 : 5B8B0018;
+4d29 : 5B8C0014;
+4d2a : 5B8D0010;
+4d2b : 5B8E000C;
+4d2c : 5B8F0008;
+4d2d : 5B9D0004;
+4d2e : B8207800;
+4d2f : 2041001F;
+4d30 : B8405800;
+4d31 : B8606000;
+4d32 : 340D0000;
+4d33 : 4420002C;
+4d34 : 3441FFFF;
+4d35 : B4230800;
+4d36 : 1422001F;
+4d37 : B8607000;
+4d38 : 0042001B;
+4d39 : B4410800;
+4d3a : 1562001F;
+4d3b : 14210005;
+4d3c : 0042001B;
+4d3d : B44B1000;
+4d3e : 14420005;
+4d3f : 4422000C;
+4d40 : 78010001;
+4d41 : 38218F5C;
+4d42 : 28220000;
+4d43 : A1621000;
+4d44 : 4C400005;
+4d45 : 3442FFFF;
+4d46 : 3401FFE0;
+4d47 : B8411000;
+4d48 : 34420001;
+4d49 : 340E0020;
+4d4a : C9C27000;
+4d4b : B9E00800;
+4d4c : B9601000;
+4d4d : B9C01800;
+4d4e : FBFFFEB3;
+4d4f : B8206800;
+4d50 : 48010013;
+4d51 : B56E5800;
+4d52 : C98E6000;
+4d53 : E000000C;
+4d54 : B9801800;
+4d55 : 4DCC0002;
+4d56 : 34030020;
+4d57 : B9E00800;
+4d58 : B9601000;
+4d59 : FBFFFEA8;
+4d5a : 48010008;
+4d5b : B5A16800;
+4d5c : 356B0020;
+4d5d : 358CFFE0;
+4d5e : E0000002;
+4d5f : 340E0020;
+4d60 : 4980FFF4;
+4d61 : E0000002;
+4d62 : B8206800;
+4d63 : B9A00800;
+4d64 : 2B9D0004;
+4d65 : 2B8B0018;
+4d66 : 2B8C0014;
+4d67 : 2B8D0010;
+4d68 : 2B8E000C;
+4d69 : 2B8F0008;
+4d6a : 379C0018;
+4d6b : C3A00000;
+4d6c : 379CFFFC;
+4d6d : 5B9D0004;
+4d6e : 34050000;
+4d6f : B8203000;
+4d70 : 34080043;
+4d71 : 34070008;
+4d72 : 40C90017;
+4d73 : 5D280006;
+4d74 : 3CA50004;
+4d75 : 34A50008;
+4d76 : B4250800;
+4d77 : FBFFFF8B;
+4d78 : E0000005;
+4d79 : 34A50001;
+4d7a : 34C60010;
+4d7b : 5CA7FFF7;
+4d7c : 3401FFFF;
+4d7d : 2B9D0004;
+4d7e : 379C0004;
+4d7f : C3A00000;
+4d80 : 379CFFFC;
+4d81 : 5B9D0004;
+4d82 : 34050000;
+4d83 : B8203000;
+4d84 : 34080043;
+4d85 : 34070008;
+4d86 : 40C90017;
+4d87 : 5D280006;
+4d88 : 3CA50004;
+4d89 : 34A50008;
+4d8a : B4250800;
+4d8b : FBFFFF2B;
+4d8c : E0000005;
+4d8d : 34A50001;
+4d8e : 34C60010;
+4d8f : 5CA7FFF7;
+4d90 : 3401FFFF;
+4d91 : 2B9D0004;
+4d92 : 379C0004;
+4d93 : C3A00000;
+4d94 : 379CFFFC;
+4d95 : 5B9D0004;
+4d96 : 34040000;
+4d97 : B8202800;
+4d98 : 34070043;
+4d99 : 34060008;
+4d9a : 40A80017;
+4d9b : 5D070006;
+4d9c : 3C840004;
+4d9d : 34840008;
+4d9e : B4240800;
+4d9f : FBFFFF88;
+4da0 : E0000005;
+4da1 : 34840001;
+4da2 : 34A50010;
+4da3 : 5C86FFF7;
+4da4 : 3401FFFF;
+4da5 : 2B9D0004;
+4da6 : 379C0004;
+4da7 : C3A00000;
+4da8 : 379CFFF4;
+4da9 : 5B8B000C;
+4daa : 5B8C0008;
+4dab : 5B9D0004;
+4dac : 780B0001;
+4dad : 396BBF94;
+4dae : 29610000;
+4daf : 5C200009;
+4db0 : FBFFF05A;
+4db1 : 78020001;
+4db2 : 342103E8;
+4db3 : 3842BF8C;
+4db4 : 58410000;
+4db5 : 29610000;
+4db6 : 34210001;
+4db7 : 59610000;
+4db8 : 780B0001;
+4db9 : 396BBF90;
+4dba : 296C0000;
+4dbb : FBFFF04F;
+4dbc : 78020001;
+4dbd : 3842BF8C;
+4dbe : 28440000;
+4dbf : C8242800;
+4dc0 : 34010000;
+4dc1 : 48050018;
+4dc2 : 21830001;
+4dc3 : 78010001;
+4dc4 : 3C650002;
+4dc5 : 38219428;
+4dc6 : B4250800;
+4dc7 : 28210000;
+4dc8 : B4242000;
+4dc9 : 29610000;
+4dca : 58440000;
+4dcb : 34020001;
+4dcc : 34210001;
+4dcd : 59610000;
+4dce : 78010001;
+4dcf : 3821C1F0;
+4dd0 : 44620003;
+4dd1 : FBFFFE18;
+4dd2 : E0000006;
+4dd3 : 34020002;
+4dd4 : FBFFFE15;
+4dd5 : 78020001;
+4dd6 : 3842AA4C;
+4dd7 : 58410004;
+4dd8 : 34010001;
+4dd9 : 2B9D0004;
+4dda : 2B8B000C;
+4ddb : 2B8C0008;
+4ddc : 379C000C;
+4ddd : C3A00000;
+4dde : 28250008;
+4ddf : 28240000;
+4de0 : 28260004;
+4de1 : B4451800;
+4de2 : 88642000;
+4de3 : 5822001C;
+4de4 : 88461000;
+4de5 : B4821000;
+4de6 : 2824000C;
+4de7 : 1442000C;
+4de8 : B4442000;
+4de9 : 28220014;
+4dea : 4C820005;
+4deb : 28240010;
+4dec : 44800008;
+4ded : 4CA3000B;
+4dee : E0000006;
+4def : 28220018;
+4df0 : 4C440006;
+4df1 : 28240010;
+4df2 : 44800002;
+4df3 : 4C650005;
+4df4 : 58230008;
+4df5 : E0000003;
+4df6 : 58230008;
+4df7 : B8801000;
+4df8 : 58220020;
+4df9 : B8400800;
+4dfa : C3A00000;
+4dfb : 2822000C;
+4dfc : 58200008;
+4dfd : 58220020;
+4dfe : C3A00000;
+4dff : 379CFFF8;
+4e00 : 5B8B0008;
+4e01 : 5B9D0004;
+4e02 : B8205800;
+4e03 : 58200014;
+4e04 : B8400800;
+4e05 : F80009AC;
+4e06 : 2963000C;
+4e07 : 29620000;
+4e08 : 4823000B;
+4e09 : 29610004;
+4e0a : 4C410003;
+4e0b : 34420001;
+4e0c : 59620000;
+4e0d : 29620000;
+4e0e : 5C410011;
+4e0f : 34010001;
+4e10 : 59610014;
+4e11 : 59610010;
+4e12 : E000000E;
+4e13 : 29610008;
+4e14 : 4C220003;
+4e15 : 3442FFFF;
+4e16 : 59620000;
+4e17 : 29620000;
+4e18 : 5C410007;
+4e19 : 34010001;
+4e1a : 59610014;
+4e1b : 59600000;
+4e1c : 59600010;
+4e1d : 3401FFFF;
+4e1e : E0000002;
+4e1f : 29610010;
+4e20 : 2B9D0004;
+4e21 : 2B8B0008;
+4e22 : 379C0008;
+4e23 : C3A00000;
+4e24 : 58200010;
+4e25 : 58200000;
+4e26 : 58200014;
+4e27 : C3A00000;
+4e28 : 78030001;
+4e29 : 3863C298;
+4e2a : 28640000;
+4e2b : 48810013;
+4e2c : 78030001;
+4e2d : 3863BFB8;
+4e2e : C8240800;
+4e2f : 44400007;
+4e30 : 28620000;
+4e31 : 34040001;
+4e32 : BC810800;
+4e33 : 28430028;
+4e34 : B8230800;
+4e35 : E0000007;
+4e36 : 28620000;
+4e37 : 34040001;
+4e38 : BC810800;
+4e39 : 28430028;
+4e3a : A4200800;
+4e3b : A0230800;
+4e3c : 58410028;
+4e3d : C3A00000;
+4e3e : 78030001;
+4e3f : 3863BFB8;
+4e40 : 44400007;
+4e41 : 28620000;
+4e42 : 34040001;
+4e43 : BC810800;
+4e44 : 28430024;
+4e45 : B8230800;
+4e46 : E0000007;
+4e47 : 28620000;
+4e48 : 34040001;
+4e49 : BC810800;
+4e4a : 28430024;
+4e4b : A4200800;
+4e4c : A0230800;
+4e4d : 58410024;
+4e4e : C3A00000;
+4e4f : 78020001;
+4e50 : 3842BFB8;
+4e51 : 28420000;
+4e52 : B8201800;
+4e53 : 34010000;
+4e54 : 28440008;
+4e55 : 20840002;
+4e56 : 4480000C;
+4e57 : 34040002;
+4e58 : 58440008;
+4e59 : 78060001;
+4e5a : 28420010;
+4e5b : 38C68F60;
+4e5c : 28C40000;
+4e5d : 3445FF9B;
+4e5e : 54A40004;
+4e5f : 08420064;
+4e60 : 34010001;
+4e61 : 58620000;
+4e62 : C3A00000;
+4e63 : 379CFFF0;
+4e64 : 5B8B0010;
+4e65 : 5B8C000C;
+4e66 : 5B8D0008;
+4e67 : 5B9D0004;
+4e68 : 780B0001;
+4e69 : B8206000;
+4e6a : 78010001;
+4e6b : 396BC298;
+4e6c : 3821C290;
+4e6d : 28210000;
+4e6e : 296D0000;
+4e6f : B42D6800;
+4e70 : 29810000;
+4e71 : B9A01000;
+4e72 : F8000110;
+4e73 : 29810004;
+4e74 : 29630000;
+4e75 : B9A01000;
+4e76 : F800018F;
+4e77 : 5980000C;
+4e78 : 59800008;
+4e79 : 2B9D0004;
+4e7a : 2B8B0010;
+4e7b : 2B8C000C;
+4e7c : 2B8D0008;
+4e7d : 379C0010;
+4e7e : C3A00000;
+4e7f : 379CFFF8;
+4e80 : 5B8B0008;
+4e81 : 5B9D0004;
+4e82 : B8205800;
+4e83 : 28210000;
+4e84 : F8000167;
+4e85 : 78010001;
+4e86 : 3821BFB8;
+4e87 : 28210000;
+4e88 : 34020001;
+4e89 : 34030009;
+4e8a : 58220004;
+4e8b : 5963000C;
+4e8c : 78030001;
+4e8d : 38638F64;
+4e8e : 59620008;
+4e8f : 28620000;
+4e90 : 5822004C;
+4e91 : 2B9D0004;
+4e92 : 2B8B0008;
+4e93 : 379C0008;
+4e94 : C3A00000;
+4e95 : B8201000;
+4e96 : 28210000;
+4e97 : 28230048;
+4e98 : 34010000;
+4e99 : 44600016;
+4e9a : 28430004;
+4e9b : 28630038;
+4e9c : 44600013;
+4e9d : 78030001;
+4e9e : 3863BFB8;
+4e9f : 28630000;
+4ea0 : 28640004;
+4ea1 : 20840004;
+4ea2 : 4480000D;
+4ea3 : 28630004;
+4ea4 : 20630008;
+4ea5 : 5C60000A;
+4ea6 : 2842000C;
+4ea7 : 3403000A;
+4ea8 : 34010001;
+4ea9 : 54430006;
+4eaa : 78010001;
+4eab : 3C420002;
+4eac : 38219458;
+4ead : B4220800;
+4eae : 28210000;
+4eaf : C3A00000;
+4eb0 : 379CFFF0;
+4eb1 : 5B8B000C;
+4eb2 : 5B8C0008;
+4eb3 : 5B9D0004;
+4eb4 : 2822000C;
+4eb5 : B8205800;
+4eb6 : 34010009;
+4eb7 : 3442FFFF;
+4eb8 : 340C0000;
+4eb9 : 544100A5;
+4eba : 78010001;
+4ebb : 3C420002;
+4ebc : 38219430;
+4ebd : B4220800;
+4ebe : 28210000;
+4ebf : C0200000;
+4ec0 : 78010001;
+4ec1 : 3821BFB8;
+4ec2 : 28210000;
+4ec3 : 340C0000;
+4ec4 : 28220004;
+4ec5 : 20420008;
+4ec6 : 5C400098;
+4ec7 : 28230004;
+4ec8 : 78028000;
+4ec9 : B8621000;
+4eca : 58220004;
+4ecb : 3401000A;
+4ecc : E0000090;
+4ecd : 78010001;
+4ece : 3821BFB8;
+4ecf : 28210000;
+4ed0 : 78040001;
+4ed1 : 38848ED4;
+4ed2 : 28230004;
+4ed3 : 28820000;
+4ed4 : A0621000;
+4ed5 : 58220004;
+4ed6 : 28220004;
+4ed7 : 20420008;
+4ed8 : 5C400083;
+4ed9 : 28210004;
+4eda : 340C0001;
+4edb : 20210004;
+4edc : 44220082;
+4edd : 596C000C;
+4ede : E0000080;
+4edf : 29610000;
+4ee0 : 340C0000;
+4ee1 : 28210048;
+4ee2 : 4420007C;
+4ee3 : FBFFB18F;
+4ee4 : 29610004;
+4ee5 : F8000146;
+4ee6 : FBFFB195;
+4ee7 : 34010008;
+4ee8 : E0000074;
+4ee9 : 78010001;
+4eea : 3821BFB8;
+4eeb : 28210000;
+4eec : 34020002;
+4eed : 340C0000;
+4eee : 58220008;
+4eef : 29610000;
+4ef0 : 28210048;
+4ef1 : 4420006D;
+4ef2 : 29610004;
+4ef3 : 28210038;
+4ef4 : 4420006A;
+4ef5 : 78010001;
+4ef6 : 3821BFCC;
+4ef7 : 28210000;
+4ef8 : 340300A2;
+4ef9 : 58230000;
+4efa : 34030003;
+4efb : 58230010;
+4efc : 34030001;
+4efd : 5823001C;
+4efe : 5962000C;
+4eff : E000005E;
+4f00 : 78010001;
+4f01 : 3821BFCC;
+4f02 : 28210000;
+4f03 : 340C0000;
+4f04 : 2822001C;
+4f05 : 20420001;
+4f06 : 44400058;
+4f07 : 34020004;
+4f08 : 5822001C;
+4f09 : FBFFEF01;
+4f0a : 342107D0;
+4f0b : 59610010;
+4f0c : 34010003;
+4f0d : E000004F;
+4f0e : FBFFEEFC;
+4f0f : 29620010;
+4f10 : 340C0000;
+4f11 : C8220800;
+4f12 : 4801004C;
+4f13 : 34010007;
+4f14 : 5961000C;
+4f15 : 5960001C;
+4f16 : E0000047;
+4f17 : 37810010;
+4f18 : FBFFFF37;
+4f19 : 340C0000;
+4f1a : 44200044;
+4f1b : 78030001;
+4f1c : 38638F68;
+4f1d : 28620000;
+4f1e : 2B810010;
+4f1f : F8000836;
+4f20 : 3802C34F;
+4f21 : E8221000;
+4f22 : 64210000;
+4f23 : B8410800;
+4f24 : 44200005;
+4f25 : 34010064;
+4f26 : 59610014;
+4f27 : 3401FF9C;
+4f28 : E0000003;
+4f29 : 59600014;
+4f2a : 34010064;
+4f2b : 59610018;
+4f2c : 34010004;
+4f2d : E000002F;
+4f2e : 29610004;
+4f2f : 340C0000;
+4f30 : F80001D1;
+4f31 : 5C20002D;
+4f32 : 37810010;
+4f33 : FBFFFF1C;
+4f34 : 442C002A;
+4f35 : 78040001;
+4f36 : 38848F68;
+4f37 : 2B810010;
+4f38 : 28820000;
+4f39 : F800081C;
+4f3a : 29620014;
+4f3b : 5B810010;
+4f3c : 44220009;
+4f3d : 2961001C;
+4f3e : 29620018;
+4f3f : B4410800;
+4f40 : 5961001C;
+4f41 : 29610004;
+4f42 : 2962001C;
+4f43 : F800019C;
+4f44 : E0000019;
+4f45 : 29620014;
+4f46 : 340C0001;
+4f47 : 5C220017;
+4f48 : 2961001C;
+4f49 : 34217530;
+4f4a : 5961001C;
+4f4b : 29610004;
+4f4c : 2962001C;
+4f4d : F8000192;
+4f4e : 34010005;
+4f4f : 5961000C;
+4f50 : E000000E;
+4f51 : 29610004;
+4f52 : 340C0000;
+4f53 : F80001AE;
+4f54 : 5C20000A;
+4f55 : 34010006;
+4f56 : E0000006;
+4f57 : B9600800;
+4f58 : FBFFFF3D;
+4f59 : 340C0000;
+4f5a : 5C200004;
+4f5b : 34010009;
+4f5c : 5961000C;
+4f5d : 340C0001;
+4f5e : B9800800;
+4f5f : 2B9D0004;
+4f60 : 2B8B000C;
+4f61 : 2B8C0008;
+4f62 : 379C0010;
+4f63 : C3A00000;
+4f64 : 78040001;
+4f65 : 3884BFB8;
+4f66 : 28850000;
+4f67 : 34040000;
+4f68 : 44600002;
+4f69 : 78048000;
+4f6a : 78060001;
+4f6b : 38C68F6C;
+4f6c : 28C30000;
+4f6d : 3C210018;
+4f6e : A0431000;
+4f6f : B8410800;
+4f70 : B8242000;
+4f71 : 58A4004C;
+4f72 : C3A00000;
+4f73 : 78040001;
+4f74 : 3884BFB8;
+4f75 : 28850000;
+4f76 : 34040000;
+4f77 : 44600002;
+4f78 : 78048000;
+4f79 : 78060001;
+4f7a : 38C68F6C;
+4f7b : 28C30000;
+4f7c : 3C210018;
+4f7d : A0431000;
+4f7e : B8410800;
+4f7f : B8242000;
+4f80 : 58A4004C;
+4f81 : C3A00000;
+4f82 : 34030005;
+4f83 : 58230028;
+4f84 : 3803FFFB;
+4f85 : 5823002C;
+4f86 : 3403FF6A;
+4f87 : 58230018;
+4f88 : 3403FFFE;
+4f89 : 58230014;
+4f8a : 34030001;
+4f8b : 58230024;
+4f8c : 340300C8;
+4f8d : 58230044;
+4f8e : 34032710;
+4f8f : 5823003C;
+4f90 : 34030064;
+4f91 : 58230040;
+4f92 : 5822000C;
+4f93 : C3A00000;
+4f94 : 379CFFF0;
+4f95 : 5B8B0010;
+4f96 : 5B8C000C;
+4f97 : 5B8D0008;
+4f98 : 5B9D0004;
+4f99 : B8205800;
+4f9a : 2821000C;
+4f9b : B8406800;
+4f9c : 340C0000;
+4f9d : 5C610047;
+4f9e : 34010022;
+4f9f : 34030000;
+4fa0 : FBFFFFC4;
+4fa1 : 29620004;
+4fa2 : 34010025;
+4fa3 : 34030000;
+4fa4 : FBFFFFC0;
+4fa5 : 29610008;
+4fa6 : 4C200004;
+4fa7 : 596D0004;
+4fa8 : 596D0008;
+4fa9 : E000003B;
+4faa : 4DA10005;
+4fab : 29620000;
+4fac : 78010040;
+4fad : B4410800;
+4fae : 59610000;
+4faf : 29630000;
+4fb0 : 78050001;
+4fb1 : 29620004;
+4fb2 : 38A58F70;
+4fb3 : 28A10000;
+4fb4 : B5A32000;
+4fb5 : C8826000;
+4fb6 : 482C0006;
+4fb7 : 78050001;
+4fb8 : 38A58F74;
+4fb9 : 28A10000;
+4fba : 49810002;
+4fbb : E0000002;
+4fbc : B8206000;
+4fbd : 78050001;
+4fbe : 38A58F78;
+4fbf : 28A10000;
+4fc0 : 4C240006;
+4fc1 : 4C220005;
+4fc2 : C8611800;
+4fc3 : C8410800;
+4fc4 : 59630000;
+4fc5 : 59610004;
+4fc6 : 29610004;
+4fc7 : B9801000;
+4fc8 : 596D0008;
+4fc9 : 34214000;
+4fca : 59610004;
+4fcb : 35610014;
+4fcc : FBFFFE12;
+4fcd : 78030001;
+4fce : 3863BFB8;
+4fcf : 29620010;
+4fd0 : B8206800;
+4fd1 : 28610000;
+4fd2 : 34030000;
+4fd3 : 582D0040;
+4fd4 : 34410001;
+4fd5 : 59610010;
+4fd6 : 34010026;
+4fd7 : FBFFFF8D;
+4fd8 : 34010020;
+4fd9 : B9A01000;
+4fda : 34030000;
+4fdb : FBFFFF89;
+4fdc : B9801000;
+4fdd : 34010021;
+4fde : 34030001;
+4fdf : FBFFFF85;
+4fe0 : B9801000;
+4fe1 : 35610038;
+4fe2 : FBFFFE1D;
+4fe3 : 7C2C0000;
+4fe4 : B9800800;
+4fe5 : 2B9D0004;
+4fe6 : 2B8B0010;
+4fe7 : 2B8C000C;
+4fe8 : 2B8D0008;
+4fe9 : 379C0010;
+4fea : C3A00000;
+4feb : 379CFFF8;
+4fec : 5B8B0008;
+4fed : 5B9D0004;
+4fee : B8205800;
+4fef : 28210028;
+4ff0 : 59600004;
+4ff1 : 59600000;
+4ff2 : 59610020;
+4ff3 : 3401FFFF;
+4ff4 : 59610008;
+4ff5 : 59600010;
+4ff6 : 35610014;
+4ff7 : FBFFFE04;
+4ff8 : 35610038;
+4ff9 : FBFFFE2B;
+4ffa : 2961000C;
+4ffb : 34020001;
+4ffc : FBFFFE2C;
+4ffd : 34010024;
+4ffe : 34020001;
+4fff : 34030001;
+5000 : FBFFFF64;
+5001 : 2B9D0004;
+5002 : 2B8B0008;
+5003 : 379C0008;
+5004 : C3A00000;
+5005 : 379CFFF8;
+5006 : 5B8B0008;
+5007 : 5B9D0004;
+5008 : B8205800;
+5009 : 34010005;
+500a : 59610018;
+500b : 3801FFFA;
+500c : 5961001C;
+500d : 34010001;
+500e : 59610014;
+500f : 34017530;
+5010 : 59610010;
+5011 : 3401FBB4;
+5012 : 59610008;
+5013 : 3401FFE2;
+5014 : 59610004;
+5015 : 340104B0;
+5016 : 59610034;
+5017 : 340103E8;
+5018 : 5961002C;
+5019 : 34010064;
+501a : 59610030;
+501b : 78010001;
+501c : 3821C298;
+501d : 28210000;
+501e : 59630064;
+501f : 59620060;
+5020 : C8611800;
+5021 : 5963006C;
+5022 : 35610004;
+5023 : 59600070;
+5024 : FBFFFDD7;
+5025 : 35610028;
+5026 : FBFFFDFE;
+5027 : 2B9D0004;
+5028 : 2B8B0008;
+5029 : 379C0008;
+502a : C3A00000;
+502b : 379CFFF8;
+502c : 5B8B0008;
+502d : 5B9D0004;
+502e : B8205800;
+502f : 58200044;
+5030 : 58200040;
+5031 : 3401FFFF;
+5032 : 59610048;
+5033 : 5961004C;
+5034 : 59610050;
+5035 : 59610054;
+5036 : 34010001;
+5037 : 59610070;
+5038 : 59600058;
+5039 : 35610004;
+503a : 5960005C;
+503b : 59600068;
+503c : FBFFFDBF;
+503d : 35610028;
+503e : FBFFFDE6;
+503f : 29610060;
+5040 : 34020001;
+5041 : FBFFFDE7;
+5042 : 29610064;
+5043 : 34020001;
+5044 : FBFFFDE4;
+5045 : 34010004;
+5046 : 34020001;
+5047 : 34030001;
+5048 : FBFFFF2B;
+5049 : 2B9D0004;
+504a : 2B8B0008;
+504b : 379C0008;
+504c : C3A00000;
+504d : 379CFFF8;
+504e : 5B8B0008;
+504f : 5B9D0004;
+5050 : B8205800;
+5051 : 28210064;
+5052 : 34020000;
+5053 : FBFFFDD5;
+5054 : 59600070;
+5055 : 2B9D0004;
+5056 : 2B8B0008;
+5057 : 379C0008;
+5058 : C3A00000;
+5059 : 379CFFF0;
+505a : 5B8B0010;
+505b : 5B8C000C;
+505c : 5B8D0008;
+505d : 5B9D0004;
+505e : 28240070;
+505f : B8205800;
+5060 : 34010001;
+5061 : 44800078;
+5062 : 29610060;
+5063 : 5C610002;
+5064 : 59620048;
+5065 : 29610064;
+5066 : 5C610002;
+5067 : 5962004C;
+5068 : 29610048;
+5069 : 48010009;
+506a : 29620050;
+506b : 48020006;
+506c : 4C220005;
+506d : 29630040;
+506e : 78020040;
+506f : B4621000;
+5070 : 59620040;
+5071 : 59610050;
+5072 : 2961004C;
+5073 : 48010009;
+5074 : 29620054;
+5075 : 48020006;
+5076 : 4C220005;
+5077 : 29630044;
+5078 : 78020040;
+5079 : B4621000;
+507a : 59620044;
+507b : 59610054;
+507c : 29630048;
+507d : 34010000;
+507e : 4803005B;
+507f : 2962004C;
+5080 : 48020059;
+5081 : 296C0040;
+5082 : 29610038;
+5083 : B46C1800;
+5084 : 296C0044;
+5085 : C8621000;
+5086 : C84C6000;
+5087 : 44200006;
+5088 : 218C3FFF;
+5089 : 21812000;
+508a : 44200003;
+508b : 3401C000;
+508c : B9816000;
+508d : B9801000;
+508e : 35610004;
+508f : FBFFFD4F;
+5090 : 2962006C;
+5091 : 78030001;
+5092 : 3863BFB8;
+5093 : 2042000F;
+5094 : B8206800;
+5095 : 3C420010;
+5096 : 28610000;
+5097 : 21A3FFFF;
+5098 : B8621000;
+5099 : 58220044;
+509a : 29630040;
+509b : 29620048;
+509c : 34010005;
+509d : B4621000;
+509e : 34030000;
+509f : FBFFFED4;
+50a0 : 29630044;
+50a1 : 2962004C;
+50a2 : 34010002;
+50a3 : B4621000;
+50a4 : 34030000;
+50a5 : FBFFFECE;
+50a6 : 34010001;
+50a7 : B9801000;
+50a8 : 34030000;
+50a9 : FBFFFECA;
+50aa : 29620068;
+50ab : 34030000;
+50ac : 34410001;
+50ad : 59610068;
+50ae : 34010006;
+50af : FBFFFEC4;
+50b0 : 34010000;
+50b1 : B9A01000;
+50b2 : 34030001;
+50b3 : FBFFFEC0;
+50b4 : 78020001;
+50b5 : 3401FFFF;
+50b6 : 38428F7C;
+50b7 : 5961004C;
+50b8 : 59610048;
+50b9 : 29630040;
+50ba : 28410000;
+50bb : 4C23000A;
+50bc : 29620044;
+50bd : 4C220008;
+50be : 78040001;
+50bf : 38848F80;
+50c0 : 28810000;
+50c1 : B4611800;
+50c2 : B4410800;
+50c3 : 59630040;
+50c4 : 59610044;
+50c5 : 29610038;
+50c6 : 4420000F;
+50c7 : 2961005C;
+50c8 : 29620058;
+50c9 : 4C220006;
+50ca : 34210001;
+50cb : 5961005C;
+50cc : 29610040;
+50cd : 3421FFFF;
+50ce : E0000006;
+50cf : 4C410006;
+50d0 : 3421FFFF;
+50d1 : 5961005C;
+50d2 : 29610040;
+50d3 : 34210001;
+50d4 : 59610040;
+50d5 : 35610028;
+50d6 : B9801000;
+50d7 : FBFFFD28;
+50d8 : 7C210000;
+50d9 : 2B9D0004;
+50da : 2B8B0010;
+50db : 2B8C000C;
+50dc : 2B8D0008;
+50dd : 379C0010;
+50de : C3A00000;
+50df : 379CFFF0;
+50e0 : 5B8B0008;
+50e1 : 5B9D0004;
+50e2 : B8205800;
+50e3 : 1443001F;
+50e4 : 3781000C;
+50e5 : 4802000B;
+50e6 : 00440012;
+50e7 : 3C63000E;
+50e8 : 3C42000E;
+50e9 : B8641800;
+50ea : 5B820010;
+50eb : 34021F40;
+50ec : 5B83000C;
+50ed : FBFFB781;
+50ee : 2B820010;
+50ef : E0000009;
+50f0 : 0842C000;
+50f1 : 5B820010;
+50f2 : 1442001F;
+50f3 : 5B82000C;
+50f4 : 34021F40;
+50f5 : FBFFB779;
+50f6 : 2B820010;
+50f7 : C8021000;
+50f8 : 0041001F;
+50f9 : B4221000;
+50fa : 14420001;
+50fb : 34010000;
+50fc : 59620058;
+50fd : 2B9D0004;
+50fe : 2B8B0008;
+50ff : 379C0010;
+5100 : C3A00000;
+5101 : 28220058;
+5102 : 2821005C;
+5103 : FC410800;
+5104 : C3A00000;
+5105 : 58220004;
+5106 : 5820001C;
+5107 : 58230008;
+5108 : 5820000C;
+5109 : 58200010;
+510a : 58200000;
+510b : C3A00000;
+510c : 379CFFFC;
+510d : 5B9D0004;
+510e : 34020001;
+510f : 58220000;
+5110 : 58200014;
+5111 : 5820001C;
+5112 : 5820000C;
+5113 : 58200010;
+5114 : 28210004;
+5115 : FBFFFD13;
+5116 : 78010001;
+5117 : 3821C298;
+5118 : 28210000;
+5119 : 34020001;
+511a : FBFFFD0E;
+511b : 2B9D0004;
+511c : 379C0004;
+511d : C3A00000;
+511e : 379CFFB0;
+511f : 5B8B0010;
+5120 : 5B8C000C;
+5121 : 5B8D0008;
+5122 : 5B9D0004;
+5123 : B8205800;
+5124 : B8406000;
+5125 : B8606800;
+5126 : 37810014;
+5127 : 34020000;
+5128 : 34030040;
+5129 : F800072B;
+512a : 3401C000;
+512b : 78040001;
+512c : 5B810020;
+512d : 3884C298;
+512e : 34014000;
+512f : 5B810044;
+5130 : 28810000;
+5131 : 5DA10005;
+5132 : 78030001;
+5133 : 3863AD7C;
+5134 : 586C0000;
+5135 : E0000027;
+5136 : 3DAD0005;
+5137 : B56D5800;
+5138 : 29610000;
+5139 : 44200023;
+513a : 78030001;
+513b : 3863AD7C;
+513c : 28610000;
+513d : 29620010;
+513e : C9810800;
+513f : 20213FFF;
+5140 : 1423000C;
+5141 : 5C400007;
+5142 : 3C630002;
+5143 : 5961000C;
+5144 : 34010001;
+5145 : 59630014;
+5146 : 59610010;
+5147 : E0000015;
+5148 : 2964000C;
+5149 : 34420001;
+514a : B4240800;
+514b : 29640014;
+514c : B4641800;
+514d : 3C630002;
+514e : 37840050;
+514f : B4831800;
+5150 : 2863FFC4;
+5151 : 59620010;
+5152 : B4230800;
+5153 : 29630008;
+5154 : 5961000C;
+5155 : 5C430007;
+5156 : F80005D2;
+5157 : 59610018;
+5158 : 34010001;
+5159 : 5961001C;
+515a : 5960000C;
+515b : 59600010;
+515c : 34010000;
+515d : 2B9D0004;
+515e : 2B8B0010;
+515f : 2B8C000C;
+5160 : 2B8D0008;
+5161 : 379C0050;
+5162 : C3A00000;
+5163 : 78030001;
+5164 : 3863BFB8;
+5165 : 5C40000A;
+5166 : 34040001;
+5167 : 28620000;
+5168 : BC810800;
+5169 : 202100FF;
+516a : 28430020;
+516b : 3C210010;
+516c : A4200800;
+516d : A0230800;
+516e : E0000008;
+516f : 28620000;
+5170 : 34040001;
+5171 : BC810800;
+5172 : 28430020;
+5173 : 202100FF;
+5174 : 3C210010;
+5175 : B8230800;
+5176 : 58410020;
+5177 : C3A00000;
+5178 : 379CFFF8;
+5179 : 5B8B0008;
+517a : 5B9D0004;
+517b : 34020001;
+517c : 44220009;
+517d : 34020002;
+517e : 4422000C;
+517f : 5C200017;
+5180 : 78010001;
+5181 : 3821BFB8;
+5182 : 282B0000;
+5183 : 356B0018;
+5184 : E000000A;
+5185 : 78010001;
+5186 : 3821BFB8;
+5187 : 282B0000;
+5188 : 356B0014;
+5189 : E0000005;
+518a : 78010001;
+518b : 3821BFB8;
+518c : 282B0000;
+518d : 356B001C;
+518e : 340107D0;
+518f : FBFFEC80;
+5190 : 78030001;
+5191 : 38638F28;
+5192 : 29620000;
+5193 : 28610000;
+5194 : A0410800;
+5195 : E0000002;
+5196 : 34010000;
+5197 : 2B9D0004;
+5198 : 2B8B0008;
+5199 : 379C0008;
+519a : C3A00000;
+519b : 379CFFF8;
+519c : 5B8B0008;
+519d : 5B9D0004;
+519e : 78030001;
+519f : B8405800;
+51a0 : 3863C060;
+51a1 : 44200007;
+51a2 : 3421FFFF;
+51a3 : 0823007C;
+51a4 : 78010001;
+51a5 : 3821BFD8;
+51a6 : B4610800;
+51a7 : 34230104;
+51a8 : B8600800;
+51a9 : B9601000;
+51aa : FBFFFF35;
+51ab : 78010001;
+51ac : 3821BFD8;
+51ad : 582B0014;
+51ae : 2B9D0004;
+51af : 2B8B0008;
+51b0 : 379C0008;
+51b1 : C3A00000;
+51b2 : 379CFFEC;
+51b3 : 5B8B0014;
+51b4 : 5B8C0010;
+51b5 : 5B8D000C;
+51b6 : 5B8E0008;
+51b7 : 5B9D0004;
+51b8 : 780C0001;
+51b9 : 780D0001;
+51ba : B8207000;
+51bb : 340B0000;
+51bc : 398CC298;
+51bd : 39ADBF98;
+51be : E000000A;
+51bf : 29A10000;
+51c0 : 942B0800;
+51c1 : 20210001;
+51c2 : 44200005;
+51c3 : 3D620005;
+51c4 : B5C21000;
+51c5 : 344101F4;
+51c6 : FBFFFF46;
+51c7 : 356B0001;
+51c8 : 29810000;
+51c9 : 482BFFF6;
+51ca : 2B9D0004;
+51cb : 2B8B0014;
+51cc : 2B8C0010;
+51cd : 2B8D000C;
+51ce : 2B8E0008;
+51cf : 379C0014;
+51d0 : C3A00000;
+51d1 : 379CFFBC;
+51d2 : 5B8B0044;
+51d3 : 5B8C0040;
+51d4 : 5B8D003C;
+51d5 : 5B8E0038;
+51d6 : 5B8F0034;
+51d7 : 5B900030;
+51d8 : 5B91002C;
+51d9 : 5B920028;
+51da : 5B930024;
+51db : 5B940020;
+51dc : 5B95001C;
+51dd : 5B960018;
+51de : 5B970014;
+51df : 5B980010;
+51e0 : 5B99000C;
+51e1 : 5B9B0008;
+51e2 : 5B9D0004;
+51e3 : 781B0001;
+51e4 : 780B0001;
+51e5 : 78190001;
+51e6 : 780D0001;
+51e7 : 78110001;
+51e8 : 78100001;
+51e9 : 780C0001;
+51ea : 78170001;
+51eb : 780F0001;
+51ec : 3B7BBFB8;
+51ed : 396BBFD8;
+51ee : 34140009;
+51ef : 3B399484;
+51f0 : 34180001;
+51f1 : 34130003;
+51f2 : 39ADC040;
+51f3 : 34120008;
+51f4 : 3A31C060;
+51f5 : 3A10BFF0;
+51f6 : 398CC298;
+51f7 : 3AF7C1CC;
+51f8 : 39EFC290;
+51f9 : E000007E;
+51fa : 2875007C;
+51fb : 780100FF;
+51fc : 3821FFFF;
+51fd : 02AE0018;
+51fe : A2A1A800;
+51ff : 29610004;
+5200 : 21CE007F;
+5201 : 3421FFFF;
+5202 : 54340055;
+5203 : 3C210002;
+5204 : B7210800;
+5205 : 28210000;
+5206 : C0200000;
+5207 : 29610044;
+5208 : 58610040;
+5209 : 296100A4;
+520a : 296200A0;
+520b : B4410800;
+520c : 0022001F;
+520d : B4410800;
+520e : 14210001;
+520f : 34020001;
+5210 : 58610044;
+5211 : 29810000;
+5212 : FBFFFC16;
+5213 : FBFFEBF7;
+5214 : 34210032;
+5215 : 59610008;
+5216 : 3401000A;
+5217 : E0000011;
+5218 : 29760008;
+5219 : FBFFEBF1;
+521a : CAC10800;
+521b : 4C20003C;
+521c : 29610000;
+521d : 5C380003;
+521e : 59780004;
+521f : E0000038;
+5220 : 59730004;
+5221 : E0000036;
+5222 : 29810000;
+5223 : 34020000;
+5224 : FBFFFC04;
+5225 : B9A00800;
+5226 : FBFFFC59;
+5227 : 34010002;
+5228 : 59610004;
+5229 : E000002E;
+522a : B9A00800;
+522b : FBFFFC6A;
+522c : E0000012;
+522d : BA000800;
+522e : FBFFFDBD;
+522f : 34010004;
+5230 : E3FFFFF8;
+5231 : 29610060;
+5232 : 44200025;
+5233 : 29610064;
+5234 : 44200023;
+5235 : 29610000;
+5236 : 5C330009;
+5237 : 34010005;
+5238 : E3FFFFF0;
+5239 : BA200800;
+523a : FBFFFDF1;
+523b : 34010006;
+523c : E3FFFFEC;
+523d : 296100C0;
+523e : 44200019;
+523f : B9600800;
+5240 : FBFFFF72;
+5241 : 59720004;
+5242 : 296100E8;
+5243 : 34020001;
+5244 : E0000012;
+5245 : 29610000;
+5246 : 5C380004;
+5247 : B9A00800;
+5248 : FBFFFC4D;
+5249 : 44200007;
+524a : 29610060;
+524b : 44200005;
+524c : 29610000;
+524d : 5C33000A;
+524e : 296100C0;
+524f : 5C200008;
+5250 : 2961000C;
+5251 : 34020000;
+5252 : 34210001;
+5253 : 5961000C;
+5254 : 59740004;
+5255 : 296100E8;
+5256 : FBFFFF0D;
+5257 : BA000800;
+5258 : BAA01000;
+5259 : B9C01800;
+525a : FBFFFD3A;
+525b : 29610060;
+525c : 4420001B;
+525d : BA200800;
+525e : BAA01000;
+525f : B9C01800;
+5260 : FBFFFDF9;
+5261 : 29610004;
+5262 : 5C320015;
+5263 : 29610000;
+5264 : 34160000;
+5265 : 5C33000C;
+5266 : E0000008;
+5267 : 0AC1007C;
+5268 : BAA01000;
+5269 : B9C01800;
+526a : B5610800;
+526b : 34210104;
+526c : FBFFFDED;
+526d : 36D60001;
+526e : 29E10000;
+526f : 3421FFFF;
+5270 : 4836FFF7;
+5271 : 29810000;
+5272 : 49C10005;
+5273 : BAE00800;
+5274 : BAA01000;
+5275 : B9C01800;
+5276 : FBFFFEA8;
+5277 : 2B630000;
+5278 : 78020002;
+5279 : 28610080;
+527a : A0220800;
+527b : 4420FF7F;
+527c : 29610010;
+527d : 34210001;
+527e : 59610010;
+527f : 34010001;
+5280 : D0410000;
+5281 : 2B9D0004;
+5282 : 2B8B0044;
+5283 : 2B8C0040;
+5284 : 2B8D003C;
+5285 : 2B8E0038;
+5286 : 2B8F0034;
+5287 : 2B900030;
+5288 : 2B91002C;
+5289 : 2B920028;
+528a : 2B930024;
+528b : 2B940020;
+528c : 2B95001C;
+528d : 2B960018;
+528e : 2B970014;
+528f : 2B980010;
+5290 : 2B99000C;
+5291 : 2B9B0008;
+5292 : 379C0044;
+5293 : C3A00000;
+5294 : 78010001;
+5295 : 3821BFD4;
+5296 : 28220000;
+5297 : 78030001;
+5298 : 78010001;
+5299 : 3821BFCC;
+529a : 38638F84;
+529b : 58220000;
+529c : 28610000;
+529d : 58410000;
+529e : C3A00000;
+529f : 379CFFD4;
+52a0 : 5B8B0028;
+52a1 : 5B8C0024;
+52a2 : 5B8D0020;
+52a3 : 5B8E001C;
+52a4 : 5B8F0018;
+52a5 : 5B900014;
+52a6 : 5B910010;
+52a7 : 5B92000C;
+52a8 : 5B930008;
+52a9 : 5B9D0004;
+52aa : B8205800;
+52ab : B8408000;
+52ac : B8609000;
+52ad : FBFFADC5;
+52ae : 78010001;
+52af : 3821C2C4;
+52b0 : 28240000;
+52b1 : 78010001;
+52b2 : 3821BFB8;
+52b3 : 58240000;
+52b4 : 78010001;
+52b5 : 28850000;
+52b6 : 3821BFD4;
+52b7 : 28210000;
+52b8 : 78020001;
+52b9 : 3842BFCC;
+52ba : 00A60010;
+52bb : 58410000;
+52bc : 78020001;
+52bd : 3842C298;
+52be : 20C6003F;
+52bf : 00A50018;
+52c0 : 58460000;
+52c1 : 78020001;
+52c2 : 3842C290;
+52c3 : 20A50007;
+52c4 : 58450000;
+52c5 : 78050001;
+52c6 : 38A5BFD8;
+52c7 : 58AB0000;
+52c8 : 58A0000C;
+52c9 : 58800040;
+52ca : 58800044;
+52cb : 58800000;
+52cc : 58800028;
+52cd : 58800024;
+52ce : 58800004;
+52cf : 78030001;
+52d0 : 58800020;
+52d1 : 340203E8;
+52d2 : 38638F34;
+52d3 : 58820048;
+52d4 : 28620000;
+52d5 : 5820001C;
+52d6 : 58220000;
+52d7 : 34010004;
+52d8 : 5D610004;
+52d9 : 34010007;
+52da : 58A10004;
+52db : E0000006;
+52dc : 34010009;
+52dd : 58A10004;
+52de : 34010003;
+52df : 5D610002;
+52e0 : BA003000;
+52e1 : 78010001;
+52e2 : B8C01000;
+52e3 : 3821BFF0;
+52e4 : 780D0001;
+52e5 : FBFFFC9D;
+52e6 : 39ADC298;
+52e7 : 29A30000;
+52e8 : 78010001;
+52e9 : 3821C060;
+52ea : BA001000;
+52eb : 780F0001;
+52ec : 780E0001;
+52ed : FBFFFD18;
+52ee : 340C0000;
+52ef : 39EFC290;
+52f0 : 39CEBFD8;
+52f1 : 34130001;
+52f2 : E000000C;
+52f3 : 0991007C;
+52f4 : 29A40000;
+52f5 : BA001000;
+52f6 : B5D10800;
+52f7 : 34840001;
+52f8 : B48C1800;
+52f9 : 34210104;
+52fa : B5D18800;
+52fb : FBFFFD0A;
+52fc : 358C0001;
+52fd : 5A3300FC;
+52fe : 29E10000;
+52ff : 3421FFFF;
+5300 : 482CFFF3;
+5301 : 34010002;
+5302 : 5D610006;
+5303 : 78010001;
+5304 : 3821BFCC;
+5305 : 28210000;
+5306 : 3402000C;
+5307 : 5822001C;
+5308 : 780E0001;
+5309 : 780D0001;
+530a : 340C0000;
+530b : 39CEC298;
+530c : 39ADBFD8;
+530d : E0000008;
+530e : 3D810005;
+530f : B9801000;
+5310 : B5A10800;
+5311 : 342101F4;
+5312 : 34030200;
+5313 : FBFFFDF2;
+5314 : 358C0001;
+5315 : 29C20000;
+5316 : 484CFFF8;
+5317 : 34010001;
+5318 : 5D610017;
+5319 : 78010001;
+531a : 3821BFB8;
+531b : 28210000;
+531c : 28210004;
+531d : 20210002;
+531e : 44200021;
+531f : 78010001;
+5320 : 78040001;
+5321 : 3821BFD8;
+5322 : 3884BFF0;
+5323 : 58240068;
+5324 : 78040001;
+5325 : 3884C060;
+5326 : 5824006C;
+5327 : 78010001;
+5328 : 3821C290;
+5329 : 28240000;
+532a : 78010001;
+532b : 3821C040;
+532c : B4441000;
+532d : BA401800;
+532e : FBFFFB35;
+532f : 78010001;
+5330 : 3821BFB8;
+5331 : 28210000;
+5332 : 78020002;
+5333 : E0000003;
+5334 : 2823007C;
+5335 : 5B83002C;
+5336 : 28230080;
+5337 : A0621800;
+5338 : 4460FFFC;
+5339 : 34020001;
+533a : 58220064;
+533b : 28220028;
+533c : 38420001;
+533d : 58220028;
+533e : FBFFAD3D;
+533f : 2B9D0004;
+5340 : 2B8B0028;
+5341 : 2B8C0024;
+5342 : 2B8D0020;
+5343 : 2B8E001C;
+5344 : 2B8F0018;
+5345 : 2B900014;
+5346 : 2B910010;
+5347 : 2B92000C;
+5348 : 2B930008;
+5349 : 379C002C;
+534a : C3A00000;
+534b : 379CFFFC;
+534c : 5B9D0004;
+534d : 78020001;
+534e : 3842BFD8;
+534f : 28430004;
+5350 : 64240000;
+5351 : 7C630008;
+5352 : B8831800;
+5353 : 5C600006;
+5354 : 3421FFFF;
+5355 : 0821007C;
+5356 : B4410800;
+5357 : 34210104;
+5358 : FBFFFCD3;
+5359 : 2B9D0004;
+535a : 379C0004;
+535b : C3A00000;
+535c : 379CFFFC;
+535d : 5B9D0004;
+535e : 44200008;
+535f : 3421FFFF;
+5360 : 0821007C;
+5361 : 78020001;
+5362 : 3842BFD8;
+5363 : B4220800;
+5364 : 34210104;
+5365 : FBFFFCE8;
+5366 : 2B9D0004;
+5367 : 379C0004;
+5368 : C3A00000;
+5369 : 78020001;
+536a : B8201800;
+536b : 3842BFD8;
+536c : 5C200004;
+536d : 28410004;
+536e : 64210008;
+536f : C3A00000;
+5370 : 28450004;
+5371 : 34040008;
+5372 : 34010000;
+5373 : 5CA40006;
+5374 : 3463FFFF;
+5375 : 0863007C;
+5376 : B4431000;
+5377 : 2841013C;
+5378 : 7C210000;
+5379 : C3A00000;
+537a : 379CFFE8;
+537b : 5B8B0018;
+537c : 5B8C0014;
+537d : 5B8D0010;
+537e : 5B8E000C;
+537f : 5B8F0008;
+5380 : 5B9D0004;
+5381 : 3403FFFF;
+5382 : B8407800;
+5383 : 5C230016;
+5384 : 34010000;
+5385 : 780C0001;
+5386 : 780D0001;
+5387 : FBFFFE14;
+5388 : 340B0000;
+5389 : 398CC290;
+538a : 39ADBFD8;
+538b : 340E0004;
+538c : E0000009;
+538d : 0961007C;
+538e : B5A10800;
+538f : 282100FC;
+5390 : 5C2E0004;
+5391 : 35610001;
+5392 : B9E01000;
+5393 : FBFFFE08;
+5394 : 356B0001;
+5395 : 29810000;
+5396 : 3421FFFF;
+5397 : 482BFFF6;
+5398 : E0000002;
+5399 : FBFFFE02;
+539a : 2B9D0004;
+539b : 2B8B0018;
+539c : 2B8C0014;
+539d : 2B8D0010;
+539e : 2B8E000C;
+539f : 2B8F0008;
+53a0 : 379C0018;
+53a1 : C3A00000;
+53a2 : 379CFFF0;
+53a3 : 5B8B0010;
+53a4 : 5B8C000C;
+53a5 : 5B8D0008;
+53a6 : 5B9D0004;
+53a7 : 780B0001;
+53a8 : B8406800;
+53a9 : B8606000;
+53aa : 396BC060;
+53ab : 44200007;
+53ac : 3421FFFF;
+53ad : 082B007C;
+53ae : 78010001;
+53af : 3821BFD8;
+53b0 : B5610800;
+53b1 : 342B0104;
+53b2 : 45A0000B;
+53b3 : 2962005C;
+53b4 : 34041F40;
+53b5 : 34030000;
+53b6 : 3C420001;
+53b7 : 1441001F;
+53b8 : F800032B;
+53b9 : 3C210012;
+53ba : 0044000E;
+53bb : B8242000;
+53bc : 59A40000;
+53bd : 4580000B;
+53be : 29620058;
+53bf : 34030000;
+53c0 : 34041F40;
+53c1 : 3C420001;
+53c2 : 1441001F;
+53c3 : F8000320;
+53c4 : 3C210012;
+53c5 : 0042000E;
+53c6 : B8221000;
+53c7 : 59820000;
+53c8 : 2B9D0004;
+53c9 : 2B8B0010;
+53ca : 2B8C000C;
+53cb : 2B8D0008;
+53cc : 379C0010;
+53cd : C3A00000;
+53ce : 379CFFF0;
+53cf : 5B8B0010;
+53d0 : 5B8C000C;
+53d1 : 5B8D0008;
+53d2 : 5B9D0004;
+53d3 : B8205800;
+53d4 : B8406800;
+53d5 : 78010001;
+53d6 : 3D620005;
+53d7 : 3821BFD8;
+53d8 : B4220800;
+53d9 : 2824020C;
+53da : B8606000;
+53db : 4C800003;
+53dc : 34844000;
+53dd : E0000004;
+53de : 34013FFF;
+53df : 4C240002;
+53e0 : 3484C000;
+53e1 : 3C840001;
+53e2 : 34010000;
+53e3 : 20823FFE;
+53e4 : 34030000;
+53e5 : 34041F40;
+53e6 : F80002FD;
+53e7 : 3C210012;
+53e8 : 0044000E;
+53e9 : B8242000;
+53ea : 59A40000;
+53eb : 4580000C;
+53ec : 78010001;
+53ed : 3821BF98;
+53ee : 28220000;
+53ef : 3D630005;
+53f0 : 78010001;
+53f1 : 3821BFD8;
+53f2 : B4230800;
+53f3 : 282101F8;
+53f4 : 94410800;
+53f5 : 20210001;
+53f6 : 59810000;
+53f7 : 3D6B0005;
+53f8 : 78020001;
+53f9 : 3842BFD8;
+53fa : B44B1000;
+53fb : 28410210;
+53fc : 2B9D0004;
+53fd : 2B8B0010;
+53fe : 2B8C000C;
+53ff : 2B8D0008;
+5400 : 379C0010;
+5401 : C3A00000;
+5402 : 44200005;
+5403 : 78030001;
+5404 : 3863C298;
+5405 : 28630000;
+5406 : 58230000;
+5407 : 44400005;
+5408 : 78010001;
+5409 : 3821C290;
+540a : 28210000;
+540b : 58410000;
+540c : C3A00000;
+540d : 379CFFF4;
+540e : 5B9D000C;
+540f : 78010001;
+5410 : 3821BFD8;
+5411 : 28230004;
+5412 : 78020001;
+5413 : 384294AC;
+5414 : 3C630002;
+5415 : B4431000;
+5416 : 28430000;
+5417 : 28220004;
+5418 : 3401000A;
+5419 : 54410002;
+541a : E0000003;
+541b : 78030001;
+541c : 38638DF4;
+541d : 78010001;
+541e : 3821BFD8;
+541f : 28220000;
+5420 : 4C02000E;
+5421 : 28220010;
+5422 : 28240000;
+5423 : 28250074;
+5424 : 28260060;
+5425 : 282700C0;
+5426 : 2828004C;
+5427 : 282900AC;
+5428 : 2821000C;
+5429 : 5B890004;
+542a : 5B810008;
+542b : 78010001;
+542c : 38218E00;
+542d : FBFFE3F1;
+542e : 2B9D000C;
+542f : 379C000C;
+5430 : C3A00000;
+5431 : 379CFFFC;
+5432 : 5B9D0004;
+5433 : 5C200004;
+5434 : 78010001;
+5435 : 3821C060;
+5436 : E0000007;
+5437 : 3421FFFF;
+5438 : 0821007C;
+5439 : 78020001;
+543a : 3842BFD8;
+543b : B4220800;
+543c : 34210104;
+543d : FBFFFCC4;
+543e : 2B9D0004;
+543f : 379C0004;
+5440 : C3A00000;
+5441 : 379CFFF0;
+5442 : 5B8B0010;
+5443 : 5B8C000C;
+5444 : 5B8D0008;
+5445 : 5B9D0004;
+5446 : 780D0001;
+5447 : 780B0001;
+5448 : B8206000;
+5449 : 39ADBFD8;
+544a : 396BBF98;
+544b : 4440000D;
+544c : 34020001;
+544d : FBFFF9DB;
+544e : 3D810005;
+544f : B5A16800;
+5450 : 35A101F4;
+5451 : FBFFFCBB;
+5452 : 29610000;
+5453 : 34020001;
+5454 : BC4C6000;
+5455 : B9816000;
+5456 : 596C0000;
+5457 : E000000A;
+5458 : 34030001;
+5459 : 29640000;
+545a : BC611800;
+545b : A4601800;
+545c : A0641800;
+545d : 59630000;
+545e : 29A300E8;
+545f : 44230002;
+5460 : FBFFF9C8;
+5461 : 2B9D0004;
+5462 : 2B8B0010;
+5463 : 2B8C000C;
+5464 : 2B8D0008;
+5465 : 379C0010;
+5466 : C3A00000;
+5467 : 0821007C;
+5468 : 78020001;
+5469 : 3842BFD8;
+546a : B4411000;
+546b : 284100FC;
+546c : 284300FC;
+546d : 34020004;
+546e : 7C210001;
+546f : 5C620002;
+5470 : 38210002;
+5471 : C3A00000;
+5472 : 4C200005;
+5473 : 78010001;
+5474 : 3821BFD8;
+5475 : 2821004C;
+5476 : C3A00000;
+5477 : 78020001;
+5478 : 3842BFD8;
+5479 : 5C200003;
+547a : 284100AC;
+547b : C3A00000;
+547c : 3421FFFF;
+547d : 0821007C;
+547e : B4411000;
+547f : 28410128;
+5480 : C3A00000;
+5481 : 78030001;
+5482 : 3863BFB8;
+5483 : 4C200007;
+5484 : 78010001;
+5485 : 3821BFD8;
+5486 : 5822004C;
+5487 : 28610000;
+5488 : 58220040;
+5489 : C3A00000;
+548a : 2024000F;
+548b : 28630000;
+548c : 3C840010;
+548d : 2045FFFF;
+548e : B8A42000;
+548f : 58640044;
+5490 : 78030001;
+5491 : 3863BFD8;
+5492 : 5C200003;
+5493 : 586200AC;
+5494 : C3A00000;
+5495 : 3421FFFF;
+5496 : 0821007C;
+5497 : B4611800;
+5498 : 58620128;
+5499 : C3A00000;
+549a : 379CFFCC;
+549b : 5B8B0034;
+549c : 5B8C0030;
+549d : 5B8D002C;
+549e : 5B8E0028;
+549f : 5B8F0024;
+54a0 : 5B900020;
+54a1 : 5B91001C;
+54a2 : 5B920018;
+54a3 : 5B930014;
+54a4 : 5B940010;
+54a5 : 5B95000C;
+54a6 : 5B960008;
+54a7 : 5B9D0004;
+54a8 : 78010001;
+54a9 : 3821BFD8;
+54aa : 28220000;
+54ab : 34010001;
+54ac : 34140000;
+54ad : 5C410005;
+54ae : 78010001;
+54af : 3821C040;
+54b0 : FBFFFA00;
+54b1 : B820A000;
+54b2 : 78110001;
+54b3 : 780B0001;
+54b4 : 780E0001;
+54b5 : 340D0000;
+54b6 : 340C0001;
+54b7 : 3A31C290;
+54b8 : 396BBFD8;
+54b9 : 340F0001;
+54ba : 39CEBFB8;
+54bb : 34120002;
+54bc : 34160003;
+54bd : 34150004;
+54be : E0000047;
+54bf : 3593FFFF;
+54c0 : 0A70007C;
+54c1 : B5708000;
+54c2 : 2A0100FC;
+54c3 : 442F000F;
+54c4 : 29C10000;
+54c5 : BDEC1000;
+54c6 : 28210020;
+54c7 : 00210008;
+54c8 : 202100FF;
+54c9 : A0220800;
+54ca : 5C200008;
+54cb : B9800800;
+54cc : FBFFFE90;
+54cd : B9800800;
+54ce : 34020000;
+54cf : FBFFFC94;
+54d0 : 35AD0001;
+54d1 : 5A0F00FC;
+54d2 : 0A61007C;
+54d3 : B5618000;
+54d4 : 2A0200FC;
+54d5 : 44520014;
+54d6 : 48520003;
+54d7 : 5C4F002D;
+54d8 : E0000004;
+54d9 : 44560017;
+54da : 5C55002A;
+54db : E000001E;
+54dc : 296100C0;
+54dd : 44200027;
+54de : 29C10000;
+54df : BDEC1000;
+54e0 : 28210020;
+54e1 : 00210008;
+54e2 : 202100FF;
+54e3 : A0220800;
+54e4 : 44200020;
+54e5 : B9800800;
+54e6 : FBFFFE65;
+54e7 : 5A1200FC;
+54e8 : E000001B;
+54e9 : 2A01013C;
+54ea : 4420001A;
+54eb : 29620014;
+54ec : B9800800;
+54ed : FBFFFCAE;
+54ee : 5A1600FC;
+54ef : E0000014;
+54f0 : B5610800;
+54f1 : 34210104;
+54f2 : FBFFFC0F;
+54f3 : 5C200011;
+54f4 : B9800800;
+54f5 : 34020001;
+54f6 : FBFFFC6D;
+54f7 : 5A1500FC;
+54f8 : E000000B;
+54f9 : 296100C0;
+54fa : 44200003;
+54fb : 2A01013C;
+54fc : 5C200008;
+54fd : 0A73007C;
+54fe : B9800800;
+54ff : 34020000;
+5500 : B5739800;
+5501 : FBFFFC62;
+5502 : 5A6F00FC;
+5503 : 35AD0001;
+5504 : 358C0001;
+5505 : 2A210000;
+5506 : 482CFFB9;
+5507 : 29630000;
+5508 : 78020001;
+5509 : 3842AD84;
+550a : 5843000C;
+550b : 29630010;
+550c : 28410008;
+550d : 7DAD0000;
+550e : 58430010;
+550f : 29630004;
+5510 : 34210002;
+5511 : B5B4A000;
+5512 : 58430014;
+5513 : 29630074;
+5514 : 58410008;
+5515 : 7E810000;
+5516 : 58430018;
+5517 : 29630060;
+5518 : 5843001C;
+5519 : 296300C0;
+551a : 58430020;
+551b : 2963004C;
+551c : 58430024;
+551d : 296300AC;
+551e : 58430028;
+551f : 2963000C;
+5520 : 5843002C;
+5521 : 2B9D0004;
+5522 : 2B8B0034;
+5523 : 2B8C0030;
+5524 : 2B8D002C;
+5525 : 2B8E0028;
+5526 : 2B8F0024;
+5527 : 2B900020;
+5528 : 2B91001C;
+5529 : 2B920018;
+552a : 2B930014;
+552b : 2B940010;
+552c : 2B95000C;
+552d : 2B960008;
+552e : 379C0034;
+552f : C3A00000;
+5530 : 379CFFF8;
+5531 : 5B8B0008;
+5532 : 5B9D0004;
+5533 : FBFFAB3F;
+5534 : 34020000;
+5535 : 3401FFFF;
+5536 : FBFFFF4B;
+5537 : 34010001;
+5538 : FBFFFC40;
+5539 : 380BFFFF;
+553a : B9601000;
+553b : 3401FFFF;
+553c : FBFFFF45;
+553d : 34010001;
+553e : FBFFFC3A;
+553f : 34020000;
+5540 : 34010000;
+5541 : FBFFFF40;
+5542 : 34010000;
+5543 : FBFFFC35;
+5544 : B9601000;
+5545 : 34010000;
+5546 : FBFFFF3B;
+5547 : 34010000;
+5548 : FBFFFC30;
+5549 : 34010002;
+554a : FBFFFC2E;
+554b : 2B9D0004;
+554c : 2B8B0008;
+554d : 379C0008;
+554e : C3A00000;
+554f : C3A00000;
+5550 : C3A00000;
+5551 : 379CFFF8;
+5552 : 5B8B0008;
+5553 : 5B9D0004;
+5554 : 28240014;
+5555 : B8201800;
+5556 : B8403000;
+5557 : 44800015;
+5558 : 28250010;
+5559 : 20A50002;
+555a : 5CA00007;
+555b : B4862000;
+555c : B8800800;
+555d : 2B9D0004;
+555e : 2B8B0008;
+555f : 379C0008;
+5560 : C3A00000;
+5561 : 346B0030;
+5562 : B4861000;
+5563 : B9600800;
+5564 : 34030040;
+5565 : F8000271;
+5566 : B9602000;
+5567 : B8800800;
+5568 : 2B9D0004;
+5569 : 2B8B0008;
+556a : 379C0008;
+556b : C3A00000;
+556c : 28250010;
+556d : 20A70004;
+556e : 5CE4FFEB;
+556f : 2825001C;
+5570 : 34040000;
+5571 : 44A7FFEB;
+5572 : 342B0030;
+5573 : 34040040;
+5574 : B9601800;
+5575 : D8A00000;
+5576 : B9602000;
+5577 : E3FFFFF0;
+5578 : 379CFFF4;
+5579 : 5B8B0008;
+557a : 5B9D0004;
+557b : 28220014;
+557c : B8205800;
+557d : 44400013;
+557e : 2961000C;
+557f : B4411000;
+5580 : 28430000;
+5581 : 78040001;
+5582 : 38848F48;
+5583 : 28820000;
+5584 : 3401FFEC;
+5585 : 5C620007;
+5586 : 78020001;
+5587 : 3842BF9C;
+5588 : 28430000;
+5589 : 34010000;
+558a : 584B0000;
+558b : 5963007C;
+558c : 2B9D0004;
+558d : 2B8B0008;
+558e : 379C000C;
+558f : C3A00000;
+5590 : 28230010;
+5591 : 20630004;
+5592 : 5C62FFEC;
+5593 : 2825001C;
+5594 : 2822000C;
+5595 : 3783000C;
+5596 : 34040004;
+5597 : D8A00000;
+5598 : 2B83000C;
+5599 : E3FFFFE8;
+559a : 379CFFF0;
+559b : 5B8B0010;
+559c : 5B8C000C;
+559d : 5B8D0008;
+559e : 5B9D0004;
+559f : B8205800;
+55a0 : 44400047;
+55a1 : 2822000C;
+55a2 : 58200080;
+55a3 : 582000B0;
+55a4 : 58220090;
+55a5 : 340C0000;
+55a6 : B9600800;
+55a7 : FBFFFFAA;
+55a8 : 59610028;
+55a9 : 4022003F;
+55aa : 5C400006;
+55ab : 78040001;
+55ac : 38848F48;
+55ad : 28230000;
+55ae : 28820000;
+55af : 4462005D;
+55b0 : 34010000;
+55b1 : 45800030;
+55b2 : 3583FFFF;
+55b3 : 346C0028;
+55b4 : B58C0800;
+55b5 : B4210800;
+55b6 : B5610800;
+55b7 : 28220000;
+55b8 : 5C40000F;
+55b9 : 34010000;
+55ba : 44620027;
+55bb : 34620027;
+55bc : B4421000;
+55bd : B4421000;
+55be : B5621000;
+55bf : E0000002;
+55c0 : 44610044;
+55c1 : 28410000;
+55c2 : 3463FFFF;
+55c3 : 3442FFFC;
+55c4 : 4420FFFC;
+55c5 : 596300B0;
+55c6 : 346C0028;
+55c7 : 346D0024;
+55c8 : B5AD6800;
+55c9 : B5AD6800;
+55ca : B56D6800;
+55cb : 29A20000;
+55cc : B9600800;
+55cd : B58C6000;
+55ce : FBFFFF83;
+55cf : B58C6000;
+55d0 : B56C1000;
+55d1 : 29A40000;
+55d2 : 28430000;
+55d3 : 296C00B0;
+55d4 : 34840040;
+55d5 : 3463FFFF;
+55d6 : 59610028;
+55d7 : 59A40000;
+55d8 : 58430000;
+55d9 : 35830020;
+55da : B4631800;
+55db : B4631800;
+55dc : B5631800;
+55dd : 2824000C;
+55de : 28620000;
+55df : B4441000;
+55e0 : 59620074;
+55e1 : 2B9D0004;
+55e2 : 2B8B0010;
+55e3 : 2B8C000C;
+55e4 : 2B8D0008;
+55e5 : 379C0010;
+55e6 : C3A00000;
+55e7 : 28210028;
+55e8 : 296300B0;
+55e9 : 34050002;
+55ea : 4024003F;
+55eb : ECA32800;
+55ec : 64840002;
+55ed : A0852000;
+55ee : 4482FFC5;
+55ef : 34620020;
+55f0 : B4421000;
+55f1 : B4421000;
+55f2 : B5621000;
+55f3 : 28450000;
+55f4 : 34640025;
+55f5 : 28220004;
+55f6 : B4842000;
+55f7 : B4842000;
+55f8 : B4A21000;
+55f9 : B5642000;
+55fa : 58820000;
+55fb : 2824000C;
+55fc : 34610021;
+55fd : B4210800;
+55fe : B4210800;
+55ff : B5610800;
+5600 : B4852800;
+5601 : 346C0001;
+5602 : 58250000;
+5603 : E3FFFFA3;
+5604 : 34010000;
+5605 : 596000B0;
+5606 : 2B9D0004;
+5607 : 2B8B0010;
+5608 : 2B8C000C;
+5609 : 2B8D0008;
+560a : 379C0010;
+560b : C3A00000;
+560c : 35820024;
+560d : B4421000;
+560e : B4421000;
+560f : B5621800;
+5610 : 2C250004;
+5611 : 28640000;
+5612 : 35820028;
+5613 : B4421000;
+5614 : B4421000;
+5615 : B5621000;
+5616 : 34A5FFFF;
+5617 : 34840040;
+5618 : 58450000;
+5619 : 58640000;
+561a : 596C00B0;
+561b : E3FFFFBE;
+561c : 379CFFEC;
+561d : 5B8B0014;
+561e : 5B8C0010;
+561f : 5B8D000C;
+5620 : 5B8E0008;
+5621 : 5B9D0004;
+5622 : B8406000;
+5623 : 34020001;
+5624 : B8205800;
+5625 : B8607000;
+5626 : B8806800;
+5627 : FBFFFF73;
+5628 : B9600800;
+5629 : 34020000;
+562a : FBFFFF70;
+562b : B8202800;
+562c : 4420001E;
+562d : 28A10018;
+562e : 5C2CFFFA;
+562f : 28A1001C;
+5630 : 5C2EFFF8;
+5631 : 28A10020;
+5632 : 5C2DFFF6;
+5633 : 296100B0;
+5634 : 59650028;
+5635 : 28A2000C;
+5636 : 34210020;
+5637 : B4210800;
+5638 : B4210800;
+5639 : B5610800;
+563a : 28230000;
+563b : 34010000;
+563c : B4431800;
+563d : 59630074;
+563e : 28A30014;
+563f : 59600078;
+5640 : 34630001;
+5641 : C8621000;
+5642 : 59620070;
+5643 : 2B9D0004;
+5644 : 2B8B0014;
+5645 : 2B8C0010;
+5646 : 2B8D000C;
+5647 : 2B8E0008;
+5648 : 379C0014;
+5649 : C3A00000;
+564a : 3401FFFE;
+564b : E3FFFFF8;
+564c : 58200028;
+564d : 34010000;
+564e : C3A00000;
+564f : 379CFFF8;
+5650 : 5B8B0008;
+5651 : 5B9D0004;
+5652 : B8205800;
+5653 : FBFFFFC9;
+5654 : 4C200005;
+5655 : 2B9D0004;
+5656 : 2B8B0008;
+5657 : 379C0008;
+5658 : C3A00000;
+5659 : 29610074;
+565a : 59600028;
+565b : 2B9D0004;
+565c : 2B8B0008;
+565d : 379C0008;
+565e : C3A00000;
+565f : 379CFFF0;
+5660 : 5B8B0010;
+5661 : 5B8C000C;
+5662 : 5B8D0008;
+5663 : 5B9D0004;
+5664 : 28250028;
+5665 : B8205800;
+5666 : B8406000;
+5667 : B8806800;
+5668 : 3401FFFE;
+5669 : 44A00012;
+566a : 4C400002;
+566b : 296C0078;
+566c : 29610070;
+566d : B58D1000;
+566e : 54410013;
+566f : 29640014;
+5670 : 44800014;
+5671 : 29620074;
+5672 : B8600800;
+5673 : B9A01800;
+5674 : B5821000;
+5675 : B4821000;
+5676 : F8000160;
+5677 : B9A00800;
+5678 : 4C010003;
+5679 : B42C6000;
+567a : 596C0078;
+567b : 2B9D0004;
+567c : 2B8B0010;
+567d : 2B8C000C;
+567e : 2B8D0008;
+567f : 379C0010;
+5680 : C3A00000;
+5681 : 29640014;
+5682 : C82C6800;
+5683 : 5C80FFEE;
+5684 : 29620074;
+5685 : 2965001C;
+5686 : B9600800;
+5687 : B5821000;
+5688 : B9A02000;
+5689 : D8A00000;
+568a : E3FFFFEE;
+568b : 379CFFF0;
+568c : 5B8B0010;
+568d : 5B8C000C;
+568e : 5B8D0008;
+568f : 5B9D0004;
+5690 : 28250028;
+5691 : B8205800;
+5692 : B8406000;
+5693 : B8806800;
+5694 : 3401FFFE;
+5695 : 44A00012;
+5696 : 4C400002;
+5697 : 296C0078;
+5698 : 29610070;
+5699 : B58D1000;
+569a : 54410013;
+569b : 29640014;
+569c : 44800014;
+569d : 29610074;
+569e : B8601000;
+569f : B9A01800;
+56a0 : B5810800;
+56a1 : B4810800;
+56a2 : F8000134;
+56a3 : B9A00800;
+56a4 : 4C010003;
+56a5 : B42C6000;
+56a6 : 596C0078;
+56a7 : 2B9D0004;
+56a8 : 2B8B0010;
+56a9 : 2B8C000C;
+56aa : 2B8D0008;
+56ab : 379C0010;
+56ac : C3A00000;
+56ad : 29640014;
+56ae : C82C6800;
+56af : 5C80FFEE;
+56b0 : 29620074;
+56b1 : 29650020;
+56b2 : B9600800;
+56b3 : B5821000;
+56b4 : B9A02000;
+56b5 : D8A00000;
+56b6 : E3FFFFEE;
+56b7 : 379CFFF0;
+56b8 : 5B8B0010;
+56b9 : 5B8C000C;
+56ba : 5B8D0008;
+56bb : 5B9D0004;
+56bc : 28240028;
+56bd : B8205800;
+56be : B8406000;
+56bf : B8606800;
+56c0 : 3401FFFE;
+56c1 : 44800012;
+56c2 : 4C400002;
+56c3 : 296C0078;
+56c4 : 29610070;
+56c5 : B58D1000;
+56c6 : 54410013;
+56c7 : 29640014;
+56c8 : 44800014;
+56c9 : 29610074;
+56ca : 340200FF;
+56cb : B9A01800;
+56cc : B5810800;
+56cd : B4810800;
+56ce : F8000186;
+56cf : B9A00800;
+56d0 : 4C010003;
+56d1 : B42C6000;
+56d2 : 596C0078;
+56d3 : 2B9D0004;
+56d4 : 2B8B0010;
+56d5 : 2B8C000C;
+56d6 : 2B8D0008;
+56d7 : 379C0010;
+56d8 : C3A00000;
+56d9 : 29640014;
+56da : C82C6800;
+56db : 5C80FFEE;
+56dc : 29620074;
+56dd : 29640024;
+56de : B9600800;
+56df : B5821000;
+56e0 : B9A01800;
+56e1 : D8800000;
+56e2 : E3FFFFEE;
+56e3 : 2045FFFF;
+56e4 : 00460010;
+56e5 : 2088FFFF;
+56e6 : 00890010;
+56e7 : 89053800;
+56e8 : 89064000;
+56e9 : 89252800;
+56ea : 00EA0010;
+56eb : 89263000;
+56ec : B5052800;
+56ed : B4AA2800;
+56ee : 50A80003;
+56ef : 78080001;
+56f0 : B4C83000;
+56f1 : 88431000;
+56f2 : 88812000;
+56f3 : 00A10010;
+56f4 : 3CA50010;
+56f5 : B4C13000;
+56f6 : 20E7FFFF;
+56f7 : B4440800;
+56f8 : B4260800;
+56f9 : B4A71000;
+56fa : C3A00000;
+56fb : 44600008;
+56fc : 34040020;
+56fd : C8832000;
+56fe : 48800006;
+56ff : C8041000;
+5700 : 34030000;
+5701 : 80221000;
+5702 : B8600800;
+5703 : C3A00000;
+5704 : BC242000;
+5705 : 80431000;
+5706 : 80231800;
+5707 : B8821000;
+5708 : B8600800;
+5709 : E3FFFFFA;
+570a : 44600008;
+570b : 34040020;
+570c : C8832000;
+570d : 48800006;
+570e : C8040800;
+570f : 34030000;
+5710 : BC410800;
+5711 : B8601000;
+5712 : C3A00000;
+5713 : 80442000;
+5714 : BC230800;
+5715 : BC431800;
+5716 : B8810800;
+5717 : B8601000;
+5718 : E3FFFFFA;
+5719 : 44600008;
+571a : 34040020;
+571b : C8832000;
+571c : 48800006;
+571d : 1423001F;
+571e : C8041000;
+571f : 94221000;
+5720 : B8600800;
+5721 : C3A00000;
+5722 : BC242000;
+5723 : 80431000;
+5724 : 94231800;
+5725 : B8821000;
+5726 : B8600800;
+5727 : E3FFFFFA;
+5728 : 379CFFF8;
+5729 : 5B8B0008;
+572a : 5B9D0004;
+572b : 44400022;
+572c : B8412000;
+572d : 3403000F;
+572e : 5483000B;
+572f : 78030001;
+5730 : 386394D8;
+5731 : 3C210004;
+5732 : B4621000;
+5733 : B4410800;
+5734 : 40210000;
+5735 : 2B9D0004;
+5736 : 2B8B0008;
+5737 : 379C0008;
+5738 : C3A00000;
+5739 : 340B0000;
+573a : 4C200003;
+573b : C8010800;
+573c : 340B0001;
+573d : 4C400003;
+573e : C8021000;
+573f : 196B0001;
+5740 : 90C01800;
+5741 : 20630002;
+5742 : 44600008;
+5743 : 8C220800;
+5744 : 45600002;
+5745 : C8010800;
+5746 : 2B9D0004;
+5747 : 2B8B0008;
+5748 : 379C0008;
+5749 : C3A00000;
+574a : 34030000;
+574b : F800004A;
+574c : E3FFFFF8;
+574d : 90000800;
+574e : 20210001;
+574f : 3C210001;
+5750 : D0010000;
+5751 : 90E00800;
+5752 : BBA0F000;
+5753 : 342100A0;
+5754 : C0200000;
+5755 : 379CFFF8;
+5756 : 5B8B0008;
+5757 : 5B9D0004;
+5758 : 44400015;
+5759 : 340B0000;
+575a : 4C200003;
+575b : C8010800;
+575c : 340B0001;
+575d : 1443001F;
+575e : 90C02000;
+575f : 98621000;
+5760 : 20840002;
+5761 : C8431000;
+5762 : 44800008;
+5763 : C4220800;
+5764 : 45600002;
+5765 : C8010800;
+5766 : 2B9D0004;
+5767 : 2B8B0008;
+5768 : 379C0008;
+5769 : C3A00000;
+576a : 34030001;
+576b : F800002A;
+576c : E3FFFFF8;
+576d : 90000800;
+576e : 20210001;
+576f : 3C210001;
+5770 : D0010000;
+5771 : 90E00800;
+5772 : BBA0F000;
+5773 : 342100A0;
+5774 : C0200000;
+5775 : 379CFFFC;
+5776 : 5B9D0004;
+5777 : 44400006;
+5778 : 34030000;
+5779 : F800001C;
+577a : 2B9D0004;
+577b : 379C0004;
+577c : C3A00000;
+577d : 90000800;
+577e : 20210001;
+577f : 3C210001;
+5780 : D0010000;
+5781 : 90E00800;
+5782 : BBA0F000;
+5783 : 342100A0;
+5784 : C0200000;
+5785 : 379CFFFC;
+5786 : 5B9D0004;
+5787 : 44400006;
+5788 : 34030001;
+5789 : F800000C;
+578a : 2B9D0004;
+578b : 379C0004;
+578c : C3A00000;
+578d : 90000800;
+578e : 20210001;
+578f : 3C210001;
+5790 : D0010000;
+5791 : 90E00800;
+5792 : BBA0F000;
+5793 : 342100A0;
+5794 : C0200000;
+5795 : F4222000;
+5796 : 44800018;
+5797 : 34040001;
+5798 : 4C40000B;
+5799 : 34050000;
+579a : 54410003;
+579b : C8220800;
+579c : B8A42800;
+579d : 00840001;
+579e : 00420001;
+579f : 5C80FFFB;
+57a0 : 5C600002;
+57a1 : B8A00800;
+57a2 : C3A00000;
+57a3 : 3C420001;
+57a4 : 3C840001;
+57a5 : F4222800;
+57a6 : 7C860000;
+57a7 : A0C52800;
+57a8 : 44A00002;
+57a9 : 4C40FFFA;
+57aa : 34050000;
+57ab : 4480FFF5;
+57ac : 34050000;
+57ad : E3FFFFED;
+57ae : 34040001;
+57af : 34050000;
+57b0 : E3FFFFEA;
+57b1 : 1422001F;
+57b2 : 98410800;
+57b3 : C8220800;
+57b4 : C3A00000;
+57b5 : 34060003;
+57b6 : B8202000;
+57b7 : B8402800;
+57b8 : 50C3000C;
+57b9 : B8413000;
+57ba : 20C60003;
+57bb : 5CC0000B;
+57bc : 34010003;
+57bd : 28860000;
+57be : 28A20000;
+57bf : 5CC20005;
+57c0 : 3463FFFC;
+57c1 : 34840004;
+57c2 : 34A50004;
+57c3 : 5461FFFA;
+57c4 : 34010000;
+57c5 : 4460000E;
+57c6 : 40860000;
+57c7 : 40A10000;
+57c8 : 3462FFFF;
+57c9 : 44C10006;
+57ca : E000000A;
+57cb : 40860000;
+57cc : 40A10000;
+57cd : 3442FFFF;
+57ce : 5CC10006;
+57cf : 34840001;
+57d0 : 34A50001;
+57d1 : 5C40FFFA;
+57d2 : 34010000;
+57d3 : C3A00000;
+57d4 : C8C10800;
+57d5 : C3A00000;
+57d6 : 3404000F;
+57d7 : B8203800;
+57d8 : B8403000;
+57d9 : 5083002D;
+57da : B8412000;
+57db : 20840003;
+57dc : 5C80002B;
+57dd : B8402000;
+57de : B8202800;
+57df : B8603000;
+57e0 : 3407000F;
+57e1 : 28880000;
+57e2 : 34C6FFF0;
+57e3 : 58A80000;
+57e4 : 28880004;
+57e5 : 58A80004;
+57e6 : 28880008;
+57e7 : 58A80008;
+57e8 : 2888000C;
+57e9 : 34840010;
+57ea : 58A8000C;
+57eb : 34A50010;
+57ec : 54C7FFF5;
+57ed : 3463FFF0;
+57ee : 00660004;
+57ef : 2063000F;
+57f0 : 34C60001;
+57f1 : 3CC60004;
+57f2 : B4263800;
+57f3 : B4463000;
+57f4 : 34020003;
+57f5 : 50430011;
+57f6 : 34020000;
+57f7 : 34080003;
+57f8 : B4C22000;
+57f9 : 28850000;
+57fa : B4E22000;
+57fb : 34420004;
+57fc : 58850000;
+57fd : C8622000;
+57fe : 5488FFFA;
+57ff : 3463FFFC;
+5800 : 00620002;
+5801 : 20630003;
+5802 : 34420001;
+5803 : 3C420002;
+5804 : B4E23800;
+5805 : B4C23000;
+5806 : 44600008;
+5807 : 34020000;
+5808 : B4C22000;
+5809 : 40850000;
+580a : B4E22000;
+580b : 34420001;
+580c : 30850000;
+580d : 5C43FFFB;
+580e : C3A00000;
+580f : B8203800;
+5810 : B8403000;
+5811 : 5041000C;
+5812 : B4432000;
+5813 : 5024000A;
+5814 : 4460003F;
+5815 : B4231000;
+5816 : 3484FFFF;
+5817 : 40850000;
+5818 : 3442FFFF;
+5819 : 3463FFFF;
+581a : 30450000;
+581b : 5C60FFFB;
+581c : C3A00000;
+581d : 3404000F;
+581e : 5083002D;
+581f : B8412000;
+5820 : 20840003;
+5821 : 5C80002B;
+5822 : B8402000;
+5823 : B8202800;
+5824 : B8603000;
+5825 : 3407000F;
+5826 : 28880000;
+5827 : 34C6FFF0;
+5828 : 58A80000;
+5829 : 28880004;
+582a : 58A80004;
+582b : 28880008;
+582c : 58A80008;
+582d : 2888000C;
+582e : 34840010;
+582f : 58A8000C;
+5830 : 34A50010;
+5831 : 54C7FFF5;
+5832 : 3463FFF0;
+5833 : 00660004;
+5834 : 2063000F;
+5835 : 34C60001;
+5836 : 3CC60004;
+5837 : B4263800;
+5838 : B4463000;
+5839 : 34020003;
+583a : 50430011;
+583b : 34020000;
+583c : 34080003;
+583d : B4C22000;
+583e : 28850000;
+583f : B4E22000;
+5840 : 34420004;
+5841 : 58850000;
+5842 : C8622000;
+5843 : 5488FFFA;
+5844 : 3463FFFC;
+5845 : 00620002;
+5846 : 20630003;
+5847 : 34420001;
+5848 : 3C420002;
+5849 : B4E23800;
+584a : B4C23000;
+584b : 44600008;
+584c : 34020000;
+584d : B4C22000;
+584e : 40850000;
+584f : B4E22000;
+5850 : 34420001;
+5851 : 30850000;
+5852 : 5C43FFFB;
+5853 : C3A00000;
+5854 : 20250003;
+5855 : B8202000;
+5856 : 44A0000B;
+5857 : 4460002C;
+5858 : 3463FFFF;
+5859 : 204600FF;
+585a : E0000003;
+585b : 44600028;
+585c : 3463FFFF;
+585d : 30860000;
+585e : 34840001;
+585f : 20850003;
+5860 : 5CA0FFFB;
+5861 : 34050003;
+5862 : 50A3001A;
+5863 : 204500FF;
+5864 : 3CA60008;
+5865 : 340A000F;
+5866 : B8C52800;
+5867 : 3CA60010;
+5868 : B8804000;
+5869 : B8C53000;
+586a : B8603800;
+586b : B8802800;
+586c : 3409000F;
+586d : 546A0017;
+586e : 34040000;
+586f : 34070003;
+5870 : B5042800;
+5871 : 34840004;
+5872 : 58A60000;
+5873 : C8642800;
+5874 : 54A7FFFC;
+5875 : 3463FFFC;
+5876 : 00640002;
+5877 : 20630003;
+5878 : 34840001;
+5879 : 3C840002;
+587a : B5044000;
+587b : B9002000;
+587c : 44600007;
+587d : 204200FF;
+587e : 34050000;
+587f : B4853000;
+5880 : 30C20000;
+5881 : 34A50001;
+5882 : 5C65FFFD;
+5883 : C3A00000;
+5884 : 58A60000;
+5885 : 58A60004;
+5886 : 58A60008;
+5887 : 58A6000C;
+5888 : 34E7FFF0;
+5889 : 34A50010;
+588a : 54E9FFFA;
+588b : 3463FFF0;
+588c : 00680004;
+588d : 2063000F;
+588e : 35080001;
+588f : 3D080004;
+5890 : B4884000;
+5891 : 34040003;
+5892 : 5464FFDC;
+5893 : B9002000;
+5894 : E3FFFFE8;
+5895 : 78030001;
+5896 : 3863AD80;
+5897 : 28670000;
+5898 : B8204800;
+5899 : 34030000;
+589a : 34060001;
+589b : E0000009;
+589c : 40840000;
+589d : B4E44000;
+589e : 41080001;
+589f : 21080003;
+58a0 : 45060012;
+58a1 : C8A40800;
+58a2 : 5C200013;
+58a3 : 44810012;
+58a4 : B5232800;
+58a5 : 40A50000;
+58a6 : B4432000;
+58a7 : 34630001;
+58a8 : B4E54000;
+58a9 : 41080001;
+58aa : 21080003;
+58ab : 5D06FFF1;
+58ac : 40840000;
+58ad : 34A50020;
+58ae : B4E44000;
+58af : 41080001;
+58b0 : 21080003;
+58b1 : 5D06FFF0;
+58b2 : 34840020;
+58b3 : C8A40800;
+58b4 : 4420FFEF;
+58b5 : C3A00000;
+58b6 : B8411800;
+58b7 : 20630003;
+58b8 : 5C60001D;
+58b9 : B8202000;
+58ba : 28430000;
+58bb : 28210000;
+58bc : 5C230018;
+58bd : 78030001;
+58be : 386395D8;
+58bf : 28670000;
+58c0 : 78030001;
+58c1 : 386395DC;
+58c2 : 28660000;
+58c3 : A4201800;
+58c4 : B4270800;
+58c5 : A0231800;
+58c6 : A0661800;
+58c7 : 34010000;
+58c8 : 44600003;
+58c9 : E000001C;
+58ca : 5C600019;
+58cb : 34840004;
+58cc : 28810000;
+58cd : 34420004;
+58ce : 28480000;
+58cf : B4272800;
+58d0 : A4201800;
+58d1 : A0A31800;
+58d2 : A0661800;
+58d3 : 4428FFF7;
+58d4 : B8800800;
+58d5 : 40230000;
+58d6 : 5C600006;
+58d7 : E0000009;
+58d8 : 34210001;
+58d9 : 40230000;
+58da : 34420001;
+58db : 44600005;
+58dc : 40440000;
+58dd : 4464FFFB;
+58de : C8640800;
+58df : C3A00000;
+58e0 : 40440000;
+58e1 : C8640800;
+58e2 : C3A00000;
+58e3 : 34010000;
+58e4 : C3A00000;
+58e5 : C3A00000;
+58e6 : B8412800;
+58e7 : 20A50003;
+58e8 : B8403800;
+58e9 : B8202000;
+58ea : 5CA00018;
+58eb : 78040001;
+58ec : 388495D8;
+58ed : 28430000;
+58ee : 28880000;
+58ef : 78040001;
+58f0 : 388495DC;
+58f1 : 28870000;
+58f2 : A4603000;
+58f3 : B4682000;
+58f4 : A0C43000;
+58f5 : A0C73000;
+58f6 : B8202000;
+58f7 : 5CC5000A;
+58f8 : 58830000;
+58f9 : 34420004;
+58fa : 28430000;
+58fb : 34840004;
+58fc : A4603000;
+58fd : B4682800;
+58fe : A0C52800;
+58ff : A0A72800;
+5900 : 44A0FFF8;
+5901 : B8403800;
+5902 : 34030000;
+5903 : B4E32800;
+5904 : 40A50000;
+5905 : B4833000;
+5906 : 34630001;
+5907 : 30C50000;
+5908 : 5CA0FFFB;
+5909 : C3A00000;
+590a : 20220003;
+590b : 4440002C;
+590c : 40230000;
+590d : 34020000;
+590e : 44600027;
+590f : B8201000;
+5910 : E0000003;
+5911 : 40430000;
+5912 : 44600022;
+5913 : 34420001;
+5914 : 20430003;
+5915 : 5C60FFFC;
+5916 : 78040001;
+5917 : 388495D8;
+5918 : 28430000;
+5919 : 28860000;
+591a : 78040001;
+591b : 388495DC;
+591c : 28850000;
+591d : A4602000;
+591e : B4661800;
+591f : A0641800;
+5920 : A0651800;
+5921 : 5C600011;
+5922 : 34420004;
+5923 : 28430000;
+5924 : B4662000;
+5925 : A4601800;
+5926 : A0831800;
+5927 : A0651800;
+5928 : 5C60000A;
+5929 : 34420004;
+592a : 28430000;
+592b : B4662000;
+592c : A4601800;
+592d : A0831800;
+592e : A0651800;
+592f : 4460FFF3;
+5930 : E0000002;
+5931 : 34420001;
+5932 : 40430000;
+5933 : 5C60FFFE;
+5934 : C8411000;
+5935 : B8400800;
+5936 : C3A00000;
+5937 : B8201000;
+5938 : E3FFFFDE;
+5939 : 34060000;
+593a : 44600017;
+593b : B8413800;
+593c : 20E70003;
+593d : 3464FFFF;
+593e : 44E00015;
+593f : 40230000;
+5940 : 40450000;
+5941 : 5C65000F;
+5942 : 34060000;
+5943 : 4480000E;
+5944 : 34210001;
+5945 : 34420001;
+5946 : 5C600004;
+5947 : E000000A;
+5948 : 44800033;
+5949 : 44600032;
+594a : 40230000;
+594b : 40450000;
+594c : 3484FFFF;
+594d : 34210001;
+594e : 34420001;
+594f : 4465FFF9;
+5950 : C8653000;
+5951 : B8C00800;
+5952 : C3A00000;
+5953 : B8202800;
+5954 : 34010003;
+5955 : B8402000;
+5956 : 50230028;
+5957 : 28A10000;
+5958 : 28420000;
+5959 : 5C220025;
+595a : 3463FFFC;
+595b : B8E03000;
+595c : 4460FFF5;
+595d : 78020001;
+595e : 384295D8;
+595f : 28490000;
+5960 : 78020001;
+5961 : 384295DC;
+5962 : 28480000;
+5963 : A4201000;
+5964 : B4290800;
+5965 : A0220800;
+5966 : A0280800;
+5967 : 34070003;
+5968 : 5C20FFE9;
+5969 : 34A50004;
+596a : 34840004;
+596b : 54670006;
+596c : B8A00800;
+596d : B8801000;
+596e : 44600014;
+596f : 3464FFFF;
+5970 : E3FFFFCF;
+5971 : 28A10000;
+5972 : 288A0000;
+5973 : B4293000;
+5974 : A4201000;
+5975 : A0C21000;
+5976 : A0481000;
+5977 : 5C2A0007;
+5978 : 3463FFFC;
+5979 : 44600002;
+597a : 4440FFEF;
+597b : 34060000;
+597c : B8C00800;
+597d : C3A00000;
+597e : B8801000;
+597f : B8A00800;
+5980 : 3464FFFF;
+5981 : E3FFFFBE;
+5982 : 40A30000;
+5983 : 40850000;
+5984 : C8653000;
+5985 : E3FFFFCC;
+5986 : B8412000;
+5987 : 20840003;
+5988 : 74650003;
+5989 : 64840000;
+598a : B8403000;
+598b : A0852000;
+598c : B8202800;
+598d : 44800015;
+598e : 78040001;
+598f : 388495D8;
+5990 : 28890000;
+5991 : 78040001;
+5992 : 388495DC;
+5993 : 28880000;
+5994 : 340A0003;
+5995 : E0000006;
+5996 : 58A40000;
+5997 : 3463FFFC;
+5998 : 34A50004;
+5999 : 34420004;
+599a : 51430007;
+599b : 28440000;
+599c : A4803800;
+599d : B4893000;
+599e : A0E63000;
+599f : A0C83000;
+59a0 : 44C0FFF6;
+59a1 : B8403000;
+59a2 : 44600014;
+59a3 : 40C20000;
+59a4 : 3463FFFF;
+59a5 : 34A40001;
+59a6 : 30A20000;
+59a7 : 44400009;
+59a8 : 34C20001;
+59a9 : 4460000E;
+59aa : 40450000;
+59ab : 3463FFFF;
+59ac : 34420001;
+59ad : 30850000;
+59ae : 34840001;
+59af : 5CA0FFFA;
+59b0 : 34020000;
+59b1 : 44600007;
+59b2 : B4822800;
+59b3 : 30A00000;
+59b4 : 34420001;
+59b5 : 5C62FFFD;
+59b6 : C3A00000;
+59b7 : C3A00000;
+59b8 : C3A00000;
+59b9 : 34030000;
+59ba : 4440000C;
+59bb : 40240000;
+59bc : 4480000A;
+59bd : 3442FFFF;
+59be : B8201800;
+59bf : E0000004;
+59c0 : 40640000;
+59c1 : 3442FFFF;
+59c2 : 44800003;
+59c3 : 34630001;
+59c4 : 5C40FFFC;
+59c5 : C8611800;
+59c6 : B8600800;
+59c7 : C3A00000;
+59c8 : 57522043;
+59c9 : 6F72653A;
+59ca : 20737461;
+59cb : 7274696E;
+59cc : 67207570;
+59cd : 2E2E2E0A;
+59ce : 00000000;
+59cf : 556E6162;
+59d0 : 6C652074;
+59d1 : 6F206465;
+59d2 : 7465726D;
+59d3 : 696E6520;
+59d4 : 4D414320;
+59d5 : 61646472;
+59d6 : 6573730A;
+59d7 : 00000000;
+59d8 : 4C6F6361;
+59d9 : 6C204D41;
+59da : 43206164;
+59db : 64726573;
+59dc : 733A2025;
+59dd : 3032783A;
+59de : 25303278;
+59df : 3A253032;
+59e0 : 783A2530;
+59e1 : 32783A25;
+59e2 : 3032783A;
+59e3 : 25303278;
+59e4 : 0A000000;
+59e5 : 4E657720;
+59e6 : 6D617820;
+59e7 : 72756E20;
+59e8 : 74696D65;
+59e9 : 20666F72;
+59ea : 20612074;
+59eb : 61736B20;
+59ec : 25732C20;
+59ed : 6F6C6420;
+59ee : 256C642C;
+59ef : 206E6577;
+59f0 : 2025640A;
+59f1 : 00000000;
+59f2 : 7461736B;
+59f3 : 2025732C;
+59f4 : 2072756E;
+59f5 : 20666F72;
+59f6 : 20256420;
+59f7 : 6D730A00;
+59f8 : 73706C6C;
+59f9 : 2D626800;
+59fa : 7368656C;
+59fb : 6C2B6775;
+59fc : 69000000;
+59fd : 70747000;
+59fe : 75707469;
+59ff : 6D650000;
+5a00 : 63686563;
+5a01 : 6B2D6C69;
+5a02 : 6E6B0000;
+5a03 : 69646C65;
+5a04 : 00000000;
+5a05 : 64696167;
+5a06 : 2D66736D;
+5a07 : 2D312D25;
+5a08 : 733A2025;
+5a09 : 3039642E;
+5a0a : 25303364;
+5a0b : 3A200000;
+5a0c : 454E5445;
+5a0d : 52202573;
+5a0e : 2C207061;
+5a0f : 636B6574;
+5a10 : 206C656E;
+5a11 : 2025690A;
+5a12 : 00000000;
+5a13 : 25733A20;
+5a14 : 7265656E;
+5a15 : 74657220;
+5a16 : 696E2025;
+5a17 : 69206D73;
+5a18 : 0A000000;
+5a19 : 4C454156;
+5a1a : 45202573;
+5a1b : 20286E65;
+5a1c : 78743A20;
+5a1d : 25336929;
+5a1e : 0A0A0000;
+5a1f : 52454356;
+5a20 : 20253032;
+5a21 : 64206279;
+5a22 : 74657320;
+5a23 : 61742025;
+5a24 : 39642E25;
+5a25 : 3039642E;
+5a26 : 25303364;
+5a27 : 20287479;
+5a28 : 70652025;
+5a29 : 782C2025;
+5a2a : 73290A00;
+5a2b : 66736D3A;
+5a2c : 20556E6B;
+5a2d : 6E6F776E;
+5a2e : 20737461;
+5a2f : 74652066;
+5a30 : 6F722070;
+5a31 : 6F727420;
+5a32 : 25730A00;
+5a33 : 57726F6E;
+5a34 : 6720646F;
+5a35 : 6D61696E;
+5a36 : 2025693A;
+5a37 : 20646973;
+5a38 : 63617264;
+5a39 : 0A000000;
+5a3a : 416C7465;
+5a3b : 726E6174;
+5a3c : 65206D61;
+5a3d : 73746572;
+5a3e : 3A206469;
+5a3f : 73636172;
+5a40 : 640A0000;
+5a41 : 4C6F6F70;
+5a42 : 696E6720;
+5a43 : 6672616D;
+5a44 : 653A2064;
+5a45 : 69736361;
+5a46 : 72640A00;
+5a47 : 66736D20;
+5a48 : 666F7220;
+5a49 : 25733A20;
+5a4a : 4572726F;
+5a4b : 72202569;
+5a4c : 20696E20;
+5a4d : 25730A00;
+5a4e : 70707369;
+5a4f : 00000000;
+5a50 : 25732D25;
+5a51 : 692D2573;
+5a52 : 3A200000;
+5a53 : 25733A20;
+5a54 : 6572726F;
+5a55 : 72207061;
+5a56 : 7273696E;
+5a57 : 67202225;
+5a58 : 73220A00;
+5a59 : 64696167;
+5a5a : 2D636F6E;
+5a5b : 66696700;
+5a5c : 64696167;
+5a5d : 2D657874;
+5a5e : 656E7369;
+5a5f : 6F6E0000;
+5a60 : 64696167;
+5a61 : 2D626D63;
+5a62 : 00000000;
+5a63 : 64696167;
+5a64 : 2D736572;
+5a65 : 766F0000;
+5a66 : 64696167;
+5a67 : 2D667261;
+5a68 : 6D657300;
+5a69 : 64696167;
+5a6a : 2D74696D;
+5a6b : 65000000;
+5a6c : 64696167;
+5a6d : 2D66736D;
+5a6e : 00000000;
+5a6f : 6E657720;
+5a70 : 74696D65;
+5a71 : 6F757420;
+5a72 : 666F7220;
+5a73 : 25733A20;
+5a74 : 25690A00;
+5a75 : 74696D65;
+5a76 : 6F757420;
+5a77 : 65787069;
+5a78 : 7265643A;
+5a79 : 2025730A;
+5a7a : 00000000;
+5a7b : 52455155;
+5a7c : 45535400;
+5a7d : 53594E43;
+5a7e : 5F53454E;
+5a7f : 44000000;
+5a80 : 414E4E5F;
+5a81 : 52454345;
+5a82 : 49505400;
+5a83 : 414E4E5F;
+5a84 : 53454E44;
+5a85 : 00000000;
+5a86 : 4641554C;
+5a87 : 54000000;
+5a88 : 5155414C;
+5a89 : 00000000;
+5a8a : 73796E63;
+5a8b : 00000000;
+5a8c : 64656C61;
+5a8d : 795F7265;
+5a8e : 71000000;
+5a8f : 7064656C;
+5a90 : 61795F72;
+5a91 : 65710000;
+5a92 : 7064656C;
+5a93 : 61795F72;
+5a94 : 65737000;
+5a95 : 64656C61;
+5a96 : 795F7265;
+5a97 : 73700000;
+5a98 : 7064656C;
+5a99 : 61795F72;
+5a9a : 6573705F;
+5a9b : 666F6C6C;
+5a9c : 6F775F75;
+5a9d : 70000000;
+5a9e : 616E6E6F;
+5a9f : 756E6365;
+5aa0 : 00000000;
+5aa1 : 7369676E;
+5aa2 : 616C696E;
+5aa3 : 67000000;
+5aa4 : 6D616E61;
+5aa5 : 67656D65;
+5aa6 : 6E740000;
+5aa7 : 50505369;
+5aa8 : 20666F72;
+5aa9 : 20575250;
+5aaa : 432E2043;
+5aab : 6F6D6D69;
+5aac : 74202573;
+5aad : 2C206275;
+5aae : 696C7420;
+5aaf : 6F6E2044;
+5ab0 : 65632031;
+5ab1 : 38203230;
+5ab2 : 31370A00;
+5ab3 : 70707369;
+5ab4 : 2D763230;
+5ab5 : 31362E31;
+5ab6 : 322D3839;
+5ab7 : 2D676362;
+5ab8 : 35393334;
+5ab9 : 65000000;
+5aba : 50545020;
+5abb : 73746172;
+5abc : 740A0000;
+5abd : 50545020;
+5abe : 73746F70;
+5abf : 0A000000;
+5ac0 : 4C6F636B;
+5ac1 : 696E6720;
+5ac2 : 504C4C00;
+5ac3 : 0A4C6F63;
+5ac4 : 6B207469;
+5ac5 : 6D656F75;
+5ac6 : 742E0000;
+5ac7 : 2E000000;
+5ac8 : 77723100;
+5ac9 : 20696E76;
+5aca : 616C6964;
+5acb : 00000000;
+5acc : 25735449;
+5acd : 4D453A20;
+5ace : 28256C69;
+5acf : 202D2030;
+5ad0 : 78256C78;
+5ad1 : 2920256C;
+5ad2 : 692E2530;
+5ad3 : 366C6925;
+5ad4 : 730A0000;
+5ad5 : 25732573;
+5ad6 : 25303278;
+5ad7 : 2D253032;
+5ad8 : 782D2530;
+5ad9 : 32782D25;
+5ada : 3032782D;
+5adb : 25303278;
+5adc : 2D253032;
+5add : 782D2530;
+5ade : 32782D25;
+5adf : 3032782D;
+5ae0 : 25303278;
+5ae1 : 2D253032;
+5ae2 : 780A0000;
+5ae3 : 25732573;
+5ae4 : 25732028;
+5ae5 : 73697A65;
+5ae6 : 20256929;
+5ae7 : 0A000000;
+5ae8 : 25732573;
+5ae9 : 00000000;
+5aea : 25303278;
+5aeb : 00000000;
+5aec : 25735645;
+5aed : 5253494F;
+5aee : 4E3A2075;
+5aef : 6E737570;
+5af0 : 706F7274;
+5af1 : 65642028;
+5af2 : 2569290A;
+5af3 : 00000000;
+5af4 : 25735645;
+5af5 : 5253494F;
+5af6 : 4E3A2025;
+5af7 : 69202874;
+5af8 : 79706520;
+5af9 : 25692C20;
+5afa : 6C656E20;
+5afb : 25692C20;
+5afc : 646F6D61;
+5afd : 696E2025;
+5afe : 69290A00;
+5aff : 2573464C;
+5b00 : 4147533A;
+5b01 : 20307825;
+5b02 : 30347820;
+5b03 : 28636F72;
+5b04 : 72656374;
+5b05 : 696F6E20;
+5b06 : 30782530;
+5b07 : 38783A25;
+5b08 : 30387820;
+5b09 : 25303875;
+5b0a : 290A0000;
+5b0b : 504F5254;
+5b0c : 3A200000;
+5b0d : 25735245;
+5b0e : 53543A20;
+5b0f : 73657120;
+5b10 : 25692C20;
+5b11 : 6374726C;
+5b12 : 2025692C;
+5b13 : 206C6F67;
+5b14 : 2D696E74;
+5b15 : 65727661;
+5b16 : 6C202569;
+5b17 : 0A000000;
+5b18 : 25734D45;
+5b19 : 53534147;
+5b1a : 453A2028;
+5b1b : 45292053;
+5b1c : 594E430A;
+5b1d : 00000000;
+5b1e : 25732573;
+5b1f : 256C752E;
+5b20 : 25303969;
+5b21 : 0A000000;
+5b22 : 4D53472D;
+5b23 : 53594E43;
+5b24 : 3A200000;
+5b25 : 25734D45;
+5b26 : 53534147;
+5b27 : 453A2028;
+5b28 : 45292044;
+5b29 : 454C4159;
+5b2a : 5F524551;
+5b2b : 0A000000;
+5b2c : 4D53472D;
+5b2d : 44454C41;
+5b2e : 595F5245;
+5b2f : 513A2000;
+5b30 : 25734D45;
+5b31 : 53534147;
+5b32 : 453A2028;
+5b33 : 47292046;
+5b34 : 4F4C4C4F;
+5b35 : 575F5550;
+5b36 : 0A000000;
+5b37 : 4D53472D;
+5b38 : 464F4C4C;
+5b39 : 4F575F55;
+5b3a : 503A2000;
+5b3b : 25734D45;
+5b3c : 53534147;
+5b3d : 453A2028;
+5b3e : 47292044;
+5b3f : 454C4159;
+5b40 : 5F524553;
+5b41 : 500A0000;
+5b42 : 4D53472D;
+5b43 : 44454C41;
+5b44 : 595F5245;
+5b45 : 53503A20;
+5b46 : 00000000;
+5b47 : 25734D45;
+5b48 : 53534147;
+5b49 : 453A2028;
+5b4a : 47292041;
+5b4b : 4E4E4F55;
+5b4c : 4E43450A;
+5b4d : 00000000;
+5b4e : 4D53472D;
+5b4f : 414E4E4F;
+5b50 : 554E4345;
+5b51 : 3A207374;
+5b52 : 616D7020;
+5b53 : 00000000;
+5b54 : 25732573;
+5b55 : 25303278;
+5b56 : 2D253032;
+5b57 : 782D2530;
+5b58 : 34780A00;
+5b59 : 4D53472D;
+5b5a : 414E4E4F;
+5b5b : 554E4345;
+5b5c : 3A206772;
+5b5d : 616E646D;
+5b5e : 61737465;
+5b5f : 722D7175;
+5b60 : 616C6974;
+5b61 : 79200000;
+5b62 : 25734D53;
+5b63 : 472D414E;
+5b64 : 4E4F554E;
+5b65 : 43453A20;
+5b66 : 6772616E;
+5b67 : 646D6173;
+5b68 : 7465722D;
+5b69 : 7072696F;
+5b6a : 20256920;
+5b6b : 25690A00;
+5b6c : 25732573;
+5b6d : 25303278;
+5b6e : 2D253032;
+5b6f : 782D2530;
+5b70 : 32782D25;
+5b71 : 3032782D;
+5b72 : 25303278;
+5b73 : 2D253032;
+5b74 : 782D2530;
+5b75 : 32782D25;
+5b76 : 3032780A;
+5b77 : 00000000;
+5b78 : 4D53472D;
+5b79 : 414E4E4F;
+5b7a : 554E4345;
+5b7b : 3A206772;
+5b7c : 616E646D;
+5b7d : 61737465;
+5b7e : 722D6964;
+5b7f : 20000000;
+5b80 : 25734D45;
+5b81 : 53534147;
+5b82 : 453A2028;
+5b83 : 47292053;
+5b84 : 49474E41;
+5b85 : 4C494E47;
+5b86 : 0A000000;
+5b87 : 4D53472D;
+5b88 : 5349474E;
+5b89 : 414C494E;
+5b8a : 473A2074;
+5b8b : 61726765;
+5b8c : 742D706F;
+5b8d : 72742000;
+5b8e : 2573544C;
+5b8f : 563A2074;
+5b90 : 6F6F2073;
+5b91 : 686F7274;
+5b92 : 20282569;
+5b93 : 202D2025;
+5b94 : 69203D20;
+5b95 : 2569290A;
+5b96 : 00000000;
+5b97 : 2573544C;
+5b98 : 563A2074;
+5b99 : 79706520;
+5b9a : 25303478;
+5b9b : 206C656E;
+5b9c : 20256920;
+5b9d : 6F756920;
+5b9e : 25303278;
+5b9f : 3A253032;
+5ba0 : 783A2530;
+5ba1 : 32782073;
+5ba2 : 75622025;
+5ba3 : 3032783A;
+5ba4 : 25303278;
+5ba5 : 3A253032;
+5ba6 : 780A0000;
+5ba7 : 2573544C;
+5ba8 : 563A2074;
+5ba9 : 6F6F2073;
+5baa : 686F7274;
+5bab : 20286578;
+5bac : 70656374;
+5bad : 65642025;
+5bae : 692C2074;
+5baf : 6F74616C;
+5bb0 : 20256929;
+5bb1 : 0A000000;
+5bb2 : 544C563A;
+5bb3 : 20000000;
+5bb4 : 746C762D;
+5bb5 : 636F6E74;
+5bb6 : 656E7400;
+5bb7 : 44554D50;
+5bb8 : 3A200000;
+5bb9 : 7061796C;
+5bba : 6F616400;
+5bbb : 2573564C;
+5bbc : 414E2025;
+5bbd : 690A0000;
+5bbe : 25734554;
+5bbf : 483A2025;
+5bc0 : 30347820;
+5bc1 : 28253032;
+5bc2 : 783A2530;
+5bc3 : 32783A25;
+5bc4 : 3032783A;
+5bc5 : 25303278;
+5bc6 : 3A253032;
+5bc7 : 783A2530;
+5bc8 : 3278202D;
+5bc9 : 3E202530;
+5bca : 32783A25;
+5bcb : 3032783A;
+5bcc : 25303278;
+5bcd : 3A253032;
+5bce : 783A2530;
+5bcf : 32783A25;
+5bd0 : 30327829;
+5bd1 : 0A000000;
+5bd2 : 25734950;
+5bd3 : 3A202569;
+5bd4 : 20282569;
+5bd5 : 2E25692E;
+5bd6 : 25692E25;
+5bd7 : 69202D3E;
+5bd8 : 2025692E;
+5bd9 : 25692E25;
+5bda : 692E2569;
+5bdb : 29206C65;
+5bdc : 6E202569;
+5bdd : 0A000000;
+5bde : 25735544;
+5bdf : 503A2028;
+5be0 : 2569202D;
+5be1 : 3E202569;
+5be2 : 29206C65;
+5be3 : 6E202569;
+5be4 : 0A000000;
+5be5 : 25733A20;
+5be6 : 256C690A;
+5be7 : 00000000;
+5be8 : 5761726E;
+5be9 : 696E673A;
+5bea : 2025733A;
+5beb : 2063616E;
+5bec : 206E6F74;
+5bed : 2061646A;
+5bee : 75737420;
+5bef : 66726571;
+5bf0 : 5F707062;
+5bf1 : 20256C69;
+5bf2 : 0A000000;
+5bf3 : 25733A20;
+5bf4 : 25396C75;
+5bf5 : 2E253039;
+5bf6 : 6C690A00;
+5bf7 : 25733A20;
+5bf8 : 736E743D;
+5bf9 : 25642C20;
+5bfa : 7365633D;
+5bfb : 256C642C;
+5bfc : 206E7365;
+5bfd : 633D256C;
+5bfe : 640A0000;
+5bff : 25303964;
+5c00 : 20253039;
+5c01 : 64202530;
+5c02 : 33642000;
+5c03 : 73656E64;
+5c04 : 3A200000;
+5c05 : 72656376;
+5c06 : 3A200000;
+5c07 : 25303964;
+5c08 : 20253039;
+5c09 : 64202530;
+5c0a : 33640000;
+5c0b : 20202025;
+5c0c : 39642E25;
+5c0d : 33640A00;
+5c0e : 696E6974;
+5c0f : 69616C69;
+5c10 : 7A696E67;
+5c11 : 00000000;
+5c12 : 6661756C;
+5c13 : 74790000;
+5c14 : 64697361;
+5c15 : 626C6564;
+5c16 : 00000000;
+5c17 : 6C697374;
+5c18 : 656E696E;
+5c19 : 67000000;
+5c1a : 7072652D;
+5c1b : 6D617374;
+5c1c : 65720000;
+5c1d : 70617373;
+5c1e : 69766500;
+5c1f : 756E6361;
+5c20 : 6C696272;
+5c21 : 61746564;
+5c22 : 00000000;
+5c23 : 736C6176;
+5c24 : 65000000;
+5c25 : 756E6361;
+5c26 : 6C696272;
+5c27 : 61746564;
+5c28 : 2F77722D;
+5c29 : 70726573;
+5c2a : 656E7400;
+5c2b : 6D617374;
+5c2c : 65722F77;
+5c2d : 722D6D2D;
+5c2e : 6C6F636B;
+5c2f : 00000000;
+5c30 : 756E6361;
+5c31 : 6C696272;
+5c32 : 61746564;
+5c33 : 2F77722D;
+5c34 : 732D6C6F;
+5c35 : 636B0000;
+5c36 : 756E6361;
+5c37 : 6C696272;
+5c38 : 61746564;
+5c39 : 2F77722D;
+5c3a : 6C6F636B;
+5c3b : 65640000;
+5c3c : 77722D63;
+5c3d : 616C6962;
+5c3e : 72617469;
+5c3f : 6F6E0000;
+5c40 : 77722D63;
+5c41 : 616C6962;
+5c42 : 72617465;
+5c43 : 64000000;
+5c44 : 77722D72;
+5c45 : 6573702D;
+5c46 : 63616C69;
+5c47 : 622D7265;
+5c48 : 71000000;
+5c49 : 77722D6C;
+5c4a : 696E6B2D;
+5c4b : 6F6E0000;
+5c4c : 6162736F;
+5c4d : 6C757465;
+5c4e : 2D63616C;
+5c4f : 69627261;
+5c50 : 74696F6E;
+5c51 : 00000000;
+5c52 : 686F6F6B;
+5c53 : 3A202573;
+5c54 : 0A000000;
+5c55 : 5432206F;
+5c56 : 72205433;
+5c57 : 20696E63;
+5c58 : 6F727265;
+5c59 : 63742C20;
+5c5a : 64697363;
+5c5b : 61726469;
+5c5c : 6E672074;
+5c5d : 75706C65;
+5c5e : 0A000000;
+5c5f : 5433206F;
+5c60 : 72205436;
+5c61 : 20696E63;
+5c62 : 6F727265;
+5c63 : 63742C20;
+5c64 : 64697363;
+5c65 : 61726469;
+5c66 : 6E672074;
+5c67 : 75706C65;
+5c68 : 0A000000;
+5c69 : 48616E64;
+5c6a : 7368616B;
+5c6b : 65206661;
+5c6c : 696C7572;
+5c6d : 653A206E;
+5c6e : 6F77206E;
+5c6f : 6F6E2D77;
+5c70 : 72202573;
+5c71 : 0A000000;
+5c72 : 52657472;
+5c73 : 79206F6E;
+5c74 : 2074696D;
+5c75 : 656F7574;
+5c76 : 0A000000;
+5c77 : 25733A20;
+5c78 : 73756273;
+5c79 : 74617465;
+5c7a : 2025690A;
+5c7b : 00000000;
+5c7c : 54783D3E;
+5c7d : 3E736361;
+5c7e : 6C656450;
+5c7f : 69636F73;
+5c80 : 65636F6E;
+5c81 : 64732E6D;
+5c82 : 7362203D;
+5c83 : 20307825;
+5c84 : 780A0000;
+5c85 : 54783D3E;
+5c86 : 3E736361;
+5c87 : 6C656450;
+5c88 : 69636F73;
+5c89 : 65636F6E;
+5c8a : 64732E6C;
+5c8b : 7362203D;
+5c8c : 20307825;
+5c8d : 780A0000;
+5c8e : 52782066;
+5c8f : 69786564;
+5c90 : 2064656C;
+5c91 : 6179203D;
+5c92 : 2025640A;
+5c93 : 00000000;
+5c94 : 52783D3E;
+5c95 : 3E736361;
+5c96 : 6C656450;
+5c97 : 69636F73;
+5c98 : 65636F6E;
+5c99 : 64732E6D;
+5c9a : 7362203D;
+5c9b : 20307825;
+5c9c : 780A0000;
+5c9d : 52783D3E;
+5c9e : 3E736361;
+5c9f : 6C656450;
+5ca0 : 69636F73;
+5ca1 : 65636F6E;
+5ca2 : 64732E6C;
+5ca3 : 7362203D;
+5ca4 : 20307825;
+5ca5 : 780A0000;
+5ca6 : 23232320;
+5ca7 : 74342E70;
+5ca8 : 68617365;
+5ca9 : 20697320;
+5caa : 616C7265;
+5cab : 61647920;
+5cac : 636F7272;
+5cad : 65637465;
+5cae : 6420666F;
+5caf : 72206269;
+5cb0 : 74736C69;
+5cb1 : 64650A00;
+5cb2 : 74313A20;
+5cb3 : 20202020;
+5cb4 : 20202020;
+5cb5 : 20202020;
+5cb6 : 20202020;
+5cb7 : 20202020;
+5cb8 : 74343A20;
+5cb9 : 20202020;
+5cba : 20202020;
+5cbb : 20202020;
+5cbc : 20202020;
+5cbd : 20626974;
+5cbe : 736C6964;
+5cbf : 653A2025;
+5cc0 : 640A0000;
+5cc1 : 20202020;
+5cc2 : 20207365;
+5cc3 : 632E2020;
+5cc4 : 20202020;
+5cc5 : 206E732E;
+5cc6 : 70686120;
+5cc7 : 20202020;
+5cc8 : 20207365;
+5cc9 : 632E2020;
+5cca : 20202020;
+5ccb : 206E732E;
+5ccc : 7068610A;
+5ccd : 00000000;
+5cce : 4552524F;
+5ccf : 523A204E;
+5cd0 : 65772063;
+5cd1 : 6C617373;
+5cd2 : 2025690A;
+5cd3 : 00000000;
+5cd4 : 4255473A;
+5cd5 : 20547279;
+5cd6 : 696E6720;
+5cd7 : 746F2073;
+5cd8 : 656E6420;
+5cd9 : 696E7661;
+5cda : 6C696420;
+5cdb : 77725F6D;
+5cdc : 7367206D;
+5cdd : 6F64653D;
+5cde : 25782069;
+5cdf : 643D2578;
+5ce0 : 00000000;
+5ce1 : 68616E64;
+5ce2 : 6C652053;
+5ce3 : 69676E61;
+5ce4 : 6C696E67;
+5ce5 : 206D7367;
+5ce6 : 2C206661;
+5ce7 : 696C6564;
+5ce8 : 2C205468;
+5ce9 : 69732069;
+5cea : 73206E6F;
+5ceb : 74206F72;
+5cec : 67616E69;
+5ced : 7A617469;
+5cee : 6F6E2065;
+5cef : 7874656E;
+5cf0 : 73696F6E;
+5cf1 : 20544C56;
+5cf2 : 203D2030;
+5cf3 : 7825780A;
+5cf4 : 00000000;
+5cf5 : 68616E64;
+5cf6 : 6C652053;
+5cf7 : 69676E61;
+5cf8 : 6C696E67;
+5cf9 : 206D7367;
+5cfa : 2C206661;
+5cfb : 696C6564;
+5cfc : 2C206E6F;
+5cfd : 74204345;
+5cfe : 524E2773;
+5cff : 204F5549;
+5d00 : 203D2030;
+5d01 : 7825780A;
+5d02 : 00000000;
+5d03 : 68616E64;
+5d04 : 6C652053;
+5d05 : 69676E61;
+5d06 : 6C696E67;
+5d07 : 206D7367;
+5d08 : 2C206661;
+5d09 : 696C6564;
+5d0a : 2C206E6F;
+5d0b : 74205768;
+5d0c : 69746520;
+5d0d : 52616262;
+5d0e : 6974206D;
+5d0f : 61676963;
+5d10 : 206E756D;
+5d11 : 62657220;
+5d12 : 3D203078;
+5d13 : 25780A00;
+5d14 : 68616E64;
+5d15 : 6C652053;
+5d16 : 69676E61;
+5d17 : 6C696E67;
+5d18 : 206D7367;
+5d19 : 2C206661;
+5d1a : 696C6564;
+5d1b : 2C206E6F;
+5d1c : 74207375;
+5d1d : 70706F72;
+5d1e : 74656420;
+5d1f : 76657273;
+5d20 : 696F6E20;
+5d21 : 6E756D62;
+5d22 : 6572203D;
+5d23 : 20307825;
+5d24 : 780A0000;
+5d25 : 2573203D;
+5d26 : 20256C64;
+5d27 : 3A253039;
+5d28 : 6C643A25;
+5d29 : 30336C64;
+5d2a : 0A000000;
+5d2b : 556E696E;
+5d2c : 69746961;
+5d2d : 6C697A65;
+5d2e : 64000000;
+5d2f : 4552524F;
+5d30 : 523A2025;
+5d31 : 733A2054;
+5d32 : 696D6573;
+5d33 : 74616D70;
+5d34 : 73496E63;
+5d35 : 6F727265;
+5d36 : 63743A20;
+5d37 : 25642025;
+5d38 : 64202564;
+5d39 : 2025640A;
+5d3a : 00000000;
+5d3b : 73657276;
+5d3c : 6F3A7431;
+5d3d : 00000000;
+5d3e : 73657276;
+5d3f : 6F3A7432;
+5d40 : 00000000;
+5d41 : 73657276;
+5d42 : 6F3A7433;
+5d43 : 00000000;
+5d44 : 73657276;
+5d45 : 6F3A7434;
+5d46 : 00000000;
+5d47 : 73657276;
+5d48 : 6F3A7435;
+5d49 : 00000000;
+5d4a : 73657276;
+5d4b : 6F3A7436;
+5d4c : 00000000;
+5d4d : 2D3E6D64;
+5d4e : 656C6179;
+5d4f : 00000000;
+5d50 : 4552524F;
+5d51 : 523A2025;
+5d52 : 733A2054;
+5d53 : 696D6573;
+5d54 : 74616D70;
+5d55 : 73496E63;
+5d56 : 6F727265;
+5d57 : 63743A20;
+5d58 : 25642025;
+5d59 : 64200A00;
+5d5a : 20287761;
+5d5b : 69742066;
+5d5c : 6F722068;
+5d5d : 77290000;
+5d5e : 6F666673;
+5d5f : 65745F68;
+5d60 : 773A2025;
+5d61 : 6C692E25;
+5d62 : 30396C69;
+5d63 : 20282B25;
+5d64 : 6C69290A;
+5d65 : 00000000;
+5d66 : 504C4C20;
+5d67 : 4F75744F;
+5d68 : 664C6F63;
+5d69 : 6B2C2073;
+5d6a : 686F756C;
+5d6b : 64207265;
+5d6c : 73746172;
+5d6d : 74207379;
+5d6e : 6E630A00;
+5d6f : 73657276;
+5d70 : 6F3A6275;
+5d71 : 73790A00;
+5d72 : 77725F73;
+5d73 : 6572766F;
+5d74 : 20737461;
+5d75 : 74653A20;
+5d76 : 25732573;
+5d77 : 0A000000;
+5d78 : 6F6C6473;
+5d79 : 65747020;
+5d7a : 25692C20;
+5d7b : 6F666673;
+5d7c : 65742025;
+5d7d : 693A2530;
+5d7e : 34690A00;
+5d7f : 61646A75;
+5d80 : 73742070;
+5d81 : 68617365;
+5d82 : 2025690A;
+5d83 : 00000000;
+5d84 : 53594E43;
+5d85 : 5F4E5345;
+5d86 : 43000000;
+5d87 : 53594E43;
+5d88 : 5F534543;
+5d89 : 00000000;
+5d8a : 53594E43;
+5d8b : 5F504841;
+5d8c : 53450000;
+5d8d : 54524143;
+5d8e : 4B5F5048;
+5d8f : 41534500;
+5d90 : 57414954;
+5d91 : 5F4F4646;
+5d92 : 5345545F;
+5d93 : 53544142;
+5d94 : 4C450000;
+5d95 : 636F756C;
+5d96 : 64206E6F;
+5d97 : 74207365;
+5d98 : 6E642073;
+5d99 : 796E630A;
+5d9a : 00000000;
+5d9b : 636F756C;
+5d9c : 64206E6F;
+5d9d : 74207365;
+5d9e : 6E642061;
+5d9f : 6E6E6F75;
+5da0 : 6E63650A;
+5da1 : 00000000;
+5da2 : 636F756C;
+5da3 : 64206E6F;
+5da4 : 74207365;
+5da5 : 6E642072;
+5da6 : 65717565;
+5da7 : 73740A00;
+5da8 : 4E657720;
+5da9 : 666F7265;
+5daa : 69676E20;
+5dab : 4D617374;
+5dac : 65722025;
+5dad : 69206164;
+5dae : 6465640A;
+5daf : 00000000;
+5db0 : 25733A20;
+5db1 : 63616E27;
+5db2 : 7420696E;
+5db3 : 69742065;
+5db4 : 7874656E;
+5db5 : 73696F6E;
+5db6 : 0A000000;
+5db7 : 636C6F63;
+5db8 : 6B20636C;
+5db9 : 61737320;
+5dba : 3D202564;
+5dbb : 0A000000;
+5dbc : 636C6F63;
+5dbd : 6B206163;
+5dbe : 63757261;
+5dbf : 6379203D;
+5dc0 : 2025640A;
+5dc1 : 00000000;
+5dc2 : 49676E6F;
+5dc3 : 72656420;
+5dc4 : 6672616D;
+5dc5 : 65202569;
+5dc6 : 0A000000;
+5dc7 : 70705F73;
+5dc8 : 6C617665;
+5dc9 : 203A2044;
+5dca : 656C6179;
+5dcb : 20526573;
+5dcc : 7020646F;
+5dcd : 65736E27;
+5dce : 74206D61;
+5dcf : 74636820;
+5dd0 : 44656C61;
+5dd1 : 79205265;
+5dd2 : 71202866;
+5dd3 : 20257829;
+5dd4 : 0A000000;
+5dd5 : 70705F70;
+5dd6 : 636C6F63;
+5dd7 : 6B203A20;
+5dd8 : 5044656C;
+5dd9 : 61792052;
+5dda : 65737020;
+5ddb : 646F6573;
+5ddc : 6E277420;
+5ddd : 6D617463;
+5dde : 68205044;
+5ddf : 656C6179;
+5de0 : 20526571;
+5de1 : 0A000000;
+5de2 : 25733A20;
+5de3 : 5044656C;
+5de4 : 61792052;
+5de5 : 65737020;
+5de6 : 462D7570;
+5de7 : 20646F65;
+5de8 : 736E2774;
+5de9 : 206D6174;
+5dea : 63682050;
+5deb : 44656C61;
+5dec : 79205265;
+5ded : 710A0000;
+5dee : 4552524F;
+5def : 523A2025;
+5df0 : 733A2046;
+5df1 : 6F6C6C6F;
+5df2 : 77207570;
+5df3 : 206D6573;
+5df4 : 73616765;
+5df5 : 20697320;
+5df6 : 6E6F7420;
+5df7 : 66726F6D;
+5df8 : 20637572;
+5df9 : 72656E74;
+5dfa : 20706172;
+5dfb : 656E740A;
+5dfc : 00000000;
+5dfd : 4552524F;
+5dfe : 523A2025;
+5dff : 733A2053;
+5e00 : 6C617665;
+5e01 : 20776173;
+5e02 : 206E6F74;
+5e03 : 20776169;
+5e04 : 74696E67;
+5e05 : 20612066;
+5e06 : 6F6C6C6F;
+5e07 : 77207570;
+5e08 : 206D6573;
+5e09 : 73616765;
+5e0a : 0A000000;
+5e0b : 4552524F;
+5e0c : 523A2025;
+5e0d : 733A2053;
+5e0e : 65717565;
+5e0f : 6E636549;
+5e10 : 44202564;
+5e11 : 20646F65;
+5e12 : 736E2774;
+5e13 : 206D6174;
+5e14 : 6368206C;
+5e15 : 61737420;
+5e16 : 53796E63;
+5e17 : 206D6573;
+5e18 : 73616765;
+5e19 : 2025640A;
+5e1a : 00000000;
+5e1b : 25732825;
+5e1c : 6429204D;
+5e1d : 65737361;
+5e1e : 67652063;
+5e1f : 616E2774;
+5e20 : 20626520;
+5e21 : 73656E74;
+5e22 : 0A000000;
+5e23 : 53454E54;
+5e24 : 20253032;
+5e25 : 64206279;
+5e26 : 74657320;
+5e27 : 61742025;
+5e28 : 642E2530;
+5e29 : 39642E25;
+5e2a : 30336420;
+5e2b : 28257329;
+5e2c : 0A000000;
+5e2d : 25733A25;
+5e2e : 693A2045;
+5e2f : 72726F72;
+5e30 : 20310A00;
+5e31 : 25733A25;
+5e32 : 693A2045;
+5e33 : 72726F72;
+5e34 : 20320A00;
+5e35 : 7072652D;
+5e36 : 00000000;
+5e37 : 42657374;
+5e38 : 20666F72;
+5e39 : 6569676E;
+5e3a : 206D6173;
+5e3b : 74657220;
+5e3c : 69732025;
+5e3d : 692F2569;
+5e3e : 0A000000;
+5e3f : 25733A20;
+5e40 : 6572726F;
+5e41 : 720A0000;
+5e42 : 25733A20;
+5e43 : 70617373;
+5e44 : 6976650A;
+5e45 : 00000000;
+5e46 : 25733A20;
+5e47 : 25736D61;
+5e48 : 73746572;
+5e49 : 0A000000;
+5e4a : 4E657720;
+5e4b : 55544320;
+5e4c : 6F666673;
+5e4d : 65743A20;
+5e4e : 25690A00;
+5e4f : 25733A20;
+5e50 : 736C6176;
+5e51 : 650A0000;
+5e52 : 2D000000;
+5e53 : 25732564;
+5e54 : 2E253039;
+5e55 : 64000000;
+5e56 : 5472696D;
+5e57 : 20746F6F;
+5e58 : 2D6C6F6E;
+5e59 : 67206D70;
+5e5a : 643A2025;
+5e5b : 690A0000;
+5e5c : 41667465;
+5e5d : 72206176;
+5e5e : 67282569;
+5e5f : 292C206D;
+5e60 : 65616E50;
+5e61 : 61746844;
+5e62 : 656C6179;
+5e63 : 3A202569;
+5e64 : 0A000000;
+5e65 : 6572726F;
+5e66 : 7220696E;
+5e67 : 20745F6F;
+5e68 : 70732D3E;
+5e69 : 73657276;
+5e6a : 6F5F696E;
+5e6b : 69740000;
+5e6c : 496E6974;
+5e6d : 69616C69;
+5e6e : 7A65643A;
+5e6f : 206F6273;
+5e70 : 5F647269;
+5e71 : 66742025;
+5e72 : 6C6C690A;
+5e73 : 00000000;
+5e74 : 4F666673;
+5e75 : 65742066;
+5e76 : 726F6D20;
+5e77 : 6D617374;
+5e78 : 65723A20;
+5e79 : 20202020;
+5e7a : 25730A00;
+5e7b : 54313A20;
+5e7c : 25730A00;
+5e7d : 54323A20;
+5e7e : 25730A00;
+5e7f : 4F627365;
+5e80 : 72766564;
+5e81 : 20647269;
+5e82 : 66743A20;
+5e83 : 2539690A;
+5e84 : 00000000;
+5e85 : 64697363;
+5e86 : 61726420;
+5e87 : 54332F54;
+5e88 : 343A2077;
+5e89 : 65206D69;
+5e8a : 73732054;
+5e8b : 312F5432;
+5e8c : 0A000000;
+5e8d : 54333A20;
+5e8e : 25730A00;
+5e8f : 54343A20;
+5e90 : 25730A00;
+5e91 : 4D617374;
+5e92 : 65722074;
+5e93 : 6F20736C;
+5e94 : 6176653A;
+5e95 : 2025730A;
+5e96 : 00000000;
+5e97 : 536C6176;
+5e98 : 6520746F;
+5e99 : 206D6173;
+5e9a : 7465723A;
+5e9b : 2025730A;
+5e9c : 00000000;
+5e9d : 6D65616E;
+5e9e : 50617468;
+5e9f : 44656C61;
+5ea0 : 793A2025;
+5ea1 : 730A0000;
+5ea2 : 54353A20;
+5ea3 : 25730A00;
+5ea4 : 54363A20;
+5ea5 : 25730A00;
+5ea6 : 536C6176;
+5ea7 : 65204F6E;
+5ea8 : 6C792C20;
+5ea9 : 636C6F63;
+5eaa : 6B20636C;
+5eab : 61737320;
+5eac : 73657420;
+5ead : 746F2025;
+5eae : 640A0000;
+5eaf : 25323075;
+5eb0 : 00000000;
+5eb1 : 25750000;
+5eb2 : 25313175;
+5eb3 : 25303975;
+5eb4 : 00000000;
+5eb5 : 25752530;
+5eb6 : 39750000;
+5eb7 : 6C6E6B3A;
+5eb8 : 25642072;
+5eb9 : 783A2564;
+5eba : 2074783A;
+5ebb : 25642000;
+5ebc : 6C6F636B;
+5ebd : 3A256420;
+5ebe : 00000000;
+5ebf : 7074703A;
+5ec0 : 25732000;
+5ec1 : 73763A25;
+5ec2 : 64200000;
+5ec3 : 73733A27;
+5ec4 : 25732720;
+5ec5 : 00000000;
+5ec6 : 61757825;
+5ec7 : 643A2578;
+5ec8 : 20000000;
+5ec9 : 7365633A;
+5eca : 2564206E;
+5ecb : 7365633A;
+5ecc : 25642000;
+5ecd : 6D753A25;
+5ece : 73200000;
+5ecf : 646D733A;
+5ed0 : 25732000;
+5ed1 : 6474786D;
+5ed2 : 3A256420;
+5ed3 : 6472786D;
+5ed4 : 3A256420;
+5ed5 : 00000000;
+5ed6 : 64747873;
+5ed7 : 3A256420;
+5ed8 : 64727873;
+5ed9 : 3A256420;
+5eda : 00000000;
+5edb : 6173796D;
+5edc : 3A256420;
+5edd : 00000000;
+5ede : 63727474;
+5edf : 3A257320;
+5ee0 : 00000000;
+5ee1 : 636B6F3A;
+5ee2 : 25642000;
+5ee3 : 73657470;
+5ee4 : 3A256420;
+5ee5 : 00000000;
+5ee6 : 75636E74;
+5ee7 : 3A256420;
+5ee8 : 00000000;
+5ee9 : 68643A25;
+5eea : 64206D64;
+5eeb : 3A256420;
+5eec : 61643A25;
+5eed : 64200000;
+5eee : 70636200;
+5eef : 74656D70;
+5ef0 : 3A202564;
+5ef1 : 2E253034;
+5ef2 : 64204300;
+5ef3 : 0A0A5054;
+5ef4 : 50207374;
+5ef5 : 61747573;
+5ef6 : 3A200000;
+5ef7 : 25730000;
+5ef8 : 0A0A5379;
+5ef9 : 6E632069;
+5efa : 6E666F20;
+5efb : 6E6F7420;
+5efc : 76616C69;
+5efd : 640A0000;
+5efe : 0A0A5379;
+5eff : 6E636872;
+5f00 : 6F6E697A;
+5f01 : 6174696F;
+5f02 : 6E207374;
+5f03 : 61747573;
+5f04 : 3A0A0000;
+5f05 : 57522050;
+5f06 : 54502043;
+5f07 : 6F726520;
+5f08 : 53796E63;
+5f09 : 204D6F6E;
+5f0a : 69746F72;
+5f0b : 20257300;
+5f0c : 0A457363;
+5f0d : 203D2065;
+5f0e : 78697400;
+5f0f : 0A0A5441;
+5f10 : 49205469;
+5f11 : 6D653A20;
+5f12 : 20202020;
+5f13 : 20202020;
+5f14 : 20202020;
+5f15 : 20202020;
+5f16 : 20000000;
+5f17 : 0A0A4C69;
+5f18 : 6E6B2073;
+5f19 : 74617475;
+5f1a : 733A0000;
+5f1b : 0A25733A;
+5f1c : 20000000;
+5f1d : 77727531;
+5f1e : 00000000;
+5f1f : 4C696E6B;
+5f20 : 20757020;
+5f21 : 20200000;
+5f22 : 4C696E6B;
+5f23 : 20646F77;
+5f24 : 6E200000;
+5f25 : 2852583A;
+5f26 : 2025642C;
+5f27 : 2054583A;
+5f28 : 20256429;
+5f29 : 00000000;
+5f2a : 20495076;
+5f2b : 343A2000;
+5f2c : 424F4F54;
+5f2d : 50207275;
+5f2e : 6E6E696E;
+5f2f : 67000000;
+5f30 : 25732028;
+5f31 : 66726F6D;
+5f32 : 20626F6F;
+5f33 : 74702900;
+5f34 : 25732028;
+5f35 : 73746174;
+5f36 : 69632061;
+5f37 : 73736967;
+5f38 : 6E6D656E;
+5f39 : 74290000;
+5f3a : 0A4D6F64;
+5f3b : 653A2000;
+5f3c : 5752204F;
+5f3d : 66660000;
+5f3e : 0A436C6F;
+5f3f : 636B206F;
+5f40 : 66667365;
+5f41 : 743A2020;
+5f42 : 20202020;
+5f43 : 20202020;
+5f44 : 20202020;
+5f45 : 20202000;
+5f46 : 2532692E;
+5f47 : 25303969;
+5f48 : 20730000;
+5f49 : 25692E25;
+5f4a : 30396920;
+5f4b : 73000000;
+5f4c : 25396920;
+5f4d : 6E730000;
+5f4e : 0A4F6E65;
+5f4f : 2D776179;
+5f50 : 2064656C;
+5f51 : 61792061;
+5f52 : 76657261;
+5f53 : 6765643A;
+5f54 : 20202020;
+5f55 : 20202000;
+5f56 : 0A4F6273;
+5f57 : 65727665;
+5f58 : 64206472;
+5f59 : 6966743A;
+5f5a : 20202020;
+5f5b : 20202020;
+5f5c : 20202020;
+5f5d : 20202000;
+5f5e : 5752204D;
+5f5f : 61737465;
+5f60 : 72202000;
+5f61 : 57522053;
+5f62 : 6C617665;
+5f63 : 20202000;
+5f64 : 57522055;
+5f65 : 6E6B6E6F;
+5f66 : 776E2000;
+5f67 : 4C6F636B;
+5f68 : 65642000;
+5f69 : 4E6F4C6F;
+5f6a : 636B2000;
+5f6b : 43616C69;
+5f6c : 62726174;
+5f6d : 65640000;
+5f6e : 556E6361;
+5f6f : 6C696272;
+5f70 : 61746564;
+5f71 : 00000000;
+5f72 : 53657276;
+5f73 : 6F207374;
+5f74 : 6174653A;
+5f75 : 20202020;
+5f76 : 20202020;
+5f77 : 20202020;
+5f78 : 20202000;
+5f79 : 50686173;
+5f7a : 65207472;
+5f7b : 61636B69;
+5f7c : 6E673A20;
+5f7d : 20202020;
+5f7e : 20202020;
+5f7f : 20202000;
+5f80 : 4F4E0A00;
+5f81 : 4F46460A;
+5f82 : 00000000;
+5f83 : 41757820;
+5f84 : 636C6F63;
+5f85 : 6B202564;
+5f86 : 20737461;
+5f87 : 7475733A;
+5f88 : 20202020;
+5f89 : 20202020;
+5f8a : 00000000;
+5f8b : 656E6162;
+5f8c : 6C656400;
+5f8d : 2C206C6F;
+5f8e : 636B6564;
+5f8f : 00000000;
+5f90 : 0A54696D;
+5f91 : 696E6720;
+5f92 : 70617261;
+5f93 : 6D657465;
+5f94 : 72733A0A;
+5f95 : 00000000;
+5f96 : 526F756E;
+5f97 : 642D7472;
+5f98 : 69702074;
+5f99 : 696D6520;
+5f9a : 286D7529;
+5f9b : 3A200000;
+5f9c : 25732070;
+5f9d : 730A0000;
+5f9e : 4D617374;
+5f9f : 65722D73;
+5fa0 : 6C617665;
+5fa1 : 2064656C;
+5fa2 : 61793A20;
+5fa3 : 20200000;
+5fa4 : 4D617374;
+5fa5 : 65722050;
+5fa6 : 48592064;
+5fa7 : 656C6179;
+5fa8 : 733A2020;
+5fa9 : 20202020;
+5faa : 20202020;
+5fab : 20000000;
+5fac : 54583A20;
+5fad : 25396420;
+5fae : 70732C20;
+5faf : 52583A20;
+5fb0 : 25396420;
+5fb1 : 70730A00;
+5fb2 : 536C6176;
+5fb3 : 65205048;
+5fb4 : 59206465;
+5fb5 : 6C617973;
+5fb6 : 3A202020;
+5fb7 : 20202020;
+5fb8 : 20202020;
+5fb9 : 20000000;
+5fba : 546F7461;
+5fbb : 6C206C69;
+5fbc : 6E6B2061;
+5fbd : 73796D6D;
+5fbe : 65747279;
+5fbf : 3A000000;
+5fc0 : 25323164;
+5fc1 : 2070730A;
+5fc2 : 00000000;
+5fc3 : 4361626C;
+5fc4 : 65207274;
+5fc5 : 74206465;
+5fc6 : 6C61793A;
+5fc7 : 20202020;
+5fc8 : 20200000;
+5fc9 : 436C6F63;
+5fca : 6B206F66;
+5fcb : 66736574;
+5fcc : 3A000000;
+5fcd : 25323964;
+5fce : 2070730A;
+5fcf : 00000000;
+5fd0 : 50686173;
+5fd1 : 65207365;
+5fd2 : 74706F69;
+5fd3 : 6E743A00;
+5fd4 : 25323764;
+5fd5 : 2070730A;
+5fd6 : 00000000;
+5fd7 : 536B6577;
+5fd8 : 3A202020;
+5fd9 : 20200000;
+5fda : 25333264;
+5fdb : 2070730A;
+5fdc : 00000000;
+5fdd : 55706461;
+5fde : 74652063;
+5fdf : 6F756E74;
+5fe0 : 65723A00;
+5fe1 : 25323764;
+5fe2 : 0A000000;
+5fe3 : 756E6B6E;
+5fe4 : 6F776E00;
+5fe5 : 64696167;
+5fe6 : 73000000;
+5fe7 : 73746174;
+5fe8 : 73000000;
+5fe9 : 1B5B3125;
+5fea : 63000000;
+5feb : 436F6D6D;
+5fec : 616E6420;
+5fed : 22257322;
+5fee : 3A206572;
+5fef : 726F7220;
+5ff0 : 25640A00;
+5ff1 : 556E7265;
+5ff2 : 636F676E;
+5ff3 : 697A6564;
+5ff4 : 20636F6D;
+5ff5 : 6D616E64;
+5ff6 : 20222573;
+5ff7 : 222E0A00;
+5ff8 : 77726323;
+5ff9 : 20000000;
+5ffa : 25630000;
+5ffb : 65786563;
+5ffc : 7574696E;
+5ffd : 673A2025;
+5ffe : 730A0000;
+5fff : 456D7074;
+6000 : 7920696E;
+6001 : 69742073;
+6002 : 63726970;
+6003 : 742E2E2E;
+6004 : 0A000000;
+6005 : 2D2D2062;
+6006 : 75696C74;
+6007 : 2D696E20;
+6008 : 73637269;
+6009 : 7074202D;
+600a : 2D0A0000;
+600b : 28656D70;
+600c : 7479290A;
+600d : 00000000;
+600e : 57522043;
+600f : 6F726520;
+6010 : 6275696C;
+6011 : 643A2025;
+6012 : 7325730A;
+6013 : 00000000;
+6014 : 4275696C;
+6015 : 743A2025;
+6016 : 73202573;
+6017 : 20627920;
+6018 : 25730A00;
+6019 : 4275696C;
+601a : 7420666F;
+601b : 72202564;
+601c : 206B4220;
+601d : 52414D2C;
+601e : 20737461;
+601f : 636B2069;
+6020 : 73202564;
+6021 : 20627974;
+6022 : 65730A00;
+6023 : 5741524E;
+6024 : 494E473A;
+6025 : 20686172;
+6026 : 64776172;
+6027 : 65207361;
+6028 : 79732025;
+6029 : 696B4220;
+602a : 3C3D2052;
+602b : 414D203C;
+602c : 2025696B;
+602d : 420A0000;
+602e : 76657200;
+602f : 25733B20;
+6030 : 25732025;
+6031 : 730A0000;
+6032 : 556E6B6E;
+6033 : 6F776E20;
+6034 : 73756263;
+6035 : 6F6D6D61;
+6036 : 6E642022;
+6037 : 2573220A;
+6038 : 00000000;
+6039 : 73746172;
+603a : 74000000;
+603b : 73746F70;
+603c : 00000000;
+603d : 65326500;
+603e : 64656C61;
+603f : 79000000;
+6040 : 676D0000;
+6041 : 61627363;
+6042 : 616C0000;
+6043 : 6D6F6465;
+6044 : 00000000;
+6045 : 73746F70;
+6046 : 70656400;
+6047 : 72756E6E;
+6048 : 696E6700;
+6049 : 70327000;
+604a : 41766169;
+604b : 6C61626C;
+604c : 6520636F;
+604d : 6D6D616E;
+604e : 64733A0A;
+604f : 00000000;
+6050 : 20202573;
+6051 : 0A000000;
+6052 : 68656C70;
+6053 : 00000000;
+6054 : 25303278;
+6055 : 3A253032;
+6056 : 783A2530;
+6057 : 32783A25;
+6058 : 3032783A;
+6059 : 25303278;
+605a : 3A253032;
+605b : 78000000;
+605c : 67657400;
+605d : 67657470;
+605e : 00000000;
+605f : 73657400;
+6060 : 73657470;
+6061 : 00000000;
+6062 : 4D41432D;
+6063 : 61646472;
+6064 : 6573733A;
+6065 : 2025730A;
+6066 : 00000000;
+6067 : 6D616300;
+6068 : 72657365;
+6069 : 74000000;
+606a : 6D617800;
+606b : 7072696E;
+606c : 745F7461;
+606d : 736B5F74;
+606e : 696D655F;
+606f : 74687265;
+6070 : 73686F6C;
+6071 : 64202564;
+6072 : 0A000000;
+6073 : 20697465;
+6074 : 72617469;
+6075 : 6F6E7320;
+6076 : 20202020;
+6077 : 7365636F;
+6078 : 6E64732E;
+6079 : 6D696372;
+607a : 6F732020;
+607b : 20206D61;
+607c : 785F6D73;
+607d : 206E616D;
+607e : 650A0000;
+607f : 20202539;
+6080 : 6C692020;
+6081 : 2025396C;
+6082 : 692E2530;
+6083 : 366C6920;
+6084 : 25396C64;
+6085 : 2025730A;
+6086 : 00000000;
+6087 : 70730000;
+6088 : 25750A00;
+6089 : 55736167;
+608a : 653A2072;
+608b : 65667265;
+608c : 7368203C;
+608d : 7365636F;
+608e : 6E64733E;
+608f : 0A000000;
+6090 : 72656672;
+6091 : 65736800;
+6092 : 73746174;
+6093 : 69737469;
+6094 : 6373206E;
+6095 : 6F77206F;
+6096 : 66660A00;
+6097 : 62747300;
+6098 : 6F666600;
+6099 : 73746174;
+609a : 00000000;
+609b : 57726F6E;
+609c : 67207061;
+609d : 72616D65;
+609e : 7465720A;
+609f : 00000000;
+60a0 : 65726173;
+60a1 : 65000000;
+60a2 : 436F756C;
+60a3 : 64206E6F;
+60a4 : 74206572;
+60a5 : 61736520;
+60a6 : 44420A00;
+60a7 : 61646400;
+60a8 : 53465020;
+60a9 : 44422069;
+60aa : 73206675;
+60ab : 6C6C0A00;
+60ac : 49324320;
+60ad : 6572726F;
+60ae : 720A0000;
+60af : 53465020;
+60b0 : 64617461;
+60b1 : 62617365;
+60b2 : 20657272;
+60b3 : 6F722028;
+60b4 : 2564290A;
+60b5 : 00000000;
+60b6 : 25642053;
+60b7 : 46507320;
+60b8 : 696E2044;
+60b9 : 420A0000;
+60ba : 73686F77;
+60bb : 00000000;
+60bc : 53465020;
+60bd : 64617461;
+60be : 62617365;
+60bf : 20656D70;
+60c0 : 74790A00;
+60c1 : 25643A20;
+60c2 : 504E3A00;
+60c3 : 20645478;
+60c4 : 3A202538;
+60c5 : 64206452;
+60c6 : 783A2025;
+60c7 : 38642061;
+60c8 : 6C706861;
+60c9 : 3A202538;
+60ca : 640A0000;
+60cb : 6D617463;
+60cc : 68000000;
+60cd : 4E6F2053;
+60ce : 46502E0A;
+60cf : 00000000;
+60d0 : 53465020;
+60d1 : 72656164;
+60d2 : 20657272;
+60d3 : 6F720A00;
+60d4 : 436F756C;
+60d5 : 64206E6F;
+60d6 : 74206D61;
+60d7 : 74636820;
+60d8 : 746F2044;
+60d9 : 420A0000;
+60da : 53465020;
+60db : 6D617463;
+60dc : 6865642C;
+60dd : 20645478;
+60de : 3D256420;
+60df : 6452783D;
+60e0 : 25642061;
+60e1 : 6C706861;
+60e2 : 3D25640A;
+60e3 : 00000000;
+60e4 : 656E6100;
+60e5 : 73667000;
+60e6 : 696E6974;
+60e7 : 00000000;
+60e8 : 636C0000;
+60e9 : 73707300;
+60ea : 67707300;
+60eb : 25642025;
+60ec : 640A0000;
+60ed : 73646163;
+60ee : 00000000;
+60ef : 67646163;
+60f0 : 00000000;
+60f1 : 63686563;
+60f2 : 6B76636F;
+60f3 : 00000000;
+60f4 : 706C6C00;
+60f5 : 666F7263;
+60f6 : 65000000;
+60f7 : 466F756E;
+60f8 : 64207068;
+60f9 : 61736520;
+60fa : 7472616E;
+60fb : 73697469;
+60fc : 6F6E2069;
+60fd : 6E204545;
+60fe : 50524F4D;
+60ff : 3A202564;
+6100 : 70730A00;
+6101 : 4D656173;
+6102 : 7572696E;
+6103 : 67207432;
+6104 : 2F743420;
+6105 : 70686173;
+6106 : 65207472;
+6107 : 616E7369;
+6108 : 74696F6E;
+6109 : 2E2E2E0A;
+610a : 00000000;
+610b : 63616C69;
+610c : 62726174;
+610d : 696F6E00;
+610e : 73657473;
+610f : 65630000;
+6110 : 7365746E;
+6111 : 73656300;
+6112 : 72617700;
+6113 : 2573202B;
+6114 : 2564206E;
+6115 : 616E6F73;
+6116 : 65636F6E;
+6117 : 64732E0A;
+6118 : 00000000;
+6119 : 74696D65;
+611a : 00000000;
+611b : 67756900;
+611c : 66730000;
+611d : 66736500;
+611e : 73646200;
+611f : 4F4E0000;
+6120 : 4F464600;
+6121 : 656E6162;
+6122 : 6C650000;
+6123 : 64697361;
+6124 : 626C6500;
+6125 : 70686173;
+6126 : 65207472;
+6127 : 61636B69;
+6128 : 6E672025;
+6129 : 730A0000;
+612a : 70747261;
+612b : 636B0000;
+612c : 25642E25;
+612d : 642E2564;
+612e : 2E256400;
+612f : 49502D61;
+6130 : 64647265;
+6131 : 73733A20;
+6132 : 696E2074;
+6133 : 7261696E;
+6134 : 696E670A;
+6135 : 00000000;
+6136 : 49502D61;
+6137 : 64647265;
+6138 : 73733A20;
+6139 : 25732028;
+613a : 66726F6D;
+613b : 20626F6F;
+613c : 7470290A;
+613d : 00000000;
+613e : 49502D61;
+613f : 64647265;
+6140 : 73733A20;
+6141 : 25732028;
+6142 : 73746174;
+6143 : 69632061;
+6144 : 73736967;
+6145 : 6E6D656E;
+6146 : 74290A00;
+6147 : 69700000;
+6148 : 50505349;
+6149 : 20766572;
+614a : 626F7369;
+614b : 74793A20;
+614c : 2530386C;
+614d : 780A0000;
+614e : 76657262;
+614f : 6F736500;
+6150 : 436F756C;
+6151 : 64206E6F;
+6152 : 74206572;
+6153 : 61736520;
+6154 : 696E6974;
+6155 : 20736372;
+6156 : 6970740A;
+6157 : 00000000;
+6158 : 436F756C;
+6159 : 64206E6F;
+615a : 74206164;
+615b : 64207468;
+615c : 6520636F;
+615d : 6D6D616E;
+615e : 640A0000;
+615f : 4F4B2E0A;
+6160 : 00000000;
+6161 : 626F6F74;
+6162 : 00000000;
+6163 : 25692028;
+6164 : 22257322;
+6165 : 29206F75;
+6166 : 74206F66;
+6167 : 2072616E;
+6168 : 67650A00;
+6169 : 63757272;
+616a : 656E7420;
+616b : 766C616E;
+616c : 3A202569;
+616d : 20283078;
+616e : 2578290A;
+616f : 00000000;
+6170 : 766C616E;
+6171 : 00000000;
+6172 : 41757820;
+6173 : 64696167;
+6174 : 6E6F7374;
+6175 : 69637320;
+6176 : 696E666F;
+6177 : 3A0A0000;
+6178 : 69643A20;
+6179 : 25642E25;
+617a : 642C2072;
+617b : 2F772077;
+617c : 6F726473;
+617d : 3A202564;
+617e : 2C20722F;
+617f : 6F20776F;
+6180 : 7264733A;
+6181 : 2025640A;
+6182 : 00000000;
+6183 : 726F0000;
+6184 : 576F7264;
+6185 : 20256420;
+6186 : 69732030;
+6187 : 78253038;
+6188 : 780A0000;
+6189 : 72770000;
+618a : 77000000;
+618b : 56616C75;
+618c : 65203078;
+618d : 25303878;
+618e : 20777269;
+618f : 7474656E;
+6190 : 20746F20;
+6191 : 74686520;
+6192 : 776F7264;
+6193 : 2025640A;
+6194 : 00000000;
+6195 : 64696167;
+6196 : 00000000;
+6197 : 25732C20;
+6198 : 25732025;
+6199 : 642C2025;
+619a : 642C2025;
+619b : 3032643A;
+619c : 25303264;
+619d : 3A253032;
+619e : 64000000;
+619f : 25732025;
+61a0 : 32642025;
+61a1 : 3032643A;
+61a2 : 25303264;
+61a3 : 3A253032;
+61a4 : 64000000;
+61a5 : 2534642D;
+61a6 : 25303264;
+61a7 : 2D253032;
+61a8 : 642D2530;
+61a9 : 32643A25;
+61aa : 3032643A;
+61ab : 25303264;
+61ac : 00000000;
+61ad : 1B5B3025;
+61ae : 643B3325;
+61af : 646D0000;
+61b0 : 1B5B6D00;
+61b1 : 1B5B2564;
+61b2 : 3B256466;
+61b3 : 00000000;
+61b4 : 1B5B324A;
+61b5 : 1B5B313B;
+61b6 : 31480000;
+61b7 : 53756E00;
+61b8 : 4D6F6E00;
+61b9 : 54756500;
+61ba : 57656400;
+61bb : 54687500;
+61bc : 46726900;
+61bd : 53617400;
+61be : 4A616E00;
+61bf : 46656200;
+61c0 : 4D617200;
+61c1 : 41707200;
+61c2 : 4D617900;
+61c3 : 4A756E00;
+61c4 : 4A756C00;
+61c5 : 41756700;
+61c6 : 53657000;
+61c7 : 4F637400;
+61c8 : 4E6F7600;
+61c9 : 44656300;
+61ca : 4C6F6F70;
+61cb : 73207065;
+61cc : 72206A69;
+61cd : 6666793A;
+61ce : 2025690A;
+61cf : 00000000;
+61d0 : 25733A20;
+61d1 : 6E6F2073;
+61d2 : 6F636B65;
+61d3 : 7420736C;
+61d4 : 6F747320;
+61d5 : 6C656674;
+61d6 : 0A000000;
+61d7 : 77723000;
+61d8 : 6E65742D;
+61d9 : 62680000;
+61da : 69707634;
+61db : 00000000;
+61dc : 61727000;
+61dd : 44697363;
+61de : 6F766572;
+61df : 65642049;
+61e0 : 50206164;
+61e1 : 64726573;
+61e2 : 73202825;
+61e3 : 642E2564;
+61e4 : 2E25642E;
+61e5 : 25642921;
+61e6 : 0A000000;
+61e7 : 534E4D50;
+61e8 : 3A205346;
+61e9 : 50207570;
+61ea : 64617465;
+61eb : 6420696E;
+61ec : 206D656D;
+61ed : 6F72792C;
+61ee : 20726573;
+61ef : 74617274;
+61f0 : 20505450;
+61f1 : 0A000000;
+61f2 : 494E5641;
+61f3 : 4C494400;
+61f4 : 25642E25;
+61f5 : 30346400;
+61f6 : 736E6D70;
+61f7 : 00000000;
+61f8 : 44656320;
+61f9 : 31382032;
+61fa : 30313720;
+61fb : 30393A33;
+61fc : 323A3438;
+61fd : 00000000;
+61fe : 6C6C6470;
+61ff : 20757064;
+6200 : 6174650A;
+6201 : 00000000;
+6202 : 6C6C6470;
+6203 : 00000000;
+6204 : 30313233;
+6205 : 34353637;
+6206 : 38396162;
+6207 : 63646566;
+6208 : 00000000;
+6209 : 49443A20;
+620a : 25780A00;
+620b : 6E6F2070;
+620c : 66696C74;
+620d : 65722072;
+620e : 756C652D;
+620f : 73657421;
+6210 : 0A000000;
+6211 : 7066696C;
+6212 : 7465723A;
+6213 : 2077726F;
+6214 : 6E67206D;
+6215 : 61676963;
+6216 : 206E756D;
+6217 : 62657220;
+6218 : 28676F74;
+6219 : 20307825;
+621a : 78290A00;
+621b : 7066696C;
+621c : 7465723A;
+621d : 2077726F;
+621e : 6E672072;
+621f : 756C652D;
+6220 : 7365742C;
+6221 : 2063616E;
+6222 : 27742061;
+6223 : 70706C79;
+6224 : 0A000000;
+6225 : 4572726F;
+6226 : 723A204D;
+6227 : 696E6963;
+6228 : 2048444C;
+6229 : 20766572;
+622a : 73696F6E;
+622b : 20256420;
+622c : 6E6F7420;
+622d : 73757070;
+622e : 6F727465;
+622f : 64206279;
+6230 : 2073770A;
+6231 : 00000000;
+6232 : 5761726E;
+6233 : 696E673A;
+6234 : 204D696E;
+6235 : 69632072;
+6236 : 65636569;
+6237 : 76656420;
+6238 : 6572726F;
+6239 : 6E656F75;
+623a : 73206672;
+623b : 616D650A;
+623c : 00000000;
+623d : 5761726E;
+623e : 696E673A;
+623f : 204D696E;
+6240 : 69632052;
+6241 : 78206669;
+6242 : 666F2066;
+6243 : 756C6C2C;
+6244 : 20657870;
+6245 : 65637420;
+6246 : 77726F6E;
+6247 : 67206672;
+6248 : 616D6573;
+6249 : 0A000000;
+624a : 5761726E;
+624b : 696E673A;
+624c : 20747820;
+624d : 6E6F7420;
+624e : 7465726D;
+624f : 696E6174;
+6250 : 65642069;
+6251 : 6E66696E;
+6252 : 69746520;
+6253 : 6D63723D;
+6254 : 30782578;
+6255 : 0A000000;
+6256 : 5761726E;
+6257 : 696E673A;
+6258 : 20747820;
+6259 : 74696D65;
+625a : 7374616D;
+625b : 70206E65;
+625c : 76657220;
+625d : 62656361;
+625e : 6D652061;
+625f : 7661696C;
+6260 : 61626C65;
+6261 : 0A000000;
+6262 : 66657463;
+6263 : 68696E67;
+6264 : 20646961;
+6265 : 675F7277;
+6266 : 5F776F72;
+6267 : 64730A00;
+6268 : 66657463;
+6269 : 68696E67;
+626a : 20646961;
+626b : 675F726F;
+626c : 5F776F72;
+626d : 64730A00;
+626e : 64657620;
+626f : 20307825;
+6270 : 30386C78;
+6271 : 20402025;
+6272 : 30366C78;
+6273 : 2C202573;
+6274 : 0A000000;
+6275 : 66706761;
+6276 : 2D617265;
+6277 : 61000000;
+6278 : 4572726F;
+6279 : 72202564;
+627a : 20776869;
+627b : 6C652072;
+627c : 65616469;
+627d : 6E672074;
+627e : 32347020;
+627f : 66726F6D;
+6280 : 2073746F;
+6281 : 72616765;
+6282 : 0A000000;
+6283 : 74323470;
+6284 : 20726561;
+6285 : 64206672;
+6286 : 6F6D2073;
+6287 : 746F7261;
+6288 : 67653A20;
+6289 : 25642070;
+628a : 730A0000;
+628b : 57616974;
+628c : 696E6720;
+628d : 666F7220;
+628e : 6C696E6B;
+628f : 2E2E2E0A;
+6290 : 00000000;
+6291 : 4C6F636B;
+6292 : 696E6720;
+6293 : 504C4C2E;
+6294 : 2E2E0A00;
+6295 : 43616C69;
+6296 : 62726174;
+6297 : 696E6720;
+6298 : 52582074;
+6299 : 696D6573;
+629a : 74616D70;
+629b : 65722E2E;
+629c : 2E0A0000;
+629d : 4661696C;
+629e : 65640000;
+629f : 53756363;
+62a0 : 65737300;
+62a1 : 57726F74;
+62a2 : 65206E65;
+62a3 : 77207432;
+62a4 : 34702076;
+62a5 : 616C7565;
+62a6 : 3A202564;
+62a7 : 20707320;
+62a8 : 28257329;
+62a9 : 0A000000;
+62aa : 20454E4F;
+62ab : 53504300;
+62ac : 25732573;
+62ad : 3A000000;
+62ae : 74656D70;
+62af : 00000000;
+62b0 : 74656D70;
+62b1 : 65726174;
+62b2 : 75726500;
+62b3 : 7366703A;
+62b4 : 20636F72;
+62b5 : 72757074;
+62b6 : 65642063;
+62b7 : 6865636B;
+62b8 : 73756D0A;
+62b9 : 00000000;
+62ba : 73646266;
+62bb : 733A2066;
+62bc : 6F756E64;
+62bd : 20617420;
+62be : 25692069;
+62bf : 6E20466C;
+62c0 : 6173680A;
+62c1 : 00000000;
+62c2 : 73646266;
+62c3 : 733A2066;
+62c4 : 6F756E64;
+62c5 : 20617420;
+62c6 : 25692069;
+62c7 : 6E205731;
+62c8 : 0A000000;
+62c9 : 73646266;
+62ca : 733A2066;
+62cb : 6F756E64;
+62cc : 20617420;
+62cd : 25692069;
+62ce : 6E204932;
+62cf : 43283078;
+62d0 : 25325829;
+62d1 : 0A000000;
+62d2 : 66696C65;
+62d3 : 20307825;
+62d4 : 30387820;
+62d5 : 40202534;
+62d6 : 692C206E;
+62d7 : 616D6520;
+62d8 : 25730A00;
+62d9 : 25733A20;
+62da : 53444220;
+62db : 6572726F;
+62dc : 720A0000;
+62dd : 25733A20;
+62de : 53444220;
+62df : 66696C65;
+62e0 : 20697320;
+62e1 : 656D7074;
+62e2 : 790A0000;
+62e3 : 25733A20;
+62e4 : 5573696E;
+62e5 : 67205731;
+62e6 : 20736572;
+62e7 : 69616C20;
+62e8 : 6E756D62;
+62e9 : 65720A00;
+62ea : 25733A20;
+62eb : 6661696C;
+62ec : 7572650A;
+62ed : 00000000;
+62ee : 25733A20;
+62ef : 53444220;
+62f0 : 6572726F;
+62f1 : 722C2063;
+62f2 : 616E2774;
+62f3 : 20736176;
+62f4 : 650A0000;
+62f5 : 41646469;
+62f6 : 6E67206E;
+62f7 : 65772053;
+62f8 : 46502065;
+62f9 : 6E747279;
+62fa : 0A000000;
+62fb : 55706461;
+62fc : 74652065;
+62fd : 78697374;
+62fe : 696E6720;
+62ff : 53465020;
+6300 : 656E7472;
+6301 : 790A0000;
+6302 : 2D2D2075;
+6303 : 7365722D;
+6304 : 64656669;
+6305 : 6E656420;
+6306 : 73637269;
+6307 : 7074202D;
+6308 : 2D0A0000;
+6309 : 45726173;
+630a : 696E6720;
+630b : 466C6173;
+630c : 68283078;
+630d : 2578292E;
+630e : 2E2E0A00;
+630f : 45726173;
+6310 : 696E6720;
+6311 : 45455052;
+6312 : 4F4D2025;
+6313 : 64202830;
+6314 : 78257829;
+6315 : 2E2E2E0A;
+6316 : 00000000;
+6317 : 45726173;
+6318 : 696E6720;
+6319 : 312D5720;
+631a : 45455052;
+631b : 4F4D2028;
+631c : 30782578;
+631d : 292E2E2E;
+631e : 0A000000;
+631f : 66696C65;
+6320 : 6E616D65;
+6321 : 3A202573;
+6322 : 3B206669;
+6323 : 7273743A;
+6324 : 2025783B;
+6325 : 206C6173;
+6326 : 743A2025;
+6327 : 780A0000;
+6328 : 466F726D;
+6329 : 61747469;
+632a : 6E672053;
+632b : 44424653;
+632c : 20696E20;
+632d : 466C6173;
+632e : 68283078;
+632f : 2578292E;
+6330 : 2E2E0A00;
+6331 : 49324320;
+6332 : 45455052;
+6333 : 4F4D206E;
+6334 : 6F742066;
+6335 : 6F756E64;
+6336 : 0A000000;
+6337 : 466F726D;
+6338 : 61747469;
+6339 : 6E672053;
+633a : 44424653;
+633b : 20696E20;
+633c : 49324320;
+633d : 45455052;
+633e : 4F4D2025;
+633f : 64202830;
+6340 : 78257829;
+6341 : 2E2E2E0A;
+6342 : 00000000;
+6343 : 312D5769;
+6344 : 72652045;
+6345 : 4550524F;
+6346 : 4D206E6F;
+6347 : 7420666F;
+6348 : 756E640A;
+6349 : 00000000;
+634a : 466F726D;
+634b : 61747469;
+634c : 6E672053;
+634d : 44424653;
+634e : 20696E20;
+634f : 312D5720;
+6350 : 45455052;
+6351 : 4F4D2028;
+6352 : 30782578;
+6353 : 292E2E2E;
+6354 : 0A000000;
+6355 : 65657072;
+6356 : 6F6D0000;
+6357 : 6F666673;
+6358 : 65742025;
+6359 : 34692028;
+635a : 30782530;
+635b : 3378293A;
+635c : 20253369;
+635d : 20283078;
+635e : 25303278;
+635f : 290A0000;
+6360 : 77726974;
+6361 : 65283078;
+6362 : 25782C20;
+6363 : 2569293A;
+6364 : 20726573;
+6365 : 756C7420;
+6366 : 3D202569;
+6367 : 0A000000;
+6368 : 72656164;
+6369 : 28307825;
+636a : 782C2025;
+636b : 69293A20;
+636c : 72657375;
+636d : 6C74203D;
+636e : 2025690A;
+636f : 00000000;
+6370 : 64657669;
+6371 : 63652025;
+6372 : 693A2025;
+6373 : 30387825;
+6374 : 3038780A;
+6375 : 00000000;
+6376 : 74656D70;
+6377 : 3A202564;
+6378 : 2E253034;
+6379 : 640A0000;
+637a : 77310000;
+637b : 77317200;
+637c : 77317700;
+637d : 3C556E6B;
+637e : 6E6F776E;
+637f : 3E000000;
+6380 : 736F6674;
+6381 : 706C6C3A;
+6382 : 20697271;
+6383 : 73202564;
+6384 : 20736571;
+6385 : 20257320;
+6386 : 6D6F6465;
+6387 : 20256420;
+6388 : 616C6967;
+6389 : 6E6D656E;
+638a : 745F7374;
+638b : 61746520;
+638c : 25642048;
+638d : 4C256420;
+638e : 4D4C2564;
+638f : 2048593D;
+6390 : 2564204D;
+6391 : 593D2564;
+6392 : 2044656C;
+6393 : 436E743D;
+6394 : 25640A00;
+6395 : 73746172;
+6396 : 742D6578;
+6397 : 74000000;
+6398 : 77616974;
+6399 : 2D657874;
+639a : 00000000;
+639b : 73746172;
+639c : 742D6865;
+639d : 6C706572;
+639e : 00000000;
+639f : 77616974;
+63a0 : 2D68656C;
+63a1 : 70657200;
+63a2 : 73746172;
+63a3 : 742D6D61;
+63a4 : 696E0000;
+63a5 : 77616974;
+63a6 : 2D6D6169;
+63a7 : 6E000000;
+63a8 : 72656164;
+63a9 : 79000000;
+63aa : 636C6561;
+63ab : 722D6461;
+63ac : 63730000;
+63ad : 77616974;
+63ae : 2D636C65;
+63af : 61722D64;
+63b0 : 61637300;
+63b1 : BADC0FFE;
+63b2 : 3B9ACA00;
+63b3 : 000F4240;
+63b4 : 41C64E6D;
+63b5 : 7FFFFFFF;
+63b6 : 00080030;
+63b7 : C4653600;
+63b8 : FFF0BDC0;
+63b9 : 0007D000;
+63ba : 3B9AC9FF;
+63bb : 00010043;
+63bc : 00010044;
+63bd : 00015180;
+63be : 83AA7E80;
+63bf : 7FFFFFFE;
+63c0 : 80000001;
+63c1 : 00062000;
+63c2 : 005EE000;
+63c3 : 01000001;
+63c4 : 11223344;
+63c5 : E0001FFF;
+63c6 : 00246000;
+63c7 : 01554000;
+63c8 : 02468000;
+63c9 : 13578000;
+63ca : 0FFFFFFF;
+63cb : 059682F0;
+63cc : 0EE6B27F;
+63cd : 01312D02;
+63ce : 01312D0A;
+63cf : 46696C65;
+63d0 : 44617461;
+63d1 : 7366702D;
+63d2 : 5344422D;
+63d3 : 6D61632D;
+63d4 : 63616C69;
+63d5 : 77722D69;
+63d6 : 003D0137;
+63d7 : 8000001F;
+63d8 : 009895B6;
+63d9 : C4000001;
+63da : 000186A0;
+63db : 00FFFFFF;
+63dc : FFFDB610;
+63dd : 000249F0;
+63de : 05F5E100;
+63df : 0BEBC200;
+63e0 : FA0A1F00;
+63e1 : 01312D03;
+63e2 : 011B1900;
+63e3 : 00000000;
+63e4 : 00000000;
+63e5 : 00000000;
+63e6 : 0180C200;
+63e7 : 000E0000;
+63e8 : 0000002C;
+63e9 : 0000002C;
+63ea : 00000036;
+63eb : 00000036;
+63ec : 00000000;
+63ed : 00000000;
+63ee : 00000000;
+63ef : 00000000;
+63f0 : 0000002C;
+63f1 : 00000036;
+63f2 : 00000036;
+63f3 : 00000040;
+63f4 : 00000022;
+63f5 : 00000030;
+63f6 : 70705F64;
+63f7 : 6961675F;
+63f8 : 70617273;
+63f9 : 65000000;
+63fa : 00000000;
+63fb : 00016964;
+63fc : 00016970;
+63fd : 00016980;
+63fe : 0001698C;
+63ff : 00016998;
+6400 : 000169A4;
+6401 : 000169B0;
+6402 : 00001C84;
+6403 : 00001CF4;
+6404 : 0000200C;
+6405 : 0000200C;
+6406 : 0000200C;
+6407 : 0000200C;
+6408 : 0000200C;
+6409 : 0000200C;
+640a : 00001D70;
+640b : 00001DE0;
+640c : 0000200C;
+640d : 00001E74;
+640e : 00001FE0;
+640f : 77727063;
+6410 : 5F74696D;
+6411 : 655F6164;
+6412 : 6A757374;
+6413 : 5F6F6666;
+6414 : 73657400;
+6415 : 77725F73;
+6416 : 31000000;
+6417 : 77727063;
+6418 : 5F74696D;
+6419 : 655F6164;
+641a : 6A757374;
+641b : 00000000;
+641c : 77727063;
+641d : 5F74696D;
+641e : 655F7365;
+641f : 74000000;
+6420 : 77727063;
+6421 : 5F74696D;
+6422 : 655F6765;
+6423 : 74000000;
+6424 : 77727063;
+6425 : 5F6E6574;
+6426 : 5F73656E;
+6427 : 64000000;
+6428 : 011B1900;
+6429 : 00000180;
+642a : C200000E;
+642b : 77725F75;
+642c : 6E706163;
+642d : 6B5F616E;
+642e : 6E6F756E;
+642f : 63650000;
+6430 : 77725F70;
+6431 : 61636B5F;
+6432 : 616E6E6F;
+6433 : 756E6365;
+6434 : 00000000;
+6435 : 6765745F;
+6436 : 70657273;
+6437 : 69737465;
+6438 : 6E745F6D;
+6439 : 61630000;
+643a : 77725F68;
+643b : 616E646C;
+643c : 655F666F;
+643d : 6C6C6F77;
+643e : 75700000;
+643f : 77725F68;
+6440 : 616E646C;
+6441 : 655F616E;
+6442 : 6E6F756E;
+6443 : 63650000;
+6444 : 77725F65;
+6445 : 78656375;
+6446 : 74655F73;
+6447 : 6C617665;
+6448 : 00000000;
+6449 : 77725F68;
+644a : 616E646C;
+644b : 655F7265;
+644c : 73700000;
+644d : 77725F6E;
+644e : 65775F73;
+644f : 6C617665;
+6450 : 00000000;
+6451 : 77725F6D;
+6452 : 61737465;
+6453 : 725F6D73;
+6454 : 67000000;
+6455 : 77725F6C;
+6456 : 69737465;
+6457 : 6E696E67;
+6458 : 00000000;
+6459 : 77725F6F;
+645a : 70656E00;
+645b : 77725F69;
+645c : 6E697400;
+645d : 00003594;
+645e : 000035BC;
+645f : 000035DC;
+6460 : 0000364C;
+6461 : 0000366C;
+6462 : 00003688;
+6463 : 000036A8;
+6464 : 00003734;
+6465 : 00003754;
+6466 : 77725F63;
+6467 : 616C6962;
+6468 : 72617469;
+6469 : 6F6E0000;
+646a : 00004C08;
+646b : 00004BF0;
+646c : 00004C30;
+646d : 00004CE8;
+646e : 00004C84;
+646f : 000174AC;
+6470 : 00017610;
+6471 : 0001761C;
+6472 : 00017628;
+6473 : 00017634;
+6474 : 00017640;
+6475 : 77725F65;
+6476 : 32655F6F;
+6477 : 66667365;
+6478 : 74000000;
+6479 : 70705F69;
+647a : 6E697469;
+647b : 616C697A;
+647c : 696E6700;
+647d : 00005EF0;
+647e : 000056F4;
+647f : 00000000;
+6480 : 00000000;
+6481 : 00000000;
+6482 : 00000000;
+6483 : 00000000;
+6484 : 00000000;
+6485 : 00000000;
+6486 : 00000000;
+6487 : 00000000;
+6488 : 000051EC;
+6489 : 00005D04;
+648a : 00000000;
+648b : 00000000;
+648c : 00000000;
+648d : 00000000;
+648e : 00000000;
+648f : 00000000;
+6490 : 00000000;
+6491 : 00005DE8;
+6492 : 00005950;
+6493 : 00000000;
+6494 : 000051EC;
+6495 : 73745F63;
+6496 : 6F6D5F73;
+6497 : 6C617665;
+6498 : 5F68616E;
+6499 : 646C655F;
+649a : 666F6C6C;
+649b : 6F777570;
+649c : 00000000;
+649d : 626D635F;
+649e : 64617461;
+649f : 7365745F;
+64a0 : 636D7000;
+64a1 : 626D635F;
+64a2 : 73746174;
+64a3 : 655F6465;
+64a4 : 63697369;
+64a5 : 6F6E0000;
+64a6 : 00018114;
+64a7 : 0001811C;
+64a8 : 000180F4;
+64a9 : 00018124;
+64aa : 00000000;
+64ab : 00018100;
+64ac : 0001706C;
+64ad : 0001708C;
+64ae : 00018104;
+64af : 0000001F;
+64b0 : 0000001C;
+64b1 : 0000001F;
+64b2 : 0000001E;
+64b3 : 0000001F;
+64b4 : 0000001E;
+64b5 : 0000001F;
+64b6 : 0000001F;
+64b7 : 0000001E;
+64b8 : 0000001F;
+64b9 : 0000001E;
+64ba : 0000001F;
+64bb : 0000001F;
+64bc : 0000001D;
+64bd : 0000001F;
+64be : 0000001E;
+64bf : 0000001F;
+64c0 : 0000001E;
+64c1 : 0000001F;
+64c2 : 0000001F;
+64c3 : 0000001E;
+64c4 : 0000001F;
+64c5 : 0000001E;
+64c6 : 0000001F;
+64c7 : 000186DC;
+64c8 : 000186E0;
+64c9 : 000186E4;
+64ca : 000186E8;
+64cb : 000186EC;
+64cc : 000186F0;
+64cd : 000186F4;
+64ce : 000186F8;
+64cf : 000186FC;
+64d0 : 00018700;
+64d1 : 00018704;
+64d2 : 00018708;
+64d3 : 0001870C;
+64d4 : 00018710;
+64d5 : 00018714;
+64d6 : 00018718;
+64d7 : 0001871C;
+64d8 : 00018720;
+64d9 : 00018724;
+64da : 70747064;
+64db : 5F6E6574;
+64dc : 69665F63;
+64dd : 72656174;
+64de : 655F736F;
+64df : 636B6574;
+64e0 : 00000000;
+64e1 : 0000C98C;
+64e2 : 0000C99C;
+64e3 : 0000CA00;
+64e4 : 0000CA00;
+64e5 : 0000C9AC;
+64e6 : 0000CA00;
+64e7 : 0000CA00;
+64e8 : 30FF0201;
+64e9 : FA040670;
+64ea : 75626C69;
+64eb : 63FDFF02;
+64ec : F90201FC;
+64ed : 0201FB30;
+64ee : FF30FF06;
+64ef : 0000DAF4;
+64f0 : 0000DB04;
+64f1 : 0000DB28;
+64f2 : 0000DB5C;
+64f3 : 0000DB8C;
+64f4 : 0000DBC8;
+64f5 : 0000DC84;
+64f6 : 0000DDB0;
+64f7 : 0000DD20;
+64f8 : 7365745F;
+64f9 : 70657273;
+64fa : 69737465;
+64fb : 6E745F6D;
+64fc : 61630000;
+64fd : 00000000;
+64fe : 00000100;
+64ff : 00000200;
+6500 : 00000300;
+6501 : 00170000;
+6502 : 002E0000;
+6503 : 00600000;
+6504 : 00000000;
+6505 : 00000040;
+6506 : 00000080;
+6507 : 00000100;
+6508 : 00000200;
+6509 : 00000400;
+650a : 000000C8;
+650b : 000039D0;
+650c : 00013B7C;
+650d : 00013C00;
+650e : 00013C38;
+650f : 00013CB8;
+6510 : 00013D44;
+6511 : 00013D5C;
+6512 : 00013C5C;
+6513 : 00013BA4;
+6514 : 00013B00;
+6515 : 00013B34;
+6516 : 00000000;
+6517 : 00000000;
+6518 : 00000000;
+6519 : 00000000;
+651a : 00000001;
+651b : 00000001;
+651c : 00000001;
+651d : 00000001;
+651e : 00000000;
+651f : 00000000;
+6520 : 00000000;
+6521 : 00014888;
+6522 : 000148A8;
+6523 : 000148B4;
+6524 : 000148C4;
+6525 : 000148E4;
+6526 : 000148F4;
+6527 : 0001495C;
+6528 : 00014914;
+6529 : 0001481C;
+652a : 00014860;
+652b : 00000000;
+652c : 00018E54;
+652d : 00018E60;
+652e : 00018E6C;
+652f : 00018E7C;
+6530 : 00018E88;
+6531 : 00018E94;
+6532 : 00017050;
+6533 : 00018EA0;
+6534 : 00018EA8;
+6535 : 00018EB4;
+6536 : 00000000;
+6537 : 00000000;
+6538 : 00000000;
+6539 : 00000000;
+653a : 00010000;
+653b : 00000000;
+653c : 00000000;
+653d : 00000000;
+653e : 00020100;
+653f : 00000000;
+6540 : 00000000;
+6541 : 00000000;
+6542 : 00030101;
+6543 : 00000000;
+6544 : 00000000;
+6545 : 00000000;
+6546 : 00040201;
+6547 : 01000000;
+6548 : 00000000;
+6549 : 00000000;
+654a : 00050201;
+654b : 01010000;
+654c : 00000000;
+654d : 00000000;
+654e : 00060302;
+654f : 01010100;
+6550 : 00000000;
+6551 : 00000000;
+6552 : 00070302;
+6553 : 01010101;
+6554 : 00000000;
+6555 : 00000000;
+6556 : 00080402;
+6557 : 02010101;
+6558 : 01000000;
+6559 : 00000000;
+655a : 00090403;
+655b : 02010101;
+655c : 01010000;
+655d : 00000000;
+655e : 000A0503;
+655f : 02020101;
+6560 : 01010100;
+6561 : 00000000;
+6562 : 000B0503;
+6563 : 02020101;
+6564 : 01010101;
+6565 : 00000000;
+6566 : 000C0604;
+6567 : 03020201;
+6568 : 01010101;
+6569 : 01000000;
+656a : 000D0604;
+656b : 03020201;
+656c : 01010101;
+656d : 01010000;
+656e : 000E0704;
+656f : 03020202;
+6570 : 01010101;
+6571 : 01010100;
+6572 : 000F0705;
+6573 : 03030202;
+6574 : 01010101;
+6575 : 01010101;
+6576 : FEFEFEFF;
+6577 : 80808080;
+6578 : 00202020;
+6579 : 20202020;
+657a : 20202828;
+657b : 28282820;
+657c : 20202020;
+657d : 20202020;
+657e : 20202020;
+657f : 20202020;
+6580 : 20881010;
+6581 : 10101010;
+6582 : 10101010;
+6583 : 10101010;
+6584 : 10040404;
+6585 : 04040404;
+6586 : 04040410;
+6587 : 10101010;
+6588 : 10104141;
+6589 : 41414141;
+658a : 01010101;
+658b : 01010101;
+658c : 01010101;
+658d : 01010101;
+658e : 01010101;
+658f : 10101010;
+6590 : 10104242;
+6591 : 42424242;
+6592 : 02020202;
+6593 : 02020202;
+6594 : 02020202;
+6595 : 02020202;
+6596 : 02020202;
+6597 : 10101010;
+6598 : 20000000;
+6599 : 00000000;
+659a : 00000000;
+659b : 00000000;
+659c : 00000000;
+659d : 00000000;
+659e : 00000000;
+659f : 00000000;
+65a0 : 00000000;
+65a1 : 00000000;
+65a2 : 00000000;
+65a3 : 00000000;
+65a4 : 00000000;
+65a5 : 00000000;
+65a6 : 00000000;
+65a7 : 00000000;
+65a8 : 00000000;
+65a9 : 00000000;
+65aa : 00000000;
+65ab : 00000000;
+65ac : 00000000;
+65ad : 00000000;
+65ae : 00000000;
+65af : 00000000;
+65b0 : 00000000;
+65b1 : 00000000;
+65b2 : 00000000;
+65b3 : 00000000;
+65b4 : 00000000;
+65b5 : 00000000;
+65b6 : 00000000;
+65b7 : 00000000;
+65b8 : 00000000;
+65b9 : 00000000;
+65ba : 0001ADB8;
+65bb : 0001ADD8;
+65bc : 0001ADE8;
+65bd : 0001ADF8;
+65be : 000003E8;
+65bf : 00000001;
+65c0 : 00000955;
+65c1 : 00000001;
+65c2 : 000169EC;
+65c3 : 00000002;
+65c4 : 00000000;
+65c5 : 000169F4;
+65c6 : 00000001;
+65c7 : 00000000;
+65c8 : 00016A00;
+65c9 : 00000000;
+65ca : 00000000;
+65cb : 00016A0C;
+65cc : 00000001;
+65cd : 00000000;
+65ce : 00016A18;
+65cf : 00000000;
+65d0 : 00000FA0;
+65d1 : 00016A20;
+65d2 : 00000000;
+65d3 : 00000000;
+65d4 : 00000000;
+65d5 : 00000000;
+65d6 : 00000000;
+65d7 : 00000000;
+65d8 : 00000000;
+65d9 : 00000000;
+65da : 00016A28;
+65db : 002C0100;
+65dc : 00010000;
+65dd : 00016A30;
+65de : 002C0100;
+65df : 017F0000;
+65e0 : 00016A3C;
+65e1 : 00360101;
+65e2 : 057F0000;
+65e3 : 00016A48;
+65e4 : 00360101;
+65e5 : 057F0000;
+65e6 : 00000000;
+65e7 : 00000000;
+65e8 : 00000000;
+65e9 : 00000000;
+65ea : 00000000;
+65eb : 00000000;
+65ec : 00000000;
+65ed : 00000000;
+65ee : 00000000;
+65ef : 00000000;
+65f0 : 00000000;
+65f1 : 00000000;
+65f2 : 00016A6C;
+65f3 : 002C0000;
+65f4 : 02010000;
+65f5 : 00016A54;
+65f6 : 00360000;
+65f7 : 03020000;
+65f8 : 00016A60;
+65f9 : 00360001;
+65fa : 057F0000;
+65fb : 00016A78;
+65fc : 00400000;
+65fd : 05000000;
+65fe : 00016A84;
+65ff : FFFF0000;
+6600 : 057F0000;
+6601 : 00016A90;
+6602 : FFFF0000;
+6603 : 047F0000;
+6604 : 00000000;
+6605 : 00000000;
+6606 : 00000000;
+6607 : 00000000;
+6608 : 00000000;
+6609 : 00000000;
+660a : 00000000;
+660b : 00000000;
+660c : 00000000;
+660d : 00000000;
+660e : 00000000;
+660f : 00000000;
+6610 : 00000000;
+6611 : 00000000;
+6612 : 00000000;
+6613 : 00000000;
+6614 : 00000000;
+6615 : 00000000;
+6616 : 00019C40;
+6617 : 00019D60;
+6618 : 00019D44;
+6619 : 0001B0E4;
+661a : 0001B164;
+661b : 00000000;
+661c : 00000000;
+661d : 00000000;
+661e : 00000000;
+661f : 00000000;
+6620 : 00000000;
+6621 : 00000000;
+6622 : 00000000;
+6623 : 00000000;
+6624 : 00000000;
+6625 : 00000000;
+6626 : 00000000;
+6627 : 00000000;
+6628 : 00000000;
+6629 : 00000000;
+662a : 00000000;
+662b : 00000000;
+662c : 00000000;
+662d : 00000000;
+662e : 00000000;
+662f : 00000000;
+6630 : 00000000;
+6631 : 00000000;
+6632 : 00000000;
+6633 : 00000000;
+6634 : 00000000;
+6635 : 00000000;
+6636 : 00000000;
+6637 : 00000000;
+6638 : 00000000;
+6639 : 00000000;
+663a : 00000000;
+663b : 00000000;
+663c : 00000000;
+663d : 00000000;
+663e : 00000000;
+663f : 00000000;
+6640 : 00000000;
+6641 : 00000000;
+6642 : 00000000;
+6643 : 00000000;
+6644 : 00000000;
+6645 : 00000000;
+6646 : 00000000;
+6647 : 00000000;
+6648 : 00000000;
+6649 : 00000000;
+664a : 00000000;
+664b : 00000000;
+664c : 00000000;
+664d : 00000000;
+664e : 00000000;
+664f : 00000000;
+6650 : 00000000;
+6651 : 00000000;
+6652 : 00000000;
+6653 : 00000000;
+6654 : 00000000;
+6655 : 00000000;
+6656 : 00000000;
+6657 : 00000000;
+6658 : 00000000;
+6659 : 00000000;
+665a : 00000000;
+665b : 00000000;
+665c : 00000000;
+665d : 00000000;
+665e : 00000000;
+665f : 00000000;
+6660 : 00000000;
+6661 : 00000000;
+6662 : 00000000;
+6663 : 00000000;
+6664 : 00000000;
+6665 : 00000000;
+6666 : 00000000;
+6667 : 00000000;
+6668 : 00000000;
+6669 : 00000000;
+666a : 00000000;
+666b : 00000000;
+666c : 00000000;
+666d : 00000000;
+666e : 00000000;
+666f : 00000000;
+6670 : 00000000;
+6671 : 00000000;
+6672 : 00000000;
+6673 : 00000000;
+6674 : 00000000;
+6675 : 00000000;
+6676 : 00000000;
+6677 : 00000000;
+6678 : 00000000;
+6679 : 00000000;
+667a : 00000000;
+667b : 00000000;
+667c : 00000000;
+667d : 00000000;
+667e : 00000000;
+667f : 00000000;
+6680 : 00000000;
+6681 : 00000000;
+6682 : 00000000;
+6683 : 00000000;
+6684 : 00000000;
+6685 : 00000000;
+6686 : 00000000;
+6687 : 00000000;
+6688 : 00000000;
+6689 : 00000000;
+668a : 00000000;
+668b : 00000000;
+668c : 00000000;
+668d : 00000000;
+668e : 00000000;
+668f : 00000000;
+6690 : 00000000;
+6691 : 00000000;
+6692 : 00000000;
+6693 : 00000000;
+6694 : 00000000;
+6695 : 00000000;
+6696 : 00000000;
+6697 : 00000000;
+6698 : 00000000;
+6699 : 00000000;
+669a : 00000000;
+669b : 00000000;
+669c : 00000000;
+669d : 00000000;
+669e : 00000000;
+669f : 00000000;
+66a0 : 00000000;
+66a1 : 00000000;
+66a2 : 00000000;
+66a3 : 00000000;
+66a4 : 00000000;
+66a5 : 00000000;
+66a6 : 00000000;
+66a7 : 00000000;
+66a8 : 00000000;
+66a9 : 00000000;
+66aa : 00000000;
+66ab : 00000000;
+66ac : 00000000;
+66ad : 00000000;
+66ae : 00000000;
+66af : 00000000;
+66b0 : 00000000;
+66b1 : 00000000;
+66b2 : 00000000;
+66b3 : 00000000;
+66b4 : 00000000;
+66b5 : 00000000;
+66b6 : 00000000;
+66b7 : 00000000;
+66b8 : 00000000;
+66b9 : 00000000;
+66ba : 00000000;
+66bb : 00000000;
+66bc : 00000000;
+66bd : 00000000;
+66be : 00000000;
+66bf : 00000000;
+66c0 : 00000000;
+66c1 : 00000000;
+66c2 : 00000000;
+66c3 : 00000000;
+66c4 : 00000000;
+66c5 : 00000000;
+66c6 : 00000000;
+66c7 : 00000000;
+66c8 : 00000000;
+66c9 : 00000000;
+66ca : 00000000;
+66cb : 00000000;
+66cc : 00000000;
+66cd : 00000000;
+66ce : 00000000;
+66cf : 00000000;
+66d0 : 00000000;
+66d1 : 00000000;
+66d2 : 00000000;
+66d3 : 00000000;
+66d4 : 00000000;
+66d5 : 00000000;
+66d6 : 00000000;
+66d7 : 00000000;
+66d8 : 00000000;
+66d9 : 00000000;
+66da : 00000000;
+66db : 00000000;
+66dc : 00000000;
+66dd : 00000000;
+66de : 00000000;
+66df : 00000000;
+66e0 : 00019C88;
+66e1 : 00000000;
+66e2 : 00000000;
+66e3 : 00000000;
+66e4 : 00000000;
+66e5 : 00000000;
+66e6 : 00000000;
+66e7 : 00000000;
+66e8 : 00000000;
+66e9 : 00000000;
+66ea : 00000000;
+66eb : 00000000;
+66ec : 00000000;
+66ed : 00000000;
+66ee : 00000000;
+66ef : 00000000;
+66f0 : 00000000;
+66f1 : 00000000;
+66f2 : 00000000;
+66f3 : 00000000;
+66f4 : 00000000;
+66f5 : 00000000;
+66f6 : 00000000;
+66f7 : 00000000;
+66f8 : 00000000;
+66f9 : 00000000;
+66fa : 00000000;
+66fb : 00000000;
+66fc : 00000000;
+66fd : 00000000;
+66fe : 00016B20;
+66ff : 00016B20;
+6700 : 00000000;
+6701 : 00000001;
+6702 : 00000000;
+6703 : 00000000;
+6704 : 00000000;
+6705 : 00000000;
+6706 : 00000000;
+6707 : 00000000;
+6708 : 00000000;
+6709 : 00000000;
+670a : 00000000;
+670b : 00000000;
+670c : 00000000;
+670d : 00000000;
+670e : 00000000;
+670f : 00000000;
+6710 : 00019828;
+6711 : 0001B1E8;
+6712 : 00000000;
+6713 : 0001B228;
+6714 : 0001B250;
+6715 : 0001B280;
+6716 : 0001B2A8;
+6717 : 00000000;
+6718 : 00000000;
+6719 : 00000000;
+671a : 00000000;
+671b : 00000000;
+671c : 00000000;
+671d : 00000000;
+671e : 00000000;
+671f : 00000000;
+6720 : 0001B2C8;
+6721 : 000003E8;
+6722 : 00000000;
+6723 : 00000000;
+6724 : 00000000;
+6725 : 00000000;
+6726 : 00019C9C;
+6727 : 00019D08;
+6728 : 00000000;
+6729 : 00000000;
+672a : 00000000;
+672b : 00000000;
+672c : 00000000;
+672d : 00000000;
+672e : 00000000;
+672f : 00000000;
+6730 : 00000000;
+6731 : 00000000;
+6732 : 00000000;
+6733 : 00000000;
+6734 : 00000000;
+6735 : 00000000;
+6736 : 00000000;
+6737 : 00000000;
+6738 : 00000000;
+6739 : 00000000;
+673a : 00000000;
+673b : 00000000;
+673c : 00000000;
+673d : 00000000;
+673e : 00000000;
+673f : 00000000;
+6740 : 00000000;
+6741 : 00000000;
+6742 : 000010F0;
+6743 : 00001128;
+6744 : 000011B8;
+6745 : 000011C0;
+6746 : 00001218;
+6747 : 00001244;
+6748 : 0000129C;
+6749 : 000012C0;
+674a : 00001384;
+674b : 0000138C;
+674c : 00001394;
+674d : 000013F8;
+674e : 00001414;
+674f : 000011E4;
+6750 : 00000000;
+6751 : 00002460;
+6752 : 000023D8;
+6753 : 0000237C;
+6754 : 00002324;
+6755 : 00000000;
+6756 : 00000000;
+6757 : 000022FC;
+6758 : 000028D0;
+6759 : 000028B0;
+675a : 000026A8;
+675b : 000024F4;
+675c : 00000000;
+675d : 00000000;
+675e : 00000000;
+675f : 00000000;
+6760 : 00000000;
+6761 : 00000000;
+6762 : 00000000;
+6763 : 00000000;
+6764 : 00000000;
+6765 : 00000000;
+6766 : 00000000;
+6767 : 00000200;
+6768 : 00000000;
+6769 : 0001B3E8;
+676a : 00000001;
+676b : 00017038;
+676c : 000053C8;
+676d : 00000002;
+676e : 00017048;
+676f : 000055D4;
+6770 : 00000003;
+6771 : 00017050;
+6772 : 00005620;
+6773 : 00000004;
+6774 : 0001705C;
+6775 : 00005630;
+6776 : 00000005;
+6777 : 00017068;
+6778 : 00005720;
+6779 : 00000006;
+677a : 0001706C;
+677b : 00005720;
+677c : 00000007;
+677d : 00017074;
+677e : 0000588C;
+677f : 00000008;
+6780 : 0001707C;
+6781 : 000058E0;
+6782 : 00000009;
+6783 : 0001708C;
+6784 : 00005A6C;
+6785 : 00000064;
+6786 : 00017094;
+6787 : 0000314C;
+6788 : 00000066;
+6789 : 000170AC;
+678a : 00003234;
+678b : 00000065;
+678c : 000170C0;
+678d : 00003308;
+678e : 00000067;
+678f : 000170D8;
+6790 : 000033EC;
+6791 : 00000068;
+6792 : 000170F0;
+6793 : 000034C0;
+6794 : 00000069;
+6795 : 00017100;
+6796 : 00003794;
+6797 : 0000006A;
+6798 : 00017110;
+6799 : 00003868;
+679a : 0000006B;
+679b : 00017124;
+679c : 000039A0;
+679d : 00000075;
+679e : 00017130;
+679f : 00004F18;
+67a0 : 00000000;
+67a1 : 00000000;
+67a2 : 00000000;
+67a3 : 00000001;
+67a4 : 00017038;
+67a5 : 000053C8;
+67a6 : 00000002;
+67a7 : 00017048;
+67a8 : 000055D4;
+67a9 : 00000003;
+67aa : 00017050;
+67ab : 00005620;
+67ac : 00000004;
+67ad : 0001705C;
+67ae : 00005630;
+67af : 00000005;
+67b0 : 00017068;
+67b1 : 00005720;
+67b2 : 00000006;
+67b3 : 0001706C;
+67b4 : 00005720;
+67b5 : 00000007;
+67b6 : 00017074;
+67b7 : 0000588C;
+67b8 : 00000008;
+67b9 : 0001707C;
+67ba : 000058E0;
+67bb : 00000009;
+67bc : 0001708C;
+67bd : 00005A6C;
+67be : 00000000;
+67bf : 00000000;
+67c0 : 00000000;
+67c1 : 00002B44;
+67c2 : 00002A64;
+67c3 : 00000000;
+67c4 : 00002A1C;
+67c5 : 00002F50;
+67c6 : 00002F08;
+67c7 : 00002E1C;
+67c8 : 0000298C;
+67c9 : 00002DA8;
+67ca : 00002D2C;
+67cb : 00002CB8;
+67cc : 00000000;
+67cd : 00000000;
+67ce : 00002C50;
+67cf : 00002BE4;
+67d0 : 00000001;
+67d1 : 000000BB;
+67d2 : 000000FE;
+67d3 : FFFFF060;
+67d4 : 00000001;
+67d5 : 00000000;
+67d6 : 000A03E8;
+67d7 : 00060100;
+67d8 : 00000000;
+67d9 : 00000080;
+67da : 00000080;
+67db : 00000000;
+67dc : 00000000;
+67dd : 00019828;
+67de : 766C616E;
+67df : 206F6666;
+67e0 : 3B707470;
+67e1 : 2073746F;
+67e2 : 703B7366;
+67e3 : 70206D61;
+67e4 : 7463683B;
+67e5 : 6D6F6465;
+67e6 : 20736C61;
+67e7 : 76653B70;
+67e8 : 74702073;
+67e9 : 74617274;
+67ea : 00000000;
+67eb : 00019F78;
+67ec : 000180E4;
+67ed : 000017D8;
+67ee : 00000001;
+67ef : 000180EC;
+67f0 : 000017D8;
+67f1 : 00000000;
+67f2 : 000180F4;
+67f3 : 00001474;
+67f4 : 00000000;
+67f5 : 000180F8;
+67f6 : 00001474;
+67f7 : 00000000;
+67f8 : 00018100;
+67f9 : 000015B4;
+67fa : 00000001;
+67fb : 0001706C;
+67fc : 000015B4;
+67fd : 00000002;
+67fe : 0001708C;
+67ff : 000015B4;
+6800 : 00000003;
+6801 : 00018104;
+6802 : 000015B4;
+6803 : 00000004;
+6804 : 00000000;
+6805 : 00000000;
+6806 : 00000000;
+6807 : 00000000;
+6808 : 00000000;
+6809 : 00000000;
+680a : 00000000;
+680b : 00000000;
+680c : 00000000;
+680d : 00000000;
+680e : 00000200;
+680f : 00000000;
+6810 : 0001B914;
+6811 : 00000000;
+6812 : 00000000;
+6813 : 00000000;
+6814 : 00000000;
+6815 : 00000000;
+6816 : 00000000;
+6817 : 00000000;
+6818 : 00000000;
+6819 : 00000000;
+681a : 00000000;
+681b : 00000060;
+681c : 00000000;
+681d : 0001BB14;
+681e : 00000000;
+681f : 00000000;
+6820 : 00000000;
+6821 : 00000000;
+6822 : 00000000;
+6823 : 00000000;
+6824 : 00000000;
+6825 : 00000000;
+6826 : 00000000;
+6827 : 00000000;
+6828 : 00000080;
+6829 : 00000000;
+682a : 0001BB74;
+682b : 00000000;
+682c : 00000000;
+682d : 00000000;
+682e : 00000000;
+682f : 00000000;
+6830 : 00000000;
+6831 : 00000000;
+6832 : 00000000;
+6833 : 00000000;
+6834 : 00000000;
+6835 : 00000080;
+6836 : 00000000;
+6837 : 0001BBF8;
+6838 : 0001A1DC;
+6839 : 0000CEDC;
+683a : 0001A1E8;
+683b : 09000000;
+683c : 0001A24C;
+683d : 0000CEDC;
+683e : 0001A258;
+683f : 09000000;
+6840 : 0001A2A8;
+6841 : 0000CCCC;
+6842 : 0001A2B4;
+6843 : 0A000000;
+6844 : 0001A2F0;
+6845 : 0000CEDC;
+6846 : 0001A2FC;
+6847 : 09000000;
+6848 : 0001A3C4;
+6849 : 0000CEDC;
+684a : 0001A3D0;
+684b : 09000000;
+684c : 0001A538;
+684d : 0000CEDC;
+684e : 0001A544;
+684f : 09000000;
+6850 : 0001A5D0;
+6851 : 0000CEDC;
+6852 : 0001A5DC;
+6853 : 09000000;
+6854 : 0001A654;
+6855 : 0000CCCC;
+6856 : 0001A660;
+6857 : 0A000000;
+6858 : 0001A190;
+6859 : 0000C61C;
+685a : 0001A6C4;
+685b : 0C000000;
+685c : 0001A19C;
+685d : 0000C61C;
+685e : 0001A6EC;
+685f : 0C000000;
+6860 : 00000000;
+6861 : 00000000;
+6862 : 00000000;
+6863 : 00000000;
+6864 : 2B060104;
+6865 : 01606502;
+6866 : 00000101;
+6867 : 2B060104;
+6868 : 01606502;
+6869 : 00000201;
+686a : 00000000;
+686b : 00000000;
+686c : 00000000;
+686d : 00000000;
+686e : 00000000;
+686f : 00000000;
+6870 : 00000000;
+6871 : 00000000;
+6872 : 00000000;
+6873 : 00000000;
+6874 : 00000100;
+6875 : 00000000;
+6876 : 0001BCA8;
+6877 : 2B060104;
+6878 : 01606501;
+6879 : 01000000;
+687a : 0001A714;
+687b : 0000D47C;
+687c : 00000000;
+687d : 0001C284;
+687e : 02040005;
+687f : 0001A718;
+6880 : 0000D450;
+6881 : 00000000;
+6882 : 000196E8;
+6883 : 02040004;
+6884 : 0001A71C;
+6885 : 0000D450;
+6886 : 00000000;
+6887 : 000196F4;
+6888 : 02040004;
+6889 : 0001A720;
+688a : 0000D450;
+688b : 00000000;
+688c : 0001A724;
+688d : 02040004;
+688e : 00000000;
+688f : 00000000;
+6890 : 00000000;
+6891 : 00000000;
+6892 : 00000000;
+6893 : 2B060104;
+6894 : 01606501;
+6895 : 02000000;
+6896 : 0001A728;
+6897 : 0000D944;
+6898 : 00000000;
+6899 : 00000004;
+689a : 02460001;
+689b : 0001A72C;
+689c : 0000D944;
+689d : 00000000;
+689e : 00000005;
+689f : 02040001;
+68a0 : 0001A730;
+68a1 : 0000D944;
+68a2 : 00000000;
+68a3 : 00000002;
+68a4 : 02430001;
+68a5 : 00000000;
+68a6 : 00000000;
+68a7 : 00000000;
+68a8 : 00000000;
+68a9 : 00000000;
+68aa : 2B060104;
+68ab : 01606501;
+68ac : 03010000;
+68ad : 0001A734;
+68ae : 0000D814;
+68af : 00000000;
+68b0 : 00000000;
+68b1 : 01040001;
+68b2 : 0001A738;
+68b3 : 0000D814;
+68b4 : 00000000;
+68b5 : 00000000;
+68b6 : 01040001;
+68b7 : 00000000;
+68b8 : 00000000;
+68b9 : 00000000;
+68ba : 00000000;
+68bb : 00000000;
+68bc : 2B060104;
+68bd : 01606501;
+68be : 04000000;
+68bf : 0001A73C;
+68c0 : 0000D47C;
+68c1 : 00000000;
+68c2 : 0001AD90;
+68c3 : 02020004;
+68c4 : 0001A740;
+68c5 : 0000D47C;
+68c6 : 00000000;
+68c7 : 0001AD94;
+68c8 : 02410004;
+68c9 : 0001A744;
+68ca : 0000D47C;
+68cb : 00000000;
+68cc : 0001AD98;
+68cd : 02020004;
+68ce : 0001A748;
+68cf : 0000D47C;
+68d0 : 00000000;
+68d1 : 0001AD9C;
+68d2 : 02020004;
+68d3 : 0001A74C;
+68d4 : 0000D47C;
+68d5 : 00000000;
+68d6 : 0001ADA0;
+68d7 : 02410004;
+68d8 : 0001A750;
+68d9 : 0000D47C;
+68da : 00000000;
+68db : 0001ADA4;
+68dc : 02410004;
+68dd : 0001A754;
+68de : 0000D47C;
+68df : 00000000;
+68e0 : 0001ADA8;
+68e1 : 02020004;
+68e2 : 0001A758;
+68e3 : 0000D47C;
+68e4 : 00000000;
+68e5 : 0001ADAC;
+68e6 : 02020004;
+68e7 : 0001A75C;
+68e8 : 0000D47C;
+68e9 : 00000000;
+68ea : 0001ADB0;
+68eb : 02410004;
+68ec : 00000000;
+68ed : 00000000;
+68ee : 00000000;
+68ef : 00000000;
+68f0 : 00000000;
+68f1 : 2B060104;
+68f2 : 01606501;
+68f3 : 05000000;
+68f4 : 0001A760;
+68f5 : 0000D450;
+68f6 : 00000000;
+68f7 : 0001BC7C;
+68f8 : 02021404;
+68f9 : 0001A764;
+68fa : 0000D3C4;
+68fb : 00000000;
+68fc : 0001BC7C;
+68fd : 02028808;
+68fe : 0001A768;
+68ff : 0000D3C4;
+6900 : 00000000;
+6901 : 0001BC7C;
+6902 : 02028008;
+6903 : 0001A76C;
+6904 : 0000D450;
+6905 : 00000000;
+6906 : 0001BC7C;
+6907 : 02464008;
+6908 : 0001A770;
+6909 : 0000D450;
+690a : 00000000;
+690b : 0001BC7C;
+690c : 02415804;
+690d : 0001A774;
+690e : 0000D2B0;
+690f : 00000000;
+6910 : 00000001;
+6911 : 02460001;
+6912 : 0001A778;
+6913 : 0000D450;
+6914 : 00000000;
+6915 : 0001BC7C;
+6916 : 02021804;
+6917 : 0001A77C;
+6918 : 0000D450;
+6919 : 00000000;
+691a : 0001BC7C;
+691b : 02021C04;
+691c : 0001A780;
+691d : 0000D450;
+691e : 00000000;
+691f : 0001BC7C;
+6920 : 02022004;
+6921 : 0001A784;
+6922 : 0000D450;
+6923 : 00000000;
+6924 : 0001BC7C;
+6925 : 02022404;
+6926 : 0001A788;
+6927 : 0000D450;
+6928 : 00000000;
+6929 : 0001BC7C;
+692a : 02419004;
+692b : 0001A78C;
+692c : 0000D450;
+692d : 00000000;
+692e : 0001BC7C;
+692f : 02419404;
+6930 : 0001A790;
+6931 : 0000D450;
+6932 : 00000000;
+6933 : 0001BC7C;
+6934 : 02419804;
+6935 : 0001A794;
+6936 : 0000D2B0;
+6937 : 00000000;
+6938 : 00000002;
+6939 : 02460001;
+693a : 0001A798;
+693b : 0000D47C;
+693c : 00000000;
+693d : 00019C38;
+693e : 02410004;
+693f : 0001A79C;
+6940 : 0000D47C;
+6941 : 00000000;
+6942 : 00019C3C;
+6943 : 02410004;
+6944 : 0001A7A0;
+6945 : 0000D450;
+6946 : 00000000;
+6947 : 0001BC7C;
+6948 : 02022804;
+6949 : 00000000;
+694a : 00000000;
+694b : 00000000;
+694c : 00000000;
+694d : 00000000;
+694e : 2B060104;
+694f : 01606501;
+6950 : 06000000;
+6951 : 0001A7A4;
+6952 : 0000D47C;
+6953 : 0000D634;
+6954 : 0001BDA8;
+6955 : 02020004;
+6956 : 0001A7A8;
+6957 : 0000D47C;
+6958 : 0000D694;
+6959 : 0001BDAC;
+695a : 02020004;
+695b : 0001A7AC;
+695c : 0000D47C;
+695d : 0000CCA8;
+695e : 0001BC80;
+695f : 02040010;
+6960 : 0001A7B0;
+6961 : 0000D47C;
+6962 : 0000CCA8;
+6963 : 0001BC94;
+6964 : 02020004;
+6965 : 0001A7B4;
+6966 : 0000D47C;
+6967 : 0000CCA8;
+6968 : 0001BC98;
+6969 : 02020004;
+696a : 0001A7B8;
+696b : 0000D47C;
+696c : 0000CCA8;
+696d : 0001BC90;
+696e : 02020004;
+696f : 00000000;
+6970 : 00000000;
+6971 : 00000000;
+6972 : 00000000;
+6973 : 00000000;
+6974 : 2B060104;
+6975 : 01606501;
+6976 : 07000000;
+6977 : 0001A7BC;
+6978 : 0000D5D4;
+6979 : 00000000;
+697a : 00000001;
+697b : 02020001;
+697c : 0001A7C0;
+697d : 0000D47C;
+697e : 00000000;
+697f : 0001BFBC;
+6980 : 02040010;
+6981 : 0001A7C4;
+6982 : 0000D47C;
+6983 : 00000000;
+6984 : 0001BF48;
+6985 : 02020004;
+6986 : 0001A7C8;
+6987 : 0000D47C;
+6988 : 00000000;
+6989 : 0001C27C;
+698a : 02410004;
+698b : 0001A7CC;
+698c : 0000D47C;
+698d : 00000000;
+698e : 0001C280;
+698f : 02410004;
+6990 : 00000000;
+6991 : 00000000;
+6992 : 00000000;
+6993 : 00000000;
+6994 : 00000000;
+6995 : 2B060104;
+6996 : 01606501;
+6997 : 08010000;
+6998 : 0001A7D0;
+6999 : 0000D4A4;
+699a : 00000000;
+699b : 00000000;
+699c : 01040001;
+699d : 0001A7D4;
+699e : 0000D4A4;
+699f : 00000000;
+69a0 : 00000000;
+69a1 : 01020001;
+69a2 : 0001A7D8;
+69a3 : 0000D4A4;
+69a4 : 00000000;
+69a5 : 00000000;
+69a6 : 01020001;
+69a7 : 0001A7DC;
+69a8 : 0000D4A4;
+69a9 : 00000000;
+69aa : 00000000;
+69ab : 01020001;
+69ac : 00000000;
+69ad : 00000000;
+69ae : 00000000;
+69af : 00000000;
+69b0 : 00000000;
+69b1 : 00000000;
+69b2 : 0000D294;
+69b3 : 00000000;
+69b4 : 00000001;
+69b5 : 04420001;
+69b6 : 00000000;
+69b7 : 00000000;
+69b8 : 00000000;
+69b9 : 00000000;
+69ba : 00000000;
+69bb : 00000000;
+69bc : 0000D294;
+69bd : 0000D278;
+69be : 00000000;
+69bf : 04420001;
+69c0 : 00000000;
+69c1 : 00000000;
+69c2 : 00000000;
+69c3 : 00000000;
+69c4 : 00000000;
+69c5 : 01000000;
+69c6 : 02000000;
+69c7 : 03000000;
+69c8 : 04000000;
+69c9 : 000187E0;
+69ca : 01000000;
+69cb : 02000000;
+69cc : 03000000;
+69cd : 02000000;
+69ce : 03000000;
+69cf : 01000000;
+69d0 : 02000000;
+69d1 : 03000000;
+69d2 : 04000000;
+69d3 : 05000000;
+69d4 : 06000000;
+69d5 : 07000000;
+69d6 : 08000000;
+69d7 : 09000000;
+69d8 : 05000000;
+69d9 : 08000000;
+69da : 09000000;
+69db : 0A000000;
+69dc : 0C000000;
+69dd : 0D000000;
+69de : 0E000000;
+69df : 0F000000;
+69e0 : 10000000;
+69e1 : 11000000;
+69e2 : 12000000;
+69e3 : 13000000;
+69e4 : 14000000;
+69e5 : 16000000;
+69e6 : 17000000;
+69e7 : 18000000;
+69e8 : 1A000000;
+69e9 : 01000000;
+69ea : 02000000;
+69eb : 03000000;
+69ec : 04000000;
+69ed : 05000000;
+69ee : 06000000;
+69ef : 01000000;
+69f0 : 02000000;
+69f1 : 03000000;
+69f2 : 04000000;
+69f3 : 05000000;
+69f4 : 02000000;
+69f5 : 03000000;
+69f6 : 04000000;
+69f7 : 05000000;
+69f8 : 0001AA5C;
+69f9 : 0001AB58;
+69fa : 0001AB58;
+69fb : 0001AC3C;
+69fc : 00000004;
+69fd : 00000008;
+69fe : 0000000F;
+69ff : 00000100;
+6a00 : 00000200;
+6a01 : 0000012C;
+6a02 : 046362A0;
+6a03 : 00000000;
+6a04 : 0001C2BC;
+6a05 : 00000000;
+6a06 : 00000000;
+6a07 : 0000CE42;
+6a08 : AB28633A;
+6a09 : 00000000;
+6a0a : 0001BFA0;
+6a0b : 00000000;
+6a0c : 00000000;
+6a0d : 0000CE42;
+6a0e : 650C2D4F;
+6a0f : 00000000;
+6a10 : 0001C2C4;
+6a11 : 00000000;
+6a12 : 00000000;
+6a13 : 0000CE42;
+6a14 : 65158DC0;
+6a15 : 00000000;
+6a16 : 0001BFD4;
+6a17 : 00000000;
+6a18 : 00000000;
+6a19 : 0000CE42;
+6a1a : DE0D8CED;
+6a1b : 00000000;
+6a1c : 0001C2C0;
+6a1d : 00000000;
+6a1e : 00000000;
+6a1f : 0000CE42;
+6a20 : FF07FC47;
+6a21 : 00000000;
+6a22 : 0001C28C;
+6a23 : 00000000;
+6a24 : 00000000;
+6a25 : 0000CE42;
+6a26 : E2D13D04;
+6a27 : 00000000;
+6a28 : 0001C278;
+6a29 : 00000000;
+6a2a : 00000000;
+6a2b : 0000CE42;
+6a2c : 779C5443;
+6a2d : 00000000;
+6a2e : 0001C2B8;
+6a2f : 00000000;
+6a30 : 00000000;
+6a31 : 00000651;
+6a32 : 68202B22;
+6a33 : 00000000;
+6a34 : 000189D4;
+6a35 : 00000000;
+6a36 : 00000001;
+6a37 : 00030000;
+6a38 : 00000004;
+6a39 : 00000000;
+6a3a : 00000000;
+6a3b : 00000000;
+6a3c : 00000000;
+6a3d : 00000000;
+6a3e : 00000000;
+6a3f : 00000000;
+6a40 : 00000000;
+6a41 : 00000000;
+6a42 : 00000000;
+6a43 : 00000000;
+6a44 : 00000000;
+6a45 : 00000000;
+6a46 : 00000000;
+6a47 : 00000000;
+6a48 : 00000000;
+6a49 : 00000000;
+6a4a : 00000000;
+6a4b : 00000000;
+6a4c : 00000000;
+6a4d : 00000000;
+6a4e : 00000000;
+6a4f : 00000000;
+6a50 : 00000000;
+6a51 : 00000000;
+6a52 : 00000000;
+6a53 : 00000000;
+6a54 : 00000000;
+6a55 : 00000000;
+6a56 : 00000000;
+6a57 : 00000000;
+6a58 : 00000000;
+6a59 : 00000000;
+6a5a : 00000000;
+6a5b : 00000000;
+6a5c : 00000000;
+6a5d : 00000000;
+6a5e : 00000000;
+6a5f : 00000000;
+6a60 : 00000000;
+6a61 : 00000000;
+6a62 : 00018D54;
+6a63 : 0001BF78;
+6a64 : 00000001;
+6a65 : 00000000;
+6a66 : 00000000;
+6a67 : 00000000;
+6a68 : 00000000;
+6a69 : 00010D5C;
+6a6a : 00010F18;
+6a6b : 00000000;
+6a6c : 00000000;
+6a6d : 00000000;
+6a6e : 00000000;
+6a6f : 00000000;
+6a70 : 00000000;
+6a71 : 00000000;
+6a72 : 00000000;
+6a73 : 00000000;
+6a74 : 00000000;
+6a75 : 00000000;
+6a76 : 00000000;
+6a77 : 00000000;
+6a78 : 00000000;
+6a79 : 00000000;
+6a7a : 00000000;
+6a7b : 00000000;
+6a7c : 00000000;
+6a7d : 00000000;
+6a7e : 00000000;
+6a7f : 00000000;
+6a80 : 00000000;
+6a81 : 00000000;
+6a82 : 00000000;
+6a83 : 00000000;
+6a84 : 00000000;
+6a85 : 00000000;
+6a86 : 00000000;
+6a87 : 00000000;
+6a88 : 00000000;
+6a89 : 00000000;
+6a8a : 00000000;
+6a8b : 00000000;
+6a8c : 00000000;
+6a8d : 00000000;
+6a8e : 00000000;
+6a8f : 00000000;
+6a90 : 00012AF4;
+6a91 : 00012B28;
+6a92 : 00012B58;
+6a93 : 00017BB8;
+6a94 : 80000000;
+6a95 : 00000000;
+6a96 : 00000000;
+6a97 : 44332211;
+6a98 : 00000000;
+6a99 : 04000000;
+6a9a : 138046E2;
+6a9b : 01000000;
+6a9c : 9000CFEA;
+6a9d : 01000000;
+6a9e : 108157F3;
+6a9f : 01000000;
+6aa0 : 0BE0FFFF;
+6aa1 : 01000000;
+6aa2 : 88E0FFFF;
+6aa3 : 01000000;
+6aa4 : 08E1FFFF;
+6aa5 : 01000000;
+6aa6 : 1B0020E0;
+6aa7 : 01000000;
+6aa8 : 9800C0EB;
+6aa9 : 01000000;
+6aaa : 6B2130E0;
+6aab : 01000000;
+6aac : 69610DE0;
+6aad : 01000000;
+6aae : 10A38900;
+6aaf : 04000000;
+6ab0 : 6B0320F0;
+6ab1 : 01000000;
+6ab2 : BB0D8001;
+6ab3 : 04000000;
+6ab4 : 33E31EF1;
+6ab5 : 01000000;
+6ab6 : 31C35FF9;
+6ab7 : 01000000;
+6ab8 : 2B0300E1;
+6ab9 : 01000000;
+6aba : 43C300E1;
+6abb : 01000000;
+6abc : 79411400;
+6abd : 04000000;
+6abe : CB250060;
+6abf : 00000000;
+6ac0 : D3250260;
+6ac1 : 00000000;
+6ac2 : 50EA8101;
+6ac3 : 04000000;
+6ac4 : 81C88001;
+6ac5 : 04000000;
+6ac6 : 802FC100;
+6ac7 : 04000000;
+6ac8 : 5B090080;
+6ac9 : 01000000;
+6aca : 59092080;
+6acb : 01000000;
+6acc : C06AC100;
+6acd : 04000000;
+6ace : 63097AFD;
+6acf : 01000000;
+6ad0 : F88A8101;
+6ad1 : 04000000;
+6ad2 : F48A8101;
+6ad3 : 04000000;
+6ad4 : 00000000;
+6ad5 : 08000000;
+6ad6 : 44332211;
+6ad7 : 00000000;
+6ad8 : 04000000;
+6ad9 : 138046E2;
+6ada : 01000000;
+6adb : 9000CFEA;
+6adc : 01000000;
+6add : 108157F3;
+6ade : 01000000;
+6adf : 0BE0FFFF;
+6ae0 : 01000000;
+6ae1 : 88E0FFFF;
+6ae2 : 01000000;
+6ae3 : 08E1FFFF;
+6ae4 : 01000000;
+6ae5 : 1B0020E0;
+6ae6 : 01000000;
+6ae7 : 9800C0EB;
+6ae8 : 01000000;
+6ae9 : 6B2130E0;
+6aea : 01000000;
+6aeb : 69610DE0;
+6aec : 01000000;
+6aed : 10A38900;
+6aee : 04000000;
+6aef : 6B0320F0;
+6af0 : 01000000;
+6af1 : BF0D8001;
+6af2 : 04000000;
+6af3 : A34355E1;
+6af4 : 00000000;
+6af5 : 33E41EF1;
+6af6 : 01000000;
+6af7 : 31C45FF9;
+6af8 : 01000000;
+6af9 : 2B0400E1;
+6afa : 01000000;
+6afb : 43C400E1;
+6afc : 01000000;
+6afd : 81229800;
+6afe : 04000000;
+6aff : C0908001;
+6b00 : 04000000;
+6b01 : 69228001;
+6b02 : 04000000;
+6b03 : A34301E0;
+6b04 : 00000000;
+6b05 : A16301E0;
+6b06 : 00000000;
+6b07 : F88D8001;
+6b08 : 04000000;
+6b09 : A38302E0;
+6b0a : 00000000;
+6b0b : F08D8001;
+6b0c : 04000000;
+6b0d : 00000000;
+6b0e : 08000000;
+6b0f : 5344422D;
+6b10 : 00050101;
+6b11 : 00000000;
+6b12 : 00000000;
+6b13 : 00000000;
+6b14 : 0000037F;
+6b15 : 46696C65;
+6b16 : 44617461;
+6b17 : 2E202020;
+6b18 : 00000001;
+6b19 : 00000000;
+6b1a : 2E202020;
+6b1b : 20202020;
+6b1c : 20202020;
+6b1d : 20202020;
+6b1e : 20202000;
+6b1f : 00000000;
+6b20 : 00000006;
+6b21 : 00000000;
+6b22 : 00000140;
+6b23 : 00000000;
+6b24 : 0000023F;
+6b25 : 46696C65;
+6b26 : 44617461;
+6b27 : 77722D69;
+6b28 : 00000001;
+6b29 : 00000000;
+6b2a : 77722D69;
+6b2b : 6E697420;
+6b2c : 20202020;
+6b2d : 20202020;
+6b2e : 20202001;
+6b2f : 00000000;
+6b30 : 00000006;
+6b31 : 00000000;
+6b32 : 00000240;
+6b33 : 00000000;
+6b34 : 000002BF;
+6b35 : 46696C65;
+6b36 : 44617461;
+6b37 : 63616C69;
+6b38 : 00000001;
+6b39 : 00000000;
+6b3a : 63616C69;
+6b3b : 62726174;
+6b3c : 696F6E20;
+6b3d : 20202020;
+6b3e : 20202001;
+6b3f : 00000000;
+6b40 : 00000006;
+6b41 : 00000000;
+6b42 : 000002C0;
+6b43 : 00000000;
+6b44 : 000002C5;
+6b45 : 46696C65;
+6b46 : 44617461;
+6b47 : 6D61632D;
+6b48 : 00000001;
+6b49 : 00000000;
+6b4a : 6D61632D;
+6b4b : 61646472;
+6b4c : 65737320;
+6b4d : 20202020;
+6b4e : 20202001;
+6b4f : 00000000;
+6b50 : 00000006;
+6b51 : 00000000;
+6b52 : 00000300;
+6b53 : 00000000;
+6b54 : 0000037F;
+6b55 : 46696C65;
+6b56 : 44617461;
+6b57 : 7366702D;
+6b58 : 00000001;
+6b59 : 00000000;
+6b5a : 7366702D;
+6b5b : 64617461;
+6b5c : 62617365;
+6b5d : 20202020;
+6b5e : 20202001;
+6b5f : FFFFFFFF;
+6b60 : 000195E0;
+6b61 : 5B1157A7;
+6b62 : 00000003;
+6b63 : 00000000;
+6b64 : 00000000;
+6b65 : 00000000;
+6b66 : 00000000;
+6b67 : 00000000;
+6b68 : 00000000;
+6b69 : 00000000;
+6b6a : 00000000;
+6b6b : 00000000;
+6b6c : 00000000;
+6b6d : 00000000;
+6b6e : 77727063;
+6b6f : 2D76342E;
+6b70 : 32000000;
+6b71 : 00000000;
+6b72 : 00000000;
+6b73 : 00000000;
+6b74 : 00000000;
+6b75 : 00000000;
+6b76 : 44656320;
+6b77 : 31382032;
+6b78 : 30313700;
+6b79 : 00000000;
+6b7a : 30393A33;
+6b7b : 323A3530;
+6b7c : 00000000;
+6b7d : 00000000;
+6b7e : 47727A65;
+6b7f : 676F727A;
+6b80 : 2044616E;
+6b81 : 696C756B;
+6b82 : 00000000;
+6b83 : 00000000;
+6b84 : 00000000;
+6b85 : 00000000;
+6b86 : 000180B8;
+6b87 : 00009640;
+6b88 : 0001810C;
+6b89 : 00009700;
+6b8a : 000167F4;
+6b8b : 00009700;
+6b8c : 00018148;
+6b8d : 0000983C;
+6b8e : 0001819C;
+6b8f : 00009954;
+6b90 : 0001821C;
+6b91 : 00009A64;
+6b92 : 000167F8;
+6b93 : 00009B9C;
+6b94 : 00018240;
+6b95 : 00009BCC;
+6b96 : 00018264;
+6b97 : 00009C2C;
+6b98 : 00018394;
+6b99 : 00009D30;
+6b9a : 000183D0;
+6b9b : 0000A0C8;
+6b9c : 0001842C;
+6b9d : 0000A330;
+6b9e : 00018464;
+6b9f : 0000A408;
+6ba0 : 0001846C;
+6ba1 : 0000A568;
+6ba2 : 00018478;
+6ba3 : 0000A580;
+6ba4 : 000184A8;
+6ba5 : 0000A728;
+6ba6 : 0001851C;
+6ba7 : 0000A878;
+6ba8 : 00018538;
+6ba9 : 0000A968;
+6baa : 00018398;
+6bab : 0000A9B0;
+6bac : 000185C0;
+6bad : 0000AA94;
+6bae : 00018654;
+6baf : 0000AB78;
+6bb0 : 00018AB8;
+6bb1 : 00010AA4;
+6bb2 : 00018DE8;
+6bb3 : 00012DA4;
+6bb4 : 00018DEC;
+6bb5 : 00012CA8;
+6bb6 : 00018DF0;
+6bb7 : 00012BAC;
+6bb8 : 000136A0;
+6bb9 : 00000000;
+6bba : 0001AA4C;
+6bbb : 0001680C;
+6bbc : 00000000;
+6bbd : 000002A4;
+6bbe : 00000000;
+6bbf : 00000000;
+6bc0 : 00000000;
+6bc1 : 00000000;
+6bc2 : 00000000;
+6bc3 : 000167E0;
+6bc4 : 00000000;
+6bc5 : 00000000;
+6bc6 : 00015268;
+6bc7 : 00000000;
+6bc8 : 00000000;
+6bc9 : 00000000;
+6bca : 00000000;
+6bcb : 000167E8;
+6bcc : 00000000;
+6bcd : 000094C0;
+6bce : 000004E4;
+6bcf : 00000000;
+6bd0 : 00000000;
+6bd1 : 00000000;
+6bd2 : 00000000;
+6bd3 : 000167F4;
+6bd4 : 00000000;
+6bd5 : 00000000;
+6bd6 : 00001818;
+6bd7 : 00000000;
+6bd8 : 00000000;
+6bd9 : 00000000;
+6bda : 00000000;
+6bdb : 000167F8;
+6bdc : 00000000;
+6bdd : 00000280;
+6bde : 00000214;
+6bdf : 00000000;
+6be0 : 00000000;
+6be1 : 00000000;
+6be2 : 00000000;
+6be3 : 00016800;
+6be4 : 00000000;
+6be5 : 00000000;
+6be6 : 000003F4;
+6be7 : 00000000;
+6be8 : 00000000;
+6be9 : 00000000;
+6bea : 00000000;
+6beb : 00017F94;
+6bec : 00000000;
+6bed : 00000000;
+6bee : 000082A0;
+6bef : 00000000;
+6bf0 : 00000000;
+6bf1 : 00000000;
+6bf2 : 00000000;
+6bf3 : 00017F9C;
+6bf4 : 00000000;
+6bf5 : 00000000;
+6bf6 : 00007EE8;
+6bf7 : 00000000;
+6bf8 : 00000000;
+6bf9 : 00000000;
+6bfa : 00000000;
+6bfb : 00018760;
+6bfc : 0001C2A4;
+6bfd : 00000000;
+6bfe : 0000B29C;
+6bff : 00000000;
+6c00 : 00000000;
+6c01 : 00000000;
+6c02 : 00000000;
+6c03 : 00018768;
+6c04 : 0001C2A4;
+6c05 : 0000BA10;
+6c06 : 0000BBF8;
+6c07 : 00000000;
+6c08 : 00000000;
+6c09 : 00000000;
+6c0a : 00000000;
+6c0b : 00018770;
+6c0c : 0001C2A4;
+6c0d : 0000BFEC;
+6c0e : 0000BE60;
+6c0f : 00000000;
+6c10 : 00000000;
+6c11 : 00000000;
+6c12 : 00000000;
+6c13 : 000187D8;
+6c14 : 0001C2A4;
+6c15 : 0000D9F0;
+6c16 : 0000C8C4;
+6c17 : 00000000;
+6c18 : 00000000;
+6c19 : 00000000;
+6c1a : 00000000;
+6c1b : 00018808;
+6c1c : 00000000;
+6c1d : 0000DF64;
+6c1e : 0000DE54;
+6c1f : 00000000;
+6c20 : 00000000;
+6c21 : 00000000;
+6c22 : 00000000;
+6c23 : 00018AC0;
+6c24 : 00000000;
+6c25 : 0001077C;
+6c26 : 000107C8;
+6c27 : 00000000;
+6c28 : 00000000;
+6c29 : 00000000;
+6c2a : 00000000;
+6c2b : 00000000;
+6c2c : 00000000;
+6c2d : 00000000;
+6c2e : 00000000;
+6c2f : 00000000;
+6c30 : 00000000;
+6c31 : 00000000;
+6c32 : 00000000;
+6c33 : 00000000;
+6c34 : 00000000;
+6c35 : 00000000;
+6c36 : 00000000;
+6c37 : 00000000;
+6c38 : 00000000;
+6c39 : 00000000;
+6c3a : 00000000;
+6c3b : 00000000;
+6c3c : 00000000;
+6c3d : 00000000;
+6c3e : 00000000;
+6c3f : 00000000;
+6c40 : 00000000;
+6c41 : 00000000;
+6c42 : 00000000;
+6c43 : 00000000;
+6c44 : 00000000;
+6c45 : 00000000;
+6c46 : 00000000;
+6c47 : 00000000;
+6c48 : 00000000;
+6c49 : 00000000;
+6c4a : 00000000;
+6c4b : 00000000;
+6c4c : 00000000;
+6c4d : 00000000;
+6c4e : 00000000;
+6c4f : 00000000;
+6c50 : 00000000;
+6c51 : 00000000;
+6c52 : 00000000;
+6c53 : 00000000;
+6c54 : 00000000;
+6c55 : 00000000;
+6c56 : 00000000;
+6c57 : 00000000;
+6c58 : 00000000;
+6c59 : 00000000;
+6c5a : 00000000;
+6c5b : 00000000;
+6c5c : 00000000;
+6c5d : 00000000;
+6c5e : 00000000;
+6c5f : 00000000;
+6c60 : 00000000;
+6c61 : 00000000;
+6c62 : 00000000;
+6c63 : 00000000;
+6c64 : 00000000;
+6c65 : 00000000;
+6c66 : 00000000;
+6c67 : 00000000;
+6c68 : 00000000;
+6c69 : 00000000;
+6c6a : 00000000;
+6c6b : 00000000;
+6c6c : 00000000;
+6c6d : 00000000;
+6c6e : 00000000;
+6c6f : 00000000;
+6c70 : 00000000;
+6c71 : 00000000;
+6c72 : 00000000;
+6c73 : 00000000;
+6c74 : 00000000;
+6c75 : 00000000;
+6c76 : 00000000;
+6c77 : 00000000;
+6c78 : 00000000;
+6c79 : 00000000;
+6c7a : 00000000;
+6c7b : 00000000;
+6c7c : 00000000;
+6c7d : 00000000;
+6c7e : 00000000;
+6c7f : 00000000;
+6c80 : 00000000;
+6c81 : 00000000;
+6c82 : 00000000;
+6c83 : 00000000;
+6c84 : 00000000;
+6c85 : 00000000;
+6c86 : 00000000;
+6c87 : 00000000;
+6c88 : 00000000;
+6c89 : 00000000;
+6c8a : 00000000;
+6c8b : 00000000;
+6c8c : 00000000;
+6c8d : 00000000;
+6c8e : 00000000;
+6c8f : 00000000;
+6c90 : 00000000;
+6c91 : 00000000;
+6c92 : 00000000;
+6c93 : 00000000;
+6c94 : 00000000;
+6c95 : 00000000;
+6c96 : 00000000;
+6c97 : 00000000;
+6c98 : 00000000;
+6c99 : 00000000;
+6c9a : 00000000;
+6c9b : 00000000;
+6c9c : 00000000;
+6c9d : 00000000;
+6c9e : 00000000;
+6c9f : 00000000;
+6ca0 : 00000000;
+6ca1 : 00000000;
+6ca2 : 00000000;
+6ca3 : 00000000;
+6ca4 : 00000000;
+6ca5 : 00000000;
+6ca6 : 00000000;
+6ca7 : 00000000;
+6ca8 : 00000000;
+6ca9 : 00000000;
+6caa : 00000000;
+6cab : 00000000;
+6cac : 00000000;
+6cad : 00000000;
+6cae : 00000000;
+6caf : 00000000;
+6cb0 : 00000000;
+6cb1 : 00000000;
+6cb2 : 00000000;
+6cb3 : 00000000;
+6cb4 : 00000000;
+6cb5 : 00000000;
+6cb6 : 00000000;
+6cb7 : 00000000;
+6cb8 : 00000000;
+6cb9 : 00000000;
+6cba : 00000000;
+6cbb : 00000000;
+6cbc : 00000000;
+6cbd : 00000000;
+6cbe : 00000000;
+6cbf : 00000000;
+6cc0 : 00000000;
+6cc1 : 00000000;
+6cc2 : 00000000;
+6cc3 : 00000000;
+6cc4 : 00000000;
+6cc5 : 00000000;
+6cc6 : 00000000;
+6cc7 : 00000000;
+6cc8 : 00000000;
+6cc9 : 00000000;
+6cca : 00000000;
+6ccb : 00000000;
+6ccc : 00000000;
+6ccd : 00000000;
+6cce : 00000000;
+6ccf : 00000000;
+6cd0 : 00000000;
+6cd1 : 00000000;
+6cd2 : 00000000;
+6cd3 : 00000000;
+6cd4 : 00000000;
+6cd5 : 00000000;
+6cd6 : 00000000;
+6cd7 : 00000000;
+6cd8 : 00000000;
+6cd9 : 00000000;
+6cda : 00000000;
+6cdb : 00000000;
+6cdc : 00000000;
+6cdd : 00000000;
+6cde : 00000000;
+6cdf : 00000000;
+6ce0 : 00000000;
+6ce1 : 00000000;
+6ce2 : 00000000;
+6ce3 : 00000000;
+6ce4 : 00000000;
+6ce5 : 00000000;
+6ce6 : 00000000;
+6ce7 : 00000000;
+6ce8 : 00000000;
+6ce9 : 00000000;
+6cea : 00000000;
+6ceb : 00000000;
+6cec : 00000000;
+6ced : 00000000;
+6cee : 00000000;
+6cef : 00000000;
+6cf0 : 00000000;
+6cf1 : 00000000;
+6cf2 : 00000000;
+6cf3 : 00000000;
+6cf4 : 00000000;
+6cf5 : 00000000;
+6cf6 : 00000000;
+6cf7 : 00000000;
+6cf8 : 00000000;
+6cf9 : 00000000;
+6cfa : 00000000;
+6cfb : 00000000;
+6cfc : 00000000;
+6cfd : 00000000;
+6cfe : 00000000;
+6cff : 00000000;
+6d00 : 00000000;
+6d01 : 00000000;
+6d02 : 00000000;
+6d03 : 00000000;
+6d04 : 00000000;
+6d05 : 00000000;
+6d06 : 00000000;
+6d07 : 00000000;
+6d08 : 00000000;
+6d09 : 00000000;
+6d0a : 00000000;
+6d0b : 00000000;
+6d0c : 00000000;
+6d0d : 00000000;
+6d0e : 00000000;
+6d0f : 00000000;
+6d10 : 00000000;
+6d11 : 00000000;
+6d12 : 00000000;
+6d13 : 00000000;
+6d14 : 00000000;
+6d15 : 00000000;
+6d16 : 00000000;
+6d17 : 00000000;
+6d18 : 00000000;
+6d19 : 00000000;
+6d1a : 00000000;
+6d1b : 00000000;
+6d1c : 00000000;
+6d1d : 00000000;
+6d1e : 00000000;
+6d1f : 00000000;
+6d20 : 00000000;
+6d21 : 00000000;
+6d22 : 00000000;
+6d23 : 00000000;
+6d24 : 00000000;
+6d25 : 00000000;
+6d26 : 00000000;
+6d27 : 00000000;
+6d28 : 00000000;
+6d29 : 00000000;
+6d2a : 00000000;
+6d2b : 00000000;
+6d2c : 00000000;
+6d2d : 00000000;
+6d2e : 00000000;
+6d2f : 00000000;
+6d30 : 00000000;
+6d31 : 00000000;
+6d32 : 00000000;
+6d33 : 00000000;
+6d34 : 00000000;
+6d35 : 00000000;
+6d36 : 00000000;
+6d37 : 00000000;
+6d38 : 00000000;
+6d39 : 00000000;
+6d3a : 00000000;
+6d3b : 00000000;
+6d3c : 00000000;
+6d3d : 00000000;
+6d3e : 00000000;
+6d3f : 00000000;
+6d40 : 00000000;
+6d41 : 00000000;
+6d42 : 00000000;
+6d43 : 00000000;
+6d44 : 00000000;
+6d45 : 00000000;
+6d46 : 00000000;
+6d47 : 00000000;
+6d48 : 00000000;
+6d49 : 00000000;
+6d4a : 00000000;
+6d4b : 00000000;
+6d4c : 00000000;
+6d4d : 00000000;
+6d4e : 00000000;
+6d4f : 00000000;
+6d50 : 00000000;
+6d51 : 00000000;
+6d52 : 00000000;
+6d53 : 00000000;
+6d54 : 00000000;
+6d55 : 00000000;
+6d56 : 00000000;
+6d57 : 00000000;
+6d58 : 00000000;
+6d59 : 00000000;
+6d5a : 00000000;
+6d5b : 00000000;
+6d5c : 00000000;
+6d5d : 00000000;
+6d5e : 00000000;
+6d5f : 00000000;
+6d60 : 00000000;
+6d61 : 00000000;
+6d62 : 00000000;
+6d63 : 00000000;
+6d64 : 00000000;
+6d65 : 00000000;
+6d66 : 00000000;
+6d67 : 00000000;
+6d68 : 00000000;
+6d69 : 00000000;
+6d6a : 00000000;
+6d6b : 00000000;
+6d6c : 00000000;
+6d6d : 00000000;
+6d6e : 00000000;
+6d6f : 00000000;
+6d70 : 00000000;
+6d71 : 00000000;
+6d72 : 00000000;
+6d73 : 00000000;
+6d74 : 00000000;
+6d75 : 00000000;
+6d76 : 00000000;
+6d77 : 00000000;
+6d78 : 00000000;
+6d79 : 00000000;
+6d7a : 00000000;
+6d7b : 00000000;
+6d7c : 00000000;
+6d7d : 00000000;
+6d7e : 00000000;
+6d7f : 00000000;
+6d80 : 00000000;
+6d81 : 00000000;
+6d82 : 00000000;
+6d83 : 00000000;
+6d84 : 00000000;
+6d85 : 00000000;
+6d86 : 00000000;
+6d87 : 00000000;
+6d88 : 00000000;
+6d89 : 00000000;
+6d8a : 00000000;
+6d8b : 00000000;
+6d8c : 00000000;
+6d8d : 00000000;
+6d8e : 00000000;
+6d8f : 00000000;
+6d90 : 00000000;
+6d91 : 00000000;
+6d92 : 00000000;
+6d93 : 00000000;
+6d94 : 00000000;
+6d95 : 00000000;
+6d96 : 00000000;
+6d97 : 00000000;
+6d98 : 00000000;
+6d99 : 00000000;
+6d9a : 00000000;
+6d9b : 00000000;
+6d9c : 00000000;
+6d9d : 00000000;
+6d9e : 00000000;
+6d9f : 00000000;
+6da0 : 00000000;
+6da1 : 00000000;
+6da2 : 00000000;
+6da3 : 00000000;
+6da4 : 00000000;
+6da5 : 00000000;
+6da6 : 00000000;
+6da7 : 00000000;
+6da8 : 00000000;
+6da9 : 00000000;
+6daa : 00000000;
+6dab : 00000000;
+6dac : 00000000;
+6dad : 00000000;
+6dae : 00000000;
+6daf : 00000000;
+6db0 : 00000000;
+6db1 : 00000000;
+6db2 : 00000000;
+6db3 : 00000000;
+6db4 : 00000000;
+6db5 : 00000000;
+6db6 : 00000000;
+6db7 : 00000000;
+6db8 : 00000000;
+6db9 : 00000000;
+6dba : 00000000;
+6dbb : 00000000;
+6dbc : 00000000;
+6dbd : 00000000;
+6dbe : 00000000;
+6dbf : 00000000;
+6dc0 : 00000000;
+6dc1 : 00000000;
+6dc2 : 00000000;
+6dc3 : 00000000;
+6dc4 : 00000000;
+6dc5 : 00000000;
+6dc6 : 00000000;
+6dc7 : 00000000;
+6dc8 : 00000000;
+6dc9 : 00000000;
+6dca : 00000000;
+6dcb : 00000000;
+6dcc : 00000000;
+6dcd : 00000000;
+6dce : 00000000;
+6dcf : 00000000;
+6dd0 : 00000000;
+6dd1 : 00000000;
+6dd2 : 00000000;
+6dd3 : 00000000;
+6dd4 : 00000000;
+6dd5 : 00000000;
+6dd6 : 00000000;
+6dd7 : 00000000;
+6dd8 : 00000000;
+6dd9 : 00000000;
+6dda : 00000000;
+6ddb : 00000000;
+6ddc : 00000000;
+6ddd : 00000000;
+6dde : 00000000;
+6ddf : 00000000;
+6de0 : 00000000;
+6de1 : 00000000;
+6de2 : 00000000;
+6de3 : 00000000;
+6de4 : 00000000;
+6de5 : 00000000;
+6de6 : 00000000;
+6de7 : 00000000;
+6de8 : 00000000;
+6de9 : 00000000;
+6dea : 00000000;
+6deb : 00000000;
+6dec : 00000000;
+6ded : 00000000;
+6dee : 00000000;
+6def : 00000000;
+6df0 : 00000000;
+6df1 : 00000000;
+6df2 : 00000000;
+6df3 : 00000000;
+6df4 : 00000000;
+6df5 : 00000000;
+6df6 : 00000000;
+6df7 : 00000000;
+6df8 : 00000000;
+6df9 : 00000000;
+6dfa : 00000000;
+6dfb : 00000000;
+6dfc : 00000000;
+6dfd : 00000000;
+6dfe : 00000000;
+6dff : 00000000;
+6e00 : 00000000;
+6e01 : 00000000;
+6e02 : 00000000;
+6e03 : 00000000;
+6e04 : 00000000;
+6e05 : 00000000;
+6e06 : 00000000;
+6e07 : 00000000;
+6e08 : 00000000;
+6e09 : 00000000;
+6e0a : 00000000;
+6e0b : 00000000;
+6e0c : 00000000;
+6e0d : 00000000;
+6e0e : 00000000;
+6e0f : 00000000;
+6e10 : 00000000;
+6e11 : 00000000;
+6e12 : 00000000;
+6e13 : 00000000;
+6e14 : 00000000;
+6e15 : 00000000;
+6e16 : 00000000;
+6e17 : 00000000;
+6e18 : 00000000;
+6e19 : 00000000;
+6e1a : 00000000;
+6e1b : 00000000;
+6e1c : 00000000;
+6e1d : 00000000;
+6e1e : 00000000;
+6e1f : 00000000;
+6e20 : 00000000;
+6e21 : 00000000;
+6e22 : 00000000;
+6e23 : 00000000;
+6e24 : 00000000;
+6e25 : 00000000;
+6e26 : 00000000;
+6e27 : 00000000;
+6e28 : 00000000;
+6e29 : 00000000;
+6e2a : 00000000;
+6e2b : 00000000;
+6e2c : 00000000;
+6e2d : 00000000;
+6e2e : 00000000;
+6e2f : 00000000;
+6e30 : 00000000;
+6e31 : 00000000;
+6e32 : 00000000;
+6e33 : 00000000;
+6e34 : 00000000;
+6e35 : 00000000;
+6e36 : 00000000;
+6e37 : 00000000;
+6e38 : 00000000;
+6e39 : 00000000;
+6e3a : 00000000;
+6e3b : 00000000;
+6e3c : 00000000;
+6e3d : 00000000;
+6e3e : 00000000;
+6e3f : 00000000;
+6e40 : 00000000;
+6e41 : 00000000;
+6e42 : 00000000;
+6e43 : 00000000;
+6e44 : 00000000;
+6e45 : 00000000;
+6e46 : 00000000;
+6e47 : 00000000;
+6e48 : 00000000;
+6e49 : 00000000;
+6e4a : 00000000;
+6e4b : 00000000;
+6e4c : 00000000;
+6e4d : 00000000;
+6e4e : 00000000;
+6e4f : 00000000;
+6e50 : 00000000;
+6e51 : 00000000;
+6e52 : 00000000;
+6e53 : 00000000;
+6e54 : 00000000;
+6e55 : 00000000;
+6e56 : 00000000;
+6e57 : 00000000;
+6e58 : 00000000;
+6e59 : 00000000;
+6e5a : 00000000;
+6e5b : 00000000;
+6e5c : 00000000;
+6e5d : 00000000;
+6e5e : 00000000;
+6e5f : 00000000;
+6e60 : 00000000;
+6e61 : 00000000;
+6e62 : 00000000;
+6e63 : 00000000;
+6e64 : 00000000;
+6e65 : 00000000;
+6e66 : 00000000;
+6e67 : 00000000;
+6e68 : 00000000;
+6e69 : 00000000;
+6e6a : 00000000;
+6e6b : 00000000;
+6e6c : 00000000;
+6e6d : 00000000;
+6e6e : 00000000;
+6e6f : 00000000;
+6e70 : 00000000;
+6e71 : 00000000;
+6e72 : 00000000;
+6e73 : 00000000;
+6e74 : 00000000;
+6e75 : 00000000;
+6e76 : 00000000;
+6e77 : 00000000;
+6e78 : 00000000;
+6e79 : 00000000;
+6e7a : 00000000;
+6e7b : 00000000;
+6e7c : 00000000;
+6e7d : 00000000;
+6e7e : 00000000;
+6e7f : 00000000;
+6e80 : 00000000;
+6e81 : 00000000;
+6e82 : 00000000;
+6e83 : 00000000;
+6e84 : 00000000;
+6e85 : 00000000;
+6e86 : 00000000;
+6e87 : 00000000;
+6e88 : 00000000;
+6e89 : 00000000;
+6e8a : 00000000;
+6e8b : 00000000;
+6e8c : 00000000;
+6e8d : 00000000;
+6e8e : 00000000;
+6e8f : 00000000;
+6e90 : 00000000;
+6e91 : 00000000;
+6e92 : 00000000;
+6e93 : 00000000;
+6e94 : 00000000;
+6e95 : 00000000;
+6e96 : 00000000;
+6e97 : 00000000;
+6e98 : 00000000;
+6e99 : 00000000;
+6e9a : 00000000;
+6e9b : 00000000;
+6e9c : 00000000;
+6e9d : 00000000;
+6e9e : 00000000;
+6e9f : 00000000;
+6ea0 : 00000000;
+6ea1 : 00000000;
+6ea2 : 00000000;
+6ea3 : 00000000;
+6ea4 : 00000000;
+6ea5 : 00000000;
+6ea6 : 00000000;
+6ea7 : 00000000;
+6ea8 : 00000000;
+6ea9 : 00000000;
+6eaa : 00000000;
+6eab : 00000000;
+6eac : 00000000;
+6ead : 00000000;
+6eae : 00000000;
+6eaf : 00000000;
+6eb0 : 00000000;
+6eb1 : 00000000;
+6eb2 : 00000000;
+6eb3 : 00000000;
+6eb4 : 00000000;
+6eb5 : 00000000;
+6eb6 : 00000000;
+6eb7 : 00000000;
+6eb8 : 00000000;
+6eb9 : 00000000;
+6eba : 00000000;
+6ebb : 00000000;
+6ebc : 00000000;
+6ebd : 00000000;
+6ebe : 00000000;
+6ebf : 00000000;
+6ec0 : 00000000;
+6ec1 : 00000000;
+6ec2 : 00000000;
+6ec3 : 00000000;
+6ec4 : 00000000;
+6ec5 : 00000000;
+6ec6 : 00000000;
+6ec7 : 00000000;
+6ec8 : 00000000;
+6ec9 : 00000000;
+6eca : 00000000;
+6ecb : 00000000;
+6ecc : 00000000;
+6ecd : 00000000;
+6ece : 00000000;
+6ecf : 00000000;
+6ed0 : 00000000;
+6ed1 : 00000000;
+6ed2 : 00000000;
+6ed3 : 00000000;
+6ed4 : 00000000;
+6ed5 : 00000000;
+6ed6 : 00000000;
+6ed7 : 00000000;
+6ed8 : 00000000;
+6ed9 : 00000000;
+6eda : 00000000;
+6edb : 00000000;
+6edc : 00000000;
+6edd : 00000000;
+6ede : 00000000;
+6edf : 00000000;
+6ee0 : 00000000;
+6ee1 : 00000000;
+6ee2 : 00000000;
+6ee3 : 00000000;
+6ee4 : 00000000;
+6ee5 : 00000000;
+6ee6 : 00000000;
+6ee7 : 00000000;
+6ee8 : 00000000;
+6ee9 : 00000000;
+6eea : 00000000;
+6eeb : 00000000;
+6eec : 00000000;
+6eed : 00000000;
+6eee : 00000000;
+6eef : 00000000;
+6ef0 : 00000000;
+6ef1 : 00000000;
+6ef2 : 00000000;
+6ef3 : 00000000;
+6ef4 : 00000000;
+6ef5 : 00000000;
+6ef6 : 00000000;
+6ef7 : 00000000;
+6ef8 : 00000000;
+6ef9 : 00000000;
+6efa : 00000000;
+6efb : 00000000;
+6efc : 00000000;
+6efd : 00000000;
+6efe : 00000000;
+6eff : 00000000;
+6f00 : 00000000;
+6f01 : 00000000;
+6f02 : 00000000;
+6f03 : 00000000;
+6f04 : 00000000;
+6f05 : 00000000;
+6f06 : 00000000;
+6f07 : 00000000;
+6f08 : 00000000;
+6f09 : 00000000;
+6f0a : 00000000;
+6f0b : 00000000;
+6f0c : 00000000;
+6f0d : 00000000;
+6f0e : 00000000;
+6f0f : 00000000;
+6f10 : 00000000;
+6f11 : 00000000;
+6f12 : 00000000;
+6f13 : 00000000;
+6f14 : 00000000;
+6f15 : 00000000;
+6f16 : 00000000;
+6f17 : 00000000;
+6f18 : 00000000;
+6f19 : 00000000;
+6f1a : 00000000;
+6f1b : 00000000;
+6f1c : 00000000;
+6f1d : 00000000;
+6f1e : 00000000;
+6f1f : 00000000;
+6f20 : 00000000;
+6f21 : 00000000;
+6f22 : 00000000;
+6f23 : 00000000;
+6f24 : 00000000;
+6f25 : 00000000;
+6f26 : 00000000;
+6f27 : 00000000;
+6f28 : 00000000;
+6f29 : 00000000;
+6f2a : 00000000;
+6f2b : 00000000;
+6f2c : 00000000;
+6f2d : 00000000;
+6f2e : 00000000;
+6f2f : 00000000;
+6f30 : 00000000;
+6f31 : 00000000;
+6f32 : 00000000;
+6f33 : 00000000;
+6f34 : 00000000;
+6f35 : 00000000;
+6f36 : 00000000;
+6f37 : 00000000;
+6f38 : 00000000;
+6f39 : 00000000;
+6f3a : 00000000;
+6f3b : 00000000;
+6f3c : 00000000;
+6f3d : 00000000;
+6f3e : 00000000;
+6f3f : 00000000;
+6f40 : 00000000;
+6f41 : 00000000;
+6f42 : 00000000;
+6f43 : 00000000;
+6f44 : 00000000;
+6f45 : 00000000;
+6f46 : 00000000;
+6f47 : 00000000;
+6f48 : 00000000;
+6f49 : 00000000;
+6f4a : 00000000;
+6f4b : 00000000;
+6f4c : 00000000;
+6f4d : 00000000;
+6f4e : 00000000;
+6f4f : 00000000;
+6f50 : 00000000;
+6f51 : 00000000;
+6f52 : 00000000;
+6f53 : 00000000;
+6f54 : 00000000;
+6f55 : 00000000;
+6f56 : 00000000;
+6f57 : 00000000;
+6f58 : 00000000;
+6f59 : 00000000;
+6f5a : 00000000;
+6f5b : 00000000;
+6f5c : 00000000;
+6f5d : 00000000;
+6f5e : 00000000;
+6f5f : 00000000;
+6f60 : 00000000;
+6f61 : 00000000;
+6f62 : 00000000;
+6f63 : 00000000;
+6f64 : 00000000;
+6f65 : 00000000;
+6f66 : 00000000;
+6f67 : 00000000;
+6f68 : 00000000;
+6f69 : 00000000;
+6f6a : 00000000;
+6f6b : 00000000;
+6f6c : 00000000;
+6f6d : 00000000;
+6f6e : 00000000;
+6f6f : 00000000;
+6f70 : 00000000;
+6f71 : 00000000;
+6f72 : 00000000;
+6f73 : 00000000;
+6f74 : 00000000;
+6f75 : 00000000;
+6f76 : 00000000;
+6f77 : 00000000;
+6f78 : 00000000;
+6f79 : 00000000;
+6f7a : 00000000;
+6f7b : 00000000;
+6f7c : 00000000;
+6f7d : 00000000;
+6f7e : 00000000;
+6f7f : 00000000;
+6f80 : 00000000;
+6f81 : 00000000;
+6f82 : 00000000;
+6f83 : 00000000;
+6f84 : 00000000;
+6f85 : 00000000;
+6f86 : 00000000;
+6f87 : 00000000;
+6f88 : 00000000;
+6f89 : 00000000;
+6f8a : 00000000;
+6f8b : 00000000;
+6f8c : 00000000;
+6f8d : 00000000;
+6f8e : 00000000;
+6f8f : 00000000;
+6f90 : 00000000;
+6f91 : 00000000;
+6f92 : 00000000;
+6f93 : 00000000;
+6f94 : 00000000;
+6f95 : 00000000;
+6f96 : 00000000;
+6f97 : 00000000;
+6f98 : 00000000;
+6f99 : 00000000;
+6f9a : 00000000;
+6f9b : 00000000;
+6f9c : 00000000;
+6f9d : 00000000;
+6f9e : 00000000;
+6f9f : 00000000;
+6fa0 : 00000000;
+6fa1 : 00000000;
+6fa2 : 00000000;
+6fa3 : 00000000;
+6fa4 : 00000000;
+6fa5 : 00000000;
+6fa6 : 00000000;
+6fa7 : 00000000;
+6fa8 : 00000000;
+6fa9 : 00000000;
+6faa : 00000000;
+6fab : 00000000;
+6fac : 00000000;
+6fad : 00000000;
+6fae : 00000000;
+6faf : 00000000;
+6fb0 : 00000000;
+6fb1 : 00000000;
+6fb2 : 00000000;
+6fb3 : 00000000;
+6fb4 : 00000000;
+6fb5 : 00000000;
+6fb6 : 00000000;
+6fb7 : 00000000;
+6fb8 : 00000000;
+6fb9 : 00000000;
+6fba : 00000000;
+6fbb : 00000000;
+6fbc : 00000000;
+6fbd : 00000000;
+6fbe : 00000000;
+6fbf : 00000000;
+6fc0 : 00000000;
+6fc1 : 00000000;
+6fc2 : 00000000;
+6fc3 : 00000000;
+6fc4 : 00000000;
+6fc5 : 00000000;
+6fc6 : 00000000;
+6fc7 : 00000000;
+6fc8 : 00000000;
+6fc9 : 00000000;
+6fca : 00000000;
+6fcb : 00000000;
+6fcc : 00000000;
+6fcd : 00000000;
+6fce : 00000000;
+6fcf : 00000000;
+6fd0 : 00000000;
+6fd1 : 00000000;
+6fd2 : 00000000;
+6fd3 : 00000000;
+6fd4 : 00000000;
+6fd5 : 00000000;
+6fd6 : 00000000;
+6fd7 : 00000000;
+6fd8 : 00000000;
+6fd9 : 00000000;
+6fda : 00000000;
+6fdb : 00000000;
+6fdc : 00000000;
+6fdd : 00000000;
+6fde : 00000000;
+6fdf : 00000000;
+6fe0 : 00000000;
+6fe1 : 00000000;
+6fe2 : 00000000;
+6fe3 : 00000000;
+6fe4 : 00000000;
+6fe5 : 00000000;
+6fe6 : 00000000;
+6fe7 : 00000000;
+6fe8 : 00000000;
+6fe9 : 00000000;
+6fea : 00000000;
+6feb : 00000000;
+6fec : 00000000;
+6fed : 00000000;
+6fee : 00000000;
+6fef : 00000000;
+6ff0 : 00000000;
+6ff1 : 00000000;
+6ff2 : 00000000;
+6ff3 : 00000000;
+6ff4 : 00000000;
+6ff5 : 00000000;
+6ff6 : 00000000;
+6ff7 : 00000000;
+6ff8 : 00000000;
+6ff9 : 00000000;
+6ffa : 00000000;
+6ffb : 00000000;
+6ffc : 00000000;
+6ffd : 00000000;
+6ffe : 00000000;
+6fff : 00000000;
+7000 : 00000000;
+7001 : 00000000;
+7002 : 00000000;
+7003 : 00000000;
+7004 : 00000000;
+7005 : 00000000;
+7006 : 00000000;
+7007 : 00000000;
+7008 : 00000000;
+7009 : 00000000;
+700a : 00000000;
+700b : 00000000;
+700c : 00000000;
+700d : 00000000;
+700e : 00000000;
+700f : 00000000;
+7010 : 00000000;
+7011 : 00000000;
+7012 : 00000000;
+7013 : 00000000;
+7014 : 00000000;
+7015 : 00000000;
+7016 : 00000000;
+7017 : 00000000;
+7018 : 00000000;
+7019 : 00000000;
+701a : 00000000;
+701b : 00000000;
+701c : 00000000;
+701d : 00000000;
+701e : 00000000;
+701f : 00000000;
+7020 : 00000000;
+7021 : 00000000;
+7022 : 00000000;
+7023 : 00000000;
+7024 : 00000000;
+7025 : 00000000;
+7026 : 00000000;
+7027 : 00000000;
+7028 : 00000000;
+7029 : 00000000;
+702a : 00000000;
+702b : 00000000;
+702c : 00000000;
+702d : 00000000;
+702e : 00000000;
+702f : 00000000;
+7030 : 00000000;
+7031 : 00000000;
+7032 : 00000000;
+7033 : 00000000;
+7034 : 00000000;
+7035 : 00000000;
+7036 : 00000000;
+7037 : 00000000;
+7038 : 00000000;
+7039 : 00000000;
+703a : 00000000;
+703b : 00000000;
+703c : 00000000;
+703d : 00000000;
+703e : 00000000;
+703f : 00000000;
+7040 : 00000000;
+7041 : 00000000;
+7042 : 00000000;
+7043 : 00000000;
+7044 : 00000000;
+7045 : 00000000;
+7046 : 00000000;
+7047 : 00000000;
+7048 : 00000000;
+7049 : 00000000;
+704a : 00000000;
+704b : 00000000;
+704c : 00000000;
+704d : 00000000;
+704e : 00000000;
+704f : 00000000;
+7050 : 00000000;
+7051 : 00000000;
+7052 : 00000000;
+7053 : 00000000;
+7054 : 00000000;
+7055 : 00000000;
+7056 : 00000000;
+7057 : 00000000;
+7058 : 00000000;
+7059 : 00000000;
+705a : 00000000;
+705b : 00000000;
+705c : 00000000;
+705d : 00000000;
+705e : 00000000;
+705f : 00000000;
+7060 : 00000000;
+7061 : 00000000;
+7062 : 00000000;
+7063 : 00000000;
+7064 : 00000000;
+7065 : 00000000;
+7066 : 00000000;
+7067 : 00000000;
+7068 : 00000000;
+7069 : 00000000;
+706a : 00000000;
+706b : 00000000;
+706c : 00000000;
+706d : 00000000;
+706e : 00000000;
+706f : 00000000;
+7070 : 00000000;
+7071 : 00000000;
+7072 : 00000000;
+7073 : 00000000;
+7074 : 00000000;
+7075 : 00000000;
+7076 : 00000000;
+7077 : 00000000;
+7078 : 00000000;
+7079 : 00000000;
+707a : 00000000;
+707b : 00000000;
+707c : 00000000;
+707d : 00000000;
+707e : 00000000;
+707f : 00000000;
+7080 : 00000000;
+7081 : 00000000;
+7082 : 00000000;
+7083 : 00000000;
+7084 : 00000000;
+7085 : 00000000;
+7086 : 00000000;
+7087 : 00000000;
+7088 : 00000000;
+7089 : 00000000;
+708a : 00000000;
+708b : 00000000;
+708c : 00000000;
+708d : 00000000;
+708e : 00000000;
+708f : 00000000;
+7090 : 00000000;
+7091 : 00000000;
+7092 : 00000000;
+7093 : 00000000;
+7094 : 00000000;
+7095 : 00000000;
+7096 : 00000000;
+7097 : 00000000;
+7098 : 00000000;
+7099 : 00000000;
+709a : 00000000;
+709b : 00000000;
+709c : 00000000;
+709d : 00000000;
+709e : 00000000;
+709f : 00000000;
+70a0 : 00000000;
+70a1 : 00000000;
+70a2 : 00000000;
+70a3 : 00000000;
+70a4 : 00000000;
+70a5 : 00000000;
+70a6 : 00000000;
+70a7 : 00000000;
+70a8 : 00000000;
+70a9 : 00000000;
+70aa : 00000000;
+70ab : 00000000;
+70ac : 00000000;
+70ad : 00000000;
+70ae : 00000000;
+70af : 00000000;
+70b0 : 00000000;
+70b1 : 00000000;
+70b2 : 00000000;
+70b3 : 00000000;
+70b4 : 00000000;
+70b5 : 00000000;
+70b6 : 00000000;
+70b7 : 00000000;
+70b8 : 00000000;
+70b9 : 00000000;
+70ba : 00000000;
+70bb : 00000000;
+70bc : 00000000;
+70bd : 00000000;
+70be : 00000000;
+70bf : 00000000;
+70c0 : 00000000;
+70c1 : 00000000;
+70c2 : 00000000;
+70c3 : 00000000;
+70c4 : 00000000;
+70c5 : 00000000;
+70c6 : 00000000;
+70c7 : 00000000;
+70c8 : 00000000;
+70c9 : 00000000;
+70ca : 00000000;
+70cb : 00000000;
+70cc : 00000000;
+70cd : 00000000;
+70ce : 00000000;
+70cf : 00000000;
+70d0 : 00000000;
+70d1 : 00000000;
+70d2 : 00000000;
+70d3 : 00000000;
+70d4 : 00000000;
+70d5 : 00000000;
+70d6 : 00000000;
+70d7 : 00000000;
+70d8 : 00000000;
+70d9 : 00000000;
+70da : 00000000;
+70db : 00000000;
+70dc : 00000000;
+70dd : 00000000;
+70de : 00000000;
+70df : 00000000;
+70e0 : 00000000;
+70e1 : 00000000;
+70e2 : 00000000;
+70e3 : 00000000;
+70e4 : 00000000;
+70e5 : 00000000;
+70e6 : 00000000;
+70e7 : 00000000;
+70e8 : 00000000;
+70e9 : 00000000;
+70ea : 00000000;
+70eb : 00000000;
+70ec : 00000000;
+70ed : 00000000;
+70ee : 00000000;
+70ef : 00000000;
+70f0 : 00000000;
+70f1 : 00000000;
+70f2 : 00000000;
+70f3 : 00000000;
+70f4 : 00000000;
+70f5 : 00000000;
+70f6 : 00000000;
+70f7 : 00000000;
+70f8 : 00000000;
+70f9 : 00000000;
+70fa : 00000000;
+70fb : 00000000;
+70fc : 00000000;
+70fd : 00000000;
+70fe : 00000000;
+70ff : 00000000;
+7100 : 00000000;
+7101 : 00000000;
+7102 : 00000000;
+7103 : 00000000;
+7104 : 00000000;
+7105 : 00000000;
+7106 : 00000000;
+7107 : 00000000;
+7108 : 00000000;
+7109 : 00000000;
+710a : 00000000;
+710b : 00000000;
+710c : 00000000;
+710d : 00000000;
+710e : 00000000;
+710f : 00000000;
+7110 : 00000000;
+7111 : 00000000;
+7112 : 00000000;
+7113 : 00000000;
+7114 : 00000000;
+7115 : 00000000;
+7116 : 00000000;
+7117 : 00000000;
+7118 : 00000000;
+7119 : 00000000;
+711a : 00000000;
+711b : 00000000;
+711c : 00000000;
+711d : 00000000;
+711e : 00000000;
+711f : 00000000;
+7120 : 00000000;
+7121 : 00000000;
+7122 : 00000000;
+7123 : 00000000;
+7124 : 00000000;
+7125 : 00000000;
+7126 : 00000000;
+7127 : 00000000;
+7128 : 00000000;
+7129 : 00000000;
+712a : 00000000;
+712b : 00000000;
+712c : 00000000;
+712d : 00000000;
+712e : 00000000;
+712f : 00000000;
+7130 : 00000000;
+7131 : 00000000;
+7132 : 00000000;
+7133 : 00000000;
+7134 : 00000000;
+7135 : 00000000;
+7136 : 00000000;
+7137 : 00000000;
+7138 : 00000000;
+7139 : 00000000;
+713a : 00000000;
+713b : 00000000;
+713c : 00000000;
+713d : 00000000;
+713e : 00000000;
+713f : 00000000;
+7140 : 00000000;
+7141 : 00000000;
+7142 : 00000000;
+7143 : 00000000;
+7144 : 00000000;
+7145 : 00000000;
+7146 : 00000000;
+7147 : 00000000;
+7148 : 00000000;
+7149 : 00000000;
+714a : 00000000;
+714b : 00000000;
+714c : 00000000;
+714d : 00000000;
+714e : 00000000;
+714f : 00000000;
+7150 : 00000000;
+7151 : 00000000;
+7152 : 00000000;
+7153 : 00000000;
+7154 : 00000000;
+7155 : 00000000;
+7156 : 00000000;
+7157 : 00000000;
+7158 : 00000000;
+7159 : 00000000;
+715a : 00000000;
+715b : 00000000;
+715c : 00000000;
+715d : 00000000;
+715e : 00000000;
+715f : 00000000;
+7160 : 00000000;
+7161 : 00000000;
+7162 : 00000000;
+7163 : 00000000;
+7164 : 00000000;
+7165 : 00000000;
+7166 : 00000000;
+7167 : 00000000;
+7168 : 00000000;
+7169 : 00000000;
+716a : 00000000;
+716b : 00000000;
+716c : 00000000;
+716d : 00000000;
+716e : 00000000;
+716f : 00000000;
+7170 : 00000000;
+7171 : 00000000;
+7172 : 00000000;
+7173 : 00000000;
+7174 : 00000000;
+7175 : 00000000;
+7176 : 00000000;
+7177 : 00000000;
+7178 : 00000000;
+7179 : 00000000;
+717a : 00000000;
+717b : 00000000;
+717c : 00000000;
+717d : 00000000;
+717e : 00000000;
+717f : 00000000;
+7180 : 00000000;
+7181 : 00000000;
+7182 : 00000000;
+7183 : 00000000;
+7184 : 00000000;
+7185 : 00000000;
+7186 : 00000000;
+7187 : 00000000;
+7188 : 00000000;
+7189 : 00000000;
+718a : 00000000;
+718b : 00000000;
+718c : 00000000;
+718d : 00000000;
+718e : 00000000;
+718f : 00000000;
+7190 : 00000000;
+7191 : 00000000;
+7192 : 00000000;
+7193 : 00000000;
+7194 : 00000000;
+7195 : 00000000;
+7196 : 00000000;
+7197 : 00000000;
+7198 : 00000000;
+7199 : 00000000;
+719a : 00000000;
+719b : 00000000;
+719c : 00000000;
+719d : 00000000;
+719e : 00000000;
+719f : 00000000;
+71a0 : 00000000;
+71a1 : 00000000;
+71a2 : 00000000;
+71a3 : 00000000;
+71a4 : 00000000;
+71a5 : 00000000;
+71a6 : 00000000;
+71a7 : 00000000;
+71a8 : 00000000;
+71a9 : 00000000;
+71aa : 00000000;
+71ab : 00000000;
+71ac : 00000000;
+71ad : 00000000;
+71ae : 00000000;
+71af : 00000000;
+71b0 : 00000000;
+71b1 : 00000000;
+71b2 : 00000000;
+71b3 : 00000000;
+71b4 : 00000000;
+71b5 : 00000000;
+71b6 : 00000000;
+71b7 : 00000000;
+71b8 : 00000000;
+71b9 : 00000000;
+71ba : 00000000;
+71bb : 00000000;
+71bc : 00000000;
+71bd : 00000000;
+71be : 00000000;
+71bf : 00000000;
+71c0 : 00000000;
+71c1 : 00000000;
+71c2 : 00000000;
+71c3 : 00000000;
+71c4 : 00000000;
+71c5 : 00000000;
+71c6 : 00000000;
+71c7 : 00000000;
+71c8 : 00000000;
+71c9 : 00000000;
+71ca : 00000000;
+71cb : 00000000;
+71cc : 00000000;
+71cd : 00000000;
+71ce : 00000000;
+71cf : 00000000;
+71d0 : 00000000;
+71d1 : 00000000;
+71d2 : 00000000;
+71d3 : 00000000;
+71d4 : 00000000;
+71d5 : 00000000;
+71d6 : 00000000;
+71d7 : 00000000;
+71d8 : 00000000;
+71d9 : 00000000;
+71da : 00000000;
+71db : 00000000;
+71dc : 00000000;
+71dd : 00000000;
+71de : 00000000;
+71df : 00000000;
+71e0 : 00000000;
+71e1 : 00000000;
+71e2 : 00000000;
+71e3 : 00000000;
+71e4 : 00000000;
+71e5 : 00000000;
+71e6 : 00000000;
+71e7 : 00000000;
+71e8 : 00000000;
+71e9 : 00000000;
+71ea : 00000000;
+71eb : 00000000;
+71ec : 00000000;
+71ed : 00000000;
+71ee : 00000000;
+71ef : 00000000;
+71f0 : 00000000;
+71f1 : 00000000;
+71f2 : 00000000;
+71f3 : 00000000;
+71f4 : 00000000;
+71f5 : 00000000;
+71f6 : 00000000;
+71f7 : 00000000;
+71f8 : 00000000;
+71f9 : 00000000;
+71fa : 00000000;
+71fb : 00000000;
+71fc : 00000000;
+71fd : 00000000;
+71fe : 00000000;
+71ff : 00000000;
+7200 : 00000000;
+7201 : 00000000;
+7202 : 00000000;
+7203 : 00000000;
+7204 : 00000000;
+7205 : 00000000;
+7206 : 00000000;
+7207 : 00000000;
+7208 : 00000000;
+7209 : 00000000;
+720a : 00000000;
+720b : 00000000;
+720c : 00000000;
+720d : 00000000;
+720e : 00000000;
+720f : 00000000;
+7210 : 00000000;
+7211 : 00000000;
+7212 : 00000000;
+7213 : 00000000;
+7214 : 00000000;
+7215 : 00000000;
+7216 : 00000000;
+7217 : 00000000;
+7218 : 00000000;
+7219 : 00000000;
+721a : 00000000;
+721b : 00000000;
+721c : 00000000;
+721d : 00000000;
+721e : 00000000;
+721f : 00000000;
+7220 : 00000000;
+7221 : 00000000;
+7222 : 00000000;
+7223 : 00000000;
+7224 : 00000000;
+7225 : 00000000;
+7226 : 00000000;
+7227 : 00000000;
+7228 : 00000000;
+7229 : 00000000;
+722a : 00000000;
+722b : 00000000;
+722c : 00000000;
+722d : 00000000;
+722e : 00000000;
+722f : 00000000;
+7230 : 00000000;
+7231 : 00000000;
+7232 : 00000000;
+7233 : 00000000;
+7234 : 00000000;
+7235 : 00000000;
+7236 : 00000000;
+7237 : 00000000;
+7238 : 00000000;
+7239 : 00000000;
+723a : 00000000;
+723b : 00000000;
+723c : 00000000;
+723d : 00000000;
+723e : 00000000;
+723f : 00000000;
+7240 : 00000000;
+7241 : 00000000;
+7242 : 00000000;
+7243 : 00000000;
+7244 : 00000000;
+7245 : 00000000;
+7246 : 00000000;
+7247 : 00000000;
+7248 : 00000000;
+7249 : 00000000;
+724a : 00000000;
+724b : 00000000;
+724c : 00000000;
+724d : 00000000;
+724e : 00000000;
+724f : 00000000;
+7250 : 00000000;
+7251 : 00000000;
+7252 : 00000000;
+7253 : 00000000;
+7254 : 00000000;
+7255 : 00000000;
+7256 : 00000000;
+7257 : 00000000;
+7258 : 00000000;
+7259 : 00000000;
+725a : 00000000;
+725b : 00000000;
+725c : 00000000;
+725d : 00000000;
+725e : 00000000;
+725f : 00000000;
+7260 : 00000000;
+7261 : 00000000;
+7262 : 00000000;
+7263 : 00000000;
+7264 : 00000000;
+7265 : 00000000;
+7266 : 00000000;
+7267 : 00000000;
+7268 : 00000000;
+7269 : 00000000;
+726a : 00000000;
+726b : 00000000;
+726c : 00000000;
+726d : 00000000;
+726e : 00000000;
+726f : 00000000;
+7270 : 00000000;
+7271 : 00000000;
+7272 : 00000000;
+7273 : 00000000;
+7274 : 00000000;
+7275 : 00000000;
+7276 : 00000000;
+7277 : 00000000;
+7278 : 00000000;
+7279 : 00000000;
+727a : 00000000;
+727b : 00000000;
+727c : 00000000;
+727d : 00000000;
+727e : 00000000;
+727f : 00000000;
+7280 : 00000000;
+7281 : 00000000;
+7282 : 00000000;
+7283 : 00000000;
+7284 : 00000000;
+7285 : 00000000;
+7286 : 00000000;
+7287 : 00000000;
+7288 : 00000000;
+7289 : 00000000;
+728a : 00000000;
+728b : 00000000;
+728c : 00000000;
+728d : 00000000;
+728e : 00000000;
+728f : 00000000;
+7290 : 00000000;
+7291 : 00000000;
+7292 : 00000000;
+7293 : 00000000;
+7294 : 00000000;
+7295 : 00000000;
+7296 : 00000000;
+7297 : 00000000;
+7298 : 00000000;
+7299 : 00000000;
+729a : 00000000;
+729b : 00000000;
+729c : 00000000;
+729d : 00000000;
+729e : 00000000;
+729f : 00000000;
+72a0 : 00000000;
+72a1 : 00000000;
+72a2 : 00000000;
+72a3 : 00000000;
+72a4 : 00000000;
+72a5 : 00000000;
+72a6 : 00000000;
+72a7 : 00000000;
+72a8 : 00000000;
+72a9 : 00000000;
+72aa : 00000000;
+72ab : 00000000;
+72ac : 00000000;
+72ad : 00000000;
+72ae : 00000000;
+72af : 00000000;
+72b0 : 00000000;
+72b1 : 00000000;
+72b2 : 00000000;
+72b3 : 00000000;
+72b4 : 00000000;
+72b5 : 00000000;
+72b6 : 00000000;
+72b7 : 00000000;
+72b8 : 00000000;
+72b9 : 00000000;
+72ba : 00000000;
+72bb : 00000000;
+72bc : 00000000;
+72bd : 00000000;
+72be : 00000000;
+72bf : 00000000;
+72c0 : 00000000;
+72c1 : 00000000;
+72c2 : 00000000;
+72c3 : 00000000;
+72c4 : 00000000;
+72c5 : 00000000;
+72c6 : 00000000;
+72c7 : 00000000;
+72c8 : 00000000;
+72c9 : 00000000;
+72ca : 00000000;
+72cb : 00000000;
+72cc : 00000000;
+72cd : 00000000;
+72ce : 00000000;
+72cf : 00000000;
+72d0 : 00000000;
+72d1 : 00000000;
+72d2 : 00000000;
+72d3 : 00000000;
+72d4 : 00000000;
+72d5 : 00000000;
+72d6 : 00000000;
+72d7 : 00000000;
+72d8 : 00000000;
+72d9 : 00000000;
+72da : 00000000;
+72db : 00000000;
+72dc : 00000000;
+72dd : 00000000;
+72de : 00000000;
+72df : 00000000;
+72e0 : 00000000;
+72e1 : 00000000;
+72e2 : 00000000;
+72e3 : 00000000;
+72e4 : 00000000;
+72e5 : 00000000;
+72e6 : 00000000;
+72e7 : 00000000;
+72e8 : 00000000;
+72e9 : 00000000;
+72ea : 00000000;
+72eb : 00000000;
+72ec : 00000000;
+72ed : 00000000;
+72ee : 00000000;
+72ef : 00000000;
+72f0 : 00000000;
+72f1 : 00000000;
+72f2 : 00000000;
+72f3 : 00000000;
+72f4 : 00000000;
+72f5 : 00000000;
+72f6 : 00000000;
+72f7 : 00000000;
+72f8 : 00000000;
+72f9 : 00000000;
+72fa : 00000000;
+72fb : 00000000;
+72fc : 00000000;
+72fd : 00000000;
+72fe : 00000000;
+72ff : 00000000;
+7300 : 00000000;
+7301 : 00000000;
+7302 : 00000000;
+7303 : 00000000;
+7304 : 00000000;
+7305 : 00000000;
+7306 : 00000000;
+7307 : 00000000;
+7308 : 00000000;
+7309 : 00000000;
+730a : 00000000;
+730b : 00000000;
+730c : 00000000;
+730d : 00000000;
+730e : 00000000;
+730f : 00000000;
+7310 : 00000000;
+7311 : 00000000;
+7312 : 00000000;
+7313 : 00000000;
+7314 : 00000000;
+7315 : 00000000;
+7316 : 00000000;
+7317 : 00000000;
+7318 : 00000000;
+7319 : 00000000;
+731a : 00000000;
+731b : 00000000;
+731c : 00000000;
+731d : 00000000;
+731e : 00000000;
+731f : 00000000;
+7320 : 00000000;
+7321 : 00000000;
+7322 : 00000000;
+7323 : 00000000;
+7324 : 00000000;
+7325 : 00000000;
+7326 : 00000000;
+7327 : 00000000;
+7328 : 00000000;
+7329 : 00000000;
+732a : 00000000;
+732b : 00000000;
+732c : 00000000;
+732d : 00000000;
+732e : 00000000;
+732f : 00000000;
+7330 : 00000000;
+7331 : 00000000;
+7332 : 00000000;
+7333 : 00000000;
+7334 : 00000000;
+7335 : 00000000;
+7336 : 00000000;
+7337 : 00000000;
+7338 : 00000000;
+7339 : 00000000;
+733a : 00000000;
+733b : 00000000;
+733c : 00000000;
+733d : 00000000;
+733e : 00000000;
+733f : 00000000;
+7340 : 00000000;
+7341 : 00000000;
+7342 : 00000000;
+7343 : 00000000;
+7344 : 00000000;
+7345 : 00000000;
+7346 : 00000000;
+7347 : 00000000;
+7348 : 00000000;
+7349 : 00000000;
+734a : 00000000;
+734b : 00000000;
+734c : 00000000;
+734d : 00000000;
+734e : 00000000;
+734f : 00000000;
+7350 : 00000000;
+7351 : 00000000;
+7352 : 00000000;
+7353 : 00000000;
+7354 : 00000000;
+7355 : 00000000;
+7356 : 00000000;
+7357 : 00000000;
+7358 : 00000000;
+7359 : 00000000;
+735a : 00000000;
+735b : 00000000;
+735c : 00000000;
+735d : 00000000;
+735e : 00000000;
+735f : 00000000;
+7360 : 00000000;
+7361 : 00000000;
+7362 : 00000000;
+7363 : 00000000;
+7364 : 00000000;
+7365 : 00000000;
+7366 : 00000000;
+7367 : 00000000;
+7368 : 00000000;
+7369 : 00000000;
+736a : 00000000;
+736b : 00000000;
+736c : 00000000;
+736d : 00000000;
+736e : 00000000;
+736f : 00000000;
+7370 : 00000000;
+7371 : 00000000;
+7372 : 00000000;
+7373 : 00000000;
+7374 : 00000000;
+7375 : 00000000;
+7376 : 00000000;
+7377 : 00000000;
+7378 : 00000000;
+7379 : 00000000;
+737a : 00000000;
+737b : 00000000;
+737c : 00000000;
+737d : 00000000;
+737e : 00000000;
+737f : 00000000;
+7380 : 00000000;
+7381 : 00000000;
+7382 : 00000000;
+7383 : 00000000;
+7384 : 00000000;
+7385 : 00000000;
+7386 : 00000000;
+7387 : 00000000;
+7388 : 00000000;
+7389 : 00000000;
+738a : 00000000;
+738b : 00000000;
+738c : 00000000;
+738d : 00000000;
+738e : 00000000;
+738f : 00000000;
+7390 : 00000000;
+7391 : 00000000;
+7392 : 00000000;
+7393 : 00000000;
+7394 : 00000000;
+7395 : 00000000;
+7396 : 00000000;
+7397 : 00000000;
+7398 : 00000000;
+7399 : 00000000;
+739a : 00000000;
+739b : 00000000;
+739c : 00000000;
+739d : 00000000;
+739e : 00000000;
+739f : 00000000;
+73a0 : 00000000;
+73a1 : 00000000;
+73a2 : 00000000;
+73a3 : 00000000;
+73a4 : 00000000;
+73a5 : 00000000;
+73a6 : 00000000;
+73a7 : 00000000;
+73a8 : 00000000;
+73a9 : 00000000;
+73aa : 00000000;
+73ab : 00000000;
+73ac : 00000000;
+73ad : 00000000;
+73ae : 00000000;
+73af : 00000000;
+73b0 : 00000000;
+73b1 : 00000000;
+73b2 : 00000000;
+73b3 : 00000000;
+73b4 : 00000000;
+73b5 : 00000000;
+73b6 : 00000000;
+73b7 : 00000000;
+73b8 : 00000000;
+73b9 : 00000000;
+73ba : 00000000;
+73bb : 00000000;
+73bc : 00000000;
+73bd : 00000000;
+73be : 00000000;
+73bf : 00000000;
+73c0 : 00000000;
+73c1 : 00000000;
+73c2 : 00000000;
+73c3 : 00000000;
+73c4 : 00000000;
+73c5 : 00000000;
+73c6 : 00000000;
+73c7 : 00000000;
+73c8 : 00000000;
+73c9 : 00000000;
+73ca : 00000000;
+73cb : 00000000;
+73cc : 00000000;
+73cd : 00000000;
+73ce : 00000000;
+73cf : 00000000;
+73d0 : 00000000;
+73d1 : 00000000;
+73d2 : 00000000;
+73d3 : 00000000;
+73d4 : 00000000;
+73d5 : 00000000;
+73d6 : 00000000;
+73d7 : 00000000;
+73d8 : 00000000;
+73d9 : 00000000;
+73da : 00000000;
+73db : 00000000;
+73dc : 00000000;
+73dd : 00000000;
+73de : 00000000;
+73df : 00000000;
+73e0 : 00000000;
+73e1 : 00000000;
+73e2 : 00000000;
+73e3 : 00000000;
+73e4 : 00000000;
+73e5 : 00000000;
+73e6 : 00000000;
+73e7 : 00000000;
+73e8 : 00000000;
+73e9 : 00000000;
+73ea : 00000000;
+73eb : 00000000;
+73ec : 00000000;
+73ed : 00000000;
+73ee : 00000000;
+73ef : 00000000;
+73f0 : 00000000;
+73f1 : 00000000;
+73f2 : 00000000;
+73f3 : 00000000;
+73f4 : 00000000;
+73f5 : 00000000;
+73f6 : 00000000;
+73f7 : 00000000;
+73f8 : 00000000;
+73f9 : 00000000;
+73fa : 00000000;
+73fb : 00000000;
+73fc : 00000000;
+73fd : 00000000;
+73fe : 00000000;
+73ff : 00000000;
+7400 : 00000000;
+7401 : 00000000;
+7402 : 00000000;
+7403 : 00000000;
+7404 : 00000000;
+7405 : 00000000;
+7406 : 00000000;
+7407 : 00000000;
+7408 : 00000000;
+7409 : 00000000;
+740a : 00000000;
+740b : 00000000;
+740c : 00000000;
+740d : 00000000;
+740e : 00000000;
+740f : 00000000;
+7410 : 00000000;
+7411 : 00000000;
+7412 : 00000000;
+7413 : 00000000;
+7414 : 00000000;
+7415 : 00000000;
+7416 : 00000000;
+7417 : 00000000;
+7418 : 00000000;
+7419 : 00000000;
+741a : 00000000;
+741b : 00000000;
+741c : 00000000;
+741d : 00000000;
+741e : 00000000;
+741f : 00000000;
+7420 : 00000000;
+7421 : 00000000;
+7422 : 00000000;
+7423 : 00000000;
+7424 : 00000000;
+7425 : 00000000;
+7426 : 00000000;
+7427 : 00000000;
+7428 : 00000000;
+7429 : 00000000;
+742a : 00000000;
+742b : 00000000;
+742c : 00000000;
+742d : 00000000;
+742e : 00000000;
+742f : 00000000;
+7430 : 00000000;
+7431 : 00000000;
+7432 : 00000000;
+7433 : 00000000;
+7434 : 00000000;
+7435 : 00000000;
+7436 : 00000000;
+7437 : 00000000;
+7438 : 00000000;
+7439 : 00000000;
+743a : 00000000;
+743b : 00000000;
+743c : 00000000;
+743d : 00000000;
+743e : 00000000;
+743f : 00000000;
+7440 : 00000000;
+7441 : 00000000;
+7442 : 00000000;
+7443 : 00000000;
+7444 : 00000000;
+7445 : 00000000;
+7446 : 00000000;
+7447 : 00000000;
+7448 : 00000000;
+7449 : 00000000;
+744a : 00000000;
+744b : 00000000;
+744c : 00000000;
+744d : 00000000;
+744e : 00000000;
+744f : 00000000;
+7450 : 00000000;
+7451 : 00000000;
+7452 : 00000000;
+7453 : 00000000;
+7454 : 00000000;
+7455 : 00000000;
+7456 : 00000000;
+7457 : 00000000;
+7458 : 00000000;
+7459 : 00000000;
+745a : 00000000;
+745b : 00000000;
+745c : 00000000;
+745d : 00000000;
+745e : 00000000;
+745f : 00000000;
+7460 : 00000000;
+7461 : 00000000;
+7462 : 00000000;
+7463 : 00000000;
+7464 : 00000000;
+7465 : 00000000;
+7466 : 00000000;
+7467 : 00000000;
+7468 : 00000000;
+7469 : 00000000;
+746a : 00000000;
+746b : 00000000;
+746c : 00000000;
+746d : 00000000;
+746e : 00000000;
+746f : 00000000;
+7470 : 00000000;
+7471 : 00000000;
+7472 : 00000000;
+7473 : 00000000;
+7474 : 00000000;
+7475 : 00000000;
+7476 : 00000000;
+7477 : 00000000;
+7478 : 00000000;
+7479 : 00000000;
+747a : 00000000;
+747b : 00000000;
+747c : 00000000;
+747d : 00000000;
+747e : 00000000;
+747f : 00000000;
+7480 : 00000000;
+7481 : 00000000;
+7482 : 00000000;
+7483 : 00000000;
+7484 : 00000000;
+7485 : 00000000;
+7486 : 00000000;
+7487 : 00000000;
+7488 : 00000000;
+7489 : 00000000;
+748a : 00000000;
+748b : 00000000;
+748c : 00000000;
+748d : 00000000;
+748e : 00000000;
+748f : 00000000;
+7490 : 00000000;
+7491 : 00000000;
+7492 : 00000000;
+7493 : 00000000;
+7494 : 00000000;
+7495 : 00000000;
+7496 : 00000000;
+7497 : 00000000;
+7498 : 00000000;
+7499 : 00000000;
+749a : 00000000;
+749b : 00000000;
+749c : 00000000;
+749d : 00000000;
+749e : 00000000;
+749f : 00000000;
+74a0 : 00000000;
+74a1 : 00000000;
+74a2 : 00000000;
+74a3 : 00000000;
+74a4 : 00000000;
+74a5 : 00000000;
+74a6 : 00000000;
+74a7 : 00000000;
+74a8 : 00000000;
+74a9 : 00000000;
+74aa : 00000000;
+74ab : 00000000;
+74ac : 00000000;
+74ad : 00000000;
+74ae : 00000000;
+74af : 00000000;
+74b0 : 00000000;
+74b1 : 00000000;
+74b2 : 00000000;
+74b3 : 00000000;
+74b4 : 00000000;
+74b5 : 00000000;
+74b6 : 00000000;
+74b7 : 00000000;
+74b8 : 00000000;
+74b9 : 00000000;
+74ba : 00000000;
+74bb : 00000000;
+74bc : 00000000;
+74bd : 00000000;
+74be : 00000000;
+74bf : 00000000;
+74c0 : 00000000;
+74c1 : 00000000;
+74c2 : 00000000;
+74c3 : 00000000;
+74c4 : 00000000;
+74c5 : 00000000;
+74c6 : 00000000;
+74c7 : 00000000;
+74c8 : 00000000;
+74c9 : 00000000;
+74ca : 00000000;
+74cb : 00000000;
+74cc : 00000000;
+74cd : 00000000;
+74ce : 00000000;
+74cf : 00000000;
+74d0 : 00000000;
+74d1 : 00000000;
+74d2 : 00000000;
+74d3 : 00000000;
+74d4 : 00000000;
+74d5 : 00000000;
+74d6 : 00000000;
+74d7 : 00000000;
+74d8 : 00000000;
+74d9 : 00000000;
+74da : 00000000;
+74db : 00000000;
+74dc : 00000000;
+74dd : 00000000;
+74de : 00000000;
+74df : 00000000;
+74e0 : 00000000;
+74e1 : 00000000;
+74e2 : 00000000;
+74e3 : 00000000;
+74e4 : 00000000;
+74e5 : 00000000;
+74e6 : 00000000;
+74e7 : 00000000;
+74e8 : 00000000;
+74e9 : 00000000;
+74ea : 00000000;
+74eb : 00000000;
+74ec : 00000000;
+74ed : 00000000;
+74ee : 00000000;
+74ef : 00000000;
+74f0 : 00000000;
+74f1 : 00000000;
+74f2 : 00000000;
+74f3 : 00000000;
+74f4 : 00000000;
+74f5 : 00000000;
+74f6 : 00000000;
+74f7 : 00000000;
+74f8 : 00000000;
+74f9 : 00000000;
+74fa : 00000000;
+74fb : 00000000;
+74fc : 00000000;
+74fd : 00000000;
+74fe : 00000000;
+74ff : 00000000;
+7500 : 00000000;
+7501 : 00000000;
+7502 : 00000000;
+7503 : 00000000;
+7504 : 00000000;
+7505 : 00000000;
+7506 : 00000000;
+7507 : 00000000;
+7508 : 00000000;
+7509 : 00000000;
+750a : 00000000;
+750b : 00000000;
+750c : 00000000;
+750d : 00000000;
+750e : 00000000;
+750f : 00000000;
+7510 : 00000000;
+7511 : 00000000;
+7512 : 00000000;
+7513 : 00000000;
+7514 : 00000000;
+7515 : 00000000;
+7516 : 00000000;
+7517 : 00000000;
+7518 : 00000000;
+7519 : 00000000;
+751a : 00000000;
+751b : 00000000;
+751c : 00000000;
+751d : 00000000;
+751e : 00000000;
+751f : 00000000;
+7520 : 00000000;
+7521 : 00000000;
+7522 : 00000000;
+7523 : 00000000;
+7524 : 00000000;
+7525 : 00000000;
+7526 : 00000000;
+7527 : 00000000;
+7528 : 00000000;
+7529 : 00000000;
+752a : 00000000;
+752b : 00000000;
+752c : 00000000;
+752d : 00000000;
+752e : 00000000;
+752f : 00000000;
+7530 : 00000000;
+7531 : 00000000;
+7532 : 00000000;
+7533 : 00000000;
+7534 : 00000000;
+7535 : 00000000;
+7536 : 00000000;
+7537 : 00000000;
+7538 : 00000000;
+7539 : 00000000;
+753a : 00000000;
+753b : 00000000;
+753c : 00000000;
+753d : 00000000;
+753e : 00000000;
+753f : 00000000;
+7540 : 00000000;
+7541 : 00000000;
+7542 : 00000000;
+7543 : 00000000;
+7544 : 00000000;
+7545 : 00000000;
+7546 : 00000000;
+7547 : 00000000;
+7548 : 00000000;
+7549 : 00000000;
+754a : 00000000;
+754b : 00000000;
+754c : 00000000;
+754d : 00000000;
+754e : 00000000;
+754f : 00000000;
+7550 : 00000000;
+7551 : 00000000;
+7552 : 00000000;
+7553 : 00000000;
+7554 : 00000000;
+7555 : 00000000;
+7556 : 00000000;
+7557 : 00000000;
+7558 : 00000000;
+7559 : 00000000;
+755a : 00000000;
+755b : 00000000;
+755c : 00000000;
+755d : 00000000;
+755e : 00000000;
+755f : 00000000;
+7560 : 00000000;
+7561 : 00000000;
+7562 : 00000000;
+7563 : 00000000;
+7564 : 00000000;
+7565 : 00000000;
+7566 : 00000000;
+7567 : 00000000;
+7568 : 00000000;
+7569 : 00000000;
+756a : 00000000;
+756b : 00000000;
+756c : 00000000;
+756d : 00000000;
+756e : 00000000;
+756f : 00000000;
+7570 : 00000000;
+7571 : 00000000;
+7572 : 00000000;
+7573 : 00000000;
+7574 : 00000000;
+7575 : 00000000;
+7576 : 00000000;
+7577 : 00000000;
+7578 : 00000000;
+7579 : 00000000;
+757a : 00000000;
+757b : 00000000;
+757c : 00000000;
+757d : 00000000;
+757e : 00000000;
+757f : 00000000;
+7580 : 00000000;
+7581 : 00000000;
+7582 : 00000000;
+7583 : 00000000;
+7584 : 00000000;
+7585 : 00000000;
+7586 : 00000000;
+7587 : 00000000;
+7588 : 00000000;
+7589 : 00000000;
+758a : 00000000;
+758b : 00000000;
+758c : 00000000;
+758d : 00000000;
+758e : 00000000;
+758f : 00000000;
+7590 : 00000000;
+7591 : 00000000;
+7592 : 00000000;
+7593 : 00000000;
+7594 : 00000000;
+7595 : 00000000;
+7596 : 00000000;
+7597 : 00000000;
+7598 : 00000000;
+7599 : 00000000;
+759a : 00000000;
+759b : 00000000;
+759c : 00000000;
+759d : 00000000;
+759e : 00000000;
+759f : 00000000;
+75a0 : 00000000;
+75a1 : 00000000;
+75a2 : 00000000;
+75a3 : 00000000;
+75a4 : 00000000;
+75a5 : 00000000;
+75a6 : 00000000;
+75a7 : 00000000;
+75a8 : 00000000;
+75a9 : 00000000;
+75aa : 00000000;
+75ab : 00000000;
+75ac : 00000000;
+75ad : 00000000;
+75ae : 00000000;
+75af : 00000000;
+75b0 : 00000000;
+75b1 : 00000000;
+75b2 : 00000000;
+75b3 : 00000000;
+75b4 : 00000000;
+75b5 : 00000000;
+75b6 : 00000000;
+75b7 : 00000000;
+75b8 : 00000000;
+75b9 : 00000000;
+75ba : 00000000;
+75bb : 00000000;
+75bc : 00000000;
+75bd : 00000000;
+75be : 00000000;
+75bf : 00000000;
+75c0 : 00000000;
+75c1 : 00000000;
+75c2 : 00000000;
+75c3 : 00000000;
+75c4 : 00000000;
+75c5 : 00000000;
+75c6 : 00000000;
+75c7 : 00000000;
+75c8 : 00000000;
+75c9 : 00000000;
+75ca : 00000000;
+75cb : 00000000;
+75cc : 00000000;
+75cd : 00000000;
+75ce : 00000000;
+75cf : 00000000;
+75d0 : 00000000;
+75d1 : 00000000;
+75d2 : 00000000;
+75d3 : 00000000;
+75d4 : 00000000;
+75d5 : 00000000;
+75d6 : 00000000;
+75d7 : 00000000;
+75d8 : 00000000;
+75d9 : 00000000;
+75da : 00000000;
+75db : 00000000;
+75dc : 00000000;
+75dd : 00000000;
+75de : 00000000;
+75df : 00000000;
+75e0 : 00000000;
+75e1 : 00000000;
+75e2 : 00000000;
+75e3 : 00000000;
+75e4 : 00000000;
+75e5 : 00000000;
+75e6 : 00000000;
+75e7 : 00000000;
+75e8 : 00000000;
+75e9 : 00000000;
+75ea : 00000000;
+75eb : 00000000;
+75ec : 00000000;
+75ed : 00000000;
+75ee : 00000000;
+75ef : 00000000;
+75f0 : 00000000;
+75f1 : 00000000;
+75f2 : 00000000;
+75f3 : 00000000;
+75f4 : 00000000;
+75f5 : 00000000;
+75f6 : 00000000;
+75f7 : 00000000;
+75f8 : 00000000;
+75f9 : 00000000;
+75fa : 00000000;
+75fb : 00000000;
+75fc : 00000000;
+75fd : 00000000;
+75fe : 00000000;
+75ff : 00000000;
+7600 : 00000000;
+7601 : 00000000;
+7602 : 00000000;
+7603 : 00000000;
+7604 : 00000000;
+7605 : 00000000;
+7606 : 00000000;
+7607 : 00000000;
+7608 : 00000000;
+7609 : 00000000;
+760a : 00000000;
+760b : 00000000;
+760c : 00000000;
+760d : 00000000;
+760e : 00000000;
+760f : 00000000;
+7610 : 00000000;
+7611 : 00000000;
+7612 : 00000000;
+7613 : 00000000;
+7614 : 00000000;
+7615 : 00000000;
+7616 : 00000000;
+7617 : 00000000;
+7618 : 00000000;
+7619 : 00000000;
+761a : 00000000;
+761b : 00000000;
+761c : 00000000;
+761d : 00000000;
+761e : 00000000;
+761f : 00000000;
+7620 : 00000000;
+7621 : 00000000;
+7622 : 00000000;
+7623 : 00000000;
+7624 : 00000000;
+7625 : 00000000;
+7626 : 00000000;
+7627 : 00000000;
+7628 : 00000000;
+7629 : 00000000;
+762a : 00000000;
+762b : 00000000;
+762c : 00000000;
+762d : 00000000;
+762e : 00000000;
+762f : 00000000;
+7630 : 00000000;
+7631 : 00000000;
+7632 : 00000000;
+7633 : 00000000;
+7634 : 00000000;
+7635 : 00000000;
+7636 : 00000000;
+7637 : 00000000;
+7638 : 00000000;
+7639 : 00000000;
+763a : 00000000;
+763b : 00000000;
+763c : 00000000;
+763d : 00000000;
+763e : 00000000;
+763f : 00000000;
+7640 : 00000000;
+7641 : 00000000;
+7642 : 00000000;
+7643 : 00000000;
+7644 : 00000000;
+7645 : 00000000;
+7646 : 00000000;
+7647 : 00000000;
+7648 : 00000000;
+7649 : 00000000;
+764a : 00000000;
+764b : 00000000;
+764c : 00000000;
+764d : 00000000;
+764e : 00000000;
+764f : 00000000;
+7650 : 00000000;
+7651 : 00000000;
+7652 : 00000000;
+7653 : 00000000;
+7654 : 00000000;
+7655 : 00000000;
+7656 : 00000000;
+7657 : 00000000;
+7658 : 00000000;
+7659 : 00000000;
+765a : 00000000;
+765b : 00000000;
+765c : 00000000;
+765d : 00000000;
+765e : 00000000;
+765f : 00000000;
+7660 : 00000000;
+7661 : 00000000;
+7662 : 00000000;
+7663 : 00000000;
+7664 : 00000000;
+7665 : 00000000;
+7666 : 00000000;
+7667 : 00000000;
+7668 : 00000000;
+7669 : 00000000;
+766a : 00000000;
+766b : 00000000;
+766c : 00000000;
+766d : 00000000;
+766e : 00000000;
+766f : 00000000;
+7670 : 00000000;
+7671 : 00000000;
+7672 : 00000000;
+7673 : 00000000;
+7674 : 00000000;
+7675 : 00000000;
+7676 : 00000000;
+7677 : 00000000;
+7678 : 00000000;
+7679 : 00000000;
+767a : 00000000;
+767b : 00000000;
+767c : 00000000;
+767d : 00000000;
+767e : 00000000;
+767f : 00000000;
+7680 : 00000000;
+7681 : 00000000;
+7682 : 00000000;
+7683 : 00000000;
+7684 : 00000000;
+7685 : 00000000;
+7686 : 00000000;
+7687 : 00000000;
+7688 : 00000000;
+7689 : 00000000;
+768a : 00000000;
+768b : 00000000;
+768c : 00000000;
+768d : 00000000;
+768e : 00000000;
+768f : 00000000;
+7690 : 00000000;
+7691 : 00000000;
+7692 : 00000000;
+7693 : 00000000;
+7694 : 00000000;
+7695 : 00000000;
+7696 : 00000000;
+7697 : 00000000;
+7698 : 00000000;
+7699 : 00000000;
+769a : 00000000;
+769b : 00000000;
+769c : 00000000;
+769d : 00000000;
+769e : 00000000;
+769f : 00000000;
+76a0 : 00000000;
+76a1 : 00000000;
+76a2 : 00000000;
+76a3 : 00000000;
+76a4 : 00000000;
+76a5 : 00000000;
+76a6 : 00000000;
+76a7 : 00000000;
+76a8 : 00000000;
+76a9 : 00000000;
+76aa : 00000000;
+76ab : 00000000;
+76ac : 00000000;
+76ad : 00000000;
+76ae : 00000000;
+76af : 00000000;
+76b0 : 00000000;
+76b1 : 00000000;
+76b2 : 00000000;
+76b3 : 00000000;
+76b4 : 00000000;
+76b5 : 00000000;
+76b6 : 00000000;
+76b7 : 00000000;
+76b8 : 00000000;
+76b9 : 00000000;
+76ba : 00000000;
+76bb : 00000000;
+76bc : 00000000;
+76bd : 00000000;
+76be : 00000000;
+76bf : 00000000;
+76c0 : 00000000;
+76c1 : 00000000;
+76c2 : 00000000;
+76c3 : 00000000;
+76c4 : 00000000;
+76c5 : 00000000;
+76c6 : 00000000;
+76c7 : 00000000;
+76c8 : 00000000;
+76c9 : 00000000;
+76ca : 00000000;
+76cb : 00000000;
+76cc : 00000000;
+76cd : 00000000;
+76ce : 00000000;
+76cf : 00000000;
+76d0 : 00000000;
+76d1 : 00000000;
+76d2 : 00000000;
+76d3 : 00000000;
+76d4 : 00000000;
+76d5 : 00000000;
+76d6 : 00000000;
+76d7 : 00000000;
+76d8 : 00000000;
+76d9 : 00000000;
+76da : 00000000;
+76db : 00000000;
+76dc : 00000000;
+76dd : 00000000;
+76de : 00000000;
+76df : 00000000;
+76e0 : 00000000;
+76e1 : 00000000;
+76e2 : 00000000;
+76e3 : 00000000;
+76e4 : 00000000;
+76e5 : 00000000;
+76e6 : 00000000;
+76e7 : 00000000;
+76e8 : 00000000;
+76e9 : 00000000;
+76ea : 00000000;
+76eb : 00000000;
+76ec : 00000000;
+76ed : 00000000;
+76ee : 00000000;
+76ef : 00000000;
+76f0 : 00000000;
+76f1 : 00000000;
+76f2 : 00000000;
+76f3 : 00000000;
+76f4 : 00000000;
+76f5 : 00000000;
+76f6 : 00000000;
+76f7 : 00000000;
+76f8 : 00000000;
+76f9 : 00000000;
+76fa : 00000000;
+76fb : 00000000;
+76fc : 00000000;
+76fd : 00000000;
+76fe : 00000000;
+76ff : 00000000;
+7700 : 00000000;
+7701 : 00000000;
+7702 : 00000000;
+7703 : 00000000;
+7704 : 00000000;
+7705 : 00000000;
+7706 : 00000000;
+7707 : 00000000;
+7708 : 00000000;
+7709 : 00000000;
+770a : 00000000;
+770b : 00000000;
+770c : 00000000;
+770d : 00000000;
+770e : 00000000;
+770f : 00000000;
+7710 : 00000000;
+7711 : 00000000;
+7712 : 00000000;
+7713 : 00000000;
+7714 : 00000000;
+7715 : 00000000;
+7716 : 00000000;
+7717 : 00000000;
+7718 : 00000000;
+7719 : 00000000;
+771a : 00000000;
+771b : 00000000;
+771c : 00000000;
+771d : 00000000;
+771e : 00000000;
+771f : 00000000;
+7720 : 00000000;
+7721 : 00000000;
+7722 : 00000000;
+7723 : 00000000;
+7724 : 00000000;
+7725 : 00000000;
+7726 : 00000000;
+7727 : 00000000;
+7728 : 00000000;
+7729 : 00000000;
+772a : 00000000;
+772b : 00000000;
+772c : 00000000;
+772d : 00000000;
+772e : 00000000;
+772f : 00000000;
+7730 : 00000000;
+7731 : 00000000;
+7732 : 00000000;
+7733 : 00000000;
+7734 : 00000000;
+7735 : 00000000;
+7736 : 00000000;
+7737 : 00000000;
+7738 : 00000000;
+7739 : 00000000;
+773a : 00000000;
+773b : 00000000;
+773c : 00000000;
+773d : 00000000;
+773e : 00000000;
+773f : 00000000;
+7740 : 00000000;
+7741 : 00000000;
+7742 : 00000000;
+7743 : 00000000;
+7744 : 00000000;
+7745 : 00000000;
+7746 : 00000000;
+7747 : 00000000;
+7748 : 00000000;
+7749 : 00000000;
+774a : 00000000;
+774b : 00000000;
+774c : 00000000;
+774d : 00000000;
+774e : 00000000;
+774f : 00000000;
+7750 : 00000000;
+7751 : 00000000;
+7752 : 00000000;
+7753 : 00000000;
+7754 : 00000000;
+7755 : 00000000;
+7756 : 00000000;
+7757 : 00000000;
+7758 : 00000000;
+7759 : 00000000;
+775a : 00000000;
+775b : 00000000;
+775c : 00000000;
+775d : 00000000;
+775e : 00000000;
+775f : 00000000;
+7760 : 00000000;
+7761 : 00000000;
+7762 : 00000000;
+7763 : 00000000;
+7764 : 00000000;
+7765 : 00000000;
+7766 : 00000000;
+7767 : 00000000;
+7768 : 00000000;
+7769 : 00000000;
+776a : 00000000;
+776b : 00000000;
+776c : 00000000;
+776d : 00000000;
+776e : 00000000;
+776f : 00000000;
+7770 : 00000000;
+7771 : 00000000;
+7772 : 00000000;
+7773 : 00000000;
+7774 : 00000000;
+7775 : 00000000;
+7776 : 00000000;
+7777 : 00000000;
+7778 : 00000000;
+7779 : 00000000;
+777a : 00000000;
+777b : 00000000;
+777c : 00000000;
+777d : 00000000;
+777e : 00000000;
+777f : 00000000;
+7780 : 00000000;
+7781 : 00000000;
+7782 : 00000000;
+7783 : 00000000;
+7784 : 00000000;
+7785 : 00000000;
+7786 : 00000000;
+7787 : 00000000;
+7788 : 00000000;
+7789 : 00000000;
+778a : 00000000;
+778b : 00000000;
+778c : 00000000;
+778d : 00000000;
+778e : 00000000;
+778f : 00000000;
+7790 : 00000000;
+7791 : 00000000;
+7792 : 00000000;
+7793 : 00000000;
+7794 : 00000000;
+7795 : 00000000;
+7796 : 00000000;
+7797 : 00000000;
+7798 : 00000000;
+7799 : 00000000;
+779a : 00000000;
+779b : 00000000;
+779c : 00000000;
+779d : 00000000;
+779e : 00000000;
+779f : 00000000;
+77a0 : 00000000;
+77a1 : 00000000;
+77a2 : 00000000;
+77a3 : 00000000;
+77a4 : 00000000;
+77a5 : 00000000;
+77a6 : 00000000;
+77a7 : 00000000;
+77a8 : 00000000;
+77a9 : 00000000;
+77aa : 00000000;
+77ab : 00000000;
+77ac : 00000000;
+77ad : 00000000;
+77ae : 00000000;
+77af : 00000000;
+77b0 : 00000000;
+77b1 : 00000000;
+77b2 : 00000000;
+77b3 : 00000000;
+77b4 : 00000000;
+77b5 : 00000000;
+77b6 : 00000000;
+77b7 : 00000000;
+77b8 : 00000000;
+77b9 : 00000000;
+77ba : 00000000;
+77bb : 00000000;
+77bc : 00000000;
+77bd : 00000000;
+77be : 00000000;
+77bf : 00000000;
+77c0 : 00000000;
+77c1 : 00000000;
+77c2 : 00000000;
+77c3 : 00000000;
+77c4 : 00000000;
+77c5 : 00000000;
+77c6 : 00000000;
+77c7 : 00000000;
+77c8 : 00000000;
+77c9 : 00000000;
+77ca : 00000000;
+77cb : 00000000;
+77cc : 00000000;
+77cd : 00000000;
+77ce : 00000000;
+77cf : 00000000;
+77d0 : 00000000;
+77d1 : 00000000;
+77d2 : 00000000;
+77d3 : 00000000;
+77d4 : 00000000;
+77d5 : 00000000;
+77d6 : 00000000;
+77d7 : 00000000;
+77d8 : 00000000;
+77d9 : 00000000;
+77da : 00000000;
+77db : 00000000;
+77dc : 00000000;
+77dd : 00000000;
+77de : 00000000;
+77df : 00000000;
+77e0 : 00000000;
+77e1 : 00000000;
+77e2 : 00000000;
+77e3 : 00000000;
+77e4 : 00000000;
+77e5 : 00000000;
+77e6 : 00000000;
+77e7 : 00000000;
+77e8 : 00000000;
+77e9 : 00000000;
+77ea : 00000000;
+77eb : 00000000;
+77ec : 00000000;
+77ed : 00000000;
+77ee : 00000000;
+77ef : 00000000;
+77f0 : 00000000;
+77f1 : 00000000;
+77f2 : 00000000;
+77f3 : 00000000;
+77f4 : 00000000;
+77f5 : 00000000;
+77f6 : 00000000;
+77f7 : 00000000;
+77f8 : 00000000;
+77f9 : 00000000;
+77fa : 00000000;
+77fb : 00000000;
+77fc : 00000000;
+77fd : 00000000;
+77fe : 00000000;
+77ff : 00000000;
+7800 : 00000000;
+7801 : 00000000;
+7802 : 00000000;
+7803 : 00000000;
+7804 : 00000000;
+7805 : 00000000;
+7806 : 00000000;
+7807 : 00000000;
+7808 : 00000000;
+7809 : 00000000;
+780a : 00000000;
+780b : 00000000;
+780c : 00000000;
+780d : 00000000;
+780e : 00000000;
+780f : 00000000;
+7810 : 00000000;
+7811 : 00000000;
+7812 : 00000000;
+7813 : 00000000;
+7814 : 00000000;
+7815 : 00000000;
+7816 : 00000000;
+7817 : 00000000;
+7818 : 00000000;
+7819 : 00000000;
+781a : 00000000;
+781b : 00000000;
+781c : 00000000;
+781d : 00000000;
+781e : 00000000;
+781f : 00000000;
+7820 : 00000000;
+7821 : 00000000;
+7822 : 00000000;
+7823 : 00000000;
+7824 : 00000000;
+7825 : 00000000;
+7826 : 00000000;
+7827 : 00000000;
+7828 : 00000000;
+7829 : 00000000;
+782a : 00000000;
+782b : 00000000;
+782c : 00000000;
+782d : 00000000;
+782e : 00000000;
+782f : 00000000;
+7830 : 00000000;
+7831 : 00000000;
+7832 : 00000000;
+7833 : 00000000;
+7834 : 00000000;
+7835 : 00000000;
+7836 : 00000000;
+7837 : 00000000;
+7838 : 00000000;
+7839 : 00000000;
+783a : 00000000;
+783b : 00000000;
+783c : 00000000;
+783d : 00000000;
+783e : 00000000;
+783f : 00000000;
+7840 : 00000000;
+7841 : 00000000;
+7842 : 00000000;
+7843 : 00000000;
+7844 : 00000000;
+7845 : 00000000;
+7846 : 00000000;
+7847 : 00000000;
+7848 : 00000000;
+7849 : 00000000;
+784a : 00000000;
+784b : 00000000;
+784c : 00000000;
+784d : 00000000;
+784e : 00000000;
+784f : 00000000;
+7850 : 00000000;
+7851 : 00000000;
+7852 : 00000000;
+7853 : 00000000;
+7854 : 00000000;
+7855 : 00000000;
+7856 : 00000000;
+7857 : 00000000;
+7858 : 00000000;
+7859 : 00000000;
+785a : 00000000;
+785b : 00000000;
+785c : 00000000;
+785d : 00000000;
+785e : 00000000;
+785f : 00000000;
+7860 : 00000000;
+7861 : 00000000;
+7862 : 00000000;
+7863 : 00000000;
+7864 : 00000000;
+7865 : 00000000;
+7866 : 00000000;
+7867 : 00000000;
+7868 : 00000000;
+7869 : 00000000;
+786a : 00000000;
+786b : 00000000;
+786c : 00000000;
+786d : 00000000;
+786e : 00000000;
+786f : 00000000;
+7870 : 00000000;
+7871 : 00000000;
+7872 : 00000000;
+7873 : 00000000;
+7874 : 00000000;
+7875 : 00000000;
+7876 : 00000000;
+7877 : 00000000;
+7878 : 00000000;
+7879 : 00000000;
+787a : 00000000;
+787b : 00000000;
+787c : 00000000;
+787d : 00000000;
+787e : 00000000;
+787f : 00000000;
+7880 : 00000000;
+7881 : 00000000;
+7882 : 00000000;
+7883 : 00000000;
+7884 : 00000000;
+7885 : 00000000;
+7886 : 00000000;
+7887 : 00000000;
+7888 : 00000000;
+7889 : 00000000;
+788a : 00000000;
+788b : 00000000;
+788c : 00000000;
+788d : 00000000;
+788e : 00000000;
+788f : 00000000;
+7890 : 00000000;
+7891 : 00000000;
+7892 : 00000000;
+7893 : 00000000;
+7894 : 00000000;
+7895 : 00000000;
+7896 : 00000000;
+7897 : 00000000;
+7898 : 00000000;
+7899 : 00000000;
+789a : 00000000;
+789b : 00000000;
+789c : 00000000;
+789d : 00000000;
+789e : 00000000;
+789f : 00000000;
+78a0 : 00000000;
+78a1 : 00000000;
+78a2 : 00000000;
+78a3 : 00000000;
+78a4 : 00000000;
+78a5 : 00000000;
+78a6 : 00000000;
+78a7 : 00000000;
+78a8 : 00000000;
+78a9 : 00000000;
+78aa : 00000000;
+78ab : 00000000;
+78ac : 00000000;
+78ad : 00000000;
+78ae : 00000000;
+78af : 00000000;
+78b0 : 00000000;
+78b1 : 00000000;
+78b2 : 00000000;
+78b3 : 00000000;
+78b4 : 00000000;
+78b5 : 00000000;
+78b6 : 00000000;
+78b7 : 00000000;
+78b8 : 00000000;
+78b9 : 00000000;
+78ba : 00000000;
+78bb : 00000000;
+78bc : 00000000;
+78bd : 00000000;
+78be : 00000000;
+78bf : 00000000;
+78c0 : 00000000;
+78c1 : 00000000;
+78c2 : 00000000;
+78c3 : 00000000;
+78c4 : 00000000;
+78c5 : 00000000;
+78c6 : 00000000;
+78c7 : 00000000;
+78c8 : 00000000;
+78c9 : 00000000;
+78ca : 00000000;
+78cb : 00000000;
+78cc : 00000000;
+78cd : 00000000;
+78ce : 00000000;
+78cf : 00000000;
+78d0 : 00000000;
+78d1 : 00000000;
+78d2 : 00000000;
+78d3 : 00000000;
+78d4 : 00000000;
+78d5 : 00000000;
+78d6 : 00000000;
+78d7 : 00000000;
+78d8 : 00000000;
+78d9 : 00000000;
+78da : 00000000;
+78db : 00000000;
+78dc : 00000000;
+78dd : 00000000;
+78de : 00000000;
+78df : 00000000;
+78e0 : 00000000;
+78e1 : 00000000;
+78e2 : 00000000;
+78e3 : 00000000;
+78e4 : 00000000;
+78e5 : 00000000;
+78e6 : 00000000;
+78e7 : 00000000;
+78e8 : 00000000;
+78e9 : 00000000;
+78ea : 00000000;
+78eb : 00000000;
+78ec : 00000000;
+78ed : 00000000;
+78ee : 00000000;
+78ef : 00000000;
+78f0 : 00000000;
+78f1 : 00000000;
+78f2 : 00000000;
+78f3 : 00000000;
+78f4 : 00000000;
+78f5 : 00000000;
+78f6 : 00000000;
+78f7 : 00000000;
+78f8 : 00000000;
+78f9 : 00000000;
+78fa : 00000000;
+78fb : 00000000;
+78fc : 00000000;
+78fd : 00000000;
+78fe : 00000000;
+78ff : 00000000;
+7900 : 00000000;
+7901 : 00000000;
+7902 : 00000000;
+7903 : 00000000;
+7904 : 00000000;
+7905 : 00000000;
+7906 : 00000000;
+7907 : 00000000;
+7908 : 00000000;
+7909 : 00000000;
+790a : 00000000;
+790b : 00000000;
+790c : 00000000;
+790d : 00000000;
+790e : 00000000;
+790f : 00000000;
+7910 : 00000000;
+7911 : 00000000;
+7912 : 00000000;
+7913 : 00000000;
+7914 : 00000000;
+7915 : 00000000;
+7916 : 00000000;
+7917 : 00000000;
+7918 : 00000000;
+7919 : 00000000;
+791a : 00000000;
+791b : 00000000;
+791c : 00000000;
+791d : 00000000;
+791e : 00000000;
+791f : 00000000;
+7920 : 00000000;
+7921 : 00000000;
+7922 : 00000000;
+7923 : 00000000;
+7924 : 00000000;
+7925 : 00000000;
+7926 : 00000000;
+7927 : 00000000;
+7928 : 00000000;
+7929 : 00000000;
+792a : 00000000;
+792b : 00000000;
+792c : 00000000;
+792d : 00000000;
+792e : 00000000;
+792f : 00000000;
+7930 : 00000000;
+7931 : 00000000;
+7932 : 00000000;
+7933 : 00000000;
+7934 : 00000000;
+7935 : 00000000;
+7936 : 00000000;
+7937 : 00000000;
+7938 : 00000000;
+7939 : 00000000;
+793a : 00000000;
+793b : 00000000;
+793c : 00000000;
+793d : 00000000;
+793e : 00000000;
+793f : 00000000;
+7940 : 00000000;
+7941 : 00000000;
+7942 : 00000000;
+7943 : 00000000;
+7944 : 00000000;
+7945 : 00000000;
+7946 : 00000000;
+7947 : 00000000;
+7948 : 00000000;
+7949 : 00000000;
+794a : 00000000;
+794b : 00000000;
+794c : 00000000;
+794d : 00000000;
+794e : 00000000;
+794f : 00000000;
+7950 : 00000000;
+7951 : 00000000;
+7952 : 00000000;
+7953 : 00000000;
+7954 : 00000000;
+7955 : 00000000;
+7956 : 00000000;
+7957 : 00000000;
+7958 : 00000000;
+7959 : 00000000;
+795a : 00000000;
+795b : 00000000;
+795c : 00000000;
+795d : 00000000;
+795e : 00000000;
+795f : 00000000;
+7960 : 00000000;
+7961 : 00000000;
+7962 : 00000000;
+7963 : 00000000;
+7964 : 00000000;
+7965 : 00000000;
+7966 : 00000000;
+7967 : 00000000;
+7968 : 00000000;
+7969 : 00000000;
+796a : 00000000;
+796b : 00000000;
+796c : 00000000;
+796d : 00000000;
+796e : 00000000;
+796f : 00000000;
+7970 : 00000000;
+7971 : 00000000;
+7972 : 00000000;
+7973 : 00000000;
+7974 : 00000000;
+7975 : 00000000;
+7976 : 00000000;
+7977 : 00000000;
+7978 : 00000000;
+7979 : 00000000;
+797a : 00000000;
+797b : 00000000;
+797c : 00000000;
+797d : 00000000;
+797e : 00000000;
+797f : 00000000;
+7980 : 00000000;
+7981 : 00000000;
+7982 : 00000000;
+7983 : 00000000;
+7984 : 00000000;
+7985 : 00000000;
+7986 : 00000000;
+7987 : 00000000;
+7988 : 00000000;
+7989 : 00000000;
+798a : 00000000;
+798b : 00000000;
+798c : 00000000;
+798d : 00000000;
+798e : 00000000;
+798f : 00000000;
+7990 : 00000000;
+7991 : 00000000;
+7992 : 00000000;
+7993 : 00000000;
+7994 : 00000000;
+7995 : 00000000;
+7996 : 00000000;
+7997 : 00000000;
+7998 : 00000000;
+7999 : 00000000;
+799a : 00000000;
+799b : 00000000;
+799c : 00000000;
+799d : 00000000;
+799e : 00000000;
+799f : 00000000;
+79a0 : 00000000;
+79a1 : 00000000;
+79a2 : 00000000;
+79a3 : 00000000;
+79a4 : 00000000;
+79a5 : 00000000;
+79a6 : 00000000;
+79a7 : 00000000;
+79a8 : 00000000;
+79a9 : 00000000;
+79aa : 00000000;
+79ab : 00000000;
+79ac : 00000000;
+79ad : 00000000;
+79ae : 00000000;
+79af : 00000000;
+79b0 : 00000000;
+79b1 : 00000000;
+79b2 : 00000000;
+79b3 : 00000000;
+79b4 : 00000000;
+79b5 : 00000000;
+79b6 : 00000000;
+79b7 : 00000000;
+79b8 : 00000000;
+79b9 : 00000000;
+79ba : 00000000;
+79bb : 00000000;
+79bc : 00000000;
+79bd : 00000000;
+79be : 00000000;
+79bf : 00000000;
+79c0 : 00000000;
+79c1 : 00000000;
+79c2 : 00000000;
+79c3 : 00000000;
+79c4 : 00000000;
+79c5 : 00000000;
+79c6 : 00000000;
+79c7 : 00000000;
+79c8 : 00000000;
+79c9 : 00000000;
+79ca : 00000000;
+79cb : 00000000;
+79cc : 00000000;
+79cd : 00000000;
+79ce : 00000000;
+79cf : 00000000;
+79d0 : 00000000;
+79d1 : 00000000;
+79d2 : 00000000;
+79d3 : 00000000;
+79d4 : 00000000;
+79d5 : 00000000;
+79d6 : 00000000;
+79d7 : 00000000;
+79d8 : 00000000;
+79d9 : 00000000;
+79da : 00000000;
+79db : 00000000;
+79dc : 00000000;
+79dd : 00000000;
+79de : 00000000;
+79df : 00000000;
+79e0 : 00000000;
+79e1 : 00000000;
+79e2 : 00000000;
+79e3 : 00000000;
+79e4 : 00000000;
+79e5 : 00000000;
+79e6 : 00000000;
+79e7 : 00000000;
+79e8 : 00000000;
+79e9 : 00000000;
+79ea : 00000000;
+79eb : 00000000;
+79ec : 00000000;
+79ed : 00000000;
+79ee : 00000000;
+79ef : 00000000;
+79f0 : 00000000;
+79f1 : 00000000;
+79f2 : 00000000;
+79f3 : 00000000;
+79f4 : 00000000;
+79f5 : 00000000;
+79f6 : 00000000;
+79f7 : 00000000;
+79f8 : 00000000;
+79f9 : 00000000;
+79fa : 00000000;
+79fb : 00000000;
+79fc : 00000000;
+79fd : 00000000;
+79fe : 00000000;
+79ff : 00000000;
+7a00 : 00000000;
+7a01 : 00000000;
+7a02 : 00000000;
+7a03 : 00000000;
+7a04 : 00000000;
+7a05 : 00000000;
+7a06 : 00000000;
+7a07 : 00000000;
+7a08 : 00000000;
+7a09 : 00000000;
+7a0a : 00000000;
+7a0b : 00000000;
+7a0c : 00000000;
+7a0d : 00000000;
+7a0e : 00000000;
+7a0f : 00000000;
+7a10 : 00000000;
+7a11 : 00000000;
+7a12 : 00000000;
+7a13 : 00000000;
+7a14 : 00000000;
+7a15 : 00000000;
+7a16 : 00000000;
+7a17 : 00000000;
+7a18 : 00000000;
+7a19 : 00000000;
+7a1a : 00000000;
+7a1b : 00000000;
+7a1c : 00000000;
+7a1d : 00000000;
+7a1e : 00000000;
+7a1f : 00000000;
+7a20 : 00000000;
+7a21 : 00000000;
+7a22 : 00000000;
+7a23 : 00000000;
+7a24 : 00000000;
+7a25 : 00000000;
+7a26 : 00000000;
+7a27 : 00000000;
+7a28 : 00000000;
+7a29 : 00000000;
+7a2a : 00000000;
+7a2b : 00000000;
+7a2c : 00000000;
+7a2d : 00000000;
+7a2e : 00000000;
+7a2f : 00000000;
+7a30 : 00000000;
+7a31 : 00000000;
+7a32 : 00000000;
+7a33 : 00000000;
+7a34 : 00000000;
+7a35 : 00000000;
+7a36 : 00000000;
+7a37 : 00000000;
+7a38 : 00000000;
+7a39 : 00000000;
+7a3a : 00000000;
+7a3b : 00000000;
+7a3c : 00000000;
+7a3d : 00000000;
+7a3e : 00000000;
+7a3f : 00000000;
+7a40 : 00000000;
+7a41 : 00000000;
+7a42 : 00000000;
+7a43 : 00000000;
+7a44 : 00000000;
+7a45 : 00000000;
+7a46 : 00000000;
+7a47 : 00000000;
+7a48 : 00000000;
+7a49 : 00000000;
+7a4a : 00000000;
+7a4b : 00000000;
+7a4c : 00000000;
+7a4d : 00000000;
+7a4e : 00000000;
+7a4f : 00000000;
+7a50 : 00000000;
+7a51 : 00000000;
+7a52 : 00000000;
+7a53 : 00000000;
+7a54 : 00000000;
+7a55 : 00000000;
+7a56 : 00000000;
+7a57 : 00000000;
+7a58 : 00000000;
+7a59 : 00000000;
+7a5a : 00000000;
+7a5b : 00000000;
+7a5c : 00000000;
+7a5d : 00000000;
+7a5e : 00000000;
+7a5f : 00000000;
+7a60 : 00000000;
+7a61 : 00000000;
+7a62 : 00000000;
+7a63 : 00000000;
+7a64 : 00000000;
+7a65 : 00000000;
+7a66 : 00000000;
+7a67 : 00000000;
+7a68 : 00000000;
+7a69 : 00000000;
+7a6a : 00000000;
+7a6b : 00000000;
+7a6c : 00000000;
+7a6d : 00000000;
+7a6e : 00000000;
+7a6f : 00000000;
+7a70 : 00000000;
+7a71 : 00000000;
+7a72 : 00000000;
+7a73 : 00000000;
+7a74 : 00000000;
+7a75 : 00000000;
+7a76 : 00000000;
+7a77 : 00000000;
+7a78 : 00000000;
+7a79 : 00000000;
+7a7a : 00000000;
+7a7b : 00000000;
+7a7c : 00000000;
+7a7d : 00000000;
+7a7e : 00000000;
+7a7f : 00000000;
+7a80 : 00000000;
+7a81 : 00000000;
+7a82 : 00000000;
+7a83 : 00000000;
+7a84 : 00000000;
+7a85 : 00000000;
+7a86 : 00000000;
+7a87 : 00000000;
+7a88 : 00000000;
+7a89 : 00000000;
+7a8a : 00000000;
+7a8b : 00000000;
+7a8c : 00000000;
+7a8d : 00000000;
+7a8e : 00000000;
+7a8f : 00000000;
+7a90 : 00000000;
+7a91 : 00000000;
+7a92 : 00000000;
+7a93 : 00000000;
+7a94 : 00000000;
+7a95 : 00000000;
+7a96 : 00000000;
+7a97 : 00000000;
+7a98 : 00000000;
+7a99 : 00000000;
+7a9a : 00000000;
+7a9b : 00000000;
+7a9c : 00000000;
+7a9d : 00000000;
+7a9e : 00000000;
+7a9f : 00000000;
+7aa0 : 00000000;
+7aa1 : 00000000;
+7aa2 : 00000000;
+7aa3 : 00000000;
+7aa4 : 00000000;
+7aa5 : 00000000;
+7aa6 : 00000000;
+7aa7 : 00000000;
+7aa8 : 00000000;
+7aa9 : 00000000;
+7aaa : 00000000;
+7aab : 00000000;
+7aac : 00000000;
+7aad : 00000000;
+7aae : 00000000;
+7aaf : 00000000;
+7ab0 : 00000000;
+7ab1 : 00000000;
+7ab2 : 00000000;
+7ab3 : 00000000;
+7ab4 : 00000000;
+7ab5 : 00000000;
+7ab6 : 00000000;
+7ab7 : 00000000;
+7ab8 : 00000000;
+7ab9 : 00000000;
+7aba : 00000000;
+7abb : 00000000;
+7abc : 00000000;
+7abd : 00000000;
+7abe : 00000000;
+7abf : 00000000;
+7ac0 : 00000000;
+7ac1 : 00000000;
+7ac2 : 00000000;
+7ac3 : 00000000;
+7ac4 : 00000000;
+7ac5 : 00000000;
+7ac6 : 00000000;
+7ac7 : 00000000;
+7ac8 : 00000000;
+7ac9 : 00000000;
+7aca : 00000000;
+7acb : 00000000;
+7acc : 00000000;
+7acd : 00000000;
+7ace : 00000000;
+7acf : 00000000;
+7ad0 : 00000000;
+7ad1 : 00000000;
+7ad2 : 00000000;
+7ad3 : 00000000;
+7ad4 : 00000000;
+7ad5 : 00000000;
+7ad6 : 00000000;
+7ad7 : 00000000;
+7ad8 : 00000000;
+7ad9 : 00000000;
+7ada : 00000000;
+7adb : 00000000;
+7adc : 00000000;
+7add : 00000000;
+7ade : 00000000;
+7adf : 00000000;
+7ae0 : 00000000;
+7ae1 : 00000000;
+7ae2 : 00000000;
+7ae3 : 00000000;
+7ae4 : 00000000;
+7ae5 : 00000000;
+7ae6 : 00000000;
+7ae7 : 00000000;
+7ae8 : 00000000;
+7ae9 : 00000000;
+7aea : 00000000;
+7aeb : 00000000;
+7aec : 00000000;
+7aed : 00000000;
+7aee : 00000000;
+7aef : 00000000;
+7af0 : 00000000;
+7af1 : 00000000;
+7af2 : 00000000;
+7af3 : 00000000;
+7af4 : 00000000;
+7af5 : 00000000;
+7af6 : 00000000;
+7af7 : 00000000;
+7af8 : 00000000;
+7af9 : 00000000;
+7afa : 00000000;
+7afb : 00000000;
+7afc : 00000000;
+7afd : 00000000;
+7afe : 00000000;
+7aff : 00000000;
+7b00 : 00000000;
+7b01 : 00000000;
+7b02 : 00000000;
+7b03 : 00000000;
+7b04 : 00000000;
+7b05 : 00000000;
+7b06 : 00000000;
+7b07 : 00000000;
+7b08 : 00000000;
+7b09 : 00000000;
+7b0a : 00000000;
+7b0b : 00000000;
+7b0c : 00000000;
+7b0d : 00000000;
+7b0e : 00000000;
+7b0f : 00000000;
+7b10 : 00000000;
+7b11 : 00000000;
+7b12 : 00000000;
+7b13 : 00000000;
+7b14 : 00000000;
+7b15 : 00000000;
+7b16 : 00000000;
+7b17 : 00000000;
+7b18 : 00000000;
+7b19 : 00000000;
+7b1a : 00000000;
+7b1b : 00000000;
+7b1c : 00000000;
+7b1d : 00000000;
+7b1e : 00000000;
+7b1f : 00000000;
+7b20 : 00000000;
+7b21 : 00000000;
+7b22 : 00000000;
+7b23 : 00000000;
+7b24 : 00000000;
+7b25 : 00000000;
+7b26 : 00000000;
+7b27 : 00000000;
+7b28 : 00000000;
+7b29 : 00000000;
+7b2a : 00000000;
+7b2b : 00000000;
+7b2c : 00000000;
+7b2d : 00000000;
+7b2e : 00000000;
+7b2f : 00000000;
+7b30 : 00000000;
+7b31 : 00000000;
+7b32 : 00000000;
+7b33 : 00000000;
+7b34 : 00000000;
+7b35 : 00000000;
+7b36 : 00000000;
+7b37 : 00000000;
+7b38 : 00000000;
+7b39 : 00000000;
+7b3a : 00000000;
+7b3b : 00000000;
+7b3c : 00000000;
+7b3d : 00000000;
+7b3e : 00000000;
+7b3f : 00000000;
+7b40 : 00000000;
+7b41 : 00000000;
+7b42 : 00000000;
+7b43 : 00000000;
+7b44 : 00000000;
+7b45 : 00000000;
+7b46 : 00000000;
+7b47 : 00000000;
+7b48 : 00000000;
+7b49 : 00000000;
+7b4a : 00000000;
+7b4b : 00000000;
+7b4c : 00000000;
+7b4d : 00000000;
+7b4e : 00000000;
+7b4f : 00000000;
+7b50 : 00000000;
+7b51 : 00000000;
+7b52 : 00000000;
+7b53 : 00000000;
+7b54 : 00000000;
+7b55 : 00000000;
+7b56 : 00000000;
+7b57 : 00000000;
+7b58 : 00000000;
+7b59 : 00000000;
+7b5a : 00000000;
+7b5b : 00000000;
+7b5c : 00000000;
+7b5d : 00000000;
+7b5e : 00000000;
+7b5f : 00000000;
+7b60 : 00000000;
+7b61 : 00000000;
+7b62 : 00000000;
+7b63 : 00000000;
+7b64 : 00000000;
+7b65 : 00000000;
+7b66 : 00000000;
+7b67 : 00000000;
+7b68 : 00000000;
+7b69 : 00000000;
+7b6a : 00000000;
+7b6b : 00000000;
+7b6c : 00000000;
+7b6d : 00000000;
+7b6e : 00000000;
+7b6f : 00000000;
+7b70 : 00000000;
+7b71 : 00000000;
+7b72 : 00000000;
+7b73 : 00000000;
+7b74 : 00000000;
+7b75 : 00000000;
+7b76 : 00000000;
+7b77 : 00000000;
+7b78 : 00000000;
+7b79 : 00000000;
+7b7a : 00000000;
+7b7b : 00000000;
+7b7c : 00000000;
+7b7d : 00000000;
+7b7e : 00000000;
+7b7f : 00000000;
+7b80 : 00000000;
+7b81 : 00000000;
+7b82 : 00000000;
+7b83 : 00000000;
+7b84 : 00000000;
+7b85 : 00000000;
+7b86 : 00000000;
+7b87 : 00000000;
+7b88 : 00000000;
+7b89 : 00000000;
+7b8a : 00000000;
+7b8b : 00000000;
+7b8c : 00000000;
+7b8d : 00000000;
+7b8e : 00000000;
+7b8f : 00000000;
+7b90 : 00000000;
+7b91 : 00000000;
+7b92 : 00000000;
+7b93 : 00000000;
+7b94 : 00000000;
+7b95 : 00000000;
+7b96 : 00000000;
+7b97 : 00000000;
+7b98 : 00000000;
+7b99 : 00000000;
+7b9a : 00000000;
+7b9b : 00000000;
+7b9c : 00000000;
+7b9d : 00000000;
+7b9e : 00000000;
+7b9f : 00000000;
+7ba0 : 00000000;
+7ba1 : 00000000;
+7ba2 : 00000000;
+7ba3 : 00000000;
+7ba4 : 00000000;
+7ba5 : 00000000;
+7ba6 : 00000000;
+7ba7 : 00000000;
+7ba8 : 00000000;
+7ba9 : 00000000;
+7baa : 00000000;
+7bab : 00000000;
+7bac : 00000000;
+7bad : 00000000;
+7bae : 00000000;
+7baf : 00000000;
+7bb0 : 00000000;
+7bb1 : 00000000;
+7bb2 : 00000000;
+7bb3 : 00000000;
+7bb4 : 00000000;
+7bb5 : 00000000;
+7bb6 : 00000000;
+7bb7 : 00000000;
+7bb8 : 00000000;
+7bb9 : 00000000;
+7bba : 00000000;
+7bbb : 00000000;
+7bbc : 00000000;
+7bbd : 00000000;
+7bbe : 00000000;
+7bbf : 00000000;
+7bc0 : 00000000;
+7bc1 : 00000000;
+7bc2 : 00000000;
+7bc3 : 00000000;
+7bc4 : 00000000;
+7bc5 : 00000000;
+7bc6 : 00000000;
+7bc7 : 00000000;
+7bc8 : 00000000;
+7bc9 : 00000000;
+7bca : 00000000;
+7bcb : 00000000;
+7bcc : 00000000;
+7bcd : 00000000;
+7bce : 00000000;
+7bcf : 00000000;
+7bd0 : 00000000;
+7bd1 : 00000000;
+7bd2 : 00000000;
+7bd3 : 00000000;
+7bd4 : 00000000;
+7bd5 : 00000000;
+7bd6 : 00000000;
+7bd7 : 00000000;
+7bd8 : 00000000;
+7bd9 : 00000000;
+7bda : 00000000;
+7bdb : 00000000;
+7bdc : 00000000;
+7bdd : 00000000;
+7bde : 00000000;
+7bdf : 00000000;
+7be0 : 00000000;
+7be1 : 00000000;
+7be2 : 00000000;
+7be3 : 00000000;
+7be4 : 00000000;
+7be5 : 00000000;
+7be6 : 00000000;
+7be7 : 00000000;
+7be8 : 00000000;
+7be9 : 00000000;
+7bea : 00000000;
+7beb : 00000000;
+7bec : 00000000;
+7bed : 00000000;
+7bee : 00000000;
+7bef : 00000000;
+7bf0 : 00000000;
+7bf1 : 00000000;
+7bf2 : 00000000;
+7bf3 : 00000000;
+7bf4 : 00000000;
+7bf5 : 00000000;
+7bf6 : 00000000;
+7bf7 : 00000000;
+7bf8 : 00000000;
+7bf9 : 00000000;
+7bfa : 00000000;
+7bfb : 00000000;
+7bfc : 00000000;
+7bfd : 00000000;
+7bfe : 00000000;
+7bff : 00000000;
+7c00 : 00000000;
+7c01 : 00000000;
+7c02 : 00000000;
+7c03 : 00000000;
+7c04 : 00000000;
+7c05 : 00000000;
+7c06 : 00000000;
+7c07 : 00000000;
+7c08 : 00000000;
+7c09 : 00000000;
+7c0a : 00000000;
+7c0b : 00000000;
+7c0c : 00000000;
+7c0d : 00000000;
+7c0e : 00000000;
+7c0f : 00000000;
+7c10 : 00000000;
+7c11 : 00000000;
+7c12 : 00000000;
+7c13 : 00000000;
+7c14 : 00000000;
+7c15 : 00000000;
+7c16 : 00000000;
+7c17 : 00000000;
+7c18 : 00000000;
+7c19 : 00000000;
+7c1a : 00000000;
+7c1b : 00000000;
+7c1c : 00000000;
+7c1d : 00000000;
+7c1e : 00000000;
+7c1f : 00000000;
+7c20 : 00000000;
+7c21 : 00000000;
+7c22 : 00000000;
+7c23 : 00000000;
+7c24 : 00000000;
+7c25 : 00000000;
+7c26 : 00000000;
+7c27 : 00000000;
+7c28 : 00000000;
+7c29 : 00000000;
+7c2a : 00000000;
+7c2b : 00000000;
+7c2c : 00000000;
+7c2d : 00000000;
+7c2e : 00000000;
+7c2f : 00000000;
+7c30 : 00000000;
+7c31 : 00000000;
+7c32 : 00000000;
+7c33 : 00000000;
+7c34 : 00000000;
+7c35 : 00000000;
+7c36 : 00000000;
+7c37 : 00000000;
+7c38 : 00000000;
+7c39 : 00000000;
+7c3a : 00000000;
+7c3b : 00000000;
+7c3c : 00000000;
+7c3d : 00000000;
+7c3e : 00000000;
+7c3f : 00000000;
+7c40 : 00000000;
+7c41 : 00000000;
+7c42 : 00000000;
+7c43 : 00000000;
+7c44 : 00000000;
+7c45 : 00000000;
+7c46 : 00000000;
+7c47 : 00000000;
+7c48 : 00000000;
+7c49 : 00000000;
+7c4a : 00000000;
+7c4b : 00000000;
+7c4c : 00000000;
+7c4d : 00000000;
+7c4e : 00000000;
+7c4f : 00000000;
+7c50 : 00000000;
+7c51 : 00000000;
+7c52 : 00000000;
+7c53 : 00000000;
+7c54 : 00000000;
+7c55 : 00000000;
+7c56 : 00000000;
+7c57 : 00000000;
+7c58 : 00000000;
+7c59 : 00000000;
+7c5a : 00000000;
+7c5b : 00000000;
+7c5c : 00000000;
+7c5d : 00000000;
+7c5e : 00000000;
+7c5f : 00000000;
+7c60 : 00000000;
+7c61 : 00000000;
+7c62 : 00000000;
+7c63 : 00000000;
+7c64 : 00000000;
+7c65 : 00000000;
+7c66 : 00000000;
+7c67 : 00000000;
+7c68 : 00000000;
+7c69 : 00000000;
+7c6a : 00000000;
+7c6b : 00000000;
+7c6c : 00000000;
+7c6d : 00000000;
+7c6e : 00000000;
+7c6f : 00000000;
+7c70 : 00000000;
+7c71 : 00000000;
+7c72 : 00000000;
+7c73 : 00000000;
+7c74 : 00000000;
+7c75 : 00000000;
+7c76 : 00000000;
+7c77 : 00000000;
+7c78 : 00000000;
+7c79 : 00000000;
+7c7a : 00000000;
+7c7b : 00000000;
+7c7c : 00000000;
+7c7d : 00000000;
+7c7e : 00000000;
+7c7f : 00000000;
+7c80 : 00000000;
+7c81 : 00000000;
+7c82 : 00000000;
+7c83 : 00000000;
+7c84 : 00000000;
+7c85 : 00000000;
+7c86 : 00000000;
+7c87 : 00000000;
+7c88 : 00000000;
+7c89 : 00000000;
+7c8a : 00000000;
+7c8b : 00000000;
+7c8c : 00000000;
+7c8d : 00000000;
+7c8e : 00000000;
+7c8f : 00000000;
+7c90 : 00000000;
+7c91 : 00000000;
+7c92 : 00000000;
+7c93 : 00000000;
+7c94 : 00000000;
+7c95 : 00000000;
+7c96 : 00000000;
+7c97 : 00000000;
+7c98 : 00000000;
+7c99 : 00000000;
+7c9a : 00000000;
+7c9b : 00000000;
+7c9c : 00000000;
+7c9d : 00000000;
+7c9e : 00000000;
+7c9f : 00000000;
+7ca0 : 00000000;
+7ca1 : 00000000;
+7ca2 : 00000000;
+7ca3 : 00000000;
+7ca4 : 00000000;
+7ca5 : 00000000;
+7ca6 : 00000000;
+7ca7 : 00000000;
+7ca8 : 00000000;
+7ca9 : 00000000;
+7caa : 00000000;
+7cab : 00000000;
+7cac : 00000000;
+7cad : 00000000;
+7cae : 00000000;
+7caf : 00000000;
+7cb0 : 00000000;
+7cb1 : 00000000;
+7cb2 : 00000000;
+7cb3 : 00000000;
+7cb4 : 00000000;
+7cb5 : 00000000;
+7cb6 : 00000000;
+7cb7 : 00000000;
+7cb8 : 00000000;
+7cb9 : 00000000;
+7cba : 00000000;
+7cbb : 00000000;
+7cbc : 00000000;
+7cbd : 00000000;
+7cbe : 00000000;
+7cbf : 00000000;
+7cc0 : 00000000;
+7cc1 : 00000000;
+7cc2 : 00000000;
+7cc3 : 00000000;
+7cc4 : 00000000;
+7cc5 : 00000000;
+7cc6 : 00000000;
+7cc7 : 00000000;
+7cc8 : 00000000;
+7cc9 : 00000000;
+7cca : 00000000;
+7ccb : 00000000;
+7ccc : 00000000;
+7ccd : 00000000;
+7cce : 00000000;
+7ccf : 00000000;
+7cd0 : 00000000;
+7cd1 : 00000000;
+7cd2 : 00000000;
+7cd3 : 00000000;
+7cd4 : 00000000;
+7cd5 : 00000000;
+7cd6 : 00000000;
+7cd7 : 00000000;
+7cd8 : 00000000;
+7cd9 : 00000000;
+7cda : 00000000;
+7cdb : 00000000;
+7cdc : 00000000;
+7cdd : 00000000;
+7cde : 00000000;
+7cdf : 00000000;
+7ce0 : 00000000;
+7ce1 : 00000000;
+7ce2 : 00000000;
+7ce3 : 00000000;
+7ce4 : 00000000;
+7ce5 : 00000000;
+7ce6 : 00000000;
+7ce7 : 00000000;
+7ce8 : 00000000;
+7ce9 : 00000000;
+7cea : 00000000;
+7ceb : 00000000;
+7cec : 00000000;
+7ced : 00000000;
+7cee : 00000000;
+7cef : 00000000;
+7cf0 : 00000000;
+7cf1 : 00000000;
+7cf2 : 00000000;
+7cf3 : 00000000;
+7cf4 : 00000000;
+7cf5 : 00000000;
+7cf6 : 00000000;
+7cf7 : 00000000;
+7cf8 : 00000000;
+7cf9 : 00000000;
+7cfa : 00000000;
+7cfb : 00000000;
+7cfc : 00000000;
+7cfd : 00000000;
+7cfe : 00000000;
+7cff : 00000000;
+7d00 : 00000000;
+7d01 : 00000000;
+7d02 : 00000000;
+7d03 : 00000000;
+7d04 : 00000000;
+7d05 : 00000000;
+7d06 : 00000000;
+7d07 : 00000000;
+7d08 : 00000000;
+7d09 : 00000000;
+7d0a : 00000000;
+7d0b : 00000000;
+7d0c : 00000000;
+7d0d : 00000000;
+7d0e : 00000000;
+7d0f : 00000000;
+7d10 : 00000000;
+7d11 : 00000000;
+7d12 : 00000000;
+7d13 : 00000000;
+7d14 : 00000000;
+7d15 : 00000000;
+7d16 : 00000000;
+7d17 : 00000000;
+7d18 : 00000000;
+7d19 : 00000000;
+7d1a : 00000000;
+7d1b : 00000000;
+7d1c : 00000000;
+7d1d : 00000000;
+7d1e : 00000000;
+7d1f : 00000000;
+7d20 : 00000000;
+7d21 : 00000000;
+7d22 : 00000000;
+7d23 : 00000000;
+7d24 : 00000000;
+7d25 : 00000000;
+7d26 : 00000000;
+7d27 : 00000000;
+7d28 : 00000000;
+7d29 : 00000000;
+7d2a : 00000000;
+7d2b : 00000000;
+7d2c : 00000000;
+7d2d : 00000000;
+7d2e : 00000000;
+7d2f : 00000000;
+7d30 : 00000000;
+7d31 : 00000000;
+7d32 : 00000000;
+7d33 : 00000000;
+7d34 : 00000000;
+7d35 : 00000000;
+7d36 : 00000000;
+7d37 : 00000000;
+7d38 : 00000000;
+7d39 : 00000000;
+7d3a : 00000000;
+7d3b : 00000000;
+7d3c : 00000000;
+7d3d : 00000000;
+7d3e : 00000000;
+7d3f : 00000000;
+7d40 : 00000000;
+7d41 : 00000000;
+7d42 : 00000000;
+7d43 : 00000000;
+7d44 : 00000000;
+7d45 : 00000000;
+7d46 : 00000000;
+7d47 : 00000000;
+7d48 : 00000000;
+7d49 : 00000000;
+7d4a : 00000000;
+7d4b : 00000000;
+7d4c : 00000000;
+7d4d : 00000000;
+7d4e : 00000000;
+7d4f : 00000000;
+7d50 : 00000000;
+7d51 : 00000000;
+7d52 : 00000000;
+7d53 : 00000000;
+7d54 : 00000000;
+7d55 : 00000000;
+7d56 : 00000000;
+7d57 : 00000000;
+7d58 : 00000000;
+7d59 : 00000000;
+7d5a : 00000000;
+7d5b : 00000000;
+7d5c : 00000000;
+7d5d : 00000000;
+7d5e : 00000000;
+7d5f : 00000000;
+7d60 : 00000000;
+7d61 : 00000000;
+7d62 : 00000000;
+7d63 : 00000000;
+7d64 : 00000000;
+7d65 : 00000000;
+7d66 : 00000000;
+7d67 : 00000000;
+7d68 : 00000000;
+7d69 : 00000000;
+7d6a : 00000000;
+7d6b : 00000000;
+7d6c : 00000000;
+7d6d : 00000000;
+7d6e : 00000000;
+7d6f : 00000000;
+7d70 : 00000000;
+7d71 : 00000000;
+7d72 : 00000000;
+7d73 : 00000000;
+7d74 : 00000000;
+7d75 : 00000000;
+7d76 : 00000000;
+7d77 : 00000000;
+7d78 : 00000000;
+7d79 : 00000000;
+7d7a : 00000000;
+7d7b : 00000000;
+7d7c : 00000000;
+7d7d : 00000000;
+7d7e : 00000000;
+7d7f : 00000000;
+7d80 : 00000000;
+7d81 : 00000000;
+7d82 : 00000000;
+7d83 : 00000000;
+7d84 : 00000000;
+7d85 : 00000000;
+7d86 : 00000000;
+7d87 : 00000000;
+7d88 : 00000000;
+7d89 : 00000000;
+7d8a : 00000000;
+7d8b : 00000000;
+7d8c : 00000000;
+7d8d : 00000000;
+7d8e : 00000000;
+7d8f : 00000000;
+7d90 : 00000000;
+7d91 : 00000000;
+7d92 : 00000000;
+7d93 : 00000000;
+7d94 : 00000000;
+7d95 : 00000000;
+7d96 : 00000000;
+7d97 : 00000000;
+7d98 : 00000000;
+7d99 : 00000000;
+7d9a : 00000000;
+7d9b : 00000000;
+7d9c : 00000000;
+7d9d : 00000000;
+7d9e : 00000000;
+7d9f : 00000000;
+7da0 : 00000000;
+7da1 : 00000000;
+7da2 : 00000000;
+7da3 : 00000000;
+7da4 : 00000000;
+7da5 : 00000000;
+7da6 : 00000000;
+7da7 : 00000000;
+7da8 : 00000000;
+7da9 : 00000000;
+7daa : 00000000;
+7dab : 00000000;
+7dac : 00000000;
+7dad : 00000000;
+7dae : 00000000;
+7daf : 00000000;
+7db0 : 00000000;
+7db1 : 00000000;
+7db2 : 00000000;
+7db3 : 00000000;
+7db4 : 00000000;
+7db5 : 00000000;
+7db6 : 00000000;
+7db7 : 00000000;
+7db8 : 00000000;
+7db9 : 00000000;
+7dba : 00000000;
+7dbb : 00000000;
+7dbc : 00000000;
+7dbd : 00000000;
+7dbe : 00000000;
+7dbf : 00000000;
+7dc0 : 00000000;
+7dc1 : 00000000;
+7dc2 : 00000000;
+7dc3 : 00000000;
+7dc4 : 00000000;
+7dc5 : 00000000;
+7dc6 : 00000000;
+7dc7 : 00000000;
+7dc8 : 00000000;
+7dc9 : 00000000;
+7dca : 00000000;
+7dcb : 00000000;
+7dcc : 00000000;
+7dcd : 00000000;
+7dce : 00000000;
+7dcf : 00000000;
+7dd0 : 00000000;
+7dd1 : 00000000;
+7dd2 : 00000000;
+7dd3 : 00000000;
+7dd4 : 00000000;
+7dd5 : 00000000;
+7dd6 : 00000000;
+7dd7 : 00000000;
+7dd8 : 00000000;
+7dd9 : 00000000;
+7dda : 00000000;
+7ddb : 00000000;
+7ddc : 00000000;
+7ddd : 00000000;
+7dde : 00000000;
+7ddf : 00000000;
+7de0 : 00000000;
+7de1 : 00000000;
+7de2 : 00000000;
+7de3 : 00000000;
+7de4 : 00000000;
+7de5 : 00000000;
+7de6 : 00000000;
+7de7 : 00000000;
+7de8 : 00000000;
+7de9 : 00000000;
+7dea : 00000000;
+7deb : 00000000;
+7dec : 00000000;
+7ded : 00000000;
+7dee : 00000000;
+7def : 00000000;
+7df0 : 00000000;
+7df1 : 00000000;
+7df2 : 00000000;
+7df3 : 00000000;
+7df4 : 00000000;
+7df5 : 00000000;
+7df6 : 00000000;
+7df7 : 00000000;
+7df8 : 00000000;
+7df9 : 00000000;
+7dfa : 00000000;
+7dfb : 00000000;
+7dfc : 00000000;
+7dfd : 00000000;
+7dfe : 00000000;
+7dff : 00000000;
+7e00 : 00000000;
+7e01 : 00000000;
+7e02 : 00000000;
+7e03 : 00000000;
+7e04 : 00000000;
+7e05 : 00000000;
+7e06 : 00000000;
+7e07 : 00000000;
+7e08 : 00000000;
+7e09 : 00000000;
+7e0a : 00000000;
+7e0b : 00000000;
+7e0c : 00000000;
+7e0d : 00000000;
+7e0e : 00000000;
+7e0f : 00000000;
+7e10 : 00000000;
+7e11 : 00000000;
+7e12 : 00000000;
+7e13 : 00000000;
+7e14 : 00000000;
+7e15 : 00000000;
+7e16 : 00000000;
+7e17 : 00000000;
+7e18 : 00000000;
+7e19 : 00000000;
+7e1a : 00000000;
+7e1b : 00000000;
+7e1c : 00000000;
+7e1d : 00000000;
+7e1e : 00000000;
+7e1f : 00000000;
+7e20 : 00000000;
+7e21 : 00000000;
+7e22 : 00000000;
+7e23 : 00000000;
+7e24 : 00000000;
+7e25 : 00000000;
+7e26 : 00000000;
+7e27 : 00000000;
+7e28 : 00000000;
+7e29 : 00000000;
+7e2a : 00000000;
+7e2b : 00000000;
+7e2c : 00000000;
+7e2d : 00000000;
+7e2e : 00000000;
+7e2f : 00000000;
+7e30 : 00000000;
+7e31 : 00000000;
+7e32 : 00000000;
+7e33 : 00000000;
+7e34 : 00000000;
+7e35 : 00000000;
+7e36 : 00000000;
+7e37 : 00000000;
+7e38 : 00000000;
+7e39 : 00000000;
+7e3a : 00000000;
+7e3b : 00000000;
+7e3c : 00000000;
+7e3d : 00000000;
+7e3e : 00000000;
+7e3f : 00000000;
+7e40 : 00000000;
+7e41 : 00000000;
+7e42 : 00000000;
+7e43 : 00000000;
+7e44 : 00000000;
+7e45 : 00000000;
+7e46 : 00000000;
+7e47 : 00000000;
+7e48 : 00000000;
+7e49 : 00000000;
+7e4a : 00000000;
+7e4b : 00000000;
+7e4c : 00000000;
+7e4d : 00000000;
+7e4e : 00000000;
+7e4f : 00000000;
+7e50 : 00000000;
+7e51 : 00000000;
+7e52 : 00000000;
+7e53 : 00000000;
+7e54 : 00000000;
+7e55 : 00000000;
+7e56 : 00000000;
+7e57 : 00000000;
+7e58 : 00000000;
+7e59 : 00000000;
+7e5a : 00000000;
+7e5b : 00000000;
+7e5c : 00000000;
+7e5d : 00000000;
+7e5e : 00000000;
+7e5f : 00000000;
+7e60 : 00000000;
+7e61 : 00000000;
+7e62 : 00000000;
+7e63 : 00000000;
+7e64 : 00000000;
+7e65 : 00000000;
+7e66 : 00000000;
+7e67 : 00000000;
+7e68 : 00000000;
+7e69 : 00000000;
+7e6a : 00000000;
+7e6b : 00000000;
+7e6c : 00000000;
+7e6d : 00000000;
+7e6e : 00000000;
+7e6f : 00000000;
+7e70 : 00000000;
+7e71 : 00000000;
+7e72 : 00000000;
+7e73 : 00000000;
+7e74 : 00000000;
+7e75 : 00000000;
+7e76 : 00000000;
+7e77 : 00000000;
+7e78 : 00000000;
+7e79 : 00000000;
+7e7a : 00000000;
+7e7b : 00000000;
+7e7c : 00000000;
+7e7d : 00000000;
+7e7e : 00000000;
+7e7f : 00000000;
+7e80 : 00000000;
+7e81 : 00000000;
+7e82 : 00000000;
+7e83 : 00000000;
+7e84 : 00000000;
+7e85 : 00000000;
+7e86 : 00000000;
+7e87 : 00000000;
+7e88 : 00000000;
+7e89 : 00000000;
+7e8a : 00000000;
+7e8b : 00000000;
+7e8c : 00000000;
+7e8d : 00000000;
+7e8e : 00000000;
+7e8f : 00000000;
+7e90 : 00000000;
+7e91 : 00000000;
+7e92 : 00000000;
+7e93 : 00000000;
+7e94 : 00000000;
+7e95 : 00000000;
+7e96 : 00000000;
+7e97 : 00000000;
+7e98 : 00000000;
+7e99 : 00000000;
+7e9a : 00000000;
+7e9b : 00000000;
+7e9c : 00000000;
+7e9d : 00000000;
+7e9e : 00000000;
+7e9f : 00000000;
+7ea0 : 00000000;
+7ea1 : 00000000;
+7ea2 : 00000000;
+7ea3 : 00000000;
+7ea4 : 00000000;
+7ea5 : 00000000;
+7ea6 : 00000000;
+7ea7 : 00000000;
+7ea8 : 00000000;
+7ea9 : 00000000;
+7eaa : 00000000;
+7eab : 00000000;
+7eac : 00000000;
+7ead : 00000000;
+7eae : 00000000;
+7eaf : 00000000;
+7eb0 : 00000000;
+7eb1 : 00000000;
+7eb2 : 00000000;
+7eb3 : 00000000;
+7eb4 : 00000000;
+7eb5 : 00000000;
+7eb6 : 00000000;
+7eb7 : 00000000;
+7eb8 : 00000000;
+7eb9 : 00000000;
+7eba : 00000000;
+7ebb : 00000000;
+7ebc : 00000000;
+7ebd : 00000000;
+7ebe : 00000000;
+7ebf : 00000000;
+7ec0 : 00000000;
+7ec1 : 00000000;
+7ec2 : 00000000;
+7ec3 : 00000000;
+7ec4 : 00000000;
+7ec5 : 00000000;
+7ec6 : 00000000;
+7ec7 : 00000000;
+7ec8 : 00000000;
+7ec9 : 00000000;
+7eca : 00000000;
+7ecb : 00000000;
+7ecc : 00000000;
+7ecd : 00000000;
+7ece : 00000000;
+7ecf : 00000000;
+7ed0 : 00000000;
+7ed1 : 00000000;
+7ed2 : 00000000;
+7ed3 : 00000000;
+7ed4 : 00000000;
+7ed5 : 00000000;
+7ed6 : 00000000;
+7ed7 : 00000000;
+7ed8 : 00000000;
+7ed9 : 00000000;
+7eda : 00000000;
+7edb : 00000000;
+7edc : 00000000;
+7edd : 00000000;
+7ede : 00000000;
+7edf : 00000000;
+7ee0 : 00000000;
+7ee1 : 00000000;
+7ee2 : 00000000;
+7ee3 : 00000000;
+7ee4 : 00000000;
+7ee5 : 00000000;
+7ee6 : 00000000;
+7ee7 : 00000000;
+7ee8 : 00000000;
+7ee9 : 00000000;
+7eea : 00000000;
+7eeb : 00000000;
+7eec : 00000000;
+7eed : 00000000;
+7eee : 00000000;
+7eef : 00000000;
+7ef0 : 00000000;
+7ef1 : 00000000;
+7ef2 : 00000000;
+7ef3 : 00000000;
+7ef4 : 00000000;
+7ef5 : 00000000;
+7ef6 : 00000000;
+7ef7 : 00000000;
+7ef8 : 00000000;
+7ef9 : 00000000;
+7efa : 00000000;
+7efb : 00000000;
+7efc : 00000000;
+7efd : 00000000;
+7efe : 00000000;
+7eff : 00000000;
+7f00 : 00000000;
+7f01 : 00000000;
+7f02 : 00000000;
+7f03 : 00000000;
+7f04 : 00000000;
+7f05 : 00000000;
+7f06 : 00000000;
+7f07 : 00000000;
+7f08 : 00000000;
+7f09 : 00000000;
+7f0a : 00000000;
+7f0b : 00000000;
+7f0c : 00000000;
+7f0d : 00000000;
+7f0e : 00000000;
+7f0f : 00000000;
+7f10 : 00000000;
+7f11 : 00000000;
+7f12 : 00000000;
+7f13 : 00000000;
+7f14 : 00000000;
+7f15 : 00000000;
+7f16 : 00000000;
+7f17 : 00000000;
+7f18 : 00000000;
+7f19 : 00000000;
+7f1a : 00000000;
+7f1b : 00000000;
+7f1c : 00000000;
+7f1d : 00000000;
+7f1e : 00000000;
+7f1f : 00000000;
+7f20 : 00000000;
+7f21 : 00000000;
+7f22 : 00000000;
+7f23 : 00000000;
+7f24 : 00000000;
+7f25 : 00000000;
+7f26 : 00000000;
+7f27 : 00000000;
+7f28 : 00000000;
+7f29 : 00000000;
+7f2a : 00000000;
+7f2b : 00000000;
+7f2c : 00000000;
+7f2d : 00000000;
+7f2e : 00000000;
+7f2f : 00000000;
+7f30 : 00000000;
+7f31 : 00000000;
+7f32 : 00000000;
+7f33 : 00000000;
+7f34 : 00000000;
+7f35 : 00000000;
+7f36 : 00000000;
+7f37 : 00000000;
+7f38 : 00000000;
+7f39 : 00000000;
+7f3a : 00000000;
+7f3b : 00000000;
+7f3c : 00000000;
+7f3d : 00000000;
+7f3e : 00000000;
+7f3f : 00000000;
+7f40 : 00000000;
+7f41 : 00000000;
+7f42 : 00000000;
+7f43 : 00000000;
+7f44 : 00000000;
+7f45 : 00000000;
+7f46 : 00000000;
+7f47 : 00000000;
+7f48 : 00000000;
+7f49 : 00000000;
+7f4a : 00000000;
+7f4b : 00000000;
+7f4c : 00000000;
+7f4d : 00000000;
+7f4e : 00000000;
+7f4f : 00000000;
+7f50 : 00000000;
+7f51 : 00000000;
+7f52 : 00000000;
+7f53 : 00000000;
+7f54 : 00000000;
+7f55 : 00000000;
+7f56 : 00000000;
+7f57 : 00000000;
+7f58 : 00000000;
+7f59 : 00000000;
+7f5a : 00000000;
+7f5b : 00000000;
+7f5c : 00000000;
+7f5d : 00000000;
+7f5e : 00000000;
+7f5f : 00000000;
+7f60 : 00000000;
+7f61 : 00000000;
+7f62 : 00000000;
+7f63 : 00000000;
+7f64 : 00000000;
+7f65 : 00000000;
+7f66 : 00000000;
+7f67 : 00000000;
+7f68 : 00000000;
+7f69 : 00000000;
+7f6a : 00000000;
+7f6b : 00000000;
+7f6c : 00000000;
+7f6d : 00000000;
+7f6e : 00000000;
+7f6f : 00000000;
+7f70 : 00000000;
+7f71 : 00000000;
+7f72 : 00000000;
+7f73 : 00000000;
+7f74 : 00000000;
+7f75 : 00000000;
+7f76 : 00000000;
+7f77 : 00000000;
+7f78 : 00000000;
+7f79 : 00000000;
+7f7a : 00000000;
+7f7b : 00000000;
+7f7c : 00000000;
+7f7d : 00000000;
+7f7e : 00000000;
+7f7f : 00000000;
+7f80 : 00000000;
+7f81 : 00000000;
+7f82 : 00000000;
+7f83 : 00000000;
+7f84 : 00000000;
+7f85 : 00000000;
+7f86 : 00000000;
+7f87 : 00000000;
+7f88 : 00000000;
+7f89 : 00000000;
+7f8a : 00000000;
+7f8b : 00000000;
+7f8c : 00000000;
+7f8d : 00000000;
+7f8e : 00000000;
+7f8f : 00000000;
+7f90 : 00000000;
+7f91 : 00000000;
+7f92 : 00000000;
+7f93 : 00000000;
+7f94 : 00000000;
+7f95 : 00000000;
+7f96 : 00000000;
+7f97 : 00000000;
+7f98 : 00000000;
+7f99 : 00000000;
+7f9a : 00000000;
+7f9b : 00000000;
+7f9c : 00000000;
+7f9d : 00000000;
+7f9e : 00000000;
+7f9f : 00000000;
+7fa0 : 00000000;
+7fa1 : 00000000;
+7fa2 : 00000000;
+7fa3 : 00000000;
+7fa4 : 00000000;
+7fa5 : 00000000;
+7fa6 : 00000000;
+7fa7 : 00000000;
+7fa8 : 00000000;
+7fa9 : 00000000;
+7faa : 00000000;
+7fab : 00000000;
+7fac : 00000000;
+7fad : 00000000;
+7fae : 00000000;
+7faf : 00000000;
+7fb0 : 00000000;
+7fb1 : 00000000;
+7fb2 : 00000000;
+7fb3 : 00000000;
+7fb4 : 00000000;
+7fb5 : 00000000;
+7fb6 : 00000000;
+7fb7 : 00000000;
+7fb8 : 00000000;
+7fb9 : 00000000;
+7fba : 00000000;
+7fbb : 00000000;
+7fbc : 00000000;
+7fbd : 00000000;
+7fbe : 00000000;
+7fbf : 00000000;
+7fc0 : 00000000;
+7fc1 : 00000000;
+7fc2 : 00000000;
+7fc3 : 00000000;
+7fc4 : 00000000;
+7fc5 : 00000000;
+7fc6 : 00000000;
+7fc7 : 00000000;
+7fc8 : 00000000;
+7fc9 : 00000000;
+7fca : 00000000;
+7fcb : 00000000;
+7fcc : 00000000;
+7fcd : 00000000;
+7fce : 00000000;
+7fcf : 00000000;
+7fd0 : 00000000;
+7fd1 : 00000000;
+7fd2 : 00000000;
+7fd3 : 00000000;
+7fd4 : 00000000;
+7fd5 : 00000000;
+7fd6 : 00000000;
+7fd7 : 00000000;
+7fd8 : 00000000;
+7fd9 : 00000000;
+7fda : 00000000;
+7fdb : 00000000;
+7fdc : 00000000;
+7fdd : 00000000;
+7fde : 00000000;
+7fdf : 00000000;
+7fe0 : 00000000;
+7fe1 : 00000000;
+7fe2 : 00000000;
+7fe3 : 00000000;
+7fe4 : 00000000;
+7fe5 : 00000000;
+7fe6 : 00000000;
+7fe7 : 00000000;
+7fe8 : 00000000;
+7fe9 : 00000000;
+7fea : 00000000;
+7feb : 00000000;
+7fec : 00000000;
+7fed : 00000000;
+7fee : 00000000;
+7fef : 00000000;
+7ff0 : 00000000;
+7ff1 : 00000000;
+7ff2 : 00000000;
+7ff3 : 00000000;
+7ff4 : 00000000;
+7ff5 : 00000000;
+7ff6 : 00000000;
+7ff7 : 00000000;
+7ff8 : 00000000;
+7ff9 : 00000000;
+7ffa : 00000000;
+7ffb : 00000000;
+7ffc : 00000000;
+7ffd : 00000000;
+7ffe : 00000000;
+7fff : 00000000;
+END;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram
new file mode 100644
index 000000000..8d4e519ba
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.bram
@@ -0,0 +1,32768 @@
+10011000000000000000000000000000
+11010000000000000000000000000000
+11010000001000000000000000000000
+01111000000000010000000000000000
+00111000001000010000000000000000
+11010000111000010000000000000000
+11111000000000000000000000111010
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01010111010100100101000001000011
+00101101001011010010110100101101
+00000001001000110100010101100111
+10001001101010111100110111101111
+00000000000000001001010001111000
+00000000000000000000000000000000
+00000000000000001000010100001000
+00000000000000001000110110101000
+00000000000000000000000000000000
+00000010000101000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000010000110100
+01011011100111010000000000000000
+11111000000000000000000000011110
+00110100000000010000000000000010
+11111000000000000001001000111110
+11100000000000000000000000101110
+00110100000000000000000000000000
+00110100000000000000000000000000
+00110100000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+10011000000000000000000000000000
+01111000000111000000000000000001
+00111011100111001111111111111100
+01111000000000010000000000000000
+00111000001000011000111001000000
+00110100000000100000000000000000
+01111000000000110000000000000000
+00111000011000111001011101100100
+11001000011000010001100000000000
+11111000000000000001011001100011
+00110100000000010000000000000000
+00110100000000100000000000000000
+00110100000000110000000000000000
+11111000000000000000000000111000
+11100000000000000000000000000000
+00110111100111001111111111000100
+01011011100000010000000000000100
+01011011100000100000000000001000
+01011011100000110000000000001100
+01011011100001000000000000010000
+01011011100001010000000000010100
+01011011100001100000000000011000
+01011011100001110000000000011100
+01011011100010000000000000100000
+01011011100010010000000000100100
+01011011100010100000000000101000
+01011011100111100000000000110100
+01011011100111110000000000111000
+00101011100000010000000000111100
+01011011100000010000000000110000
+10111011100000000000100000000000
+00110100001000010000000000111100
+01011011100000010000000000101100
+11000011101000000000000000000000
+00101011100000010000000000000100
+00101011100000100000000000001000
+00101011100000110000000000001100
+00101011100001000000000000010000
+00101011100001010000000000010100
+00101011100001100000000000011000
+00101011100001110000000000011100
+00101011100010000000000000100000
+00101011100010010000000000100100
+00101011100010100000000000101000
+00101011100111010000000000110000
+00101011100111100000000000110100
+00101011100111110000000000111000
+00101011100111000000000000101100
+00110100000000000000000000000000
+11000011110000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000001000010000000000000000
+11000011101000000000000000000000
+10010000000000000001000000000000
+00110100000000011111111111111110
+10100000010000010000100000000000
+11010000000000010000000000000000
+10010000001000000001000000000000
+00111000010000100000000000000001
+11010000001000100000000000000000
+00111000001000010000000000000001
+11010000000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100111010000000000000100
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001011101011000
+01111000000000100000000000000010
+00111000011000111000000100101000
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001010001000000
+00111000011000111000000100101100
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001011101100000
+00111000011000111000000100110000
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001010001110100
+00111000011000111000000100110100
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001011101011100
+00111000011000111000000100111000
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000001000011001011100101100
+00111000011000111000000100111100
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000011000111000000101000000
+00111000001000011001011100011000
+01011000001000100000000000000000
+00101000011000100000000000000000
+01111000000000010000000000000000
+00111000001000011001011101010100
+01011000001000100000000000000000
+00110100000000010000000000000001
+11111000000000000000110001011101
+00110100000000011111111111011110
+00110011100000010000000000001000
+00110100000000011111111110101101
+00110011100000010000000000001001
+00110100000000101111111111101111
+00110100000000011111111110111110
+00110011100000010000000000001010
+00110011100000100000000000001011
+00110011100000010000000000001101
+00110100000000101111111110111010
+00110111100000010000000000001000
+00110011100000100000000000001100
+11111000000000000000100110001001
+00110100000000100000000000000001
+00110100000000010000000000000001
+11111000000000000000100011011110
+11111000000000000000101110001100
+11111000000000000000110101101101
+11111000000000000001001001101011
+00110100000000010000000000000001
+11111000000000000000110111101001
+01111000000000010000000000000000
+00111000001000011000010000110100
+00110100000000100000000000000010
+01011000001000100000000000001100
+11100000000000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000001000
+01011011100111010000000000000100
+01011011100001000000000000001100
+01011011100001010000000000010000
+10111000100000000101100000000000
+01011011100001100000000000010100
+01111000000001000000000000000000
+01011011100001110000000000011000
+01011011100010000000000000011100
+00111000100001000101110111001100
+00110100000001010000000000000000
+01000100001000000000000000000011
+00101000001001000000001111010100
+00101000001001010000000000011100
+01111000000001100000000000000000
+00111000110001101000111001000100
+00101000110000010000000000000000
+00111100010000100000000000000010
+10111000101000010010100000000000
+10000000101000100010100000000000
+00100000101001010000000000001111
+01010100011001010000000000001100
+01111000000001010000000000000000
+00111000101001011000000111111000
+10110100101000100010100000000000
+01111000000001100000000000000000
+00101000101000100000000000000000
+10111000110000000000100000000000
+00111000001000010101110111010100
+11111000000000000000011101101110
+10111001011000000000100000000000
+00110111100000100000000000010000
+11111000000000000000011101010111
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000110000000000000001
+00110100000000010000000000000011
+00110100000000100000000000000000
+11111000000000000001001001000011
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001101101001
+11111000000000000000110001001010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000010000000000000000
+10111000010000000110000000000000
+11111000000000000001001011100000
+01000101100000000000000000000101
+01100100001000100000000000000000
+11001000000000100001000000000000
+00111000010000100000000000000001
+11100000000000000000000000010011
+01111000000010110000000000000000
+00111001011010111000111001001000
+01011100001011000000000000000100
+01011001011000000000000000000000
+00110100000000101111111111111111
+11100000000000000000000000001101
+00101001011011000000000000000000
+00110100000000100000000000000001
+01011101100000000000000000001010
+01111000000000100000000000000000
+00111000010000101000010000110000
+00110100000000010000000000000011
+11111000000000000000110011010101
+00110100000000100000000000000010
+01001001100000010000000000000100
+00110100000000010000000000000001
+01011001011000010000000000000000
+00110100000000100000000000000001
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000000000000
+00110100000000100000000000000001
+11111000000000000001001100111001
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000001101011000
+00101000001000010000000000010000
+00101000001000110000000000001100
+01000100010000110000000000000100
+01011000001000100000000000001100
+10111000010000000000100000000000
+11111000000000000000110101111000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000000110101101010
+00110100000000100000000000000001
+01011100001000000000000000000011
+11111000000000000001001100010010
+01111100001000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000010100000000000
+10111000001000100000100000000000
+10111000010000000010000000000000
+10111000011000000101100000000000
+01000100001000000000000000000101
+00110100000000010000000000000001
+10111000101000000001000000000000
+10111000100000000001100000000000
+11111000000000000000110011101111
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000000110011101010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000001000000001000000000000
+00110100000000011111111111111111
+11111000000000000001001010010110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00101000001000100000001111010000
+10111000100000000111000000000000
+00110111100000010000000000011000
+10111000011000000101100000000000
+10111000101000000110100000000000
+11111000000000000000010100011101
+01000101110000000000000000000101
+01111000000000010000000000000000
+00111000001000011000101010101100
+00101000001000010000000000000000
+01011001110000010000000000000000
+01000101101000000000000000000011
+00101011100000010000000011001100
+01011001101000010000000000000000
+00101011100000100000000001101100
+00110100000000011111111111111101
+01000100010000000000000000010011
+01000101100000000000000000000111
+00101011100000100000000001100000
+00101011100000010000000001011000
+10110100010000010000100000000000
+00101011100000100000000010100000
+10110100001000100000100000000000
+01011001100000010000000000000000
+00101011100000100000000001101000
+00110100000000011111111111111101
+01000100010000000000000000001001
+00110100000000010000000000000000
+01000101011000000000000000000111
+00101011100000110000000001100100
+00101011100000100000000001011100
+10110100011000100001000000000000
+00101011100000110000000010100100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000001000000000000000000
+10111000010000000110000000000000
+10111000011000000101100000000000
+00110111100000100000000000010000
+00110111100000110000000000010100
+00110100000001010000000000000000
+01011011100000000000000000010100
+01011011100000000000000000010000
+11111011111111111111111110111111
+00110100000000010000000000000001
+01011101100000010000000000000011
+00101011100000010000000000010000
+11100000000000000000000000000010
+00101011100000010000000000010100
+01011001011000010000000000000000
+00110100000000010000000000000001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000000100001010110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+11111000000000000000100001011010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000010000000000000000
+00111000001000011000111001001100
+00101000001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000010001010000000000001000
+00101100010001000000000000001100
+00101000010011010000000000000000
+00111100101001010000000000010000
+10111000001000000110000000000000
+00101000010010110000000000000100
+10111000101001000000100000000000
+00110100000000100000001111101000
+11111000000000000001010000101110
+00010101101000100000000000011000
+10111000001000000011000000000000
+01111000000001110000000000000000
+00100000010000100000000011000000
+00110100000000010000000010000000
+00111000111001110111010101001100
+01011100010000010000000000000011
+01111000000001110000000000000000
+00111000111001110101111110111000
+01111000000001000000000000000000
+10111000100000000000100000000000
+10111001100000000001000000000000
+10111001011000000001100000000000
+10111001011000000010000000000000
+10111001011000000010100000000000
+00111000001000010101111111000100
+11111000000000000000011001110100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100111010000000000011000
+10111000001000000101000000000000
+01000000011000010000000000000101
+01000000011001000000000000000000
+01000000011001010000000000000001
+01000000011001100000000000000010
+01000000011001110000000000000011
+01000000011010000000000000000100
+01011011100000010000000000000100
+01000000011000010000000000000110
+10111000010000000100100000000000
+10111001010000000001000000000000
+01011011100000010000000000001000
+01000000011000010000000000000111
+01011011100000010000000000001100
+01000000011000010000000000001000
+01011011100000010000000000010000
+01000000011000010000000000001001
+10111001001000000001100000000000
+01011011100000010000000000010100
+01111000000000010000000000000000
+00111000001000010101111111101000
+11111000000000000000011001010110
+00101011100111010000000000011000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111010000
+01011011100010110000000000110000
+01011011100011000000000000101100
+01011011100011010000000000101000
+01011011100011100000000000100100
+01011011100011110000000000100000
+01011011100100000000000000011100
+01011011100100010000000000011000
+01011011100100100000000000010100
+01011011100100110000000000010000
+01011011100101000000000000001100
+01011011100101010000000000001000
+01011011100111010000000000000100
+10111000011000000011000000000000
+10111000001000001001100000000000
+10111000010000001001000000000000
+01111000000000010000000000000000
+10111000100000001010100000000000
+00111000001000010110000000100000
+10111010011000000001000000000000
+10111010010000000001100000000000
+10111000110000000010000000000000
+10111000101000001010000000000000
+01111000000100010000000000000000
+11111000000000000000011000111010
+01111000000100000000000000000000
+01111000000011110000000000000000
+01111000000011100000000000000000
+01111000000011010000000000000000
+10111000001000000101100000000000
+00110100000011000000000000000000
+00111010001100010110000000110100
+00111010000100000110000000111100
+00111001111011110111000011101100
+00111001110011100111101010111100
+00111001101011010111001101110100
+11100000000000000000000000010111
+01011100110000000000000000000110
+10111010001000000000100000000000
+10111010011000000001000000000000
+10111010010000000001100000000000
+11111000000000000000011000101001
+10110101011000010101100000000000
+10110110101011000001000000000000
+01000000010000100000000000000000
+10111010000000000000100000000000
+00110101100011000000000000000001
+11111000000000000000011000100011
+00100001100000100000000000000011
+10110100001010110101100000000000
+10111001111000000011000000000000
+01011100010000000000000000000101
+00100001100000010000000000001111
+10111001110000000011000000000000
+01000100001000100000000000000010
+10111001101000000011000000000000
+10111000110000000000100000000000
+11111000000000000000011000011001
+10110101011000010101100000000000
+00100001100001100000000000001111
+01001010100011001111111111101001
+01000100110000000000000000000101
+01111000000000010000000000000000
+00111000001000010111101010111100
+11111000000000000000011000010010
+10110100001010110101100000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000110000
+00101011100011000000000000101100
+00101011100011010000000000101000
+00101011100011100000000000100100
+00101011100011110000000000100000
+00101011100100000000000000011100
+00101011100100010000000000011000
+00101011100100100000000000010100
+00101011100100110000000000010000
+00101011100101000000000000001100
+00101011100101010000000000001000
+00110111100111000000000000110000
+11000011101000000000000000000000
+00110111100111001111111110111000
+01011011100010110000000001001000
+01011011100011000000000001000100
+01011011100011010000000001000000
+01011011100011100000000000111100
+01011011100011110000000000111000
+01011011100100000000000000110100
+01011011100100010000000000110000
+01011011100100100000000000101100
+01011011100100110000000000101000
+01011011100101000000000000100100
+01011011100101010000000000100000
+01011011100101100000000000011100
+01011011100101110000000000011000
+01011011100110000000000000010100
+01011011100111010000000000010000
+10111000011000001000000000000000
+01000000010000110000000000000001
+10111000001000000110000000000000
+00110100000000010000000000000010
+00100000011000110000000000001111
+10111000010000000110100000000000
+01000000010011100000000000000000
+01000100011000010000000000000110
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000001000100
+11111000000000000000010111100110
+11100000000000000000000101010000
+01000000010001010000000000000010
+01000000010001100000000000000011
+00100001110011100000000000001111
+00111100101001010000000000001000
+01111000000000010000000000000000
+10111000110001010010100000000000
+01000001101001100000000000000100
+00110100000000110000000000000010
+10111001110000000010000000000000
+00110100010010110000000000100010
+00111000001000010110000001100100
+10111001100000000001000000000000
+11111000000000000000010111011000
+01000001101000110000000000000110
+01000001101001000000000000000111
+00101001101001010000000000001100
+00111100011000110000000000001000
+01111000000000010000000000000000
+10111000100000110001100000000000
+00101001101001000000000000001000
+10111000101000000011000000000000
+10111001100000000001000000000000
+00111000001000010110000010010000
+11111000000000000000010111001101
+01111000000000100000000000000000
+10111001100000000000100000000000
+00111000010000100110000011000000
+00110101101000110000000000010100
+11111011111111111111111101011011
+01000001101000110000000000011110
+01000001101001000000000000011111
+01000001101001010000000000100001
+00111100011000110000000000001000
+01111000000000010000000000000000
+10111000100000110001100000000000
+01000001101001000000000000100000
+00111000001000010110000011001000
+10111001100000000001000000000000
+11111000000000000000010110111110
+00110100000000010000000000001100
+01010101110000010000000011101001
+01111000000000010000000000000000
+00111101110011100000000000000010
+00111000001000011000001000011000
+10110100001011100000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000011110100
+11111000000000000000010110110010
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110000100001100
+10111001100000000001000000000000
+00111000011000110110000100011100
+11100000000000000000000000011100
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000100101000
+11111000000000000000010110010110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+01000001011001110000000000000101
+01000001011001100000000000001001
+10111000101000010010100000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+00111000001000010110000100001100
+10111001100000000001000000000000
+00111000011000110110000101000100
+10111000111001000010000000000000
+10111000110001010010100000000000
+11111000000000000000010101111100
+11100000000000000000000010100110
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000101010100
+11111000000000000000010101110111
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111000001000010110000100001100
+10111001100000000001000000000000
+00111000011000110110000101110000
+11100011111111111111111111100001
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000110000000
+11111000000000000000010101011011
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+01111000000011100000000000000000
+00111001110011100110000110011100
+10111000101000010010100000000000
+01111000000000010000000000000000
+10111001100000000001000000000000
+10111001110000000001100000000000
+10111000111001000010000000000000
+10111000110001010010100000000000
+00111000001000010110000100001100
+11111000000000000000010101000000
+00110101011000110000000000001010
+10111001100000000000100000000000
+10111001110000000001000000000000
+11111011111111111111111011001111
+00110100000010110000000000110110
+11100000000000000000000010011000
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110000110110000
+11111000000000000000010100110110
+01000001011000100000000000000010
+01000001011000010000000000000011
+01000001011001000000000000000100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000000110
+01000001011000010000000000000111
+01000001011001010000000000001000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011001110000000000000101
+01000001011001100000000000001001
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+10111000111001000010000000000000
+10111000110001010010100000000000
+10111001100000000001000000000000
+00111000011000110110000111001100
+00111000001000010110000100001100
+11111000000000000000010100011100
+01000001011000100000000000001110
+01000001011000010000000000001111
+01000001011001000000000000010000
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100100001000000000000001000
+10111000001000100000100000000000
+10111000100000010010000000000000
+01000001011000100000000000010010
+01000001011000010000000000010011
+01000001011001010000000000010100
+00111100010000100000000000011000
+00111100001000010000000000010000
+00111100101001010000000000001000
+10111000001000100000100000000000
+10111000101000010010100000000000
+01000001011000100000000000010110
+01000001011000010000000000010111
+01000001011001100000000000011000
+00111100010000100000000000011000
+00111100001000010000000000010000
+01000001011010010000000000010001
+01000001011010000000000000010101
+01000001011001110000000000011001
+00111100110001100000000000001000
+10111000001000100000100000000000
+10111000110000010011000000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+10111001001001000010000000000000
+10111001000001010010100000000000
+10111000111001100011000000000000
+10111001100000000001000000000000
+00111000011000110110000111111000
+00111000001000010110000111100100
+11111000000000000000010011111000
+01000001011000110000000000001101
+01000001011001000000000000011010
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110001000011100
+11111000000000000000010011110010
+01000001011000010000000000100000
+01000001011001000000000000011011
+01000001011001010000000000011100
+01000001011001100000000000011101
+01000001011001110000000000011110
+01000001011010000000000000011111
+01011011100000010000000000000100
+01000001011000010000000000100001
+01111000000000110000000000000000
+10111001100000000001000000000000
+01011011100000010000000000001000
+01000001011000010000000000100010
+00111000011000110110001001110100
+00110100000010110000000001000000
+01011011100000010000000000001100
+01111000000000010000000000000000
+00111000001000010110001001000100
+11111000000000000000010011100000
+11100000000000000000000000111101
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000010110001010010100
+11111000000000000000010011011011
+01111000000000100000000000000000
+10111001100000000000100000000000
+00111000010000100110001010110000
+10111001011000000001100000000000
+11111011111111111111111001101001
+00110100000010110000000000101100
+11100000000000000000000000110010
+00110100000010110000000000100010
+11100000000000000000000000110000
+01010101111101110000000000001001
+01111000000000010000000000000000
+10111001100000000001000000000000
+10111010000000000001100000000000
+10111001011000000010000000000000
+10111001111000000010100000000000
+00111000001000010110001011001100
+11111000000000000000010011001010
+11100000000000000000000000110100
+10110101101010110111000000000000
+01000001110101100000000000000010
+01000001110000010000000000000011
+01000001110000110000000000000000
+00111110110101100000000000001000
+01000001110001000000000000000001
+10111000001101101011000000000000
+01000001110000010000000000001000
+01000001110001010000000000000100
+01000001110001100000000000000101
+01000001110001110000000000000110
+01000001110010000000000000000111
+01011011100000010000000000000100
+01000001110000010000000000001001
+00111100011000110000000000001000
+00110110110100010000000000000100
+01011011100000010000000000001000
+10111000100000110001100000000000
+10111010101000000000100000000000
+10111001100000000001000000000000
+10111010001000000010000000000000
+11111000000000000000010010110011
+01001101111100010000000000000111
+10111010010000000000100000000000
+10111001100000000001000000000000
+10111010001000000001100000000000
+10111001111000000010000000000000
+11111000000000000000010010101101
+11100000000000000000000000001000
+10111001100000000000100000000000
+10111010100000000001000000000000
+10111010011000000001100000000000
+00110101110001000000000000001010
+00110110110001011111111111111010
+11111011111111111111111001010100
+10111010001000000111100000000000
+10110101011011110101100000000000
+11100000000000000000000000001011
+01111000000101010000000000000000
+01111000000101000000000000000000
+01111000000100110000000000000000
+01111000000100100000000000000000
+00110100000110000000000000000010
+00110100000101110000000000001001
+00111010101101010110001011110000
+00111010100101000110001101011100
+00111010011100110110001101100100
+00111010010100100110001100110000
+01001101011100000000000000000011
+11001010000010110111100000000000
+01001001111110001111111111000101
+01111000000000100000000000000000
+01111000000000110000000000000000
+10111001100000000000100000000000
+00111000010000100110001101110000
+00111000011000110110001101111000
+10111001101000000010000000000000
+10111010000000000010100000000000
+11111011111111111111111000111100
+00101011100111010000000000010000
+00101011100010110000000001001000
+00101011100011000000000001000100
+00101011100011010000000001000000
+00101011100011100000000000111100
+00101011100011110000000000111000
+00101011100100000000000000110100
+00101011100100010000000000110000
+00101011100100100000000000101100
+00101011100100110000000000101000
+00101011100101000000000000100100
+00101011100101010000000000100000
+00101011100101100000000000011100
+00101011100101110000000000011000
+00101011100110000000000000010100
+00110111100111000000000001001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+01000100100000000000000000000101
+10111000100000000001000000000000
+01011011100000110000000000010000
+11111011111111111111110111100001
+00101011100000110000000000010000
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111001101110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001011010000000000000000
+10111000001000000111100000000000
+00101000001011100000000000000100
+10111000010000000110000000000000
+00110100000010110000000000000000
+00110100000000010000000000000000
+00110100000001000000000000000000
+01010100010011010000000000000110
+10111001101000000000100000000000
+11111000000000000001001000101110
+10001000001011000001000000000000
+10111001011000000010000000000000
+11001001101000100110100000000000
+00110100000000110000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001011
+00111101100001010000000000000001
+00111101011010110000000000000001
+11110101100001010110000000000000
+00111100011000110000000000000001
+10110101100010110101100000000000
+10111000101000000110000000000000
+00111100010001010000000000000001
+11110100010001010001000000000000
+10110100010000110001100000000000
+10111000101000000001000000000000
+00010101011001010000000000011111
+11001000101011000011000000000000
+11110100110001010011000000000000
+11001000101010110010100000000000
+11001000101001100010100000000000
+00000000101001010000000000011111
+00110100000001100000000000000001
+01010101101010110000000000000100
+01011101101010110000000000000010
+01010101110011000000000000000010
+00110100000001100000000000000000
+10100000101001100011000000000000
+01011100110000001111111111101010
+01010101011011010000000000001101
+01011101011011010000000000000010
+01010101100011100000000000001011
+11001001110011000010100000000000
+11110100101011100111000000000000
+11001001101010110110100000000000
+11001001101011100110100000000000
+10111000101000000111000000000000
+10110100100000100010100000000000
+11110100100001010010000000000000
+10110100001000110000100000000000
+10110100100000010000100000000000
+10111000101000000010000000000000
+00111100011001010000000000011111
+00000000010000100000000000000001
+00000000011000110000000000000001
+10111000101000100001000000000000
+10111000011000100010100000000000
+01000100101000000000000000000110
+00111101011001010000000000011111
+00000001100011000000000000000001
+00000001011010110000000000000001
+10111000101011000110000000000000
+11100011111111111111111111101001
+01011001111000010000000000000000
+10111001110000000000100000000000
+01011001111001000000000000000100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+11111000000000000000100011011011
+10110100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000001000000000000000000
+10111000010000000101100000000000
+01111000000001010000000000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110010000101000
+00111000101001011000001001001100
+10111001011000000011000000000000
+11111011111111111111110001110110
+01000101011000000000000000000101
+00010101011000100000000000011111
+00110100000000010000000000000010
+10111001011000000001100000000000
+11111000000000000000100111100110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000010000000101100000000000
+10111000011000000011000000000000
+01000100011000000000000000001000
+01111000000001000000000000000000
+01111000000001010000000000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110010000110100
+00111000101001011000001001101100
+11111011111111111111110001011101
+10111001100000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111111011001
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000110100000000000
+01000100010000000000000000010101
+00101000010000010000000000001000
+00101100010010110000000000001100
+00101000010011000000000000000100
+00111100001000010000000000010000
+00110100000001000000000000000011
+10111000001010110101100000000000
+00101000010000010000000000000000
+10111001011000000001100000000000
+10111001100000000001000000000000
+11111000000000000000100111010111
+01111000000001000000000000000000
+01111000000001010000000000000000
+10111001101000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000001
+00111000100001000110010001100000
+00111000101001011000001010000000
+10111001100000000011000000000000
+10111001011000000011100000000000
+11111011111111111111110000111010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+10111000001000000110000000000000
+00110111100000100000000000011000
+00110111100000010000000000010000
+11111000000000000000100111011101
+00101011100001110000000000011000
+00101011100000010000000000010000
+00101011100001100000000000010100
+00000000111000100000000000010000
+01011001011000010000000000000000
+01011001011000100000000000001000
+00111100111000010000000000010000
+01111000000000100000000000000000
+00111000010000101000111001000100
+01011001011000010000000000001100
+00101000010000010000000000000000
+01011001011001100000000000000100
+00100000001000010000000000000001
+01011100001000000000000000001001
+01111000000001000000000000000000
+01111000000001010000000000000000
+10111001100000000000100000000000
+00110100000000100000000000000110
+00110100000000110000000000000010
+00111000100001000110010001100000
+00111000101001011000001010010000
+11111011111111111111110000010100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00001000100001000000000000001100
+10111000001000000101100000000000
+00110100001011010000000100010000
+01111000000000010000000000000000
+00111000001000011000010001000100
+10110100001001000000100000000000
+10111000010000000111100000000000
+01000000001000100000000000000111
+01111000000001010000000000000000
+00110111100011000000000001000000
+00001000010000100000000000000110
+00111000101001011000001010110000
+00101001011100000000000001101000
+00110100000000011000100011110111
+10110100010001010001000000000000
+10111000011000000111000000000000
+00001111100000010000000001001100
+00110100000000110000000000000110
+10111001100000000000100000000000
+11111000000000000001000110010100
+10111001100000000001000000000000
+10111010000000000000100000000000
+10111001111000000001100000000000
+10111001110000000010000000000000
+00110111100001010000000000100000
+11111000000000000000001100101111
+10111000001000000110000000000000
+01000101101000000000000000011111
+00101011100000010000000000101000
+00101011100000100000000000100100
+00101011100000110000000000100000
+00010100001001010000000000011111
+00000000001001000000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10111000100001010010100000000000
+00101011100001000000000000111100
+01011001011000110000000100010000
+01011001011000100000000100010100
+01011001011001010000000100011000
+01011001011000010000000100011100
+01011100100000000000000000000100
+01111000000001001000111100000000
+10111000011001000001100000000000
+01011001011000110000000100010000
+00111100101010010000000000010000
+00000000001010000000000000010000
+00101001011001110000000100010100
+01111000000001000000000000000000
+01111000000001010000000000000000
+10111001011000000000100000000000
+00110100000000100000000000000101
+00110100000000110000000000000010
+00111000100001000110010001110000
+00111000101001011000001010100000
+10111001100000000011000000000000
+10111001001010000100000000000000
+11111011111111111111101111001100
+01111000000000010000000000000000
+00111000001000011000111001001100
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000001101
+00101001011001000000000100011100
+00101001011001010000000100011000
+00101001011000100000000100010100
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000000
+00000000100001000000000000010000
+00111000001000010110010010010000
+10111000101000110001100000000000
+11111000000000000000001101000111
+01001100000011000000000000010000
+01111000000000010000000000000000
+00111000001000011000111001000100
+00101000001000100000000000000000
+00101001011000010000000000011100
+10111000010000010000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000000
+00111000001000010110010010100000
+10111001111000000001000000000000
+10111001110000000001100000000000
+10111001101000000010000000000000
+11111011111111111111111010111011
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+00110111100111001111111110010000
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00101000001000010000000001101000
+10111000011000000010100000000000
+10111000010000000111000000000000
+10111000100000000101100000000000
+00110111100000100000000001000000
+10111000101000000010000000000000
+10111001110000000001100000000000
+00110111100001010000000000100000
+11111000000000000000001001011111
+10111000001000000110100000000000
+01001100000000010000000001100101
+01000101011000000000000000100001
+00101011100000010000000000101100
+00101011100011110000000000100100
+00101011100100000000000000100000
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011001011100000000000000000000
+01011001011011110000000000000100
+11111000000000000001000010111001
+00101011100001010000000000101000
+10111000001000000010000000000000
+00010100001000100000000000011111
+00010100101000010000000000011111
+00000000101000110000000000010000
+00111100101001010000000000010000
+00111100001000010000000000010000
+10110100100001010010100000000000
+10111000011000010000100000000000
+11110100100001010010000000000000
+10110100010000010000100000000000
+10110100100000010000100000000000
+01011001011000010000000000001000
+00101011100000010000000000111100
+01011001011001010000000000001100
+01011100001000000000000000001001
+01111000000000010000000000000000
+00111000001000011000111001001100
+00101000001000100000000000000000
+00110100000000010000000000000100
+01000100010000010000000000000100
+01111000000000011000111100000000
+10111010000000011000000000000000
+01011001011100000000000000000000
+01111000000000010000000000000000
+00111000001000011000111001000100
+00101001100000100000000000011100
+00101000001000010000000000000000
+10111000001000100000100000000000
+00000000001000010000000000010100
+00110100000000100000000000000001
+00100000001000010000000000001111
+01010000010000010000000000000111
+01111000000000010000000000000000
+00111000001000010110010010101000
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001011000000010000000000000
+11111011111111111111111001101101
+01111000000000010000000000000000
+00111000001000011000111001001100
+00101000001000100000000000000000
+00110100000000010000000000000100
+01011100010000010000000000110000
+00101001011001000000000000000000
+00101001011000110000000000000100
+00101001011000100000000000001000
+00101001011000010000000000001100
+01011011100001000000000001100100
+01011011100000110000000001101000
+01011011100000100000000001101100
+01011011100000010000000001110000
+11111000000000000000010001101100
+00111100001000010000000000010000
+00110100000000100000001111101000
+01011011100000000000000001011000
+01011011100000000000000001010100
+11111000000000000001000001111111
+00010100001000100000000000011111
+00110111100010110000000001100100
+01011011100000010000000001100000
+01011011100000100000000001011100
+10111001011000000000100000000000
+00110111100000100000000001010100
+11111000000000000000000011101100
+00101011100001000000000001110000
+00101011100001010000000001101100
+00101011100000100000000001101000
+00000000100000110000000000010000
+00100000100001001111111111111111
+00001000100001000000001111101000
+00111100101001010000000000010000
+01111000000000010000000000000000
+00000000100001000000000000010000
+10111000101000110001100000000000
+00111000001000010110010010110000
+11111000000000000000001011000011
+10111001011000000000100000000000
+00110101100000100000000100010000
+11111000000000000000000011011101
+00101011100000110000000001110000
+00101011100001000000000001101100
+01111000000000010000000000000000
+00000000011000100000000000010000
+00100000011000111111111111111111
+00001000011000110000001111101000
+00111100100001000000000000010000
+00111000001000010110010011000000
+00000000011000110000000000010000
+10111000100000100001000000000000
+11111000000000000000001010110101
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000001110000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000001000010000000001101000
+11111000000000000000000110010001
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000001101000
+01000100001000000000000000000010
+11111000000000000000000110000100
+10111001011000000000100000000000
+11111000000000000000000000100101
+00110111100011000000000000010100
+00110100000000011000100011110111
+01111000000000100000000000000000
+00001111100000010000000000100000
+00111000010000101000000111110000
+10111001100000000000100000000000
+00110100000000110000000000000110
+11111000000000000001000010100110
+01111000000000010000000000000000
+10111001100000000001000000000000
+00111000001000011000101001010000
+00110100000000110000000000000001
+00110100000001000000000000000000
+11111000000000000000000100101011
+10111000001000000110000000000000
+01000100001000000000000000001110
+00110111100011010000000000101000
+10111001101000000001000000000000
+11111000000000000000000100010101
+10111001101000000001000000000000
+00110100000000110000000000000110
+00110101011000010000000001110000
+11111000000000000001000010010111
+00110101011000010000000001011100
+01011001011011000000000001101000
+10111001101000000001000000000000
+00110100000000110000000000000110
+11111000000000000001000010010010
+01011001011011000000000001010100
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+00101000001000100000000000101000
+00110100000000110000000000000001
+01000100010000110000000000001010
+00110100000000110000000000000010
+01000100010000110000000000000011
+01011100010000000000000000001001
+11100000000000000000000000000110
+00110100000000100000000000010010
+01011000001000100000000010000100
+00110100000000100000000000001110
+01011000001000100000000010001000
+11100000000000000000000000000011
+01011000001000000000000010000100
+01011000001000000000000010001000
+00101000001001000000000010000100
+00101000001001010000000000111100
+00110100000000100000000000000000
+10110100101001000010100000000000
+00100000101000110000000000000011
+01000100011000000000000000000011
+00110100000000100000000000000100
+11001000010000110001000000000000
+10110100101000100010100000000000
+00101000001001100000000001000000
+00101000001000100000000010001000
+01011000001001010000000001001100
+00110100000000110000000000000000
+10110100110000100011000000000000
+00100000110001110000000000000011
+01000100111000000000000000000011
+00110100000000110000000000000100
+11001000011001110001100000000000
+10110100110000110001100000000000
+11001000101001000010000000000000
+11001000011000100001000000000000
+01011000001000110000000001010000
+01011000001001000000000001000100
+01011000001000100000000001001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001000110000000000000000
+10111000001000000101100000000000
+00101000001001000000000000000100
+01001000000000110000000000000110
+10111000011001000000100000000000
+00110100000011010000000000000000
+00110100000011000000000000000001
+01000100001000000000000000001001
+11100000000000000000000000001110
+00010100011000100000000000011000
+00110100000000010000000010000000
+00100000010000100000000011000000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01011100010000010000000000001000
+11100000000000000000000000000101
+00101001011000100000000000001000
+00110100000011011111111111111111
+00110100000011001111111111111111
+01001000001000100000000000000011
+00110100000011010000000000000000
+00110100000011000000000000000001
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000000111110111110
+00101001011001000000000000001100
+00101001011000110000000000001000
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000000111110110111
+01011001011000010000000000001000
+01011001011000100000000000001100
+01111000000001001100101000000000
+11100000000000000000000000001111
+00101001011001100000000000000100
+00101001011001010000000000000000
+00110100001000010011101110011010
+00110100110000111111111111111111
+11110100110000110011000000000000
+01011001011000110000000000000100
+10110100010001000001100000000000
+11110100010000110001000000000000
+00110100101001011111111111111111
+10110100110001010010100000000000
+10110100010000010000100000000000
+01011001011001010000000000000000
+01011001011000010000000000001000
+01011001011000110000000000001100
+00101001011000010000000000001000
+00101001011000100000000000001100
+01001000000000011111111111110000
+11100000000000000000000000001111
+00101001011001010000000000000100
+00101001011001100000000000000000
+00110101111011111100010001100101
+00110100101000100000000000000001
+11110100101000100010100000000000
+01011001011000100000000000000100
+10110101110000110001000000000000
+11110101110000100111000000000000
+10110100101001100010100000000000
+10110101110011110111000000000000
+01011001011001010000000000000000
+01011001011011100000000000001000
+01011001011000100000000000001100
+11100000000000000000000000000100
+00110100000000010011101110011010
+01111000000001001100101000000000
+01111000000000110011011000000000
+00101001011011110000000000001000
+00101001011011100000000000001100
+01001001111000011111111111101101
+01011101111000010000000000000010
+01010101110001001111111111101011
+00101001011000110000000000000000
+00101001011001000000000000000100
+10111001101000000000100000000000
+10111001100000000001000000000000
+11111000000000000000111110000110
+01011001011000010000000000000000
+01011001011000100000000000000100
+10111001111000000000100000000000
+10111001110000000001000000000000
+10111001101000000001100000000000
+10111001100000000010000000000000
+11111000000000000000111101111111
+01011001011000010000000000001000
+01011001011000100000000000001100
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00101000010001000000000000000100
+00101000001001100000000000000100
+00101000010001010000000000000000
+00101000001001110000000000000000
+11001000110001000010000000000000
+11110100100001100011000000000000
+11001000111001010010100000000000
+11001000101001100010100000000000
+01011000001001010000000000000000
+01011000001001000000000000000100
+00101000010001100000000000001000
+00101000001001010000000000001100
+00101000010000100000000000001100
+00101000001001000000000000001000
+11001000101000100001000000000000
+11110100010001010010100000000000
+11001000100001100010000000000000
+11001000100001010010000000000000
+01011000001001000000000000001000
+01011000001000100000000000001100
+11111011111111111111111110000001
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+11111011111111111111101100101111
+00110100000000100000000000000011
+01011100001000100000000000000011
+00110100000000010000000000000010
+11100000000000000000000000000010
+00110100000000010000000000000001
+01011001011000010000000000101000
+00110101011000100000000001001100
+00110101011000010000000001001000
+11111000000000000000001101010111
+00110100000000010000000000000000
+01011001011000000000000001000000
+01011001011000000000000001000100
+01011001011000000000000010001000
+01011001011000000000000010001100
+00110111100000100000000000001100
+00110100000000110000000000000000
+11111000000000000000110101111011
+01000100001000000000000000000110
+00101011100000010000000000001100
+01011001011000010000000010100000
+00110100000000010000000000000001
+01011001011000010000000010100100
+11100000000000000000000000000011
+01011001011000000000000010100000
+01011001011000000000000010100100
+00110100000000010000000000000000
+11111000000000000000001100011101
+01011001011000010000000000101100
+00110100000000010000000000000001
+01011001011000010000000001010100
+01011001011000010000000001010000
+00110100000000010000000000000000
+11111000000000000000110100110010
+01011001011000010000000000110100
+00110100000000010001111101000000
+01011001011000010000000010110100
+01111000000000010000000000000000
+00111000001000011000010000110000
+00101000001000010000000000000000
+01011001011000010000000010111000
+01011001011000010000000010111100
+00110101011000010000000000010100
+11111000000000000000001011001000
+00110100000000010000000000000000
+01011001011000000000000000011100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+10111000001000000010100000000000
+01011100100000000000000000000010
+10111000011000000010000000000000
+10111000100000000011000000000000
+01010000011001000000000000000010
+10111000011000000011000000000000
+10110100001001100000100000000000
+11100000000000000000000000001110
+00101100010001100000000000000010
+00101000010001110000000000001100
+10110100111001100011100000000000
+01000000111001100000000000000000
+00110000101001100000000000000000
+00101100010001110000000000000010
+00101100010001100000000000000110
+00110100101001010000000000000001
+00110100111001110000000000000001
+00100000111001111111111111111111
+00001100010001110000000000000010
+01011100110001110000000000000010
+00001100010000000000000000000010
+01011100101000011111111111110011
+01010000100000110000000000001011
+00101100010000010000000000000010
+10110100011000010000100000000000
+11001000001001000010000000000000
+00001100010001000000000000000010
+00101100010000010000000000000110
+11100000000000000000000000000011
+11001000100000010010000000000000
+00001100010001000000000000000010
+00101100010001000000000000000010
+01010100100000011111111111111101
+10111000011000000000100000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+10111000010000000000100000000000
+11111000000000000000001010011011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001001101010000
+00110100010000110000000000110000
+11100000000000000000000000000100
+00101000010001000000000000000000
+00110100010000100000000000000100
+01011000100000010000000000011100
+01011100010000111111111111111101
+11000011101000000000000000000000
+00110111100111001111111100100100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000001010000000000000000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+00111000101001011001001101010000
+00110100000000010000000000000000
+00110100000000100000000000001100
+00101000101000110000000000000000
+00110100101001010000000000000100
+01011100011000000000000000001001
+00111100001000100000000000000010
+01111000000001010000000000000000
+00111000101001011001001101010000
+10110100101000100010100000000000
+01011000101010110000000000000000
+00110100000000100000000000001100
+01011100001000100000000000001010
+11100000000000000000000000000011
+00110100001000010000000000000001
+01011100001000101111111111110100
+01111000000000010000000000000000
+01111000000000100000000000000000
+00111000010000101000001010111100
+00111000001000010111101001101100
+11111000000000000000000101000000
+11100000000000000000000000100000
+01111000000000100000000000000000
+00110111100000010000000000011000
+00111000010000100111101010001000
+11111011111111111111111101110010
+01001000000000010000000000011011
+10111001011000000000100000000000
+00110100000000100000000000000000
+00110100000000110000000000010010
+11111000000000000000111110000101
+01000101100000000000000000000101
+10111001011000000000100000000000
+10111001100000000001000000000000
+00110100000000110000000000010010
+11111000000000000000111101000111
+00001101011000000000000000001110
+01011101110000000000000000000100
+00110100000000010000100000000000
+00001101011000010000000000001100
+00001101011011010000000000001110
+00110101011000010000000000010010
+11111000000000000000001001011000
+00101011100000010000000011010000
+00001101011000000000000000100110
+00001101011000000000000000100100
+01011001011000010000000000011100
+00101011100000010000000010111000
+00001101011000000000000000101100
+01011001011000010000000000100000
+00101101011000010000000000101010
+00001101011000010000000000101000
+11100000000000000000000000000010
+00110100000010110000000000000000
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000011011100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001001101010000
+00110100010000110000000000110000
+11100000000000000000000000000101
+00101000010001000000000000000000
+01011100100000010000000000000010
+01011000010000000000000000000000
+00110100010000100000000000000100
+01011100010000111111111111111100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011001011000100000000000010000
+10111000010000000111000000000000
+10111000100000000111100000000000
+10111000101000000110000000000000
+00101000001011010000000000001000
+01000100011000000000000000000101
+10111000101000000000100000000000
+00110100000000101111110000011000
+11111000000000000000111010100100
+10110100001011010110100000000000
+11001001110011110010000000000000
+10111000100000000001100000000000
+01001100100000000000000000000010
+10110100100011000001100000000000
+00000001100000010000000000011111
+10110100001011000000100000000000
+00010100001000010000000000000001
+10110100001001000010000000000000
+01001100100000000000000000000010
+10110100100011000010000000000000
+01001001100001000000000000000010
+11001000100011000010000000000000
+00001001100000100000000000000011
+00010100010001010000000000011111
+00000000101001010000000000011110
+10110100101000100001000000000000
+00010100010000100000000000000010
+01001000011000100000000000000110
+00010101100000100000000000011111
+00000000010000100000000000011110
+10110100010011000001000000000000
+00010100010000100000000000000010
+01001100011000100000000000001101
+10110100100000010010000000000000
+01011001011011010000000000001000
+01011001011001000000000000001100
+01001001100001000000000000001010
+11001000100011000010000000000000
+01011001011001000000000000001100
+10111001100000000000100000000000
+00110100000000100000001111101000
+11111000000000000000111010000011
+10110101101000010000100000000000
+01011001011000010000000000001000
+11100000000000000000000000000010
+01011001011000110000000000001100
+01111000000000110000000000000000
+00111000011000111000000101100000
+00101001011000010000000000001000
+00101000011000100000000000000000
+01001100010000010000000000001101
+01111000000000110000000000000000
+00111000011000111000000101010100
+00101000011000100000000000000000
+00101001011000110000000000000000
+10110100001000100000100000000000
+00101001011000100000000000000100
+01011001011000010000000000001000
+00110100010000010000000000000001
+11110100010000010001000000000000
+01011001011000010000000000000100
+10110100010000110001000000000000
+01011001011000100000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111110110100
+01011011100010110000000000100100
+01011011100011000000000000100000
+01011011100011010000000000011100
+01011011100011100000000000011000
+01011011100011110000000000010100
+01011011100100000000000000010000
+01011011100100010000000000001100
+01011011100100100000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+00101100001000100000000000101100
+10111000101000000101100000000000
+10111000001000000110000000000000
+10111000011000001001000000000000
+10111000100000000111100000000000
+00110100000001010000000000000000
+01000100010000000000000001010110
+00110100001011100000000000100100
+00101100001100010000000000101000
+00110100010000101111111111111111
+00001100001000100000000000101100
+00110100000000110000000000000010
+10111001110000000001000000000000
+00110100000001000000000000000000
+00110111100000010000000001001110
+11111011111111111111111100001111
+10110110001000011000100000000000
+00100010001100011111111111111111
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000011000
+00110100000001000000000000000000
+00110111100000010000000000101000
+11111011111111111111111100000111
+10110110001000011000100000000000
+00100010001100011111111111111111
+00110111100100000000000001000000
+00001101100100010000000000101000
+10111001110000000001000000000000
+00110100000000110000000000001110
+00110100000001000000000000000000
+10111010000000000000100000000000
+11111011111111111111111011111110
+10110110001000011000100000000000
+00101111100000110000000001001110
+00100010001100011111111111111111
+10111001110000000001000000000000
+10111001111000000010000000000000
+00001101100100010000000000101000
+10111010010000000000100000000000
+11111011111111111111111011110110
+10110110001000010000100000000000
+00001101100000010000000000101000
+00101111100000010000000001001100
+01111000000000110000000000000000
+00111000011000111000111001000000
+00001101101000010000000000001100
+00101000011000010000000000000000
+00110111100000100000000001000110
+00110100000000110000000000000110
+00001101101000010000000000010000
+10111001101000000000100000000000
+11111000000000000000111010010011
+00110101101000010000000000000110
+10111010000000000001000000000000
+00110100000000110000000000000110
+11111000000000000000111010001111
+01000101011000000000000000011111
+00101011100000010000000000111000
+01011001011000010000000000010100
+00101011100000010000000000101100
+01011001011000010000000000011000
+00110100000000010000000000000000
+11111000000000000000110001101101
+10111000001000000110100000000000
+00110101011000100000000000010000
+00110100000000110000000000000000
+00110100000000010000000000000000
+11111000000000000000110000110100
+00101011100000010000000000110000
+01000011100000100000000000101000
+00101011100000110000000000101100
+01011001011000010000000000000000
+00101011100000010000000000110100
+01111100010000100000000000000000
+00101001100001000000000000011100
+01011001011000010000000000000100
+00101011100000010000000000111000
+01011001011000000000000000001100
+00110100000001010001111101000000
+01011001011000010000000000001000
+00100001101000010000000011111111
+01100100001000010000000000000000
+10100000001000100000100000000000
+00101001011000100000000000010000
+01011001011000010000000000011100
+10111001011000000000100000000000
+11111011111111111111111101001111
+00101111100000010000000001001110
+10111001111000000010100000000000
+01010000001011110000000000000010
+10111000001000000010100000000000
+10111000101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100100
+00101011100011000000000000100000
+00101011100011010000000000011100
+00101011100011100000000000011000
+00101011100011110000000000010100
+00101011100100000000000000010000
+00101011100100010000000000001100
+00101011100100100000000000001000
+00110111100111000000000001001100
+11000011101000000000000000000000
+00110111100111001111111111000000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000011000000111000000000000
+00110111100000010000000000110000
+00110100000000110000000000000110
+10111000101000000101100000000000
+10111000100000000110100000000000
+11111000000000000000111001010011
+00110111100000010000000000110110
+00110101100000100000000000010010
+00110100000000110000000000000110
+11111000000000000000111001001111
+01111000000000010000000000000000
+00111000001000011000111001000000
+00101000001001010000000000000000
+00101101100000010000000000001100
+01000100101000000000000000001001
+00110100000000101000000100000000
+00001111100000100000000000111100
+00101101100000100000000000011000
+00001111100000010000000001000000
+00111100010000100000000000001101
+10111000010001010010100000000000
+00001111100001010000000000111110
+11100000000000000000000000000010
+00001111100000010000000000111100
+00110111100000010000000000110000
+10111001110000000001000000000000
+10111001101000000001100000000000
+00110111100001000000000000011000
+11111000000000000000010000110111
+01000101011000000000000000001010
+00101011100000100000000000100000
+01011001011000000000000000001100
+01011001011000100000000000000000
+00101011100000100000000000100100
+01011001011000100000000000000100
+00101011100000100000000000101000
+01011001011000100000000000001000
+01000011100000100000000000011000
+01011001011000100000000000011100
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000001000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000000
+10111000001000000010000000000000
+00111001011010111001001110000000
+10111000010000000001100000000000
+10111001011000000000100000000000
+10111000100000000001000000000000
+11111000000000000000000000011001
+10111000001000000110000000000000
+10111001011000000000100000000000
+11111000000000000000000011110101
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111011100
+01011011100111010000000000000100
+01011011100000100000000000001100
+00110111100000100000000000001100
+01011011100000010000000000001000
+01011011100000110000000000010000
+01011011100001000000000000010100
+01011011100001010000000000011000
+01011011100001100000000000011100
+01011011100001110000000000100000
+01011011100010000000000000100100
+11111011111111111111111111100001
+00101011100111010000000000000100
+00110111100111000000000000100100
+11000011101000000000000000000000
+00110111100111001111111110011100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000101100000000000000000
+10111000001000001100100000000000
+10111000010000001010000000000000
+10111000001000001001100000000000
+00110100000110000000000000100101
+00110100000010010000000001101001
+00110100000010000000000001110000
+00110100000001110000000001011000
+00110100000110110000000000101010
+00110100000010100000000000110000
+00110100000101110000000000010000
+00110111100101010000000001011000
+00111010110101100111101010010100
+11100000000000000000000010010110
+00110100000011110000000000000000
+00110100000100010000000000100000
+00110100000011010000000000001010
+01000100001110000000000000000100
+00110010011000010000000000000000
+11100000000000000000000000111100
+00110100000100010000000000110000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01000100001010010000000001000000
+01010100001010010000000000001111
+01000100001001110000000000111011
+01010100001001110000000000001000
+01000100001110110000000000011010
+01010100001110110000000000000100
+01000100001000000000000010001000
+01011100001110000000000000011010
+11100000000000000000000000101111
+01011100001010100000000000011000
+11100000000000000000000000010110
+00110100000000100000000001100011
+01000100001000100000000000011100
+00110100000001000000000001100100
+01011100001001000000000000010011
+11100000000000000000000000110001
+01000100001010000000000000101101
+01010100001010000000000000000110
+00110100000000100000000001101110
+01000100001000100000000001111000
+00110100000001000000000001101111
+01011100001001000000000000001100
+11100000000000000000000000100100
+00110100000000100000000001110101
+01000100001000100000000000101000
+00110100000001000000000001111000
+01000100001001000000000000100011
+00110100000000100000000001110011
+01011100001000100000000000000101
+11100000000000000000000000010000
+00101000011011010000000000000000
+00110100011000110000000000000100
+01000101111000001111111111011101
+00110100001000011111111111010000
+00100000001000100000000011111111
+00110100000001000000000000001001
+01010100010001001111111111011010
+00001001111011110000000000001010
+10110100001011110111100000000000
+11100011111111111111111111010111
+00101000011000010000000000000000
+00110100011000110000000000000100
+00110010011000010000000000000000
+00110110011100110000000000000001
+11100000000000000000000001011111
+10111000011000000000100000000000
+00101000001000010000000000000000
+00110100011000110000000000000100
+11100000000000000000000000000100
+00110010011000100000000000000000
+00110100001000010000000000000001
+00110110011100110000000000000001
+01000000001000100000000000000000
+01011100010000001111111111111100
+11100000000000000000000001010101
+00110010011110000000000000000000
+00110110011100110000000000000001
+11100000000000000000000001010010
+00110100000000010000000000001010
+01000101101000010000000000000100
+11100000000000000000000000000100
+00110100000011010000000000010000
+11100000000000000000000000000010
+00110100000011010000000000001000
+00101000011001010000000000000000
+00110100011100100000000000000100
+10111000101000000111000000000000
+01011101111000000000000000000010
+00110100000011110000000000000001
+00000000101001100000000000011111
+01100101101000110000000000001010
+00110100000100000000000000000000
+10100000110000110001100000000000
+01000100011000000000000000000011
+11001000000001010111000000000000
+00110100000100000000000000000001
+00110100000011000000000000010000
+11100000000000000000000000010101
+10111001110000000000100000000000
+10111001101000000001000000000000
+01011011100001110000000001001100
+01011011100010000000000001010000
+01011011100010010000000001010100
+01011011100010100000000001001000
+11111000000000000000110101011010
+10110110110000010001100000000000
+01000000011000110000000000000000
+00110101100011001111111111111111
+10110110101011000101100000000000
+10111001110000000000100000000000
+00110001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000000110101000010
+00101011100010100000000001001000
+00101011100010010000000001010100
+00101011100010000000000001010000
+00101011100001110000000001001100
+10111000001000000111000000000000
+01111101100001000000000000000000
+01111101110000110000000000000000
+10100000100000110001100000000000
+01011100011000001111111111101001
+01011101100101110000000000000100
+00110100000000100000000000110000
+00110011100000100000000001100111
+00110100000011000000000000001111
+01100110001000100000000000100000
+10100010000000100001000000000000
+01000100010000000000000000001011
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110100000000110000000000101101
+00110000010000110000000000000000
+00110100000100000000000000000000
+11100000000000000000000000000101
+00110101100011001111111111111111
+10110110101011000001000000000000
+00110000010100010000000000000000
+11100000000000000000000000000011
+11001010111011110000100000000000
+10110100001100000000100000000000
+01001001100000011111111111111010
+01000110000000000000000000000101
+00110101100011001111111111111111
+10110110101011000000100000000000
+00110100000000100000000000101101
+00110000001000100000000000000000
+11001010111011000001100000000000
+10111010011000000000100000000000
+00110100000001000000000000001111
+11100000000000000000000000000110
+10110110101011000001000000000000
+01000000010000100000000000000000
+00110101100011000000000000000001
+00110000001000100000000000000000
+00110100001000010000000000000001
+01001100100011001111111111111011
+10110110011000111001100000000000
+10111010010000000001100000000000
+00110110100101000000000000000001
+01000010100000010000000000000000
+01011100001000001111111101101010
+11001010011110010000100000000000
+00110010011000000000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001100100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000001010
+01011101011000010000000000000011
+00110100000000010000000000001101
+11111011111111111111111111111001
+01111000000000100000000000000000
+00111000010000101001011101010000
+00101000010000100000000000000000
+00101000010000010000000000000000
+00100000001000010000000000000001
+01011100001000001111111111111110
+01011000010010110000000000001000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+10111000001000000101100000000000
+11100000000000000000000000000100
+10111000010000000000100000000000
+00110101011010110000000000000001
+11111011111111111111111111100100
+01000001011000100000000000000000
+01011100010000001111111111111100
+11001001011011000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00010100001000010000000000000010
+00111000010000101001011101001100
+00101000010000100000000000000000
+00100000001000010000000011111111
+00111100001000010000000000010000
+01011000010000010000000000101100
+00101000010000010000000000110000
+01001100001000001111111111111111
+00101000010000010000000000110000
+00100000001000011111111111111111
+11000011101000000000000000000000
+00010100001000010000000000000010
+01111000000000110000000000000000
+00111000011000111001011101001100
+00100000001000010000000011111111
+00101000011000110000000000000000
+00100000010000101111111111111111
+01111000000001001000000000000000
+00111100001000010000000000010000
+10111000010001000001000000000000
+10111000010000010001000000000000
+01011000011000100000000000101100
+00101000011000010000000000110000
+01001100001000001111111111111111
+11000011101000000000000000000000
+01000000001001000000000000000010
+01000000001000110000000000000011
+01111000000000100000000000000000
+00111100100001000000000000011000
+00111100011000110000000000010000
+00111000010000101001011101001100
+10111000100000110001100000000000
+01000000001001000000000000000101
+00101000010000100000000000000000
+10111000011001000001100000000000
+01000000001001000000000000000100
+00111100100001000000000000001000
+10111000011001000001100000000000
+01011000010000110000000000101000
+01000000001000110000000000000001
+01000000001000010000000000000000
+00111100001000010000000000001000
+10111000011000010000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001011101001100
+00101000010000110000000000000000
+00101000011000110000000000101000
+00110000001000110000000000000101
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000001000
+00110000001000110000000000000100
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000010000
+00110000001000110000000000000011
+00101000010000110000000000000000
+00101000011000110000000000101000
+00000000011000110000000000011000
+00110000001000110000000000000010
+00101000010000110000000000000000
+00101000011000110000000000100100
+00110000001000110000000000000001
+00101000010000100000000000000000
+00101000010000100000000000100100
+00000000010000100000000000001000
+00110000001000100000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000000
+10111000010000000110000000000000
+00111001011010111001011101001100
+01011100001000000000000000000100
+00101001011000010000000000000000
+01011000001000000000000000000000
+11100000000000000000000000011100
+00101001011000010000000000000000
+01011000001000000000000000000000
+11111000000000000000000010111000
+00101001011000010000000000000000
+00110100000000100000000011100000
+01011000001000100000000000000000
+01111000000000010000000000000000
+00111000001000011001010000000000
+01011000001011000000000000000000
+00110100000000100000100000000000
+00110100000000010000000000000000
+11111011111111111111111110101111
+00110100000000010000000000000000
+00111000000000101000000000000000
+11111011111111111111111110101100
+00110100000000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110101001
+00110100000000010000000000010000
+00110100000000100000000000000000
+11111011111111111111111110100110
+01111101100000100000000000000000
+00110100000000010000000000000000
+11001000000000100001000000000000
+00100000010000100001001000000000
+00110100010000100000000101000000
+11111011111111111111111110100000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000000
+00111000010000101001010000000000
+00101000010010110000000000000000
+10111000001000000110000000000000
+00110100000000010000000000000100
+11111011111111111111111110000100
+01111101011010110000000000000000
+00001111100000010000000000010010
+00110100000000010000000000000100
+11001000000010110101100000000000
+11111011111111111111111101111111
+00100001011010110000000000100000
+00001111100000010000000000010010
+00110101011010110000000000000100
+01000101100000000000000000000100
+00110100000000010000000000010100
+11111011111111111111111101111001
+00001101100000010000000000000000
+00101111100000010000000000010010
+10100001011000010000100000000000
+11100100001010110000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101101100
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000000
+00111000011000111001010000001000
+10111000010000000101100000000000
+00101000011000100000000000000000
+01011000001000100000000000000000
+01111000000000010000000000000000
+00111000001000011001010000001100
+00101000001011000000000000000000
+00110100000000010000000001000000
+11111011111111111111111101011000
+00000000001000010000000000000100
+00100000001000010000000000011111
+00001000001000010000001100100000
+10110100001011000000100000000000
+01011001011000010000000000000000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111101001001
+00111000001000100000000000000001
+00110100000000010000000001000000
+11111011111111111111111101010010
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000010000000001000000
+11111011111111111111111100111110
+00110100000000101111111111111110
+10100000001000100001000000000000
+00110100000000010000000001000000
+11111011111111111111111101000110
+00110100000000010000000000000000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000000
+00111001011010111001011101001100
+00101001011000010000000000000000
+00101000001000100000000000000100
+00111000010000100000000000010000
+01011000001000100000000000000100
+00110100000000010000000000000001
+11111000000000000000001011111000
+00101001011000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000100000
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000001000100
+11111011111111111111111100011101
+00111000001000100000000000100000
+01000101011000000000000000000011
+00110100000000101111111111011111
+10100000001000100001000000000000
+00110100000000010000000001000100
+11111011111111111111111100100011
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000100000000000000000
+00111000010000101001010001000000
+00101000010000100000000000000000
+01111000000010110000000000000000
+00111001011010111001011101001100
+01011001011000100000000000000000
+11111011111111111111111100100010
+00110100000000010000000000000001
+11111011111111111111111111100100
+00101001011000010000000000000000
+01111000000001000000000000000000
+00111000100001001000000101110000
+00101000100000110000000000000000
+01011000001000000000000000000000
+00110100000000100000000000000011
+01011000001000100000000000001100
+01011000001000110000000000001000
+01111000000000110000000000000000
+00111000011000111000000101110100
+01011000001000100000000000000100
+00101000011000100000000000000000
+01011000001000100000000000111100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000000
+00111000001000011000111001000000
+00101000001000100000000000000000
+01111000000000010000000000000000
+00111000001000011000101010000100
+01000100010000000000000000000011
+01111000000000010000000000000000
+00111000001000011000101010001100
+00101000001010110000000000000000
+01011101011000000000000000000100
+01111000000000010000000000000000
+00111000001000010111101010101000
+11100000000000000000000000110110
+01111000000000110000000000000000
+00111000011000111000000101111000
+00101000001011000000000000000100
+00101001011000100000000000000000
+00101000011000010000000000000000
+01000100010000010000000000010001
+10111001011000000000100000000000
+01111000000001000000000011111111
+11100000000000000000000000001101
+00101000001000110000000000000000
+00111100011001100000000000011000
+00000000011001010000000000011000
+10111000110001010010100000000000
+10100000011001000011000000000000
+00000000110001100000000000001000
+00100000011000111111111100000000
+00111100011000110000000000001000
+10111000101001100010100000000000
+10111000101000110001100000000000
+01011000001000110000000000000000
+00110100001000010000000000000100
+01010101100000011111111111110100
+01111000000001000000000000000000
+00111000100001001000000101111000
+00101001011000110000000000000000
+00101000100000010000000000000000
+01000100011000010000000000000101
+01111000000000010000000000000000
+00111000001000010111101011000000
+11111011111111111111110111000101
+11100000000000000000000010101011
+01111000000000010000000000000000
+00111000001000011001010000000100
+00101000001000100000000000000000
+00110101011010110000000000000100
+01011100010000000000000000010110
+00101001011000110000000000001000
+00110100000000100001001000110100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000001011
+00101001011000110000000000010000
+00110100000000100101011001111000
+00000000011000110000000000001101
+00100000011000111111111111111111
+01011100011000100000000000000110
+00101001011000110000000000011000
+00110100010000100100010001000100
+00000000011000110000000000001101
+00100000011000111111111111111111
+01000100011000100000000000000101
+01111000000000010000000000000000
+00111000001000010111101011101000
+11111011111111111111110110101101
+11100000000000000000000010010011
+00110100000000100000000000000001
+01011000001000100000000000000000
+00110111100000010000000000010100
+11111011111111111111111011010110
+01111000000001100000000000000000
+00111000110001101000000101111100
+00101000110001010000000000000000
+00101001011001110000000000001000
+00101001011001100000000000010000
+00101001011000010000000000011000
+10100000111001010011100000000000
+10100000110001010011000000000000
+10100000001001010000100000000000
+01011001011001110000000000001000
+01011001011001100000000000010000
+01011001011000010000000000011000
+01000011100010000000000000010100
+01000011100010010000000000010101
+00110101011001000000000000001000
+00111101000010000000000000001000
+00110101011000110000000000010000
+10111001000010010100000000000000
+00111101000010000000000000001101
+00110101011000100000000000011000
+10111000111010000011100000000000
+01011001011001110000000000001000
+01000011100001110000000000010110
+01000011100010000000000000010111
+00111000000010011100101011111110
+00111100111001110000000000001000
+10111000111010000011100000000000
+00111100111001110000000000001101
+00110100000010000000000000000001
+10111000110001110011000000000000
+01011001011001100000000000010000
+01000011100001100000000000011000
+01000011100001110000000000011001
+00111100110001100000000000001000
+10111000110001110011000000000000
+00111100110001100000000000001101
+10111000001001100000100000000000
+01111000000001100000000000000000
+00111000110001101000000110000000
+01011001011000010000000000011000
+00101000110001110000000000000000
+10111001011000000000100000000000
+11100000000000000000000000001011
+00101000001001100000000000000000
+00000000110010100000000000001101
+00100001010010101111111111111111
+01011101010010010000000000000110
+00100000110010100000000000000111
+01011101010010000000000000000100
+10100000110001010011000000000000
+10111000110001110011000000000000
+01011000001001100000000000000000
+00110100001000010000000000001000
+01010101100000011111111111110110
+01111000000001110000000000000000
+00111000111001111000000101111100
+01111000000001100000000000000000
+10111001011000000000100000000000
+00110100000001010000000000000000
+00110100000010100000101010101010
+00110100000010010000000000000111
+00101000111010000000000000000000
+00111000110001101000111001000000
+11100000000000000000000000010000
+00101000001001110000000000000000
+00000000111011010000000000001101
+00100001101011011111111111111111
+01011101101010100000000000001011
+00000000111011010000000000000111
+00100001101011010000000000011111
+01011101101010010000000000001000
+10100000111010000011100000000000
+01011000001001110000000000000000
+00101000110001010000000000000000
+00111100101001010000000000001101
+10111000101001110011100000000000
+01011000001001110000000000000000
+10111000001000000010100000000000
+00110100001000010000000000001000
+01010101100000011111111111110001
+01111000000000010000000000000000
+00111000001000011001011101001100
+00101000001000010000000000000000
+00110100000001100000000000000000
+01011000001000000000000000010100
+11100000000000000000000000001111
+00101001011001110000000000000000
+00101001011010010000000000000100
+00110101011010110000000000001000
+00100000111010000000111111111111
+00111101001010010000000000010100
+00000000111001110000000000001100
+01011000001010000000000000011000
+10111001001001110011100000000000
+00111100111001110000000000001000
+00100000110010010000000000111111
+00111000111001110000000001000000
+10111000111010010011100000000000
+01011000001001110000000000010100
+00110100110001100000000000000001
+01010101100010111111111111110010
+01000100101000000000000000001011
+01111000000010000000000000000000
+00111001000010001000000101111100
+00101000101001110000000000000000
+00101001000001100000000000000000
+01111000000010000000000000000000
+00111001000010001000000110000100
+10100000111001100011000000000000
+00101001000001110000000000000000
+10111000110001110011000000000000
+01011000101001100000000000000000
+01111000000001110000000000000000
+00111000111001111000000101111100
+00101000100001100000000000000000
+00101000111001010000000000000000
+01111000000010000000000000000000
+00111001000010001000000110001000
+10100000110001010011000000000000
+01011000100001100000000000000000
+00101000011001100000000000000000
+10100000110001010011000000000000
+01011000011001100000000000000000
+00101000010001100000000000000000
+10100000110001010010100000000000
+01011000010001010000000000000000
+00101000100001100000000000000000
+00101001000001010000000000000000
+10111000110001010010100000000000
+01011000100001010000000000000000
+00101000011001010000000000000000
+01111000000001000000101011001111
+10111000101001000010000000000000
+01111000000001010000000000000000
+01011000011001000000000000000000
+00111000101001011000000110001100
+00101000010001000000000000000000
+00101000101000110000000000000000
+10111000100000110001100000000000
+01011000010000110000000000000000
+00110100000000100000000010000000
+01011000001000100000000000010100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+01111000000000110000000000000000
+00111000011000111001011101001000
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+01111000000000110000000000000000
+00111000011000111001011101001000
+01000100010000000000000000000100
+00101000011000100000000000000000
+01011000010000010000000000000100
+11000011101000000000000000000000
+00101000011000100000000000000000
+01011000010000010000000000001000
+11000011101000000000000000000000
+00110100000000100000000000000000
+11100000000000000000000000000011
+00110100000000000000000000000000
+00110100010000100000000000000001
+01011100010000011111111111111110
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000000
+00111000010000101000101010010100
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111111011110
+00101001011000010000000000001000
+11111011111111111111111111101110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111111011001
+00101001011000010000000000001000
+11111011111111111111111111101001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000000
+00111000010000101000101010010100
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111111001000
+00101001011000010000000000001000
+11111011111111111111111111011000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111111000011
+00101001011000010000000000001000
+11111011111111111111111111010011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110111110
+00101001011000010000000000001000
+11111011111111111111111111001110
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111110111001
+00101001011000010000000000001000
+11111011111111111111111111001001
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000100000000000000000
+00111000010000101000101010010100
+10110100010010110101100000000000
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111110101000
+00101001011000010000000000001000
+11111011111111111111111110111000
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111110100011
+00101001011000010000000000001000
+11111011111111111111111110110011
+00101001011000010000000000000100
+00110100000000100000000000000001
+11111011111111111111111110011110
+00101001011000010000000000001000
+11111011111111111111111110101110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000000110000000000000000
+00111000011000111000101010010100
+00100000010011110000000011111111
+00110100000011100000000000001000
+10110100011010110101100000000000
+00101001011000010000000000000100
+00100001111000100000000010000000
+00110101110011101111111111111111
+11111011111111111111111110000110
+00101001011000010000000000001000
+00111101111011110000000000000001
+00100001110011100000000011111111
+11111011111111111111111110010100
+00101001011000010000000000000000
+00110100000000100000000000000001
+00110101011011010000000000000100
+11111011111111111111111101111110
+00101001011000010000000000001000
+00110101011011000000000000001000
+00100001111011110000000011111111
+11111011111111111111111110001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101110111
+00101001011000010000000000001000
+11111011111111111111111110000111
+01011101110000001111111111101011
+00101001101000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101110001
+00101001100000010000000000000000
+11111011111111111111111110000001
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111101101100
+00101001100000010000000000000000
+11111011111111111111111101111100
+01111000000000010000000000000000
+00111000001000011001011101001000
+00101000001000010000000000000000
+00101001101011100000000000000000
+00110100000000100000000000000000
+00101000001000010000000000000100
+10100000001011100111000000000000
+00101001011000010000000000000000
+11111011111111111111111101100001
+00101001100000010000000000000000
+11111011111111111111111101110001
+00101001101000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111101011100
+00101001100000010000000000000000
+11111011111111111111111101101100
+01111101110000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+00100000001000010000000011111111
+00001000001010110000000000001100
+01111000000001000000000000000000
+00111000100001001000101010010100
+10110100100010110101100000000000
+00101001011000010000000000000100
+10111000010000001000000000000000
+00110100000000100000000000000001
+00100000011100010000000011111111
+11111011111111111111111100111110
+00101001011000010000000000001000
+01111000000011110000000000000000
+00110100000011100000000000001000
+11111011111111111111111101001100
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110100000011010000000000000000
+11111011111111111111111100110110
+00101001011000010000000000001000
+00111001111011111001011101001000
+11111011111111111111111101000101
+00101001011000010000000000000000
+00110100000000100000000000000001
+00111101101011010000000000000001
+11111011111111111111111100101111
+00101001011000010000000000001000
+00100001101011010000000011111111
+11111011111111111111111100111110
+00101001111000010000000000000000
+00101001011000100000000000000100
+00101000001000010000000000000100
+10100000001000100000100000000000
+01000100001000000000000000000010
+00111001101011010000000000000001
+00101001011000010000000000000000
+00110100000000100000000000000000
+00110101110011101111111111111111
+11111011111111111111111100100010
+00101001011000010000000000001000
+00110101011011000000000000001000
+11111011111111111111111100110001
+01011101110000001111111111101100
+01000110001011100000000000000100
+00101001011000010000000000000100
+00110100000000100000000000000001
+11100000000000000000000000000011
+00101001011000010000000000000100
+00110100000000100000000000000000
+11111011111111111111111100010111
+00101001100000010000000000000000
+11111011111111111111111100100111
+00101001011000010000000000000000
+00110100000000100000000000000001
+11111011111111111111111100010010
+00101001100000010000000000000000
+11111011111111111111111100100010
+00101001011000010000000000000000
+00110100000000100000000000000000
+11111011111111111111111100001101
+00101001100000010000000000000000
+11111011111111111111111100011101
+00110010000011010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+00100000001000010000000000000011
+00111100001000010000000000010000
+10111000001000100001000000000000
+01111000000000010000000000000000
+00111000001000011001011101011000
+00101000001000010000000000000000
+01011000001000100000000000000100
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000010000000000000000
+00111000001000011001011101011000
+00101000001000010000000000000000
+01111000000010110000000000000000
+00110100000001000000000000000001
+00101000001000110000000000000000
+00111001011010111001011100111100
+00000000011000100000000000011000
+00100000010000100000000000001111
+01000100010001000000000000000110
+01111000000000010000000000000000
+00111000001000010111101100010000
+11111011111111111111101111111011
+01011001011000000000000000000000
+11100000000000000000000000000110
+01011001011000100000000000000000
+00110100000000100000000000000111
+01011000001000100000000001000000
+00111000011000110000010000000000
+01011000001000110000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000010000000110100000000000
+01111000000000100000000000000000
+00111000010000101001011100111100
+00101000010000100000000000000000
+10111000001000000111100000000000
+10111000011000000110000000000000
+10111000100000000101100000000000
+00110100000000010000000000000000
+01000100010000000000000010001010
+00101101111000110000000000001100
+00111000000000011000000100000000
+11111100011000010001100000000000
+00110100000000011111111111111100
+11001000000000110001100000000000
+10100000011000010001100000000000
+00110100011000110000000000010010
+10110100011011000001000000000000
+00110100000000010000000000111011
+00010100011100010000000000000001
+01010100010000010000000000000011
+00110100000011000000000000111100
+11001001100000110110000000000000
+00110101100100000000000000000001
+00110100000000010000000000000010
+00110100000000100000000000000000
+00000010000100000000000000000001
+11111011111111111111111110111010
+00110100000011100000000000000000
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111110110100
+00110101111011110000000000000010
+01010110001011101111111111111011
+10111001101000000111100000000000
+00110100000011100000000000000000
+00110110000100001111111111111111
+11100000000000000000000000000110
+00101101111000100000000000000000
+00110100000000010000000000000000
+00110101110011100000000000000001
+11111011111111111111111110101010
+00110101111011110000000000000010
+01010110000011101111111111111011
+00100001100000100000000000000001
+00111110000000010000000000000001
+01011100010000000000000000000100
+10110101101000010110100000000000
+00110100000000010000000000000000
+11100000000000000000000000000011
+10110101101000010110100000000000
+00110100000000010000000000000011
+00101101101000100000000000000000
+11111011111111111111111110011110
+01000101011000000000000000000111
+00110100000000010000000000000001
+00110100000000100001000000000000
+11111011111111111111111110011010
+00110100000000010000000000000001
+00110100000000100000000000000000
+11111011111111111111111110010111
+01111000000000010000000000000000
+00111000001000011001011101011000
+00101000001000100000000000000000
+00110100000011010000000000000000
+10111000001000000111100000000000
+00101000010000110000000000000000
+00110100000100000000001111101000
+00111000011000110000000000000001
+01011000010000110000000000000000
+00101001111000010000000000000000
+00101000001011100000000000000000
+00100001110000010000000000000010
+01011100001000000000000000001001
+00110100000000010000000000000001
+00110101101011010000000000000001
+11111000000000000000000001100110
+01011101101100001111111111111001
+01111000000000010000000000000000
+00111000001000010111101110100100
+10111001110000000001000000000000
+11111011111111111111101110010100
+01000101011000000000000000111110
+01111000000011010000000000000000
+00110100000011100000000000000000
+00111001101011011001011101011000
+00110100000011110000000001100100
+00101001101000010000000000000000
+00101000001000100000000000000000
+00100000010000100000100000000000
+01011100010000000000000000001010
+00110100000000010000000000000001
+00110101110011100000000000000001
+11111000000000000000000001010101
+01011101110011111111111111111001
+01111000000000010000000000000000
+00111000001000010111101111010100
+11111011111111111111101110000100
+00110100000011100000000000000000
+11100000000000000000000000000011
+00101000001011100000000000010100
+00100001110011100000000000000001
+01111000000000010000000000000000
+00111000001000011001011101011000
+00101000001000010000000000000000
+01111000000000100000000000000000
+00111000010000101000000110010000
+00101000001011010000000000011000
+00101000001000010000000000010100
+00101000010000010000000000000000
+00110111100000100000000000101100
+10100001101000010110100000000000
+00110111100000010000000000100100
+11111000000000000000000110011011
+01111000000000110000000000000000
+00111000011000111000000110010100
+00101000011000010000000000000000
+01010000001011010000000000001110
+01111000000000110000000000000000
+00111000011000111000000110011000
+00101011100000100000000000101100
+00101000011000010000000000000000
+01010100010000010000000000001001
+00101011100000110000000000101000
+00101011100000100000000000100100
+00110100011000011111111111111111
+11110100011000010001100000000000
+00110100010000101111111111111111
+10110100011000100001000000000000
+01011011100000100000000000100100
+01011011100000010000000000101000
+00101011100000010000000000100100
+00110001011011100000000000000000
+00111101101011010000000000000011
+01011001011000010000000000001000
+00101011100000010000000000101000
+01011001011000000000000000000100
+01011001011011010000000000010000
+01011001011000010000000000001100
+01111000000000010000000000000000
+00111000001000011001011100011100
+00101000001000100000000000000000
+00110100010000100000000000000001
+01011000001000100000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001011101011100
+00101000010000100000000000000000
+01111000000000110000000000000000
+00111000011000111001011101001000
+01011000011000100000000000000000
+01000100001000000000000000000101
+00101000010000110000000000011000
+01111000000000011000000000000000
+10111000011000010000100000000000
+11100000000000000000000000000110
+01111000000001000000000000000000
+00111000100001001000000101001100
+00101000010000110000000000011000
+00101000100000010000000000000000
+10100000011000010000100000000000
+01011000010000010000000000011000
+11000011101000000000000000000000
+01111000000000010000000000000000
+00111000001000011001011101001000
+00101000001000010000000000000000
+00101000001000010000000000011100
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001011101001000
+00101000010000100000000000000000
+00101000010000110000000000011100
+10110100001000110000100000000000
+00101000010000110000000000011100
+11001000011000010001100000000000
+01001000000000111111111111111110
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+00110100000000100000000000000000
+10111000001000000110000000000000
+11111000000000000000000111111010
+10111000001000000101100000000000
+01001100001000000000000000000101
+01111000000000010000000000000000
+00111000001000010111110000101100
+10111001011000000001000000000000
+11100000000000000000000000000100
+00101001100000100000000000000000
+01111000000000010000000000000000
+00111000001000010111110001011000
+11111011111111111111101100011010
+10111001011000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01111000000000010000000000000000
+00111000001000011001010000010000
+01011000001000000000000000000000
+01111000000000100000000000000000
+01111000000000010000000000000000
+00111000001000011001010000100100
+00111000010000101001010000010100
+00110100000000111111111111111111
+01011000001000110000000000000000
+01011000010000110000000000000000
+01011000001000000000000000001000
+01011000010000000000000000001000
+01011000010000000000000000000100
+01011000001000000000000000000100
+01011000010000000000000000001100
+01011000001000000000000000001100
+00110100000000100000000000000000
+00110100000000010000000000000000
+11111000000000000000011010011110
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110100
+01011011100010110000000000001100
+01011011100011000000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+00110100000000010000000000000000
+11111000000000000000011011110000
+10111000001000000101100000000000
+00110100000000100000000000000000
+01011100001000000000000010000001
+11111011111111111111110010111100
+01111000000000110000000000000000
+00111000011000111001010000010100
+00101000011001010000000000001000
+01111000000000100000000000000000
+00111000010000101001010000010000
+10111000001000000010000000000000
+00101000010000100000000000000000
+01000100101010110000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011101
+11100000000000000000000000010000
+00110100000000010000000000000001
+01000100100000010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000000
+00111000011000111001010000010100
+00101000011001010000000000000100
+00110100000000010000000000000100
+01001100001001010000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100001010000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001010000000000000100
+00110100000000010000000000000100
+00110100101001010000000000000001
+01011000011001010000000000000100
+01001100001001010000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+01111000000000110000000000000000
+00111000011000111001010000100100
+00101000011001010000000000001000
+01000100101000000000000000000100
+00110100000000010000000000000001
+01011100101000010000000000011100
+11100000000000000000000000001111
+01000100100001010000000000000101
+00101000011000010000000000000100
+00110100001000010000000000000001
+01011000011000010000000000000100
+11100000000000000000000000000010
+01011000011000000000000000000100
+01111000000000110000000000000000
+00111000011000111001010000100100
+00101000011001000000000000000100
+00110100000000010000000000000100
+01001100001001000000000000010000
+00110100000000010000000000000001
+01011000011000010000000000001000
+11100000000000000000000000000010
+01000100100000000000000000000011
+01011000011000000000000000000100
+11100000000000000000000000001010
+00101000011001000000000000000100
+00110100000000010000000000000100
+00110100100001000000000000000001
+01011000011001000000000000000100
+01001100001001000000000000000101
+00110100000000010000000000000010
+01011000011000010000000000001000
+00110100010000011111111000001100
+01011000011000010000000000001100
+00110100000000010010010100011011
+01001100001000100000000000110000
+01111000000000100000000000000000
+00111000010000101001010000010100
+00101000010001000000000000001000
+00110100000000010000000000000010
+00110100000000101111111111111111
+01011100100000010000000000110001
+01111000000000110000000000000000
+00111000011000111001010000100100
+00101000011000010000000000001000
+01011100001001000000000000101101
+00101000011000100000000000001100
+00110100000000010001111100111111
+11100000000000000000000000000010
+00110100010000101110000011000000
+01001000010000011111111111111111
+01111000000000110000000000000000
+00111000011000111001010000100100
+01011000011000100000000000001100
+01111000000000110000000000000000
+00111000011000111001010000010100
+00101000011000110000000000001100
+00110100000000010001111100111111
+11100000000000000000000000000010
+00110100011000111110000011000000
+01001000011000011111111111111111
+01111000000001000000000000000000
+00111000100001001001010000010100
+01011000100000110000000000001100
+01001100011000100000000000000011
+00110100010001001111000001100000
+11100000000000000000000000000100
+00110100000001000000000000000000
+01001100010000110000000000000010
+00110100010001000000111110100000
+10110100100000110001100000000000
+00000000011000100000000000011111
+10110100010000110001100000000000
+00010100011000100000000000000001
+01001100010000000000000000000011
+00110100010000100001111101000000
+11100000000000000000000000000100
+00110100000000010001111100111111
+01001100001000100000000000000010
+00110100010000101110000011000000
+01011001100000100000000000000000
+00110100000000100000000000000001
+11100000000000000000000000001000
+01111000000000010000000000000000
+00110100010000100000000001100100
+00111000001000011001010000010000
+01011000001000100000000000000000
+00110100000000010000000000000000
+11111000000000000000011000010010
+00110100000000100000000000000000
+10111000010000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001100
+00101011100011000000000000001000
+00110111100111000000000000001100
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000010000000101100000000000
+00110100000000100000000000000011
+00110100000011000000000000000000
+00110100000011010000001111101001
+01011100001000100000000000100010
+11100000000000000000000000000101
+01000101100011010000000000100111
+11111011111111111111101111010010
+01000100001000000000000000100101
+00110101100011000000000000000001
+10111001011000000000100000000000
+11111011111111111111111101100000
+01000100001000001111111111111010
+01001100001000000000000000000010
+11100000000000000000000000011000
+00110111100000010000000000010100
+00110100000000100000000000000000
+11111000000000000000000100101011
+01001000000000010000000000000111
+00101001011000100000000000000000
+00101011100000010000000000010100
+00110100010000111111111100111000
+01010100011000010000000000000011
+00110100010000100000000011001000
+01010000010000010000000000011101
+00110100000000100000000000000001
+10111001011000000000100000000000
+11111000000000000000000100100001
+01111000000000110000000000000000
+00101001011000100000000000000000
+00111000011000110111110011001000
+01001100001000000000000000000011
+01111000000000110000000000000000
+00111000011000110111110011000000
+01111000000000010000000000000000
+00111000001000010111110011010000
+11111011111111111111101001000010
+11100000000000000000000000010000
+10111001011000000000100000000000
+11111011111111111111111100010101
+10111000001000000110000000000000
+01001000000000010000000000000101
+00101001011000010000000000000000
+11111011111111111111100011010011
+11100000000000000000000000000010
+00110100000011001111111111111111
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000011000000000000000000
+11100011111111111111111111110100
+01111000000000010000000000000000
+00111000001000011001010001110100
+00101000001000010000000000000000
+00101000001000100000000000001000
+00101000001000010000000000001100
+00100000001000010000000011111111
+11000011101000000000000000000000
+01111000000000010000000000000000
+01111000000000110000000000000000
+00111000011000111000000110011100
+00111000001000011001010001110100
+00101000001000010000000000000000
+00101000011000100000000000000000
+01111000000001000000000000000000
+00111000100001001000000110100000
+01011000001000100000000000000000
+01011000001000000000000000010100
+00101000100000110000000000000000
+01011000001000000000000000011000
+01011000001000000000000000010000
+01011000001000110000000000000000
+01011000001000100000000000000000
+01011000001000000000000000011100
+11000011101000000000000000000000
+01111000000001000000000000000000
+00110100000001010000000000000010
+00111000100001001001010001110100
+01011100001001010000000000001110
+00101000100000010000000000000000
+00010100010001000000000000011111
+00100000100001000000000000000111
+10110100100000110001100000000000
+11110100100000110010000000000000
+00000000011000110000000000000011
+10110100100000100001000000000000
+00111100010000100000000000011101
+01011000001000000000000000010100
+01011000001000000000000000011000
+10111000010000110001100000000000
+01011000001000110000000000010000
+11100000000000000000000000000110
+00101000100000010000000000000000
+00100000010000100000000011111111
+01011000001000110000000000010100
+01011000001000100000000000011000
+01011000001000000000000000010000
+01111000000000010000000000000000
+00111000001000011001010001110100
+00101000001000010000000000000000
+00101000001000100000000000000000
+00111000010000100000000000000100
+01011000001000100000000000000000
+00110100000000010000000000000000
+11000011101000000000000000000000
+01111000000001010000000000000000
+00111000101001011001010001110100
+00101000101001010000000000000000
+00100000001000010000000011111111
+00000000011000110000000000000011
+01011000101000100000000000010100
+01011000101000010000000000011000
+01011000101000110000000000010000
+00110100000000010000000000000011
+01011100100000010000000000000111
+00101000101000100000000000000000
+00110100000000011111111111110011
+10100000010000010000100000000000
+00111000001000010000000000001000
+01011000101000010000000000000000
+11000011101000000000000000000000
+00110100000000010000000000000001
+01011100100000010000000000000111
+00101000101000100000000000011100
+00110100000000011111111111100111
+10100000010000010000100000000000
+00111000001000010000000000010000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110100000000010000000000000010
+01011100100000010000000000000110
+00101000101000100000000000011100
+00110100000000011111111111000111
+10100000010000010000100000000000
+00111000001000010000000000100000
+01011000101000010000000000011100
+11000011101000000000000000000000
+00110111100111001111111111100000
+01011011100010110000000000100000
+01011011100011000000000000011100
+01011011100011010000000000011000
+01011011100011100000000000010100
+01011011100011110000000000010000
+01011011100100000000000000001100
+01011011100100010000000000001000
+01011011100111010000000000000100
+10111000001000000110000000000000
+01111000000000010000000000000000
+00111000001000011000000110010000
+00101000001011110000000000000000
+01111000000010110000000000000000
+10111000010000000110100000000000
+00111001011010111001010001110100
+11111011111111111111111110011010
+10111000001000001000100000000000
+00101001011000010000000000000000
+10111000010000001000000000000000
+00101000001011100000000000000100
+10100001110011110111000000000000
+11111011111111111111111110010100
+01011100001100011111111111111001
+01011100010100001111111111111000
+01000101100000000000000000000011
+01011001100000010000000000000000
+01011001100000100000000000000100
+01000101101000000000000000000011
+00111101110000010000000000000011
+01011001101000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000100000
+00101011100011000000000000011100
+00101011100011010000000000011000
+00101011100011100000000000010100
+00101011100011110000000000010000
+00101011100100000000000000001100
+00101011100100010000000000001000
+00110111100111000000000000100000
+11000011101000000000000000000000
+01111000000000010000000000000000
+00111000001000011001010001110100
+00101000001000010000000000000000
+00101000001000010000000000000000
+00100000001000010000000000000100
+01100100001000010000000000000000
+11000011101000000000000000000000
+01111000000000100000000000000000
+00111000010000101001010001110100
+00101000010000100000000000000000
+00101000010000110000000000011100
+01000100001000000000000000000011
+00111000011000110000000000001100
+11100000000000000000000000000011
+00110100000000011111111111110011
+10100000011000010001100000000000
+01011000010000110000000000011100
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00101000001010110000000000000100
+10111000100000000110100000000000
+10111000011000000111100000000000
+01000001011000010000000000000011
+10111000010000000110000000000000
+00110101101011101111111111111111
+11111011111111111111110010010101
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111110011100001
+00010101100000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111110011011101
+01000001011000010000000000000011
+00100001100000100000000011111111
+00110100000011000000000000000000
+11111011111111111111110011011001
+01000001011000010000000000000011
+11111011111111111111110010011100
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00111000010000100000000000000001
+00100000010000100000000011111111
+11111011111111111111110011010001
+11100000000000000000000000000101
+00100000101000010000000011111111
+00110100000000110000000000000000
+11111011111111111111110100010100
+00110101100011000000000000000001
+10110101111011000001000000000000
+00101001011001010000000000000000
+01001001110011001111111111111010
+00100000101000010000000011111111
+00110100000000110000000000000001
+11111011111111111111110100001101
+01000001011000010000000000000011
+11111011111111111111110010101001
+10111001101000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111100100
+01011011100010110000000000011100
+01011011100011000000000000011000
+01011011100011010000000000010100
+01011011100011100000000000010000
+01011011100011110000000000001100
+01011011100100000000000000001000
+01011011100111010000000000000100
+00110100000011000000000000000000
+10111000010000000110100000000000
+10111000011000000111100000000000
+10111000100000000111000000000000
+00101000001010110000000000000100
+11100000000000000000000000100010
+01000001011000010000000000000011
+11111011111111111111110001011010
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111110010100110
+00010101101000100000000000001000
+01000001011000010000000000000011
+00100000010000100000000011111111
+11111011111111111111110010100010
+01000001011000010000000000000011
+00100001101000100000000011111111
+00110101101011010000000000000001
+11111011111111111111110010011110
+10110101111011000001000000000000
+01000001011000010000000000000011
+01000000010000100000000000000000
+11111011111111111111110010011010
+01000001011000010000000000000011
+11111011111111111111110001111101
+01000001011000010000000000000011
+11111011111111111111110001000101
+00101001011000100000000000000100
+01000001011000010000000000000011
+00111100010000100000000000000001
+00100000010000100000000011111110
+11111011111111111111110010010001
+10111000001000001000000000000000
+01000001011000010000000000000011
+11111011111111111111110001110011
+01011110000000001111111111110110
+00110101100011000000000000000001
+01001001110011001111111111011111
+10111001110000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000011100
+00101011100011000000000000011000
+00101011100011010000000000010100
+00101011100011100000000000010000
+00101011100011110000000000001100
+00101011100100000000000000001000
+00110111100111000000000000011100
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000000
+01111000000001000000000000000000
+01111000000001010000000000000000
+00111000011000111000000110100100
+00111000100001001000000110101000
+00111000101001011000000110111000
+00100000010011100000000011111111
+01111000000010110000000000000000
+00101000011000100000000000000000
+00101000100000110000000000000000
+00101000101001000000000000000000
+00111001011010111000101010110000
+10111000001000000110100000000000
+10111001011000000000100000000000
+11111000000000000000010111110000
+00110100000011001111111111111111
+01001000000000010000000000100100
+01000101110000000000000000010010
+00101001011000110000000001110000
+00110100000000100000000000000000
+10111001011000000000100000000000
+11111000000000000000011001110100
+00101001101000100000000000000000
+01111000000000011000000000000000
+00110111100000110000000000011000
+10111000010000010000100000000000
+01011011100000010000000000011000
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110100000001000000000000000100
+11111000000000000000011000111111
+01111100001000010000000000000100
+11001000000000010110000000000000
+00111001100011000000000000000001
+11100000000000000000000000001111
+00110100000000100000000000000000
+10111001011000000000100000000000
+00110111100000110000000000011000
+00110100000001000000000000000100
+11111000000000000000011000001010
+00110100000000100000000000000100
+01011100001000100000000000001000
+01111000000000100000000000000000
+00111000010000101000000101001100
+00101011100011000000000000011000
+00101000010000010000000000000000
+10100001100000010000100000000000
+00000001100011000000000000011111
+01011001101000010000000000000000
+01111000000000010000000000000000
+00111000001000011000101010110000
+11111000000000000000010111111011
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00101000001001010000000000001000
+00101000001001000000000000000000
+00101000001001100000000000000100
+10110100010001010001100000000000
+10001000011001000010000000000000
+01011000001000100000000000011100
+10001000010001100001000000000000
+10110100100000100001000000000000
+00101000001001000000000000001100
+00010100010000100000000000001100
+10110100010001000010000000000000
+00101000001000100000000000010100
+01001100100000100000000000000101
+00101000001001000000000000010000
+01000100100000000000000000001000
+01001100101000110000000000001011
+11100000000000000000000000000110
+00101000001000100000000000011000
+01001100010001000000000000000110
+00101000001001000000000000010000
+01000100100000000000000000000010
+01001100011001010000000000000101
+01011000001000110000000000001000
+11100000000000000000000000000011
+01011000001000110000000000001000
+10111000100000000001000000000000
+01011000001000100000000000100000
+10111000010000000000100000000000
+11000011101000000000000000000000
+00101000001000100000000000001100
+01011000001000000000000000001000
+01011000001000100000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000000010100
+10111000010000000000100000000000
+11111000000000000000011011010011
+00101001011000110000000000001100
+00101001011000100000000000000000
+01001000001000110000000000001011
+00101001011000010000000000000100
+01001100010000010000000000000011
+00110100010000100000000000000001
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000010001
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000010000000000010000
+11100000000000000000000000001110
+00101001011000010000000000001000
+01001100001000100000000000000011
+00110100010000101111111111111111
+01011001011000100000000000000000
+00101001011000100000000000000000
+01011100010000010000000000000111
+00110100000000010000000000000001
+01011001011000010000000000010100
+01011001011000000000000000000000
+01011001011000000000000000010000
+00110100000000011111111111111111
+11100000000000000000000000000010
+00101001011000010000000000010000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+01011000001000000000000000010000
+01011000001000000000000000000000
+01011000001000000000000000010100
+11000011101000000000000000000000
+01111000000000110000000000000000
+00111000011000111001011100111000
+00101000011001000000000000000000
+01001000100000010000000000010011
+01111000000000110000000000000000
+00111000011000111001010001011000
+11001000001001000000100000000000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000101000
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000101000
+11000011101000000000000000000000
+01111000000000110000000000000000
+00111000011000111001010001011000
+01000100010000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10111000001000110000100000000000
+11100000000000000000000000000111
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100100
+10100100001000000000100000000000
+10100000001000110000100000000000
+01011000010000010000000000100100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000010110000000000000000
+10111000001000000110000000000000
+01111000000000010000000000000000
+00111001011010111001011100111000
+00111000001000011001011100110000
+00101000001000010000000000000000
+00101001011011010000000000000000
+10110100001011010110100000000000
+00101001100000010000000000000000
+10111001101000000001000000000000
+11111000000000000000000001011100
+00101001100000010000000000000100
+00101001011000110000000000000000
+10111001101000000001000000000000
+11111000000000000000000011011011
+01011001100000000000000000001100
+01011001100000000000000000001000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000000000
+11111000000000000000000010110011
+01111000000000010000000000000000
+00111000001000011001010001011000
+00101000001000010000000000000000
+00110100000000100000000000000001
+00110100000000110000000000001001
+01011000001000100000000000000100
+01011001011000110000000000001100
+01111000000000110000000000000000
+00111000011000111000000111001100
+01011001011000100000000000001000
+00101000011000100000000000000000
+01011000001000100000000001001100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+10111000001000000001000000000000
+00101000001000010000000000000000
+00101000001000110000000001001000
+00110100000000010000000000000000
+01000100011000000000000000010110
+00101000010000110000000000000100
+00101000011000110000000000111000
+01000100011000000000000000010011
+01111000000000110000000000000000
+00111000011000111001010001011000
+00101000011000110000000000000000
+00101000011001000000000000000100
+00100000100001000000000000000100
+01000100100000000000000000001101
+00101000011000110000000000000100
+00100000011000110000000000001000
+01011100011000000000000000001010
+00101000010000100000000000001100
+00110100000000110000000000001010
+00110100000000010000000000000001
+01010100010000110000000000000110
+01111000000000010000000000000000
+00111100010000100000000000000010
+00111000001000011000001011011000
+10110100001000100000100000000000
+00101000001000010000000000000000
+11000011101000000000000000000000
+01111000000001000000000000000000
+00111000100001001001010001011000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000000
+00111000110001101000000111010100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+01111000000001000000000000000000
+00111000100001001001010001011000
+00101000100001010000000000000000
+00110100000001000000000000000000
+01000100011000000000000000000010
+01111000000001001000000000000000
+01111000000001100000000000000000
+00111000110001101000000111010100
+00101000110000110000000000000000
+00111100001000010000000000011000
+10100000010000110001000000000000
+10111000010000010000100000000000
+10111000001001000010000000000000
+01011000101001000000000001001100
+11000011101000000000000000000000
+00110100000000110000000000000101
+01011000001000110000000000101000
+00111000000000111111111111111011
+01011000001000110000000000101100
+00110100000000111111111101101010
+01011000001000110000000000011000
+00110100000000111111111111111110
+01011000001000110000000000010100
+00110100000000110000000000000001
+01011000001000110000000000100100
+00110100000000110000000011001000
+01011000001000110000000001000100
+00110100000000110010011100010000
+01011000001000110000000000111100
+00110100000000110000000001100100
+01011000001000110000000001000000
+01011000001000100000000000001100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000001100
+10111000010000000110100000000000
+00110100000011000000000000000000
+01011100011000010000000001000111
+00110100000000010000000000100010
+00110100000000110000000000000000
+11111011111111111111111111000100
+00101001011000100000000000000100
+00110100000000010000000000100101
+00110100000000110000000000000000
+11111011111111111111111111000000
+00101001011000010000000000001000
+01001100001000000000000000000100
+01011001011011010000000000000100
+01011001011011010000000000001000
+11100000000000000000000000111011
+01001101101000010000000000000101
+00101001011000100000000000000000
+01111000000000010000000001000000
+10110100010000010000100000000000
+01011001011000010000000000000000
+00101001011000110000000000000000
+01111000000001010000000000000000
+00101001011000100000000000000100
+00111000101001011000000111011000
+00101000101000010000000000000000
+10110101101000110010000000000000
+11001000100000100110000000000000
+01001000001011000000000000000110
+01111000000001010000000000000000
+00111000101001011000000111011100
+00101000101000010000000000000000
+01001001100000010000000000000010
+11100000000000000000000000000010
+10111000001000000110000000000000
+01111000000001010000000000000000
+00111000101001011000000111100000
+00101000101000010000000000000000
+01001100001001000000000000000110
+01001100001000100000000000000101
+11001000011000010001100000000000
+11001000010000010000100000000000
+01011001011000110000000000000000
+01011001011000010000000000000100
+00101001011000010000000000000100
+10111001100000000001000000000000
+01011001011011010000000000001000
+00110100001000010100000000000000
+01011001011000010000000000000100
+00110101011000010000000000010100
+11111011111111111111111011011010
+01111000000000110000000000000000
+00111000011000111001010001011000
+00101001011000100000000000010000
+10111000001000000110100000000000
+00101000011000010000000000000000
+00110100000000110000000000000000
+01011000001011010000000001000000
+00110100010000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000100110
+11111011111111111111111110001101
+00110100000000010000000000100000
+10111001101000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111110001001
+10111001100000000001000000000000
+00110100000000010000000000100001
+00110100000000110000000000000001
+11111011111111111111111110000101
+10111001100000000001000000000000
+00110101011000010000000000111000
+11111011111111111111111011100101
+01111100001011000000000000000000
+10111001100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00101000001000010000000000101000
+01011001011000000000000000000100
+01011001011000000000000000000000
+01011001011000010000000000100000
+00110100000000011111111111111111
+01011001011000010000000000001000
+01011001011000000000000000010000
+00110101011000010000000000010100
+11111011111111111111111011001100
+00110101011000010000000000111000
+11111011111111111111111011110011
+00101001011000010000000000001100
+00110100000000100000000000000001
+11111011111111111111111011110100
+00110100000000010000000000100100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111101100100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00110100000000010000000000000101
+01011001011000010000000000011000
+00111000000000011111111111111010
+01011001011000010000000000011100
+00110100000000010000000000000001
+01011001011000010000000000010100
+00110100000000010111010100110000
+01011001011000010000000000010000
+00110100000000011111101110110100
+01011001011000010000000000001000
+00110100000000011111111111100010
+01011001011000010000000000000100
+00110100000000010000010010110000
+01011001011000010000000000110100
+00110100000000010000001111101000
+01011001011000010000000000101100
+00110100000000010000000001100100
+01011001011000010000000000110000
+01111000000000010000000000000000
+00111000001000011001011100111000
+00101000001000010000000000000000
+01011001011000110000000001100100
+01011001011000100000000001100000
+11001000011000010001100000000000
+01011001011000110000000001101100
+00110101011000010000000000000100
+01011001011000000000000001110000
+11111011111111111111111010011111
+00110101011000010000000000101000
+11111011111111111111111011000110
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01011000001000000000000001000100
+01011000001000000000000001000000
+00110100000000011111111111111111
+01011001011000010000000001001000
+01011001011000010000000001001100
+01011001011000010000000001010000
+01011001011000010000000001010100
+00110100000000010000000000000001
+01011001011000010000000001110000
+01011001011000000000000001011000
+00110101011000010000000000000100
+01011001011000000000000001011100
+01011001011000000000000001101000
+11111011111111111111111010000111
+00110101011000010000000000101000
+11111011111111111111111010101110
+00101001011000010000000001100000
+00110100000000100000000000000001
+11111011111111111111111010101111
+00101001011000010000000001100100
+00110100000000100000000000000001
+11111011111111111111111010101100
+00110100000000010000000000000100
+00110100000000100000000000000001
+00110100000000110000000000000001
+11111011111111111111111100101011
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000001110000
+10111000001000000101100000000000
+00110100000000010000000000000001
+01000100100000000000000001111000
+00101001011000010000000001100000
+01011100011000010000000000000010
+01011001011000100000000001001000
+00101001011000010000000001100100
+01011100011000010000000000000010
+01011001011000100000000001001100
+00101001011000010000000001001000
+01001000000000010000000000001001
+00101001011000100000000001010000
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000000
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000000
+01011001011000010000000001010000
+00101001011000010000000001001100
+01001000000000010000000000001001
+00101001011000100000000001010100
+01001000000000100000000000000110
+01001100001000100000000000000101
+00101001011000110000000001000100
+01111000000000100000000001000000
+10110100011000100001000000000000
+01011001011000100000000001000100
+01011001011000010000000001010100
+00101001011000110000000001001000
+00110100000000010000000000000000
+01001000000000110000000001011011
+00101001011000100000000001001100
+01001000000000100000000001011001
+00101001011011000000000001000000
+00101001011000010000000000111000
+10110100011011000001100000000000
+00101001011011000000000001000100
+11001000011000100001000000000000
+11001000010011000110000000000000
+01000100001000000000000000000110
+00100001100011000011111111111111
+00100001100000010010000000000000
+01000100001000000000000000000011
+00110100000000011100000000000000
+10111001100000010110000000000000
+10111001100000000001000000000000
+00110101011000010000000000000100
+11111011111111111111111000100011
+00101001011000100000000001101100
+01111000000000110000000000000000
+00111000011000111001010001011000
+00100000010000100000000000001111
+10111000001000000110100000000000
+00111100010000100000000000010000
+00101000011000010000000000000000
+00100001101000111111111111111111
+10111000011000100001000000000000
+01011000001000100000000001000100
+00101001011000110000000001000000
+00101001011000100000000001001000
+00110100000000010000000000000101
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011100000
+00101001011000110000000001000100
+00101001011000100000000001001100
+00110100000000010000000000000010
+10110100011000100001000000000000
+00110100000000110000000000000000
+11111011111111111111111011011010
+00110100000000010000000000000001
+10111001100000000001000000000000
+00110100000000110000000000000000
+11111011111111111111111011010110
+00101001011000100000000001101000
+00110100000000110000000000000000
+00110100010000010000000000000001
+01011001011000010000000001101000
+00110100000000010000000000000110
+11111011111111111111111011010000
+00110100000000010000000000000000
+10111001101000000001000000000000
+00110100000000110000000000000001
+11111011111111111111111011001100
+01111000000000100000000000000000
+00110100000000011111111111111111
+00111000010000101000000111100100
+01011001011000010000000001001100
+01011001011000010000000001001000
+00101001011000110000000001000000
+00101000010000010000000000000000
+01001100001000110000000000001010
+00101001011000100000000001000100
+01001100001000100000000000001000
+01111000000001000000000000000000
+00111000100001001000000111101000
+00101000100000010000000000000000
+10110100011000010001100000000000
+10110100010000010000100000000000
+01011001011000110000000001000000
+01011001011000010000000001000100
+00101001011000010000000000111000
+01000100001000000000000000001111
+00101001011000010000000001011100
+00101001011000100000000001011000
+01001100001000100000000000000110
+00110100001000010000000000000001
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000011111111111111111
+11100000000000000000000000000110
+01001100010000010000000000000110
+00110100001000011111111111111111
+01011001011000010000000001011100
+00101001011000010000000001000000
+00110100001000010000000000000001
+01011001011000010000000001000000
+00110101011000010000000000101000
+10111001100000000001000000000000
+11111011111111111111110111111100
+01111100001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+00010100010000110000000000011111
+00110111100000010000000000001100
+01001000000000100000000000001011
+00000000010001000000000000010010
+00111100011000110000000000001110
+00111100010000100000000000001110
+10111000011001000001100000000000
+01011011100000100000000000010000
+00110100000000100001111101000000
+01011011100000110000000000001100
+11111011111111111111001001000101
+00101011100000100000000000010000
+11100000000000000000000000001001
+00001000010000101100000000000000
+01011011100000100000000000010000
+00010100010000100000000000011111
+01011011100000100000000000001100
+00110100000000100001111101000000
+11111011111111111111001000111101
+00101011100000100000000000010000
+11001000000000100001000000000000
+00000000010000010000000000011111
+10110100001000100001000000000000
+00010100010000100000000000000001
+00110100000000010000000000000000
+01011001011000100000000001011000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000100000000001011000
+00101000001000010000000001011100
+11111100010000010000100000000000
+11000011101000000000000000000000
+01011000001000100000000000000100
+01011000001000000000000000011100
+01011000001000110000000000001000
+01011000001000000000000000001100
+01011000001000000000000000010000
+01011000001000000000000000000000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+00110100000000100000000000000001
+01011000001000100000000000000000
+01011000001000000000000000010100
+01011000001000000000000000011100
+01011000001000000000000000001100
+01011000001000000000000000010000
+00101000001000010000000000000100
+11111011111111111111110111100111
+01111000000000010000000000000000
+00111000001000011001011100111000
+00101000001000010000000000000000
+00110100000000100000000000000001
+11111011111111111111110111100010
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111110110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110111100000010000000000010100
+00110100000000100000000000000000
+00110100000000110000000001000000
+11111000000000000000010011000000
+00110100000000011100000000000000
+01111000000001000000000000000000
+01011011100000010000000000100000
+00111000100001001001011100111000
+00110100000000010100000000000000
+01011011100000010000000001000100
+00101000100000010000000000000000
+01011101101000010000000000000101
+01111000000000110000000000000000
+00111000011000111000110110100100
+01011000011011000000000000000000
+11100000000000000000000000100111
+00111101101011010000000000000101
+10110101011011010101100000000000
+00101001011000010000000000000000
+01000100001000000000000000100011
+01111000000000110000000000000000
+00111000011000111000110110100100
+00101000011000010000000000000000
+00101001011000100000000000010000
+11001001100000010000100000000000
+00100000001000010011111111111111
+00010100001000110000000000001100
+01011100010000000000000000000111
+00111100011000110000000000000010
+01011001011000010000000000001100
+00110100000000010000000000000001
+01011001011000110000000000010100
+01011001011000010000000000010000
+11100000000000000000000000010101
+00101001011001000000000000001100
+00110100010000100000000000000001
+10110100001001000000100000000000
+00101001011001000000000000010100
+10110100011001000001100000000000
+00111100011000110000000000000010
+00110111100001000000000001010000
+10110100100000110001100000000000
+00101000011000111111111111000100
+01011001011000100000000000010000
+10110100001000110000100000000000
+00101001011000110000000000001000
+01011001011000010000000000001100
+01011100010000110000000000000111
+11111000000000000000001111101101
+01011001011000010000000000011000
+00110100000000010000000000000001
+01011001011000010000000000011100
+01011001011000000000000000001100
+01011001011000000000000000010000
+00110100000000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000001010000
+11000011101000000000000000000000
+01111000000000110000000000000000
+00111000011000111001010001011000
+01011100010000000000000000001010
+00110100000001000000000000000001
+00101000011000100000000000000000
+10111100100000010000100000000000
+00100000001000010000000011111111
+00101000010000110000000000100000
+00111100001000010000000000010000
+10100100001000000000100000000000
+10100000001000110000100000000000
+11100000000000000000000000001000
+00101000011000100000000000000000
+00110100000001000000000000000001
+10111100100000010000100000000000
+00101000010000110000000000100000
+00100000001000010000000011111111
+00111100001000010000000000010000
+10111000001000110000100000000000
+01011000010000010000000000100000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01111000000000110000000000000000
+10111000010000000101100000000000
+00111000011000111001010100000000
+01000100001000000000000000000111
+00110100001000011111111111111111
+00001000001000110000000001111100
+01111000000000010000000000000000
+00111000001000011001010001111000
+10110100011000010000100000000000
+00110100001000110000000100000100
+10111000011000000000100000000000
+10111001011000000001000000000000
+11111011111111111111111101011000
+01111000000000010000000000000000
+00111000001000011001010001111000
+01011000001010110000000000010100
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+01111000000011000000000000000000
+01111000000011010000000000000000
+10111000001000000111000000000000
+00110100000010110000000000000000
+00111001100011001001011100111000
+00111001101011011001010000111100
+11100000000000000000000000001010
+00101001101000010000000000000000
+10010100001010110000100000000000
+00100000001000010000000000000001
+01000100001000000000000000000101
+00111101011000100000000000000101
+10110101110000100001000000000000
+00110100010000010000000111110100
+11111011111111111111111101101001
+00110101011010110000000000000001
+00101001100000010000000000000000
+01001000001010111111111111110110
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110111100111001111111110111100
+01011011100010110000000001000100
+01011011100011000000000001000000
+01011011100011010000000000111100
+01011011100011100000000000111000
+01011011100011110000000000110100
+01011011100100000000000000110000
+01011011100100010000000000101100
+01011011100100100000000000101000
+01011011100100110000000000100100
+01011011100101000000000000100000
+01011011100101010000000000011100
+01011011100101100000000000011000
+01011011100101110000000000010100
+01011011100110000000000000010000
+01011011100110010000000000001100
+01011011100110110000000000001000
+01011011100111010000000000000100
+01111000000110110000000000000000
+01111000000010110000000000000000
+01111000000110010000000000000000
+01111000000011010000000000000000
+01111000000100010000000000000000
+01111000000100000000000000000000
+01111000000011000000000000000000
+01111000000101110000000000000000
+01111000000011110000000000000000
+00111011011110111001010001011000
+00111001011010111001010001111000
+00110100000101000000000000001001
+00111011001110011000001100000100
+00110100000110000000000000000001
+00110100000100110000000000000011
+00111001101011011001010011100000
+00110100000100100000000000001000
+00111010001100011001010100000000
+00111010000100001001010010010000
+00111001100011001001011100111000
+00111010111101111001011001101100
+00111001111011111001011100110000
+11100000000000000000000001111110
+00101000011101010000000001111100
+01111000000000010000000011111111
+00111000001000011111111111111111
+00000010101011100000000000011000
+10100010101000011010100000000000
+00101001011000010000000000000100
+00100001110011100000000001111111
+00110100001000011111111111111111
+01010100001101000000000001010101
+00111100001000010000000000000010
+10110111001000010000100000000000
+00101000001000010000000000000000
+11000000001000000000000000000000
+00101001011000010000000001000100
+01011000011000010000000001000000
+00101001011000010000000010100100
+00101001011000100000000010100000
+10110100010000010000100000000000
+00000000001000100000000000011111
+10110100010000010000100000000000
+00010100001000010000000000000001
+00110100000000100000000000000001
+01011000011000010000000001000100
+00101001100000010000000000000000
+11111011111111111111110100001101
+11111011111111111111101001110010
+00110100001000010000000000110010
+01011001011000010000000000001000
+00110100000000010000000000001010
+11100000000000000000000000010001
+00101001011101100000000000001000
+11111011111111111111101001101100
+11001010110000010000100000000000
+01001100001000000000000000111100
+00101001011000010000000000000000
+01011100001110000000000000000011
+01011001011110000000000000000100
+11100000000000000000000000111000
+01011001011100110000000000000100
+11100000000000000000000000110110
+00101001100000010000000000000000
+00110100000000100000000000000000
+11111011111111111111110011111011
+10111001101000000000100000000000
+11111011111111111111110100111100
+00110100000000010000000000000010
+01011001011000010000000000000100
+11100000000000000000000000101110
+10111001101000000000100000000000
+11111011111111111111110101001101
+11100000000000000000000000010010
+10111010000000000000100000000000
+11111011111111111111110111101100
+00110100000000010000000000000100
+11100011111111111111111111111000
+00101001011000010000000001100000
+01000100001000000000000000100101
+00101001011000010000000001100100
+01000100001000000000000000100011
+00101001011000010000000000000000
+01011100001100110000000000001001
+00110100000000010000000000000101
+11100011111111111111111111110000
+10111010001000000000100000000000
+11111011111111111111111000100000
+00110100000000010000000000000110
+11100011111111111111111111101100
+00101001011000010000000011000000
+01000100001000000000000000011001
+10111001011000000000100000000000
+11111011111111111111111101110010
+01011001011100100000000000000100
+00101001011000010000000011101000
+00110100000000100000000000000001
+11100000000000000000000000010010
+00101001011000010000000000000000
+01011100001110000000000000000100
+10111001101000000000100000000000
+11111011111111111111110100110000
+01000100001000000000000000000111
+00101001011000010000000001100000
+01000100001000000000000000000101
+00101001011000010000000000000000
+01011100001100110000000000001010
+00101001011000010000000011000000
+01011100001000000000000000001000
+00101001011000010000000000001100
+00110100000000100000000000000000
+00110100001000010000000000000001
+01011001011000010000000000001100
+01011001011101000000000000000100
+00101001011000010000000011101000
+11111011111111111111111100110000
+10111010000000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111110101101001
+00101001011000010000000001100000
+01000100001000000000000000011011
+10111010001000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111000011100
+00101001011000010000000000000100
+01011100001100100000000000010101
+00101001011000010000000000000000
+00110100000101100000000000000000
+01011100001100110000000000001100
+11100000000000000000000000001000
+00001010110000010000000001111100
+10111010101000000001000000000000
+10111001110000000001100000000000
+10110101011000010000100000000000
+00110100001000010000000100000100
+11111011111111111111111000010000
+00110110110101100000000000000001
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001101101111111111110111
+00101001100000010000000000000000
+01001001110000010000000000000101
+10111010111000000000100000000000
+10111010101000000001000000000000
+10111001110000000001100000000000
+11111011111111111111111011001011
+00101011011000110000000000000000
+01111000000000100000000000000010
+00101000011000010000000010000000
+10100000001000100000100000000000
+01000100001000001111111101111111
+00101001011000010000000000010000
+00110100001000010000000000000001
+01011001011000010000000000010000
+00110100000000010000000000000001
+11010000010000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000001000100
+00101011100011000000000001000000
+00101011100011010000000000111100
+00101011100011100000000000111000
+00101011100011110000000000110100
+00101011100100000000000000110000
+00101011100100010000000000101100
+00101011100100100000000000101000
+00101011100100110000000000100100
+00101011100101000000000000100000
+00101011100101010000000000011100
+00101011100101100000000000011000
+00101011100101110000000000010100
+00101011100110000000000000010000
+00101011100110010000000000001100
+00101011100110110000000000001000
+00110111100111000000000001000100
+11000011101000000000000000000000
+01111000000000010000000000000000
+00111000001000011001010001110100
+00101000001000100000000000000000
+01111000000000110000000000000000
+01111000000000010000000000000000
+00111000001000011001010001101100
+00111000011000111000000111101100
+01011000001000100000000000000000
+00101000011000010000000000000000
+01011000010000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111010100
+01011011100010110000000000101000
+01011011100011000000000000100100
+01011011100011010000000000100000
+01011011100011100000000000011100
+01011011100011110000000000011000
+01011011100100000000000000010100
+01011011100100010000000000010000
+01011011100100100000000000001100
+01011011100100110000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000001000000000000000
+10111000011000001001000000000000
+11111011111111111110110100100101
+01111000000000010000000000000000
+00111000001000011001011101100000
+00101000001001000000000000000000
+01111000000000010000000000000000
+00111000001000011001010001011000
+01011000001001000000000000000000
+01111000000000010000000000000000
+00101000100001010000000000000000
+00111000001000011001010001110100
+00101000001000010000000000000000
+01111000000000100000000000000000
+00111000010000101001010001101100
+00000000101001100000000000010000
+01011000010000010000000000000000
+01111000000000100000000000000000
+00111000010000101001011100111000
+00100000110001100000000000111111
+00000000101001010000000000011000
+01011000010001100000000000000000
+01111000000000100000000000000000
+00111000010000101001011100110000
+00100000101001010000000000000111
+01011000010001010000000000000000
+01111000000001010000000000000000
+00111000101001011001010001111000
+01011000101010110000000000000000
+01011000101000000000000000001100
+01011000100000000000000001000000
+01011000100000000000000001000100
+01011000100000000000000000000000
+01011000100000000000000000101000
+01011000100000000000000000100100
+01011000100000000000000000000100
+01111000000000110000000000000000
+01011000100000000000000000100000
+00110100000000100000001111101000
+00111000011000111000000110011100
+01011000100000100000000001001000
+00101000011000100000000000000000
+01011000001000000000000000011100
+01011000001000100000000000000000
+00110100000000010000000000000100
+01011101011000010000000000000100
+00110100000000010000000000000111
+01011000101000010000000000000100
+11100000000000000000000000000110
+00110100000000010000000000001001
+01011000101000010000000000000100
+00110100000000010000000000000011
+01011101011000010000000000000010
+10111010000000000011000000000000
+01111000000000010000000000000000
+10111000110000000001000000000000
+00111000001000011001010010010000
+01111000000011010000000000000000
+11111011111111111111110011001100
+00111001101011011001011100111000
+00101001101000110000000000000000
+01111000000000010000000000000000
+00111000001000011001010100000000
+10111010000000000001000000000000
+01111000000011110000000000000000
+01111000000011100000000000000000
+11111011111111111111110101000111
+00110100000011000000000000000000
+00111001111011111001011100110000
+00111001110011101001010001111000
+00110100000100110000000000000001
+11100000000000000000000000001100
+00001001100100010000000001111100
+00101001101001000000000000000000
+10111010000000000001000000000000
+10110101110100010000100000000000
+00110100100001000000000000000001
+10110100100011000001100000000000
+00110100001000010000000100000100
+10110101110100011000100000000000
+11111011111111111111110100111001
+00110101100011000000000000000001
+01011010001100110000000011111100
+00101001111000010000000000000000
+00110100001000011111111111111111
+01001000001011001111111111110011
+00110100000000010000000000000010
+01011101011000010000000000000110
+01111000000000010000000000000000
+00111000001000011001010001101100
+00101000001000010000000000000000
+00110100000000100000000000001100
+01011000001000100000000000011100
+01111000000011100000000000000000
+01111000000011010000000000000000
+00110100000011000000000000000000
+00111001110011101001011100111000
+00111001101011011001010001111000
+11100000000000000000000000001000
+00111101100000010000000000000101
+10111001100000000001000000000000
+10110101101000010000100000000000
+00110100001000010000000111110100
+00110100000000110000001000000000
+11111011111111111111111000010101
+00110101100011000000000000000001
+00101001110000100000000000000000
+01001000010011001111111111111000
+00110100000000010000000000000001
+01011101011000010000000000010111
+01111000000000010000000000000000
+00111000001000011001010001011000
+00101000001000010000000000000000
+00101000001000010000000000000100
+00100000001000010000000000000010
+01000100001000000000000000100001
+01111000000000010000000000000000
+01111000000001000000000000000000
+00111000001000011001010001111000
+00111000100001001001010010010000
+01011000001001000000000001101000
+01111000000001000000000000000000
+00111000100001001001010100000000
+01011000001001000000000001101100
+01111000000000010000000000000000
+00111000001000011001011100110000
+00101000001001000000000000000000
+01111000000000010000000000000000
+00111000001000011001010011100000
+10110100010001000001000000000000
+10111010010000000001100000000000
+11111011111111111111110000011000
+01111000000000010000000000000000
+00111000001000011001010001011000
+00101000001000010000000000000000
+01111000000000100000000000000010
+11100000000000000000000000000011
+00101000001000110000000001111100
+01011011100000110000000000101100
+00101000001000110000000010000000
+10100000011000100001100000000000
+01000100011000001111111111111100
+00110100000000100000000000000001
+01011000001000100000000001100100
+00101000001000100000000000101000
+00111000010000100000000000000001
+01011000001000100000000000101000
+11111011111111111110110010011101
+00101011100111010000000000000100
+00101011100010110000000000101000
+00101011100011000000000000100100
+00101011100011010000000000100000
+00101011100011100000000000011100
+00101011100011110000000000011000
+00101011100100000000000000010100
+00101011100100010000000000010000
+00101011100100100000000000001100
+00101011100100110000000000001000
+00110111100111000000000000101100
+11000011101000000000000000000000
+01111000000000100000000000000000
+10111000001000000001100000000000
+00111000010000101001010001111000
+01011100001000000000000000000100
+00101000010000010000000000000100
+01100100001000010000000000001000
+11000011101000000000000000000000
+00101000010001010000000000000100
+00110100000001000000000000001000
+00110100000000010000000000000000
+01011100101001000000000000000110
+00110100011000111111111111111111
+00001000011000110000000001111100
+10110100010000110001000000000000
+00101000010000010000000100111100
+01111100001000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111101000
+01011011100010110000000000011000
+01011011100011000000000000010100
+01011011100011010000000000010000
+01011011100011100000000000001100
+01011011100011110000000000001000
+01011011100111010000000000000100
+00110100000000111111111111111111
+10111000010000000111100000000000
+01011100001000110000000000010110
+00110100000000010000000000000000
+01111000000011000000000000000000
+01111000000011010000000000000000
+11111011111111111111111000110010
+00110100000010110000000000000000
+00111001100011001001011100110000
+00111001101011011001010001111000
+00110100000011100000000000000100
+11100000000000000000000000001001
+00001001011000010000000001111100
+10110101101000010000100000000000
+00101000001000010000000011111100
+01011100001011100000000000000100
+00110101011000010000000000000001
+10111001111000000001000000000000
+11111011111111111111111000100110
+00110101011010110000000000000001
+00101001100000010000000000000000
+00110100001000011111111111111111
+01001000001010111111111111110110
+11100000000000000000000000000010
+11111011111111111111111000100000
+00101011100111010000000000000100
+00101011100010110000000000011000
+00101011100011000000000000010100
+00101011100011010000000000010000
+00101011100011100000000000001100
+00101011100011110000000000001000
+00110111100111000000000000011000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+10111000010000000110100000000000
+01111000000000010000000000000000
+00111101011000100000000000000101
+00111000001000011001010001111000
+10110100001000100000100000000000
+00101000001001000000001000001100
+10111000011000000110000000000000
+01001100100000000000000000000011
+00110100100001000100000000000000
+11100000000000000000000000000100
+00110100000000010011111111111111
+01001100001001000000000000000010
+00110100100001001100000000000000
+00111100100001000000000000000001
+00110100000000010000000000000000
+00100000100000100011111111111110
+00110100000000110000000000000000
+00110100000001000001111101000000
+11111000000000000000000110110010
+00111100001000010000000000010010
+00000000010001000000000000001110
+10111000001001000010000000000000
+01011001101001000000000000000000
+01000101100000000000000000001100
+01111000000000010000000000000000
+00111000001000011001010000111100
+00101000001000100000000000000000
+00111101011000110000000000000101
+01111000000000010000000000000000
+00111000001000011001010001111000
+10110100001000110000100000000000
+00101000001000010000000111111000
+10010100010000010000100000000000
+00100000001000010000000000000001
+01011001100000010000000000000000
+00111101011010110000000000000101
+01111000000000100000000000000000
+00111000010000101001010001111000
+10110100010010110001000000000000
+00101000010000010000001000010000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01011100001000000000000000000100
+01111000000000010000000000000000
+00111000001000011001010100000000
+11100000000000000000000000000111
+00110100001000011111111111111111
+00001000001000010000000001111100
+01111000000000100000000000000000
+00111000010000101001010001111000
+10110100001000100000100000000000
+00110100001000010000000100000100
+11111011111111111111110101100000
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+01111000000011010000000000000000
+01111000000010110000000000000000
+10111000001000000110000000000000
+00111001101011011001010001111000
+00111001011010111001010000111100
+01000100010000000000000000001101
+00110100000000100000000000000001
+11111011111111111111101101001011
+00111101100000010000000000000101
+10110101101000010110100000000000
+00110101101000010000000111110100
+11111011111111111111110101010111
+00101001011000010000000000000000
+00110100000000100000000000000001
+10111100010011000110000000000000
+10111001100000010110000000000000
+01011001011011000000000000000000
+11100000000000000000000000001010
+00110100000000110000000000000001
+00101001011001000000000000000000
+10111100011000010001100000000000
+10100100011000000001100000000000
+10100000011001000001100000000000
+01011001011000110000000000000000
+00101001101000110000000011101000
+01000100001000110000000000000010
+11111011111111111111101100111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+00101000001001000000000000010100
+10111000001000000001100000000000
+10111000010000000011000000000000
+01000100100000000000000000010101
+00101000001001010000000000010000
+00100000101001010000000000000010
+01011100101000000000000000000111
+10110100100001100010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100011010110000000000110000
+10110100100001100001000000000000
+10111001011000000000100000000000
+00110100000000110000000001000000
+11111000000000000000000111010001
+10111001011000000010000000000000
+10111000100000000000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00101000001001010000000000010000
+00100000101001110000000000000100
+01011100111001001111111111101011
+00101000001001010000000000011100
+00110100000001000000000000000000
+01000100101001111111111111101011
+00110100001010110000000000110000
+00110100000001000000000001000000
+10111001011000000001100000000000
+11011000101000000000000000000000
+10111001011000000010000000000000
+11100011111111111111111111110000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+10111000001000000101100000000000
+01000100010000000000000001000111
+00101000001000100000000000001100
+01011000001000000000000010000000
+01011000001000000000000010110000
+01011000001000100000000010010000
+00110100000011000000000000000000
+10111001011000000000100000000000
+11111011111111111111111111001100
+01011001011000010000000000101000
+01000000001000100000000000111111
+01011100010000000000000000000110
+01111000000001000000000000000000
+00111000100001001000000110110000
+00101000001000110000000000000000
+00101000100000100000000000000000
+01000100011000100000000001011101
+00110100000000010000000000000000
+01000101100000000000000000110000
+00110101100000111111111111111111
+00110100011011000000000000101000
+10110101100011000000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000100000000000000000
+01011100010000000000000000001111
+00110100000000010000000000000000
+01000100011000100000000000100111
+00110100011000100000000000100111
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+11100000000000000000000000000010
+01000100011000010000000001000100
+00101000010000010000000000000000
+00110100011000111111111111111111
+00110100010000101111111111111100
+01000100001000001111111111111100
+01011001011000110000000010110000
+00110100011011000000000000101000
+00110100011011010000000000100100
+10110101101011010110100000000000
+10110101101011010110100000000000
+10110101011011010110100000000000
+00101001101000100000000000000000
+10111001011000000000100000000000
+10110101100011000110000000000000
+11111011111111111111111110100101
+10110101100011000110000000000000
+10110101011011000001000000000000
+00101001101001000000000000000000
+00101000010000110000000000000000
+00101001011011000000000010110000
+00110100100001000000000001000000
+00110100011000111111111111111111
+01011001011000010000000000101000
+01011001101001000000000000000000
+01011000010000110000000000000000
+00110101100000110000000000100000
+10110100011000110001100000000000
+10110100011000110001100000000000
+10110101011000110001100000000000
+00101000001001000000000000001100
+00101000011000100000000000000000
+10110100010001000001000000000000
+01011001011000100000000001110100
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101000001000010000000000101000
+00101001011000110000000010110000
+00110100000001010000000000000010
+01000000001001000000000000111111
+11101100101000110010100000000000
+01100100100001000000000000000010
+10100000100001010010000000000000
+01000100100000101111111111000101
+00110100011000100000000000100000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00101000010001010000000000000000
+00110100011001000000000000100101
+00101000001000100000000000000100
+10110100100001000010000000000000
+10110100100001000010000000000000
+10110100101000100001000000000000
+10110101011001000010000000000000
+01011000100000100000000000000000
+00101000001001000000000000001100
+00110100011000010000000000100001
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+10110100100001010010100000000000
+00110100011011000000000000000001
+01011000001001010000000000000000
+11100011111111111111111110100011
+00110100000000010000000000000000
+01011001011000000000000010110000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00110101100000100000000000100100
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001100000000000
+00101100001001010000000000000100
+00101000011001000000000000000000
+00110101100000100000000000101000
+10110100010000100001000000000000
+10110100010000100001000000000000
+10110101011000100001000000000000
+00110100101001011111111111111111
+00110100100001000000000001000000
+01011000010001010000000000000000
+01011000011001000000000000000000
+01011001011011000000000010110000
+11100011111111111111111110111110
+00110111100111001111111111101100
+01011011100010110000000000010100
+01011011100011000000000000010000
+01011011100011010000000000001100
+01011011100011100000000000001000
+01011011100111010000000000000100
+10111000010000000110000000000000
+00110100000000100000000000000001
+10111000001000000101100000000000
+10111000011000000111000000000000
+10111000100000000110100000000000
+11111011111111111111111101110011
+10111001011000000000100000000000
+00110100000000100000000000000000
+11111011111111111111111101110000
+10111000001000000010100000000000
+01000100001000000000000000011110
+00101000101000010000000000011000
+01011100001011001111111111111010
+00101000101000010000000000011100
+01011100001011101111111111111000
+00101000101000010000000000100000
+01011100001011011111111111110110
+00101001011000010000000010110000
+01011001011001010000000000101000
+00101000101000100000000000001100
+00110100001000010000000000100000
+10110100001000010000100000000000
+10110100001000010000100000000000
+10110101011000010000100000000000
+00101000001000110000000000000000
+00110100000000010000000000000000
+10110100010000110001100000000000
+01011001011000110000000001110100
+00101000101000110000000000010100
+01011001011000000000000001111000
+00110100011000110000000000000001
+11001000011000100001000000000000
+01011001011000100000000001110000
+00101011100111010000000000000100
+00101011100010110000000000010100
+00101011100011000000000000010000
+00101011100011010000000000001100
+00101011100011100000000000001000
+00110111100111000000000000010100
+11000011101000000000000000000000
+00110100000000011111111111111110
+11100011111111111111111111111000
+01011000001000000000000000101000
+00110100000000010000000000000000
+11000011101000000000000000000000
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000100000000001110100
+10111000011000000000100000000000
+10111001101000000001100000000000
+10110101100000100001000000000000
+10110100100000100001000000000000
+11111000000000000000000011110010
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000011100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001010000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000100000000110100000000000
+00110100000000011111111111111110
+01000100101000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+10111000011000000001000000000000
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000011000110
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001010000000000100000
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000010000000000000
+11011000101000000000000000000000
+11100011111111111111111111101110
+00110111100111001111111111110000
+01011011100010110000000000010000
+01011011100011000000000000001100
+01011011100011010000000000001000
+01011011100111010000000000000100
+00101000001001000000000000101000
+10111000001000000101100000000000
+10111000010000000110000000000000
+10111000011000000110100000000000
+00110100000000011111111111111110
+01000100100000000000000000010010
+01001100010000000000000000000010
+00101001011011000000000001111000
+00101001011000010000000001110000
+10110101100011010001000000000000
+01010100010000010000000000010011
+00101001011001000000000000010100
+01000100100000000000000000010100
+00101001011000010000000001110100
+00110100000000100000000011111111
+10111001101000000001100000000000
+10110101100000010000100000000000
+10110100100000010000100000000000
+11111000000000000000000011010011
+10111001101000000000100000000000
+01001100000000010000000000000011
+10110100001011000110000000000000
+01011001011011000000000001111000
+00101011100111010000000000000100
+00101011100010110000000000010000
+00101011100011000000000000001100
+00101011100011010000000000001000
+00110111100111000000000000010000
+11000011101000000000000000000000
+00101001011001000000000000010100
+11001000001011000110100000000000
+01011100100000001111111111101110
+00101001011000100000000001110100
+00101001011001000000000000100100
+10111001011000000000100000000000
+10110101100000100001000000000000
+10111001101000000001100000000000
+11011000100000000000000000000000
+11100011111111111111111111101110
+00100000010001011111111111111111
+00000000010001100000000000010000
+00100000100010001111111111111111
+00000000100010010000000000010000
+10001001000001010011100000000000
+10001001000001100100000000000000
+10001001001001010010100000000000
+00000000111010100000000000010000
+10001001001001100011000000000000
+10110101000001010010100000000000
+10110100101010100010100000000000
+01010000101010000000000000000011
+01111000000010000000000000000001
+10110100110010000011000000000000
+10001000010000110001000000000000
+10001000100000010010000000000000
+00000000101000010000000000010000
+00111100101001010000000000010000
+10110100110000010011000000000000
+00100000111001111111111111111111
+10110100010001000000100000000000
+10110100001001100000100000000000
+10110100101001110001000000000000
+11000011101000000000000000000000
+00110111100111001111111111111000
+01011011100010110000000000001000
+01011011100111010000000000000100
+01000100010000000000000000100010
+10111000010000010010000000000000
+00110100000000110000000000001111
+01010100100000110000000000001011
+01111000000000110000000000000000
+00111000011000111000001100101100
+00111100001000010000000000000100
+10110100011000100001000000000000
+10110100010000010000100000000000
+01000000001000010000000000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000010110000000000000000
+01001100001000000000000000000011
+11001000000000010000100000000000
+00110100000010110000000000000001
+01001100010000000000000000000011
+11001000000000100001000000000000
+00011001011010110000000000000001
+10010000110000000001100000000000
+00100000011000110000000000000010
+01000100011000000000000000001000
+10001100001000100000100000000000
+01000101011000000000000000000010
+11001000000000010000100000000000
+00101011100111010000000000000100
+00101011100010110000000000001000
+00110111100111000000000000001000
+11000011101000000000000000000000
+00110100000000110000000000000000
+11111000000000000000000000101010
+11100011111111111111111111111000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000000
+11111000000000000000000000011100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+00110111100111001111111111111100
+01011011100111010000000000000100
+01000100010000000000000000000110
+00110100000000110000000000000001
+11111000000000000000000000001100
+00101011100111010000000000000100
+00110111100111000000000000000100
+11000011101000000000000000000000
+10010000000000000000100000000000
+00100000001000010000000000000001
+00111100001000010000000000000001
+11010000000000010000000000000000
+10010000111000000000100000000000
+10111011101000001111000000000000
+00110100001000010000000010100000
+11000000001000000000000000000000
+11110100001000100010000000000000
+01000100100000000000000000011000
+00110100000001000000000000000001
+01001100010000000000000000001011
+00110100000001010000000000000000
+01010100010000010000000000000011
+11001000001000100000100000000000
+10111000101001000010100000000000
+00000000100001000000000000000001
+00000000010000100000000000000001
+01011100100000001111111111111011
+01011100011000000000000000000010
+10111000101000000000100000000000
+11000011101000000000000000000000
+00111100010000100000000000000001
+00111100100001000000000000000001
+11110100001000100010100000000000
+01111100100001100000000000000000
+10100000110001010010100000000000
+01000100101000000000000000000010
+01001100010000001111111111111010
+00110100000001010000000000000000
+01000100100000001111111111110101
+00110100000001010000000000000000
+11100011111111111111111111101101
+00110100000001000000000000000001
+00110100000001010000000000000000
+11100011111111111111111111101010
+00010100001000100000000000011111
+10011000010000010000100000000000
+11001000001000100000100000000000
+11000011101000000000000000000000
+00110100000001000000000000001111
+10111000001000000011100000000000
+10111000010000000011000000000000
+01010000100000110000000000101101
+10111000010000010010000000000000
+00100000100001000000000000000011
+01011100100000000000000000101011
+10111000010000000010000000000000
+10111000001000000010100000000000
+10111000011000000011000000000000
+00110100000001110000000000001111
+00101000100010000000000000000000
+00110100110001101111111111110000
+01011000101010000000000000000000
+00101000100010000000000000000100
+01011000101010000000000000000100
+00101000100010000000000000001000
+01011000101010000000000000001000
+00101000100010000000000000001100
+00110100100001000000000000010000
+01011000101010000000000000001100
+00110100101001010000000000010000
+01010100110001111111111111110101
+00110100011000111111111111110000
+00000000011001100000000000000100
+00100000011000110000000000001111
+00110100110001100000000000000001
+00111100110001100000000000000100
+10110100001001100011100000000000
+10110100010001100011000000000000
+00110100000000100000000000000011
+01010000010000110000000000010001
+00110100000000100000000000000000
+00110100000010000000000000000011
+10110100110000100010000000000000
+00101000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000100
+01011000100001010000000000000000
+11001000011000100010000000000000
+01010100100010001111111111111010
+00110100011000111111111111111100
+00000000011000100000000000000010
+00100000011000110000000000000011
+00110100010000100000000000000001
+00111100010000100000000000000010
+10110100111000100011100000000000
+10110100110000100011000000000000
+01000100011000000000000000001000
+00110100000000100000000000000000
+10110100110000100010000000000000
+01000000100001010000000000000000
+10110100111000100010000000000000
+00110100010000100000000000000001
+00110000100001010000000000000000
+01011100010000111111111111111011
+11000011101000000000000000000000
+00100000001001010000000000000011
+10111000001000000010000000000000
+01000100101000000000000000001011
+01000100011000000000000000101100
+00110100011000111111111111111111
+00100000010001100000000011111111
+11100000000000000000000000000011
+01000100011000000000000000101000
+00110100011000111111111111111111
+00110000100001100000000000000000
+00110100100001000000000000000001
+00100000100001010000000000000011
+01011100101000001111111111111011
+00110100000001010000000000000011
+01010000101000110000000000011010
+00100000010001010000000011111111
+00111100101001100000000000001000
+00110100000010100000000000001111
+10111000110001010010100000000000
+00111100101001100000000000010000
+10111000100000000100000000000000
+10111000110001010011000000000000
+10111000011000000011100000000000
+10111000100000000010100000000000
+00110100000010010000000000001111
+01010100011010100000000000010111
+00110100000001000000000000000000
+00110100000001110000000000000011
+10110101000001000010100000000000
+00110100100001000000000000000100
+01011000101001100000000000000000
+11001000011001000010100000000000
+01010100101001111111111111111100
+00110100011000111111111111111100
+00000000011001000000000000000010
+00100000011000110000000000000011
+00110100100001000000000000000001
+00111100100001000000000000000010
+10110101000001000100000000000000
+10111001000000000010000000000000
+01000100011000000000000000000111
+00100000010000100000000011111111
+00110100000001010000000000000000
+10110100100001010011000000000000
+00110000110000100000000000000000
+00110100101001010000000000000001
+01011100011001011111111111111101
+11000011101000000000000000000000
+01011000101001100000000000000000
+01011000101001100000000000000100
+01011000101001100000000000001000
+01011000101001100000000000001100
+00110100111001111111111111110000
+00110100101001010000000000010000
+01010100111010011111111111111010
+00110100011000111111111111110000
+00000000011010000000000000000100
+00100000011000110000000000001111
+00110101000010000000000000000001
+00111101000010000000000000000100
+10110100100010000100000000000000
+00110100000001000000000000000011
+01010100011001001111111111011100
+10111001000000000010000000000000
+11100011111111111111111111101000
+01010111010100100010000001000011
+01101111011100100110010100111010
+00100000011100110111010001100001
+01110010011101000110100101101110
+01100111001000000111010101110000
+00101110001011100010111000001010
+00000000000000000000000000000000
+01010101011011100110000101100010
+01101100011001010010000001110100
+01101111001000000110010001100101
+01110100011001010111001001101101
+01101001011011100110010100100000
+01001101010000010100001100100000
+01100001011001000110010001110010
+01100101011100110111001100001010
+00000000000000000000000000000000
+01001100011011110110001101100001
+01101100001000000100110101000001
+01000011001000000110000101100100
+01100100011100100110010101110011
+01110011001110100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00001010000000000000000000000000
+01001110011001010111011100100000
+01101101011000010111100000100000
+01110010011101010110111000100000
+01110100011010010110110101100101
+00100000011001100110111101110010
+00100000011000010010000001110100
+01100001011100110110101100100000
+00100101011100110010110000100000
+01101111011011000110010000100000
+00100101011011000110010000101100
+00100000011011100110010101110111
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110100011000010111001101101011
+00100000001001010111001100101100
+00100000011100100111010101101110
+00100000011001100110111101110010
+00100000001001010110010000100000
+01101101011100110000101000000000
+01110011011100000110110001101100
+00101101011000100110100000000000
+01110011011010000110010101101100
+01101100001010110110011101110101
+01101001000000000000000000000000
+01110000011101000111000000000000
+01110101011100000111010001101001
+01101101011001010000000000000000
+01100011011010000110010101100011
+01101011001011010110110001101001
+01101110011010110000000000000000
+01101001011001000110110001100101
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00101101001100010010110100100101
+01110011001110100010000000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00111010001000000000000000000000
+01000101010011100101010001000101
+01010010001000000010010101110011
+00101100001000000111000001100001
+01100011011010110110010101110100
+00100000011011000110010101101110
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01110010011001010110010101101110
+01110100011001010111001000100000
+01101001011011100010000000100101
+01101001001000000110110101110011
+00001010000000000000000000000000
+01001100010001010100000101010110
+01000101001000000010010101110011
+00100000001010000110111001100101
+01111000011101000011101000100000
+00100101001100110110100100101001
+00001010000010100000000000000000
+01010010010001010100001101010110
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+00111001011001000010111000100101
+00110000001110010110010000101110
+00100101001100000011001101100100
+00100000001010000111010001111001
+01110000011001010010000000100101
+01111000001011000010000000100101
+01110011001010010000101000000000
+01100110011100110110110100111010
+00100000010101010110111001101011
+01101110011011110111011101101110
+00100000011100110111010001100001
+01110100011001010010000001100110
+01101111011100100010000001110000
+01101111011100100111010000100000
+00100101011100110000101000000000
+01010111011100100110111101101110
+01100111001000000110010001101111
+01101101011000010110100101101110
+00100000001001010110100100111010
+00100000011001000110100101110011
+01100011011000010111001001100100
+00001010000000000000000000000000
+01000001011011000111010001100101
+01110010011011100110000101110100
+01100101001000000110110101100001
+01110011011101000110010101110010
+00111010001000000110010001101001
+01110011011000110110000101110010
+01100100000010100000000000000000
+01001100011011110110111101110000
+01101001011011100110011100100000
+01100110011100100110000101101101
+01100101001110100010000001100100
+01101001011100110110001101100001
+01110010011001000000101000000000
+01100110011100110110110100100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+01000101011100100111001001101111
+01110010001000000010010101101001
+00100000011010010110111000100000
+00100101011100110000101000000000
+01110000011100000111001101101001
+00000000000000000000000000000000
+00100101011100110010110100100101
+01101001001011010010010101110011
+00111010001000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010001000000111000001100001
+01110010011100110110100101101110
+01100111001000000010001000100101
+01110011001000100000101000000000
+01100100011010010110000101100111
+00101101011000110110111101101110
+01100110011010010110011100000000
+01100100011010010110000101100111
+00101101011001010111100001110100
+01100101011011100111001101101001
+01101111011011100000000000000000
+01100100011010010110000101100111
+00101101011000100110110101100011
+00000000000000000000000000000000
+01100100011010010110000101100111
+00101101011100110110010101110010
+01110110011011110000000000000000
+01100100011010010110000101100111
+00101101011001100111001001100001
+01101101011001010111001100000000
+01100100011010010110000101100111
+00101101011101000110100101101101
+01100101000000000000000000000000
+01100100011010010110000101100111
+00101101011001100111001101101101
+00000000000000000000000000000000
+01101110011001010111011100100000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100110011011110111001000100000
+00100101011100110011101000100000
+00100101011010010000101000000000
+01110100011010010110110101100101
+01101111011101010111010000100000
+01100101011110000111000001101001
+01110010011001010110010000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010010010001010101000101010101
+01000101010100110101010000000000
+01010011010110010100111001000011
+01011111010100110100010101001110
+01000100000000000000000000000000
+01000001010011100100111001011111
+01010010010001010100001101000101
+01001001010100000101010000000000
+01000001010011100100111001011111
+01010011010001010100111001000100
+00000000000000000000000000000000
+01000110010000010101010101001100
+01010100000000000000000000000000
+01010001010101010100000101001100
+00000000000000000000000000000000
+01110011011110010110111001100011
+00000000000000000000000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110001000000000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100010000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000000000000
+01100100011001010110110001100001
+01111001010111110111001001100101
+01110011011100000000000000000000
+01110000011001000110010101101100
+01100001011110010101111101110010
+01100101011100110111000001011111
+01100110011011110110110001101100
+01101111011101110101111101110101
+01110000000000000000000000000000
+01100001011011100110111001101111
+01110101011011100110001101100101
+00000000000000000000000000000000
+01110011011010010110011101101110
+01100001011011000110100101101110
+01100111000000000000000000000000
+01101101011000010110111001100001
+01100111011001010110110101100101
+01101110011101000000000000000000
+01010000010100000101001101101001
+00100000011001100110111101110010
+00100000010101110101001001010000
+01000011001011100010000001000011
+01101111011011010110110101101001
+01110100001000000010010101110011
+00101100001000000110001001110101
+01101001011011000111010000100000
+01101111011011100010000001000100
+01100101011000110010000000110001
+00111000001000000011001000110000
+00110001001101110000101000000000
+01110000011100000111001101101001
+00101101011101100011001000110000
+00110001001101100010111000110001
+00110010001011010011100000111001
+00101101011001110110001101100010
+00110101001110010011001100110100
+01100101000000000000000000000000
+01010000010101000101000000100000
+01110011011101000110000101110010
+01110100000010100000000000000000
+01010000010101000101000000100000
+01110011011101000110111101110000
+00001010000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000000000
+00001010010011000110111101100011
+01101011001000000111010001101001
+01101101011001010110111101110101
+01110100001011100000000000000000
+00101110000000000000000000000000
+01110111011100100011000100000000
+00100000011010010110111001110110
+01100001011011000110100101100100
+00000000000000000000000000000000
+00100101011100110101010001001001
+01001101010001010011101000100000
+00101000001001010110110001101001
+00100000001011010010000000110000
+01111000001001010110110001111000
+00101001001000000010010101101100
+01101001001011100010010100110000
+00110110011011000110100100100101
+01110011000010100000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000000010100000000000000000
+00100101011100110010010101110011
+00100101011100110010000000101000
+01110011011010010111101001100101
+00100000001001010110100100101001
+00001010000000000000000000000000
+00100101011100110010010101110011
+00000000000000000000000000000000
+00100101001100000011001001111000
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000001110101
+01101110011100110111010101110000
+01110000011011110111001001110100
+01100101011001000010000000101000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101011001000101
+01010010010100110100100101001111
+01001110001110100010000000100101
+01101001001000000010100001110100
+01111001011100000110010100100000
+00100101011010010010110000100000
+01101100011001010110111000100000
+00100101011010010010110000100000
+01100100011011110110110101100001
+01101001011011100010000000100101
+01101001001010010000101000000000
+00100101011100110100011001001100
+01000001010001110101001100111010
+00100000001100000111100000100101
+00110000001101000111100000100000
+00101000011000110110111101110010
+01110010011001010110001101110100
+01101001011011110110111000100000
+00110000011110000010010100110000
+00111000011110000011101000100101
+00110000001110000111100000100000
+00100101001100000011100001110101
+00101001000010100000000000000000
+01010000010011110101001001010100
+00111010001000000000000000000000
+00100101011100110101001001000101
+01010011010101000011101000100000
+01110011011001010111000100100000
+00100101011010010010110000100000
+01100011011101000111001001101100
+00100000001001010110100100101100
+00100000011011000110111101100111
+00101101011010010110111001110100
+01100101011100100111011001100001
+01101100001000000010010101101001
+00001010000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001010011
+01011001010011100100001100001010
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101011011000111010100101110
+00100101001100000011100101101001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010110010100111001000011
+00111010001000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000101001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010001
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010001001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000110
+01001111010011000100110001001111
+01010111010111110101010101010000
+00001010000000000000000000000000
+01001101010100110100011100101101
+01000110010011110100110001001100
+01001111010101110101111101010101
+01010000001110100010000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000100
+01000101010011000100000101011001
+01011111010100100100010101010011
+01010000000010100000000000000000
+01001101010100110100011100101101
+01000100010001010100110001000001
+01011001010111110101001001000101
+01010011010100000011101000100000
+00000000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001000001
+01001110010011100100111101010101
+01001110010000110100010100001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000111001101110100
+01100001011011010111000000100000
+00000000000000000000000000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110100011110000000101000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010111000101110101
+01100001011011000110100101110100
+01111001001000000000000000000000
+00100101011100110100110101010011
+01000111001011010100000101001110
+01001110010011110101010101001110
+01000011010001010011101000100000
+01100111011100100110000101101110
+01100100011011010110000101110011
+01110100011001010111001000101101
+01110000011100100110100101101111
+00100000001001010110100100100000
+00100101011010010000101000000000
+00100101011100110010010101110011
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000101101
+00100101001100000011001001111000
+00101101001001010011000000110010
+01111000001011010010010100110000
+00110010011110000010110100100101
+00110000001100100111100000001010
+00000000000000000000000000000000
+01001101010100110100011100101101
+01000001010011100100111001001111
+01010101010011100100001101000101
+00111010001000000110011101110010
+01100001011011100110010001101101
+01100001011100110111010001100101
+01110010001011010110100101100100
+00100000000000000000000000000000
+00100101011100110100110101000101
+01010011010100110100000101000111
+01000101001110100010000000101000
+01000111001010010010000001010011
+01001001010001110100111001000001
+01001100010010010100111001000111
+00001010000000000000000000000000
+01001101010100110100011100101101
+01010011010010010100011101001110
+01000001010011000100100101001110
+01000111001110100010000001110100
+01100001011100100110011101100101
+01110100001011010111000001101111
+01110010011101000010000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000010010101101001
+00100000001011010010000000100101
+01101001001000000011110100100000
+00100101011010010010100100001010
+00000000000000000000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01111001011100000110010100100000
+00100101001100000011010001111000
+00100000011011000110010101101110
+00100000001001010110100100100000
+01101111011101010110100100100000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000001110011
+01110101011000100010000000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000010100000000000000000
+00100101011100110101010001001100
+01010110001110100010000001110100
+01101111011011110010000001110011
+01101000011011110111001001110100
+00100000001010000110010101111000
+01110000011001010110001101110100
+01100101011001000010000000100101
+01101001001011000010000001110100
+01101111011101000110000101101100
+00100000001001010110100100101001
+00001010000000000000000000000000
+01010100010011000101011000111010
+00100000000000000000000000000000
+01110100011011000111011000101101
+01100011011011110110111001110100
+01100101011011100111010000000000
+01000100010101010100110101010000
+00111010001000000000000000000000
+01110000011000010111100101101100
+01101111011000010110010000000000
+00100101011100110101011001001100
+01000001010011100010000000100101
+01101001000010100000000000000000
+00100101011100110100010101010100
+01001000001110100010000000100101
+00110000001101000111100000100000
+00101000001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000010000000101101
+00111110001000000010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000101001
+00001010000000000000000000000000
+00100101011100110100100101010000
+00111010001000000010010101101001
+00100000001010000010010101101001
+00101110001001010110100100101110
+00100101011010010010111000100101
+01101001001000000010110100111110
+00100000001001010110100100101110
+00100101011010010010111000100101
+01101001001011100010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110101010101000100
+01010000001110100010000000101000
+00100101011010010010000000101101
+00111110001000000010010101101001
+00101001001000000110110001100101
+01101110001000000010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101011011000110100100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000001001010111001100111010
+00100000011000110110000101101110
+00100000011011100110111101110100
+00100000011000010110010001101010
+01110101011100110111010000100000
+01100110011100100110010101110001
+01011111011100000111000001100010
+00100000001001010110110001101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+00100101001110010110110001110101
+00101110001001010011000000111001
+01101100011010010000101000000000
+00100101011100110011101000100000
+01110011011011100111010000111101
+00100101011001000010110000100000
+01110011011001010110001100111101
+00100101011011000110010000101100
+00100000011011100111001101100101
+01100011001111010010010101101100
+01100100000010100000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000010000000000000
+01110011011001010110111001100100
+00111010001000000000000000000000
+01110010011001010110001101110110
+00111010001000000000000000000000
+00100101001100000011100101100100
+00100000001001010011000000111001
+01100100001000000010010100110000
+00110011011001000000000000000000
+00100000001000000010000000100101
+00111001011001000010111000100101
+00110011011001000000101000000000
+01101001011011100110100101110100
+01101001011000010110110001101001
+01111010011010010110111001100111
+00000000000000000000000000000000
+01100110011000010111010101101100
+01110100011110010000000000000000
+01100100011010010111001101100001
+01100010011011000110010101100100
+00000000000000000000000000000000
+01101100011010010111001101110100
+01100101011011100110100101101110
+01100111000000000000000000000000
+01110000011100100110010100101101
+01101101011000010111001101110100
+01100101011100100000000000000000
+01110000011000010111001101110011
+01101001011101100110010100000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01110011011011000110000101110110
+01100101000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110000011100100110010101110011
+01100101011011100111010000000000
+01101101011000010111001101110100
+01100101011100100010111101110111
+01110010001011010110110100101101
+01101100011011110110001101101011
+00000000000000000000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01110011001011010110110001101111
+01100011011010110000000000000000
+01110101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00101111011101110111001000101101
+01101100011011110110001101101011
+01100101011001000000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001101001
+01101111011011100000000000000000
+01110111011100100010110101100011
+01100001011011000110100101100010
+01110010011000010111010001100101
+01100100000000000000000000000000
+01110111011100100010110101110010
+01100101011100110111000000101101
+01100011011000010110110001101001
+01100010001011010111001001100101
+01110001000000000000000000000000
+01110111011100100010110101101100
+01101001011011100110101100101101
+01101111011011100000000000000000
+01100001011000100111001101101111
+01101100011101010111010001100101
+00101101011000110110000101101100
+01101001011000100111001001100001
+01110100011010010110111101101110
+00000000000000000000000000000000
+01101000011011110110111101101011
+00111010001000000010010101110011
+00001010000000000000000000000000
+01010100001100100010000001101111
+01110010001000000101010000110011
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01010100001100110010000001101111
+01110010001000000101010000110110
+00100000011010010110111001100011
+01101111011100100111001001100101
+01100011011101000010110000100000
+01100100011010010111001101100011
+01100001011100100110010001101001
+01101110011001110010000001110100
+01110101011100000110110001100101
+00001010000000000000000000000000
+01001000011000010110111001100100
+01110011011010000110000101101011
+01100101001000000110011001100001
+01101001011011000111010101110010
+01100101001110100010000001101110
+01101111011101110010000001101110
+01101111011011100010110101110111
+01110010001000000010010101110011
+00001010000000000000000000000000
+01010010011001010111010001110010
+01111001001000000110111101101110
+00100000011101000110100101101101
+01100101011011110111010101110100
+00001010000000000000000000000000
+00100101011100110011101000100000
+01110011011101010110001001110011
+01110100011000010111010001100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010100011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000010000001100110
+01101001011110000110010101100100
+00100000011001000110010101101100
+01100001011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101101
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+01010010011110000011110100111110
+00111110011100110110001101100001
+01101100011001010110010001010000
+01101001011000110110111101110011
+01100101011000110110111101101110
+01100100011100110010111001101100
+01110011011000100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100011001000110010001100100000
+01110100001101000010111001110000
+01101000011000010111001101100101
+00100000011010010111001100100000
+01100001011011000111001001100101
+01100001011001000111100100100000
+01100011011011110111001001110010
+01100101011000110111010001100101
+01100100001000000110011001101111
+01110010001000000110001001101001
+01110100011100110110110001101001
+01100100011001010000101000000000
+01110100001100010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+01110100001101000011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000011000100110100101110100
+01110011011011000110100101100100
+01100101001110100010000000100101
+01100100000010100000000000000000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100100000
+00100000001000000010000000100000
+00100000001000000111001101100101
+01100011001011100010000000100000
+00100000001000000010000000100000
+00100000011011100111001100101110
+01110000011010000110000100001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000001001110
+01100101011101110010000001100011
+01101100011000010111001101110011
+00100000001001010110100100001010
+00000000000000000000000000000000
+01000010010101010100011100111010
+00100000010101000111001001111001
+01101001011011100110011100100000
+01110100011011110010000001110011
+01100101011011100110010000100000
+01101001011011100111011001100001
+01101100011010010110010000100000
+01110111011100100101111101101101
+01110011011001110010000001101101
+01101111011001000110010100111101
+00100101011110000010000001101001
+01100100001111010010010101111000
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000101010001101000
+01101001011100110010000001101001
+01110011001000000110111001101111
+01110100001000000110111101110010
+01100111011000010110111001101001
+01111010011000010111010001101001
+01101111011011100010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00100000010101000100110001010110
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000100001101000101
+01010010010011100010011101110011
+00100000010011110101010101001001
+00100000001111010010000000110000
+01111000001001010111100000001010
+00000000000000000000000000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000101011101101000
+01101001011101000110010100100000
+01010010011000010110001001100010
+01101001011101000010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00111101001000000011000001111000
+00100101011110000000101000000000
+01101000011000010110111001100100
+01101100011001010010000001010011
+01101001011001110110111001100001
+01101100011010010110111001100111
+00100000011011010111001101100111
+00101100001000000110011001100001
+01101001011011000110010101100100
+00101100001000000110111001101111
+01110100001000000111001101110101
+01110000011100000110111101110010
+01110100011001010110010000100000
+01110110011001010111001001110011
+01101001011011110110111000100000
+01101110011101010110110101100010
+01100101011100100010000000111101
+00100000001100000111100000100101
+01111000000010100000000000000000
+00100101011100110010000000111101
+00100000001001010110110001100100
+00111010001001010011000000111001
+01101100011001000011101000100101
+00110000001100110110110001100100
+00001010000000000000000000000000
+01010101011011100110100101101110
+01101001011101000110100101100001
+01101100011010010111101001100101
+01100100000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000010010101100100
+00100000001001010110010000001010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110001
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110010
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110011
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110100
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110101
+00000000000000000000000000000000
+01110011011001010111001001110110
+01101111001110100111010000110110
+00000000000000000000000000000000
+00101101001111100110110101100100
+01100101011011000110000101111001
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01110011010010010110111001100011
+01101111011100100111001001100101
+01100011011101000011101000100000
+00100101011001000010000000100101
+01100100001000000000101000000000
+00100000001010000111011101100001
+01101001011101000010000001100110
+01101111011100100010000001101000
+01110111001010010000000000000000
+01101111011001100110011001110011
+01100101011101000101111101101000
+01110111001110100010000000100101
+01101100011010010010111000100101
+00110000001110010110110001101001
+00100000001010000010101100100101
+01101100011010010010100100001010
+00000000000000000000000000000000
+01010000010011000100110000100000
+01001111011101010111010001001111
+01100110010011000110111101100011
+01101011001011000010000001110011
+01101000011011110111010101101100
+01100100001000000111001001100101
+01110011011101000110000101110010
+01110100001000000111001101111001
+01101110011000110000101000000000
+01110011011001010111001001110110
+01101111001110100110001001110101
+01110011011110010000101000000000
+01110111011100100101111101110011
+01100101011100100111011001101111
+00100000011100110111010001100001
+01110100011001010011101000100000
+00100101011100110010010101110011
+00001010000000000000000000000000
+01101111011011000110010001110011
+01100101011101000111000000100000
+00100101011010010010110000100000
+01101111011001100110011001110011
+01100101011101000010000000100101
+01101001001110100010010100110000
+00110100011010010000101000000000
+01100001011001000110101001110101
+01110011011101000010000001110000
+01101000011000010111001101100101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010011100101001101000101
+01000011000000000000000000000000
+01010011010110010100111001000011
+01011111010100110100010101000011
+00000000000000000000000000000000
+01010011010110010100111001000011
+01011111010100000100100001000001
+01010011010001010000000000000000
+01010100010100100100000101000011
+01001011010111110101000001001000
+01000001010100110100010100000000
+01010111010000010100100101010100
+01011111010011110100011001000110
+01010011010001010101010001011111
+01010011010101000100000101000010
+01001100010001010000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110011
+01111001011011100110001100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001100001
+01101110011011100110111101110101
+01101110011000110110010100001010
+00000000000000000000000000000000
+01100011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000111001101100101
+01101110011001000010000001110010
+01100101011100010111010101100101
+01110011011101000000101000000000
+01001110011001010111011100100000
+01100110011011110111001001100101
+01101001011001110110111000100000
+01001101011000010111001101110100
+01100101011100100010000000100101
+01101001001000000110000101100100
+01100100011001010110010000001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01100011011000010110111000100111
+01110100001000000110100101101110
+01101001011101000010000001100101
+01111000011101000110010101101110
+01110011011010010110111101101110
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+00111101001000000010010101100100
+00001010000000000000000000000000
+01100011011011000110111101100011
+01101011001000000110000101100011
+01100011011101010111001001100001
+01100011011110010010000000111101
+00100000001001010110010000001010
+00000000000000000000000000000000
+01001001011001110110111001101111
+01110010011001010110010000100000
+01100110011100100110000101101101
+01100101001000000010010101101001
+00001010000000000000000000000000
+01110000011100000101111101110011
+01101100011000010111011001100101
+00100000001110100010000001000100
+01100101011011000110000101111001
+00100000010100100110010101110011
+01110000001000000110010001101111
+01100101011100110110111000100111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001001000000010100001100110
+00100000001001010111100000101001
+00001010000000000000000000000000
+01110000011100000101111101110000
+01100011011011000110111101100011
+01101011001000000011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01100100011011110110010101110011
+01101110001001110111010000100000
+01101101011000010111010001100011
+01101000001000000101000001000100
+01100101011011000110000101111001
+00100000010100100110010101110001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01010000010001000110010101101100
+01100001011110010010000001010010
+01100101011100110111000000100000
+01000110001011010111010101110000
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001010000
+01000100011001010110110001100001
+01111001001000000101001001100101
+01110001000010100000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001000110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000011010010111001100100000
+01101110011011110111010000100000
+01100110011100100110111101101101
+00100000011000110111010101110010
+01110010011001010110111001110100
+00100000011100000110000101110010
+01100101011011100111010000001010
+00000000000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01101100011000010111011001100101
+00100000011101110110000101110011
+00100000011011100110111101110100
+00100000011101110110000101101001
+01110100011010010110111001100111
+00100000011000010010000001100110
+01101111011011000110110001101111
+01110111001000000111010101110000
+00100000011011010110010101110011
+01110011011000010110011101100101
+00001010000000000000000000000000
+01000101010100100101001001001111
+01010010001110100010000000100101
+01110011001110100010000001010011
+01100101011100010111010101100101
+01101110011000110110010101001001
+01000100001000000010010101100100
+00100000011001000110111101100101
+01110011011011100010011101110100
+00100000011011010110000101110100
+01100011011010000010000001101100
+01100001011100110111010000100000
+01010011011110010110111001100011
+00100000011011010110010101110011
+01110011011000010110011101100101
+00100000001001010110010000001010
+00000000000000000000000000000000
+00100101011100110010100000100101
+01100100001010010010000001001101
+01100101011100110111001101100001
+01100111011001010010000001100011
+01100001011011100010011101110100
+00100000011000100110010100100000
+01110011011001010110111001110100
+00001010000000000000000000000000
+01010011010001010100111001010100
+00100000001001010011000000110010
+01100100001000000110001001111001
+01110100011001010111001100100000
+01100001011101000010000000100101
+01100100001011100010010100110000
+00111001011001000010111000100101
+00110000001100110110010000100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100010000101000000000
+00100101011100110011101000100101
+01101001001110100010000001000101
+01110010011100100110111101110010
+00100000001100100000101000000000
+01110000011100100110010100101101
+00000000000000000000000000000000
+01000010011001010111001101110100
+00100000011001100110111101110010
+01100101011010010110011101101110
+00100000011011010110000101110011
+01110100011001010111001000100000
+01101001011100110010000000100101
+01101001001011110010010101101001
+00001010000000000000000000000000
+00100101011100110011101000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01110000011000010111001101110011
+01101001011101100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+00100101011100110110110101100001
+01110011011101000110010101110010
+00001010000000000000000000000000
+01001110011001010111011100100000
+01010101010101000100001100100000
+01101111011001100110011001110011
+01100101011101000011101000100000
+00100101011010010000101000000000
+00100101011100110011101000100000
+01110011011011000110000101110110
+01100101000010100000000000000000
+00101101000000000000000000000000
+00100101011100110010010101100100
+00101110001001010011000000111001
+01100100000000000000000000000000
+01010100011100100110100101101101
+00100000011101000110111101101111
+00101101011011000110111101101110
+01100111001000000110110101110000
+01100100001110100010000000100101
+01101001000010100000000000000000
+01000001011001100111010001100101
+01110010001000000110000101110110
+01100111001010000010010101101001
+00101001001011000010000001101101
+01100101011000010110111001010000
+01100001011101000110100001000100
+01100101011011000110000101111001
+00111010001000000010010101101001
+00001010000000000000000000000000
+01100101011100100111001001101111
+01110010001000000110100101101110
+00100000011101000101111101101111
+01110000011100110010110100111110
+01110011011001010111001001110110
+01101111010111110110100101101110
+01101001011101000000000000000000
+01001001011011100110100101110100
+01101001011000010110110001101001
+01111010011001010110010000111010
+00100000011011110110001001110011
+01011111011001000111001001101001
+01100110011101000010000000100101
+01101100011011000110100100001010
+00000000000000000000000000000000
+01001111011001100110011001110011
+01100101011101000010000001100110
+01110010011011110110110100100000
+01101101011000010111001101110100
+01100101011100100011101000100000
+00100000001000000010000000100000
+00100101011100110000101000000000
+01010100001100010011101000100000
+00100101011100110000101000000000
+01010100001100100011101000100000
+00100101011100110000101000000000
+01001111011000100111001101100101
+01110010011101100110010101100100
+00100000011001000111001001101001
+01100110011101000011101000100000
+00100101001110010110100100001010
+00000000000000000000000000000000
+01100100011010010111001101100011
+01100001011100100110010000100000
+01010100001100110010111101010100
+00110100001110100010000001110111
+01100101001000000110110101101001
+01110011011100110010000001010100
+00110001001011110101010000110010
+00001010000000000000000000000000
+01010100001100110011101000100000
+00100101011100110000101000000000
+01010100001101000011101000100000
+00100101011100110000101000000000
+01001101011000010111001101110100
+01100101011100100010000001110100
+01101111001000000111001101101100
+01100001011101100110010100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01010011011011000110000101110110
+01100101001000000111010001101111
+00100000011011010110000101110011
+01110100011001010111001000111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011001010110000101101110
+01010000011000010111010001101000
+01000100011001010110110001100001
+01111001001110100010000000100101
+01110011000010100000000000000000
+01010100001101010011101000100000
+00100101011100110000101000000000
+01010100001101100011101000100000
+00100101011100110000101000000000
+01010011011011000110000101110110
+01100101001000000100111101101110
+01101100011110010010110000100000
+01100011011011000110111101100011
+01101011001000000110001101101100
+01100001011100110111001100100000
+01110011011001010111010000100000
+01110100011011110010000000100101
+01100100000010100000000000000000
+00100101001100100011000001110101
+00000000000000000000000000000000
+00100101011101010000000000000000
+00100101001100010011000101110101
+00100101001100000011100101110101
+00000000000000000000000000000000
+00100101011101010010010100110000
+00111001011101010000000000000000
+01101100011011100110101100111010
+00100101011001000010000001110010
+01111000001110100010010101100100
+00100000011101000111100000111010
+00100101011001000010000000000000
+01101100011011110110001101101011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110000011101000111000000111010
+00100101011100110010000000000000
+01110011011101100011101000100101
+01100100001000000000000000000000
+01110011011100110011101000100111
+00100101011100110010011100100000
+00000000000000000000000000000000
+01100001011101010111100000100101
+01100100001110100010010101111000
+00100000000000000000000000000000
+01110011011001010110001100111010
+00100101011001000010000001101110
+01110011011001010110001100111010
+00100101011001000010000000000000
+01101101011101010011101000100101
+01110011001000000000000000000000
+01100100011011010111001100111010
+00100101011100110010000000000000
+01100100011101000111100001101101
+00111010001001010110010000100000
+01100100011100100111100001101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100100011101000111100001110011
+00111010001001010110010000100000
+01100100011100100111100001110011
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100001011100110111100101101101
+00111010001001010110010000100000
+00000000000000000000000000000000
+01100011011100100111010001110100
+00111010001001010111001100100000
+00000000000000000000000000000000
+01100011011010110110111100111010
+00100101011001000010000000000000
+01110011011001010111010001110000
+00111010001001010110010000100000
+00000000000000000000000000000000
+01110101011000110110111001110100
+00111010001001010110010000100000
+00000000000000000000000000000000
+01101000011001000011101000100101
+01100100001000000110110101100100
+00111010001001010110010000100000
+01100001011001000011101000100101
+01100100001000000000000000000000
+01110000011000110110001000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100001000000100001100000000
+00001010000010100101000001010100
+01010000001000000111001101110100
+01100001011101000111010101110011
+00111010001000000000000000000000
+00100101011100110000000000000000
+00001010000010100101001101111001
+01101110011000110010000001101001
+01101110011001100110111100100000
+01101110011011110111010000100000
+01110110011000010110110001101001
+01100100000010100000000000000000
+00001010000010100101001101111001
+01101110011000110110100001110010
+01101111011011100110100101111010
+01100001011101000110100101101111
+01101110001000000111001101110100
+01100001011101000111010101110011
+00111010000010100000000000000000
+01010111010100100010000001010000
+01010100010100000010000001000011
+01101111011100100110010100100000
+01010011011110010110111001100011
+00100000010011010110111101101110
+01101001011101000110111101110010
+00100000001001010111001100000000
+00001010010001010111001101100011
+00100000001111010010000001100101
+01111000011010010111010000000000
+00001010000010100101010001000001
+01001001001000000101010001101001
+01101101011001010011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+00001010000010100100110001101001
+01101110011010110010000001110011
+01110100011000010111010001110101
+01110011001110100000000000000000
+00001010001001010111001100111010
+00100000000000000000000000000000
+01110111011100100111010100110001
+00000000000000000000000000000000
+01001100011010010110111001101011
+00100000011101010111000000100000
+00100000001000000000000000000000
+01001100011010010110111001101011
+00100000011001000110111101110111
+01101110001000000000000000000000
+00101000010100100101100000111010
+00100000001001010110010000101100
+00100000010101000101100000111010
+00100000001001010110010000101001
+00000000000000000000000000000000
+00001010010011010110111101100100
+01100101001110100010000000000000
+01010111010100100010000001001111
+01100110011001100000000000000000
+00001010010000110110110001101111
+01100011011010110010000001101111
+01100110011001100111001101100101
+01110100001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00100101001100100110100100101110
+00100101001100000011100101101001
+00100000011100110000000000000000
+00100101011010010010111000100101
+00110000001110010110100100100000
+01110011000000000000000000000000
+00100101001110010110100100100000
+01101110011100110000000000000000
+00001010010011110110111001100101
+00101101011101110110000101111001
+00100000011001000110010101101100
+01100001011110010010000001100001
+01110110011001010111001001100001
+01100111011001010110010000111010
+00100000001000000010000000100000
+00100000001000000010000000000000
+00001010010011110110001001110011
+01100101011100100111011001100101
+01100100001000000110010001110010
+01101001011001100111010000111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010111010100100010000001001101
+01100001011100110111010001100101
+01110010001000000010000000000000
+01010111010100100010000001010011
+01101100011000010111011001100101
+00100000001000000010000000000000
+01010111010100100010000001010101
+01101110011010110110111001101111
+01110111011011100010000000000000
+01001100011011110110001101101011
+01100101011001000010000000000000
+01001110011011110100110001101111
+01100011011010110010000000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01100101011001000000000000000000
+01010101011011100110001101100001
+01101100011010010110001001110010
+01100001011101000110010101100100
+00000000000000000000000000000000
+01010011011001010111001001110110
+01101111001000000111001101110100
+01100001011101000110010100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01010000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110011101000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+01001111010011100000101000000000
+01001111010001100100011000001010
+00000000000000000000000000000000
+01000001011101010111100000100000
+01100011011011000110111101100011
+01101011001000000010010101100100
+00100000011100110111010001100001
+01110100011101010111001100111010
+00100000001000000010000000100000
+00100000001000000010000000100000
+00000000000000000000000000000000
+01100101011011100110000101100010
+01101100011001010110010000000000
+00101100001000000110110001101111
+01100011011010110110010101100100
+00000000000000000000000000000000
+00001010010101000110100101101101
+01101001011011100110011100100000
+01110000011000010111001001100001
+01101101011001010111010001100101
+01110010011100110011101000001010
+00000000000000000000000000000000
+01010010011011110111010101101110
+01100100001011010111010001110010
+01101001011100000010000001110100
+01101001011011010110010100100000
+00101000011011010111010100101001
+00111010001000000000000000000000
+00100101011100110010000001110000
+01110011000010100000000000000000
+01001101011000010111001101110100
+01100101011100100010110101110011
+01101100011000010111011001100101
+00100000011001000110010101101100
+01100001011110010011101000100000
+00100000001000000000000000000000
+01001101011000010111001101110100
+01100101011100100010000001010000
+01001000010110010010000001100100
+01100101011011000110000101111001
+01110011001110100010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100010110000011101000100000
+00100101001110010110010000100000
+01110000011100110010110000100000
+01010010010110000011101000100000
+00100101001110010110010000100000
+01110000011100110000101000000000
+01010011011011000110000101110110
+01100101001000000101000001001000
+01011001001000000110010001100101
+01101100011000010111100101110011
+00111010001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000000000000000000000000000
+01010100011011110111010001100001
+01101100001000000110110001101001
+01101110011010110010000001100001
+01110011011110010110110101101101
+01100101011101000111001001111001
+00111010000000000000000000000000
+00100101001100100011000101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01000011011000010110001001101100
+01100101001000000111001001110100
+01110100001000000110010001100101
+01101100011000010111100100111010
+00100000001000000010000000100000
+00100000001000000000000000000000
+01000011011011000110111101100011
+01101011001000000110111101100110
+01100110011100110110010101110100
+00111010000000000000000000000000
+00100101001100100011100101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010000011010000110000101110011
+01100101001000000111001101100101
+01110100011100000110111101101001
+01101110011101000011101000000000
+00100101001100100011011101100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010011011010110110010101110111
+00111010001000000010000000100000
+00100000001000000000000000000000
+00100101001100110011001001100100
+00100000011100000111001100001010
+00000000000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100011
+01101111011101010110111001110100
+01100101011100100011101000000000
+00100101001100100011011101100100
+00001010000000000000000000000000
+01110101011011100110101101101110
+01101111011101110110111000000000
+01110011011101000110000101110100
+01110011000000000000000000000000
+00011011010110110011000100100101
+01100011000000000000000000000000
+01000011011011110110110101101101
+01100001011011100110010000100000
+00100010001001010111001100100010
+00111010001000000110010101110010
+01110010011011110111001000100000
+00100101011001000000101000000000
+01010101011011100111001001100101
+01100011011011110110011101101110
+01101001011110100110010101100100
+00100000011000110110111101101101
+01101101011000010110111001100100
+00100000001000100010010101110011
+00100010001011100000101000000000
+01110111011100100110001100100011
+00100000000000000000000000000000
+00100101011000110000000000000000
+01000101011011010111000001110100
+01111001001000000110100101101110
+01101001011101000010000001110011
+01100011011100100110100101110000
+01110100001011100010111000101110
+00001010000000000000000000000000
+01100101011110000110010101100011
+01110101011101000110100101101110
+01100111001110100010000000100101
+01110011000010100000000000000000
+00101101001011010010000001100010
+01110101011010010110110001110100
+00101101011010010110111000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+00101000011001010110110101110000
+01110100011110010010100100001010
+00000000000000000000000000000000
+01010111010100100010000001000011
+01101111011100100110010100100000
+01100010011101010110100101101100
+01100100001110100010000000100101
+01110011001001010111001100001010
+00000000000000000000000000000000
+00100000001010000111010101101110
+01110011011101010111000001110000
+01101111011100100111010001100101
+01100100001000000110010001100101
+01110110011001010110110001101111
+01110000011001010111001000100000
+01100010011101010110100101101100
+01100100001010010000000000000000
+01000010011101010110100101101100
+01110100001110100010000000100101
+01110011001000000010010101110011
+00100000011000100111100100100000
+00100101011100110000101000000000
+01000010011101010110100101101100
+01110100001000000110011001101111
+01110010001000000010010101100100
+00100000011010110100001000100000
+01010010010000010100110100101100
+00100000011100110111010001100001
+01100011011010110010000001101001
+01110011001000000010010101100100
+00100000011000100111100101110100
+01100101011100110000101000000000
+01010111010000010101001001001110
+01001001010011100100011100111010
+00100000011010000110000101110010
+01100100011101110110000101110010
+01100101001000000111001101100001
+01111001011100110010000000100101
+01101001011010110100001000100000
+00111100001111010010000001010010
+01000001010011010010000000111100
+00100000001001010110100101101011
+01000010000010100000000000000000
+01110110011001010111001000000000
+00100101011100110011101100100000
+00100101011100110010000000100101
+01110011000010100000000000000000
+01010101011011100110101101101110
+01101111011101110110111000100000
+01110011011101010110001001100011
+01101111011011010110110101100001
+01101110011001000010000000100010
+00100101011100110010001000001010
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100000000000000000000000000
+01110011011101000110111101110000
+00000000000000000000000000000000
+01100101001100100110010100000000
+01100100011001010110110001100001
+01111001000000000000000000000000
+01100111011011010000000000000000
+01100001011000100111001101100011
+01100001011011000000000000000000
+01101101011011110110010001100101
+00000000000000000000000000000000
+01110011011101000110111101110000
+01110000011001010110010000000000
+01110010011101010110111001101110
+01101001011011100110011100000000
+01110000001100100111000000000000
+01000001011101100110000101101001
+01101100011000010110001001101100
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100011100110011101000001010
+00000000000000000000000000000000
+00100000001000000010010101110011
+00001010000000000000000000000000
+01101000011001010110110001110000
+00000000000000000000000000000000
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000001110100010010100110000
+00110010011110000011101000100101
+00110000001100100111100000111010
+00100101001100000011001001111000
+00111010001001010011000000110010
+01111000000000000000000000000000
+01100111011001010111010000000000
+01100111011001010111010001110000
+00000000000000000000000000000000
+01110011011001010111010000000000
+01110011011001010111010001110000
+00000000000000000000000000000000
+01001101010000010100001100101101
+01100001011001000110010001110010
+01100101011100110111001100111010
+00100000001001010111001100001010
+00000000000000000000000000000000
+01101101011000010110001100000000
+01110010011001010111001101100101
+01110100000000000000000000000000
+01101101011000010111100000000000
+01110000011100100110100101101110
+01110100010111110111010001100001
+01110011011010110101111101110100
+01101001011011010110010101011111
+01110100011010000111001001100101
+01110011011010000110111101101100
+01100100001000000010010101100100
+00001010000000000000000000000000
+00100000011010010111010001100101
+01110010011000010111010001101001
+01101111011011100111001100100000
+00100000001000000010000000100000
+01110011011001010110001101101111
+01101110011001000111001100101110
+01101101011010010110001101110010
+01101111011100110010000000100000
+00100000001000000110110101100001
+01111000010111110110110101110011
+00100000011011100110000101101101
+01100101000010100000000000000000
+00100000001000000010010100111001
+01101100011010010010000000100000
+00100000001001010011100101101100
+01101001001011100010010100110000
+00110110011011000110100100100000
+00100101001110010110110001100100
+00100000001001010111001100001010
+00000000000000000000000000000000
+01110000011100110000000000000000
+00100101011101010000101000000000
+01010101011100110110000101100111
+01100101001110100010000001110010
+01100101011001100111001001100101
+01110011011010000010000000111100
+01110011011001010110001101101111
+01101110011001000111001100111110
+00001010000000000000000000000000
+01110010011001010110011001110010
+01100101011100110110100000000000
+01110011011101000110000101110100
+01101001011100110111010001101001
+01100011011100110010000001101110
+01101111011101110010000001101111
+01100110011001100000101000000000
+01100010011101000111001100000000
+01101111011001100110011000000000
+01110011011101000110000101110100
+00000000000000000000000000000000
+01010111011100100110111101101110
+01100111001000000111000001100001
+01110010011000010110110101100101
+01110100011001010111001000001010
+00000000000000000000000000000000
+01100101011100100110000101110011
+01100101000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01000100010000100000101000000000
+01100001011001000110010000000000
+01010011010001100101000000100000
+01000100010000100010000001101001
+01110011001000000110011001110101
+01101100011011000000101000000000
+01001001001100100100001100100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010111001001110010
+01101111011100100010000000101000
+00100101011001000010100100001010
+00000000000000000000000000000000
+00100101011001000010000001010011
+01000110010100000111001100100000
+01101001011011100010000001000100
+01000010000010100000000000000000
+01110011011010000110111101110111
+00000000000000000000000000000000
+01010011010001100101000000100000
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000011001010110110101110000
+01110100011110010000101000000000
+00100101011001000011101000100000
+01010000010011100011101000000000
+00100000011001000101010001111000
+00111010001000000010010100111000
+01100100001000000110010001010010
+01111000001110100010000000100101
+00111000011001000010000001100001
+01101100011100000110100001100001
+00111010001000000010010100111000
+01100100000010100000000000000000
+01101101011000010111010001100011
+01101000000000000000000000000000
+01001110011011110010000001010011
+01000110010100000010111000001010
+00000000000000000000000000000000
+01010011010001100101000000100000
+01110010011001010110000101100100
+00100000011001010111001001110010
+01101111011100100000101000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110110101100001
+01110100011000110110100000100000
+01110100011011110010000001000100
+01000010000010100000000000000000
+01010011010001100101000000100000
+01101101011000010111010001100011
+01101000011001010110010000101100
+00100000011001000101010001111000
+00111101001001010110010000100000
+01100100010100100111100000111101
+00100101011001000010000001100001
+01101100011100000110100001100001
+00111101001001010110010000001010
+00000000000000000000000000000000
+01100101011011100110000100000000
+01110011011001100111000000000000
+01101001011011100110100101110100
+00000000000000000000000000000000
+01100011011011000000000000000000
+01110011011100000111001100000000
+01100111011100000111001100000000
+00100101011001000010000000100101
+01100100000010100000000000000000
+01110011011001000110000101100011
+00000000000000000000000000000000
+01100111011001000110000101100011
+00000000000000000000000000000000
+01100011011010000110010101100011
+01101011011101100110001101101111
+00000000000000000000000000000000
+01110000011011000110110000000000
+01100110011011110111001001100011
+01100101000000000000000000000000
+01000110011011110111010101101110
+01100100001000000111000001101000
+01100001011100110110010100100000
+01110100011100100110000101101110
+01110011011010010111010001101001
+01101111011011100010000001101001
+01101110001000000100010101000101
+01010000010100100100111101001101
+00111010001000000010010101100100
+01110000011100110000101000000000
+01001101011001010110000101110011
+01110101011100100110100101101110
+01100111001000000111010000110010
+00101111011101000011010000100000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011011100111001101101001
+01110100011010010110111101101110
+00101110001011100010111000001010
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000000000
+01110011011001010111010001110011
+01100101011000110000000000000000
+01110011011001010111010001101110
+01110011011001010110001100000000
+01110010011000010111011100000000
+00100101011100110010000000101011
+00100101011001000010000001101110
+01100001011011100110111101110011
+01100101011000110110111101101110
+01100100011100110010111000001010
+00000000000000000000000000000000
+01110100011010010110110101100101
+00000000000000000000000000000000
+01100111011101010110100100000000
+01100110011100110000000000000000
+01100110011100110110010100000000
+01110011011001000110001000000000
+01001111010011100000000000000000
+01001111010001100100011000000000
+01100101011011100110000101100010
+01101100011001010000000000000000
+01100100011010010111001101100001
+01100010011011000110010100000000
+01110000011010000110000101110011
+01100101001000000111010001110010
+01100001011000110110101101101001
+01101110011001110010000000100101
+01110011000010100000000000000000
+01110000011101000111001001100001
+01100011011010110000000000000000
+01010000010100000101001101001001
+00100000011101100110010101110010
+01100010011011110111001101101001
+01110100011110010011101000100000
+00100101001100000011100001101100
+01111000000010100000000000000000
+01110110011001010111001001100010
+01101111011100110110010100000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110010101110010
+01100001011100110110010100100000
+01101001011011100110100101110100
+00100000011100110110001101110010
+01101001011100000111010000001010
+00000000000000000000000000000000
+01000011011011110111010101101100
+01100100001000000110111001101111
+01110100001000000110000101100100
+01100100001000000111010001101000
+01100101001000000110001101101111
+01101101011011010110000101101110
+01100100000010100000000000000000
+01001111010010110010111000001010
+00000000000000000000000000000000
+01100010011011110110111101110100
+00000000000000000000000000000000
+00100101011100110010110000100000
+00100101011100110010000000100101
+01100100001011000010000000100101
+01100100001011000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101011100110010000000100101
+00110010011001000010000000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00111010001001010011000000110010
+01100100000000000000000000000000
+00100101001101000110010000101101
+00100101001100000011001001100100
+00101101001001010011000000110010
+01100100001011010010010100110000
+00110010011001000011101000100101
+00110000001100100110010000111010
+00100101001100000011001001100100
+00000000000000000000000000000000
+00011011010110110011000000100101
+01100100001110110011001100100101
+01100100011011010000000000000000
+00011011010110110110110100000000
+00011011010110110010010101100100
+00111011001001010110010001100110
+00000000000000000000000000000000
+00011011010110110011001001001010
+00011011010110110011000100111011
+00110001010010000000000000000000
+01010011011101010110111000000000
+01001101011011110110111000000000
+01010100011101010110010100000000
+01010111011001010110010000000000
+01010100011010000111010100000000
+01000110011100100110100100000000
+01010011011000010111010000000000
+01001010011000010110111000000000
+01000110011001010110001000000000
+01001101011000010111001000000000
+01000001011100000111001000000000
+01001101011000010111100100000000
+01001010011101010110111000000000
+01001010011101010110110000000000
+01000001011101010110011100000000
+01010011011001010111000000000000
+01001111011000110111010000000000
+01001110011011110111011000000000
+01000100011001010110001100000000
+01001100011011110110111101110000
+01110011001000000111000001100101
+01110010001000000110101001101001
+01100110011001100111100100111010
+00100000001001010110100100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01101110011011110010000001110011
+01101111011000110110101101100101
+01110100001000000111001101101100
+01101111011101000111001100100000
+01101100011001010110011001110100
+00001010000000000000000000000000
+01110111011100100011000000000000
+01101110011001010111010000101101
+01100010011010000000000000000000
+00110000001100010011001000110011
+00110100001101010011011000110111
+00111000001110010110000101100010
+01100011011001000110010101100110
+00000000000000000000000000000000
+01101110011011110010000001110000
+01100110011010010110110001110100
+01100101011100100010000001110010
+01110101011011000110010100101101
+01110011011001010111010000100001
+00001010000000000000000000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001101101
+01100001011001110110100101100011
+00100000011011100111010101101101
+01100010011001010111001000100000
+00101000011001110110111101110100
+00100000001100000111100000100101
+01111000001010010000101000000000
+01110000011001100110100101101100
+01110100011001010111001000111010
+00100000011101110111001001101111
+01101110011001110010000001110010
+01110101011011000110010100101101
+01110011011001010111010000101100
+00100000011000110110000101101110
+00100111011101000010000001100001
+01110000011100000110110001111001
+00001010000000000000000000000000
+01000101011100100111001001101111
+01110010001110100010000001001101
+01101001011011100110100101100011
+00100000010010000100010001001100
+00100000011101100110010101110010
+01110011011010010110111101101110
+00100000001001010110010000100000
+01101110011011110111010000100000
+01110011011101010111000001110000
+01101111011100100111010001100101
+01100100001000000110001001111001
+00100000011100110111011100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001110010
+01100101011000110110010101101001
+01110110011001010110010000100000
+01100101011100100111001001101111
+01101110011001010110111101110101
+01110011001000000110011001110010
+01100001011011010110010100001010
+00000000000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000010011010110100101101110
+01101001011000110010000001010010
+01111000001000000110011001101001
+01100110011011110010000001100110
+01110101011011000110110000101100
+00100000011001010111100001110000
+01100101011000110111010000100000
+01110111011100100110111101101110
+01100111001000000110011001110010
+01100001011011010110010101110011
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01101110011011110111010000100000
+01110100011001010111001001101101
+01101001011011100110000101110100
+01100101011001000010000001101001
+01101110011001100110100101101110
+01101001011101000110010100100000
+01101101011000110111001000111101
+00110000011110000010010101111000
+00001010000000000000000000000000
+01010111011000010111001001101110
+01101001011011100110011100111010
+00100000011101000111100000100000
+01110100011010010110110101100101
+01110011011101000110000101101101
+01110000001000000110111001100101
+01110110011001010111001000100000
+01100010011001010110001101100001
+01101101011001010010000001100001
+01110110011000010110100101101100
+01100001011000100110110001100101
+00001010000000000000000000000000
+01100100011001010111011000100000
+00100000001100000111100000100101
+00110000001110000110110001111000
+00100000010000000010000000100101
+00110000001101100110110001111000
+00101100001000000010010101110011
+00001010000000000000000000000000
+01100110011100000110011101100001
+00101101011000010111001001100101
+01100001000000000000000000000000
+01000101011100100111001001101111
+01110010001000000010010101100100
+00100000011101110110100001101001
+01101100011001010010000001110010
+01100101011000010110010001101001
+01101110011001110010000001110100
+00110010001101000111000000100000
+01100110011100100110111101101101
+00100000011100110111010001101111
+01110010011000010110011101100101
+00001010000000000000000000000000
+01110100001100100011010001110000
+00100000011100100110010101100001
+01100100001000000110011001110010
+01101111011011010010000001110011
+01110100011011110111001001100001
+01100111011001010011101000100000
+00100101011001000010000001110000
+01110011000010100000000000000000
+01010111011000010110100101110100
+01101001011011100110011100100000
+01100110011011110111001000100000
+01101100011010010110111001101011
+00101110001011100010111000001010
+00000000000000000000000000000000
+01001100011011110110001101101011
+01101001011011100110011100100000
+01010000010011000100110000101110
+00101110001011100000101000000000
+01000011011000010110110001101001
+01100010011100100110000101110100
+01101001011011100110011100100000
+01010010010110000010000001110100
+01101001011011010110010101110011
+01110100011000010110110101110000
+01100101011100100010111000101110
+00101110000010100000000000000000
+01000110011000010110100101101100
+01100101011001000000000000000000
+01010011011101010110001101100011
+01100101011100110111001100000000
+01010111011100100110111101110100
+01100101001000000110111001100101
+01110111001000000111010000110010
+00110100011100000010000001110110
+01100001011011000111010101100101
+00111010001000000010010101100100
+00100000011100000111001100100000
+00101000001001010111001100101001
+00001010000000000000000000000000
+00100000010001010100111001001111
+01010011010100000100001100000000
+00100101011100110010010101110011
+00111010000000000000000000000000
+01001001010011100101011001000001
+01001100010010010100010000000000
+00100101011001000010111000100101
+00110000001101000110010000000000
+01110100011001010110110101110000
+00000000000000000000000000000000
+01110100011001010110110101110000
+01100101011100100110000101110100
+01110101011100100110010100000000
+01110011011001100111000000111010
+00100000011000110110111101110010
+01110010011101010111000001110100
+01100101011001000010000001100011
+01101000011001010110001101101011
+01110011011101010110110100001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100011001101100
+01100001011100110110100000001010
+00000000000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000101011100110001
+00001010000000000000000000000000
+01110011011001000110001001100110
+01110011001110100010000001100110
+01101111011101010110111001100100
+00100000011000010111010000100000
+00100101011010010010000001101001
+01101110001000000100100100110010
+01000011001010000011000001111000
+00100101001100100101100000101001
+00001010000000000000000000000000
+01100110011010010110110001100101
+00100000001100000111100000100101
+00110000001110000111100000100000
+01000000001000000010010100110100
+01101001001011000010000001101110
+01100001011011010110010100100000
+00100101011100110000101000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010000010100000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100110011010010110110001100101
+00100000011010010111001100100000
+01100101011011010111000001110100
+01111001000010100000000000000000
+00100101011100110011101000100000
+01010101011100110110100101101110
+01100111001000000101011100110001
+00100000011100110110010101110010
+01101001011000010110110000100000
+01101110011101010110110101100010
+01100101011100100000101000000000
+00100101011100110011101000100000
+01100110011000010110100101101100
+01110101011100100110010100001010
+00000000000000000000000000000000
+00100101011100110011101000100000
+01010011010001000100001000100000
+01100101011100100111001001101111
+01110010001011000010000001100011
+01100001011011100010011101110100
+00100000011100110110000101110110
+01100101000010100000000000000000
+01000001011001000110010001101001
+01101110011001110010000001101110
+01100101011101110010000001010011
+01000110010100000010000001100101
+01101110011101000111001001111001
+00001010000000000000000000000000
+01010101011100000110010001100001
+01110100011001010010000001100101
+01111000011010010111001101110100
+01101001011011100110011100100000
+01010011010001100101000000100000
+01100101011011100111010001110010
+01111001000010100000000000000000
+00101101001011010010000001110101
+01110011011001010111001000101101
+01100100011001010110011001101001
+01101110011001010110010000100000
+01110011011000110111001001101001
+01110000011101000010000000101101
+00101101000010100000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+01000101011100100110000101110011
+01101001011011100110011100100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100110011010010110110001100101
+01101110011000010110110101100101
+00111010001000000010010101110011
+00111011001000000110011001101001
+01110010011100110111010000111010
+00100000001001010111100000111011
+00100000011011000110000101110011
+01110100001110100010000000100101
+01111000000010100000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01000110011011000110000101110011
+01101000001010000011000001111000
+00100101011110000010100100101110
+00101110001011100000101000000000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000001101110
+01101111011101000010000001100110
+01101111011101010110111001100100
+00001010000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+01001001001100100100001100100000
+01000101010001010101000001010010
+01001111010011010010000000100101
+01100100001000000010100000110000
+01111000001001010111100000101001
+00101110001011100010111000001010
+00000000000000000000000000000000
+00110001001011010101011101101001
+01110010011001010010000001000101
+01000101010100000101001001001111
+01001101001000000110111001101111
+01110100001000000110011001101111
+01110101011011100110010000001010
+00000000000000000000000000000000
+01000110011011110111001001101101
+01100001011101000111010001101001
+01101110011001110010000001010011
+01000100010000100100011001010011
+00100000011010010110111000100000
+00110001001011010101011100100000
+01000101010001010101000001010010
+01001111010011010010000000101000
+00110000011110000010010101111000
+00101001001011100010111000101110
+00001010000000000000000000000000
+01100101011001010111000001110010
+01101111011011010000000000000000
+01101111011001100110011001110011
+01100101011101000010000000100101
+00110100011010010010000000101000
+00110000011110000010010100110000
+00110011011110000010100100111010
+00100000001001010011001101101001
+00100000001010000011000001111000
+00100101001100000011001001111000
+00101001000010100000000000000000
+01110111011100100110100101110100
+01100101001010000011000001111000
+00100101011110000010110000100000
+00100101011010010010100100111010
+00100000011100100110010101110011
+01110101011011000111010000100000
+00111101001000000010010101101001
+00001010000000000000000000000000
+01110010011001010110000101100100
+00101000001100000111100000100101
+01111000001011000010000000100101
+01101001001010010011101000100000
+01110010011001010111001101110101
+01101100011101000010000000111101
+00100000001001010110100100001010
+00000000000000000000000000000000
+01100100011001010111011001101001
+01100011011001010010000000100101
+01101001001110100010000000100101
+00110000001110000111100000100101
+00110000001110000111100000001010
+00000000000000000000000000000000
+01110100011001010110110101110000
+00111010001000000010010101100100
+00101110001001010011000000110100
+01100100000010100000000000000000
+01110111001100010000000000000000
+01110111001100010111001000000000
+01110111001100010111011100000000
+00111100010101010110111001101011
+01101110011011110111011101101110
+00111110000000000000000000000000
+01110011011011110110011001110100
+01110000011011000110110000111010
+00100000011010010111001001110001
+01110011001000000010010101100100
+00100000011100110110010101110001
+00100000001001010111001100100000
+01101101011011110110010001100101
+00100000001001010110010000100000
+01100001011011000110100101100111
+01101110011011010110010101101110
+01110100010111110111001101110100
+01100001011101000110010100100000
+00100101011001000010000001001000
+01001100001001010110010000100000
+01001101010011000010010101100100
+00100000010010000101100100111101
+00100101011001000010000001001101
+01011001001111010010010101100100
+00100000010001000110010101101100
+01000011011011100111010000111101
+00100101011001000000101000000000
+01110011011101000110000101110010
+01110100001011010110010101111000
+01110100000000000000000000000000
+01110111011000010110100101110100
+00101101011001010111100001110100
+00000000000000000000000000000000
+01110011011101000110000101110010
+01110100001011010110100001100101
+01101100011100000110010101110010
+00000000000000000000000000000000
+01110111011000010110100101110100
+00101101011010000110010101101100
+01110000011001010111001000000000
+01110011011101000110000101110010
+01110100001011010110110101100001
+01101001011011100000000000000000
+01110111011000010110100101110100
+00101101011011010110000101101001
+01101110000000000000000000000000
+01110010011001010110000101100100
+01111001000000000000000000000000
+01100011011011000110010101100001
+01110010001011010110010001100001
+01100011011100110000000000000000
+01110111011000010110100101110100
+00101101011000110110110001100101
+01100001011100100010110101100100
+01100001011000110111001100000000
+10111010110111000000111111111110
+00111011100110101100101000000000
+00000000000000100000000100000000
+00000000000000100000001000000000
+00000000000000100000001100000000
+00000000000000100000010000000000
+00000000000000100000010100000000
+00000000000000100000011000000000
+00000000000000100000011100000000
+00000000000011110100001001000000
+01000001110001100100111001101101
+01111111111111111111111111111111
+00000000000010000000000000110000
+11000100011001010011011000000000
+11111111111100001011110111000000
+00000000000001111101000000000000
+00111011100110101100100111111111
+00000000000000010000000001000011
+00000000000000010000000001000100
+00000000000000010101000110000000
+00000000010111101110000000000000
+00000001000000000000000000000001
+00010001001000100011001101000100
+11100000000000000001111111111111
+00000000001001000110000000000000
+00000001010101010100000000000000
+00000010010001101000000000000000
+00010011010101111000000000000000
+00001111111111111111111111111111
+00000101100101101000001011110000
+00001110111001101011001001111111
+00000001001100010010110100000010
+00000001001100010010110100001010
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+01010011010001000100001000101101
+01101101011000010110001100101101
+01100011011000010110110001101001
+01110111011100100010110101101001
+00000000001111010000000100110111
+10000000000000000000000000011111
+00000000100110001001010110110110
+11000100000000000000000000000001
+00000000000000011000011010100000
+00000000111111111111111111111111
+11111111111111011011011000010000
+00000000000000100100100111110000
+00000101111101011110000100000000
+00001011111010111100001000000000
+11111010000010100001111100000000
+00000001001100010010110100000011
+00000001000110110001100100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101110111111000
+00000000000000000101111000000100
+00000000000000000101111000010100
+00000000000000000101111000100000
+00000000000000000101111000101100
+00000000000000000101111000111000
+00000000000000000101111001000100
+00000000000000000000101010100000
+00000000000000000000101100010000
+00000000000000000000111000101000
+00000000000000000000111000101000
+00000000000000000000111000101000
+00000000000000000000111000101000
+00000000000000000000111000101000
+00000000000000000000111000101000
+00000000000000000000101110001100
+00000000000000000000101111111100
+00000000000000000000111000101000
+00000000000000000000110010010000
+00000000000000000000110111111100
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+01011111011011110110011001100110
+01110011011001010111010000000000
+01110111011100100101111101110011
+00110001000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110000101100100
+01101010011101010111001101110100
+00000000000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110111001101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011101000110100101101101
+01100101010111110110011101100101
+01110100000000000000000000000000
+01110111011100100111000001100011
+01011111011011100110010101110100
+01011111011100110110010101101110
+01100100000000000000000000000000
+00000001000110110001100100000000
+00000000000000000000000110000000
+11000010000000000000000000001110
+01110000011101000111000001100100
+01011111011011100110010101110100
+01101001011001100101111101100011
+01110010011001010110000101110100
+01100101010111110111001101101111
+01100011011010110110010101110100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000100101100001000
+00000000000000000100101100101000
+00000000000000000100101100110100
+00000000000000000100101101000100
+00000000000000000100101101100100
+00000000000000000100101101110100
+00000000000000000100101111011100
+00000000000000000100101110010100
+00000000000000000100101010011100
+00000000000000000100101011100000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000100000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000110000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001000000001000000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001010000001000000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001100000001100000010
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000001110000001100000010
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000010000000010000000010
+00000010000000010000000100000001
+00000001000000000000000000000000
+00000000000000000000000000000000
+00000000000010010000010000000011
+00000010000000010000000100000001
+00000001000000010000000000000000
+00000000000000000000000000000000
+00000000000010100000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000000
+00000000000000000000000000000000
+00000000000010110000010100000011
+00000010000000100000000100000001
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000011000000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000000000000000000000
+00000000000011010000011000000100
+00000011000000100000001000000001
+00000001000000010000000100000001
+00000001000000010000000000000000
+00000000000011100000011100000100
+00000011000000100000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000000
+00000000000011110000011100000101
+00000011000000110000001000000010
+00000001000000010000000100000001
+00000001000000010000000100000001
+00000000000000000000000000000000
+00000000000000000000100101010101
+01001101010000110011111010111100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101111010111100
+00000000001011000000000100000000
+00000000000000010000000000000000
+00000000000000000101111011000100
+00000000001011000000000100000000
+00000001011111110000000000000000
+00000000000000000101111011010000
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000000101111011011100
+00000000001101100000000100000001
+00000101011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101111100000000
+00000000001011000000000000000000
+00000010000000010000000000000000
+00000000000000000101111011101000
+00000000001101100000000000000000
+00000011000000100000000000000000
+00000000000000000101111011110100
+00000000001101100000000000000001
+00000101011111110000000000000000
+00000000000000000101111100001100
+00000000010000000000000000000000
+00000101000000000000000000000000
+00000000000000000101111100011000
+11111111111111110000000000000000
+00000101011111110000000000000000
+00000000000000000101111100100100
+11111111111111110000000000000000
+00000100011111110000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000100100100000
+00000000000000001000101000111100
+00000000000000001000101000100000
+00000000000000001000111001010000
+00000000000000001000111011010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000100101100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000101111110110100
+00000000000000000101111110110100
+00000000000000000000000000000000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000010100001000
+00000000000000001000111101010000
+00000000000000000000000000000000
+00000000000000001000111110010000
+00000000000000001000111110111000
+00000000000000001000111111101000
+00000000000000001001000000010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001001000000110000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000001000100101111000
+00000000000000001000100111100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001111011100
+00000000000000000000010000010100
+00000000000000000000010010100100
+00000000000000000000010010101100
+00000000000000000000010100000100
+00000000000000000000010100110000
+00000000000000000000010110001000
+00000000000000000000010110101100
+00000000000000000000011001110000
+00000000000000000000011001111000
+00000000000000000000011010000000
+00000000000000000000011011100100
+00000000000000000000011100000000
+00000000000000000000010011010000
+00000000000000000000000000000000
+00000000000000000001001001111100
+00000000000000000001000111110100
+00000000000000000001000110011000
+00000000000000000001000101000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000001000100011000
+00000000000000000001011011101100
+00000000000000000001011011001100
+00000000000000000001010011000100
+00000000000000000001001100010000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001000000000
+00000000000000000000000000000000
+00000000000000001001000101010000
+00000000000000001000101101101000
+00000000000000001000110001100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000100
+00000000000000000000000000001000
+00000000000000000000000000001111
+00000000000000000000000100000000
+00000000000000000000001000000000
+00000000000000000000000100101100
+00000100011000110110001010100000
+00000000000000000111111110110000
+00000000000000001001010000110100
+00000000000000000000000000000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000011101100000000
+00000000000000000011101111100100
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000100001100110010001000010001
+00000000000000000000000000000000
+00000100000000000000000000000000
+00010011100000000100011011100010
+00000001000000000000000000000000
+10010000000000001100111111101010
+00000001000000000000000000000000
+00010000100000010101011111110011
+00000001000000000000000000000000
+00001011111000001111111111111111
+00000001000000000000000000000000
+10001000111000001111111111111111
+00000001000000000000000000000000
+00001000111000011111111111111111
+00000001000000000000000000000000
+00011011000000000010000011100000
+00000001000000000000000000000000
+10011000000000001100000011101011
+00000001000000000000000000000000
+01101011001000010011000011100000
+00000001000000000000000000000000
+01101001011000010000110111100000
+00000001000000000000000000000000
+00010000101000111000100100000000
+00000100000000000000000000000000
+01101011000000110010000011110000
+00000001000000000000000000000000
+10111011000011011000000000000001
+00000100000000000000000000000000
+00110011111000110001111011110001
+00000001000000000000000000000000
+00110001110000110101111111111001
+00000001000000000000000000000000
+00101011000000110000000011100001
+00000001000000000000000000000000
+01000011110000110000000011100001
+00000001000000000000000000000000
+01111001010000010001010000000000
+00000100000000000000000000000000
+11001011001001010000000001100000
+00000000000000000000000000000000
+11010011001001010000001001100000
+00000000000000000000000000000000
+01010000111010101000000100000001
+00000100000000000000000000000000
+10000001110010001000000000000001
+00000100000000000000000000000000
+10000000001011111100000100000000
+00000100000000000000000000000000
+01011011000010010000000010000000
+00000001000000000000000000000000
+01011001000010010010000010000000
+00000001000000000000000000000000
+11000000011010101100000100000000
+00000100000000000000000000000000
+01100011000010010111101011111101
+00000001000000000000000000000000
+11111000100010101000000100000001
+00000100000000000000000000000000
+11110100100010101000000100000001
+00000100000000000000000000000000
+00000000000000000000000000000000
+00001000000000000000000000000000
+01010011010001000100001000101101
+00000000000001010000000100000001
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+00101110001000000010000000100000
+00000000000000000000000000000001
+00000000000000000000000000000000
+00101110001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000000
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000000101000000
+00000000000000000000000000000000
+00000000000000000000001000111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110111011100100010110101101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110111011100100010110101101001
+01101110011010010111010000100000
+00100000001000000010000000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001001000000
+00000000000000000000000000000000
+00000000000000000000001010111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01100011011000010110110001101001
+00000000000000000000000000000001
+00000000000000000000000000000000
+01100011011000010110110001101001
+01100010011100100110000101110100
+01101001011011110110111000100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001011000000
+00000000000000000000000000000000
+00000000000000000000001011000101
+01000110011010010110110001100101
+01000100011000010111010001100001
+01101101011000010110001100101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01101101011000010110001100101101
+01100001011001000110010001110010
+01100101011100110111001100100000
+00100000001000000010000000100000
+00100000001000000010000000000001
+00000000000000000000000000000000
+00000000000000000000000000000110
+00000000000000000000000000000000
+00000000000000000000001100000000
+00000000000000000000000000000000
+00000000000000000000001101111111
+01000110011010010110110001100101
+01000100011000010111010001100001
+01110011011001100111000000101101
+00000000000000000000000000000001
+00000000000000000000000000000000
+01110011011001100111000000101101
+01100100011000010111010001100001
+01100010011000010111001101100101
+00100000001000000010000000100000
+00100000001000000010000000000001
+11111111111111111111111111111111
+01011011000100010101011110100111
+00000000000000000000000000000011
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01110111011100100111000001100011
+00101101011101100011010000101110
+00110010000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000100011001010110001100100000
+00110001001110000010000000110010
+00110000001100010011011100000000
+00000000000000000000000000000000
+00110000001110010011101000110011
+00111001001110100011001100110111
+00000000000000000000000000000000
+00000000000000000000000000000000
+01000111011100100111101001100101
+01100111011011110111001001111010
+00100000010001000110000101101110
+01101001011011000111010101101011
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif
new file mode 100644
index 000000000..1680114ee
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/bin/wrpc/wrc_phy8_sim.mif
@@ -0,0 +1,32775 @@
+DEPTH = 32768;
+WIDTH = 32;
+ADDRESS_RADIX = HEX;
+DATA_RADIX = HEX;
+CONTENT
+BEGIN
+0 : 98000000;
+1 : D0000000;
+2 : D0200000;
+3 : 78010000;
+4 : 38210000;
+5 : D0E10000;
+6 : F800003A;
+7 : 34000000;
+8 : 00000000;
+9 : 00000000;
+a : 00000000;
+b : 00000000;
+c : 00000000;
+d : 00000000;
+e : 00000000;
+f : 00000000;
+10 : 00000000;
+11 : 00000000;
+12 : 00000000;
+13 : 00000000;
+14 : 00000000;
+15 : 00000000;
+16 : 00000000;
+17 : 00000000;
+18 : 00000000;
+19 : 00000000;
+1a : 00000000;
+1b : 00000000;
+1c : 00000000;
+1d : 00000000;
+1e : 00000000;
+1f : 00000000;
+20 : 57525043;
+21 : 2D2D2D2D;
+22 : 01234567;
+23 : 89ABCDEF;
+24 : 00009478;
+25 : 00000000;
+26 : 00008508;
+27 : 00008DA8;
+28 : 00000000;
+29 : 02140000;
+2a : 00000000;
+2b : 00000000;
+2c : 00000000;
+2d : 00000000;
+2e : 00000000;
+2f : 00008434;
+30 : 5B9D0000;
+31 : F800001E;
+32 : 34010002;
+33 : F800123E;
+34 : E000002E;
+35 : 34000000;
+36 : 34000000;
+37 : 34000000;
+38 : 00000000;
+39 : 00000000;
+3a : 00000000;
+3b : 00000000;
+3c : 00000000;
+3d : 00000000;
+3e : 00000000;
+3f : 00000000;
+40 : 98000000;
+41 : 781C0001;
+42 : 3B9CFFFC;
+43 : 78010000;
+44 : 38218E40;
+45 : 34020000;
+46 : 78030000;
+47 : 38639764;
+48 : C8611800;
+49 : F8001663;
+4a : 34010000;
+4b : 34020000;
+4c : 34030000;
+4d : F8000038;
+4e : E0000000;
+4f : 379CFFC4;
+50 : 5B810004;
+51 : 5B820008;
+52 : 5B83000C;
+53 : 5B840010;
+54 : 5B850014;
+55 : 5B860018;
+56 : 5B87001C;
+57 : 5B880020;
+58 : 5B890024;
+59 : 5B8A0028;
+5a : 5B9E0034;
+5b : 5B9F0038;
+5c : 2B81003C;
+5d : 5B810030;
+5e : BB800800;
+5f : 3421003C;
+60 : 5B81002C;
+61 : C3A00000;
+62 : 2B810004;
+63 : 2B820008;
+64 : 2B83000C;
+65 : 2B840010;
+66 : 2B850014;
+67 : 2B860018;
+68 : 2B87001C;
+69 : 2B880020;
+6a : 2B890024;
+6b : 2B8A0028;
+6c : 2B9D0030;
+6d : 2B9E0034;
+6e : 2B9F0038;
+6f : 2B9C002C;
+70 : 34000000;
+71 : C3C00000;
+72 : 90001000;
+73 : 3401FFFE;
+74 : A0410800;
+75 : D0010000;
+76 : 90201000;
+77 : 3401FFFE;
+78 : A0410800;
+79 : D0210000;
+7a : C3A00000;
+7b : 90001000;
+7c : 3401FFFE;
+7d : A0410800;
+7e : D0010000;
+7f : 90201000;
+80 : 38420001;
+81 : D0220000;
+82 : 38210001;
+83 : D0010000;
+84 : C3A00000;
+85 : 379CFFF4;
+86 : 5B9D0004;
+87 : 78010000;
+88 : 78030000;
+89 : 38219758;
+8a : 78020002;
+8b : 38638128;
+8c : 58220000;
+8d : 28620000;
+8e : 78010000;
+8f : 78030000;
+90 : 38219440;
+91 : 3863812C;
+92 : 58220000;
+93 : 28620000;
+94 : 78010000;
+95 : 78030000;
+96 : 38219760;
+97 : 38638130;
+98 : 58220000;
+99 : 28620000;
+9a : 78010000;
+9b : 78030000;
+9c : 38219474;
+9d : 38638134;
+9e : 58220000;
+9f : 28620000;
+a0 : 78010000;
+a1 : 78030000;
+a2 : 3821975C;
+a3 : 38638138;
+a4 : 58220000;
+a5 : 28620000;
+a6 : 78010000;
+a7 : 78030000;
+a8 : 3821972C;
+a9 : 3863813C;
+aa : 58220000;
+ab : 28620000;
+ac : 78010000;
+ad : 78030000;
+ae : 38638140;
+af : 38219718;
+b0 : 58220000;
+b1 : 28620000;
+b2 : 78010000;
+b3 : 38219754;
+b4 : 58220000;
+b5 : 34010001;
+b6 : F8000C5D;
+b7 : 3401FFDE;
+b8 : 33810008;
+b9 : 3401FFAD;
+ba : 33810009;
+bb : 3402FFEF;
+bc : 3401FFBE;
+bd : 3381000A;
+be : 3382000B;
+bf : 3381000D;
+c0 : 3402FFBA;
+c1 : 37810008;
+c2 : 3382000C;
+c3 : F8000989;
+c4 : 34020001;
+c5 : 34010001;
+c6 : F80008DE;
+c7 : F8000B8C;
+c8 : F8000D6D;
+c9 : F800126B;
+ca : 34010001;
+cb : F8000DE9;
+cc : 78010000;
+cd : 38218434;
+ce : 34020002;
+cf : 5822000C;
+d0 : E0000000;
+d1 : 379CFFE4;
+d2 : 5B8B0008;
+d3 : 5B9D0004;
+d4 : 5B84000C;
+d5 : 5B850010;
+d6 : B8805800;
+d7 : 5B860014;
+d8 : 78040000;
+d9 : 5B870018;
+da : 5B88001C;
+db : 38845DCC;
+dc : 34050000;
+dd : 44200003;
+de : 282403D4;
+df : 2825001C;
+e0 : 78060000;
+e1 : 38C68E44;
+e2 : 28C10000;
+e3 : 3C420002;
+e4 : B8A12800;
+e5 : 80A22800;
+e6 : 20A5000F;
+e7 : 5465000C;
+e8 : 78050000;
+e9 : 38A581F8;
+ea : B4A22800;
+eb : 78060000;
+ec : 28A20000;
+ed : B8C00800;
+ee : 38215DD4;
+ef : F800076E;
+f0 : B9600800;
+f1 : 37820010;
+f2 : F8000757;
+f3 : 2B9D0004;
+f4 : 2B8B0008;
+f5 : 379C001C;
+f6 : C3A00000;
+f7 : 379CFFFC;
+f8 : 5B9D0004;
+f9 : 34030001;
+fa : 34010003;
+fb : 34020000;
+fc : F8001243;
+fd : 34010000;
+fe : 34020001;
+ff : F8001369;
+100 : F8000C4A;
+101 : 34010000;
+102 : 2B9D0004;
+103 : 379C0004;
+104 : C3A00000;
+105 : 379CFFF4;
+106 : 5B8B000C;
+107 : 5B8C0008;
+108 : 5B9D0004;
+109 : 34010000;
+10a : B8406000;
+10b : F80012E0;
+10c : 45800005;
+10d : 64220000;
+10e : C8021000;
+10f : 38420001;
+110 : E0000013;
+111 : 780B0000;
+112 : 396B8E48;
+113 : 5C2C0004;
+114 : 59600000;
+115 : 3402FFFF;
+116 : E000000D;
+117 : 296C0000;
+118 : 34020001;
+119 : 5D80000A;
+11a : 78020000;
+11b : 38428430;
+11c : 34010003;
+11d : F8000CD5;
+11e : 34020002;
+11f : 49810004;
+120 : 34010001;
+121 : 59610000;
+122 : 34020001;
+123 : B8400800;
+124 : 2B9D0004;
+125 : 2B8B000C;
+126 : 2B8C0008;
+127 : 379C000C;
+128 : C3A00000;
+129 : 34010000;
+12a : C3A00000;
+12b : 379CFFFC;
+12c : 5B9D0004;
+12d : 34010000;
+12e : 34020001;
+12f : F8001339;
+130 : 34010000;
+131 : 2B9D0004;
+132 : 379C0004;
+133 : C3A00000;
+134 : 379CFFFC;
+135 : 5B9D0004;
+136 : 28210358;
+137 : 28210010;
+138 : 2823000C;
+139 : 44430004;
+13a : 5822000C;
+13b : B8400800;
+13c : F8000D78;
+13d : 34010000;
+13e : 2B9D0004;
+13f : 379C0004;
+140 : C3A00000;
+141 : 379CFFFC;
+142 : 5B9D0004;
+143 : F8000D6A;
+144 : 34020001;
+145 : 5C200003;
+146 : F8001312;
+147 : 7C220000;
+148 : B8400800;
+149 : 2B9D0004;
+14a : 379C0004;
+14b : C3A00000;
+14c : 379CFFF8;
+14d : 5B8B0008;
+14e : 5B9D0004;
+14f : B8202800;
+150 : B8220800;
+151 : B8402000;
+152 : B8605800;
+153 : 44200005;
+154 : 34010001;
+155 : B8A01000;
+156 : B8801800;
+157 : F8000CEF;
+158 : 45600005;
+159 : 1562001F;
+15a : 34010002;
+15b : B9601800;
+15c : F8000CEA;
+15d : 34010000;
+15e : 2B9D0004;
+15f : 2B8B0008;
+160 : 379C0008;
+161 : C3A00000;
+162 : 379CFFFC;
+163 : 5B9D0004;
+164 : B8201000;
+165 : 3401FFFF;
+166 : F8001296;
+167 : 34010000;
+168 : 2B9D0004;
+169 : 379C0004;
+16a : C3A00000;
+16b : 379CFF24;
+16c : 5B8B0014;
+16d : 5B8C0010;
+16e : 5B8D000C;
+16f : 5B8E0008;
+170 : 5B9D0004;
+171 : B8406000;
+172 : 282203D0;
+173 : B8807000;
+174 : 37810018;
+175 : B8605800;
+176 : B8A06800;
+177 : F800051D;
+178 : 45C00005;
+179 : 78010000;
+17a : 38218AAC;
+17b : 28210000;
+17c : 59C10000;
+17d : 45A00003;
+17e : 2B8100CC;
+17f : 59A10000;
+180 : 2B82006C;
+181 : 3401FFFD;
+182 : 44400013;
+183 : 45800007;
+184 : 2B820060;
+185 : 2B810058;
+186 : B4410800;
+187 : 2B8200A0;
+188 : B4220800;
+189 : 59810000;
+18a : 2B820068;
+18b : 3401FFFD;
+18c : 44400009;
+18d : 34010000;
+18e : 45600007;
+18f : 2B830064;
+190 : 2B82005C;
+191 : B4621000;
+192 : 2B8300A4;
+193 : B4431000;
+194 : 59620000;
+195 : 2B9D0004;
+196 : 2B8B0014;
+197 : 2B8C0010;
+198 : 2B8D000C;
+199 : 2B8E0008;
+19a : 379C00DC;
+19b : C3A00000;
+19c : 34010000;
+19d : C3A00000;
+19e : 34010000;
+19f : C3A00000;
+1a0 : 379CFFEC;
+1a1 : 5B8B000C;
+1a2 : 5B8C0008;
+1a3 : 5B9D0004;
+1a4 : 34040000;
+1a5 : B8406000;
+1a6 : B8605800;
+1a7 : 37820010;
+1a8 : 37830014;
+1a9 : 34050000;
+1aa : 5B800014;
+1ab : 5B800010;
+1ac : FBFFFFBF;
+1ad : 34010001;
+1ae : 5D810003;
+1af : 2B810010;
+1b0 : E0000002;
+1b1 : 2B810014;
+1b2 : 59610000;
+1b3 : 34010001;
+1b4 : 2B9D0004;
+1b5 : 2B8B000C;
+1b6 : 2B8C0008;
+1b7 : 379C0014;
+1b8 : C3A00000;
+1b9 : 379CFFFC;
+1ba : 5B9D0004;
+1bb : F8000856;
+1bc : 34010000;
+1bd : 2B9D0004;
+1be : 379C0004;
+1bf : C3A00000;
+1c0 : 379CFFFC;
+1c1 : 5B9D0004;
+1c2 : F800085A;
+1c3 : 34010000;
+1c4 : 2B9D0004;
+1c5 : 379C0004;
+1c6 : C3A00000;
+1c7 : 78010000;
+1c8 : 38218E4C;
+1c9 : 28210000;
+1ca : C3A00000;
+1cb : 379CFFF0;
+1cc : 5B8B0010;
+1cd : 5B8C000C;
+1ce : 5B8D0008;
+1cf : 5B9D0004;
+1d0 : 28450008;
+1d1 : 2C44000C;
+1d2 : 284D0000;
+1d3 : 3CA50010;
+1d4 : B8206000;
+1d5 : 284B0004;
+1d6 : B8A40800;
+1d7 : 340203E8;
+1d8 : F800142E;
+1d9 : 15A20018;
+1da : B8203000;
+1db : 78070000;
+1dc : 204200C0;
+1dd : 34010080;
+1de : 38E7754C;
+1df : 5C410003;
+1e0 : 78070000;
+1e1 : 38E75FB8;
+1e2 : 78040000;
+1e3 : B8800800;
+1e4 : B9801000;
+1e5 : B9601800;
+1e6 : B9602000;
+1e7 : B9602800;
+1e8 : 38215FC4;
+1e9 : F8000674;
+1ea : 2B9D0004;
+1eb : 2B8B0010;
+1ec : 2B8C000C;
+1ed : 2B8D0008;
+1ee : 379C0010;
+1ef : C3A00000;
+1f0 : 379CFFE8;
+1f1 : 5B9D0018;
+1f2 : B8205000;
+1f3 : 40610005;
+1f4 : 40640000;
+1f5 : 40650001;
+1f6 : 40660002;
+1f7 : 40670003;
+1f8 : 40680004;
+1f9 : 5B810004;
+1fa : 40610006;
+1fb : B8404800;
+1fc : B9401000;
+1fd : 5B810008;
+1fe : 40610007;
+1ff : 5B81000C;
+200 : 40610008;
+201 : 5B810010;
+202 : 40610009;
+203 : B9201800;
+204 : 5B810014;
+205 : 78010000;
+206 : 38215FE8;
+207 : F8000656;
+208 : 2B9D0018;
+209 : 379C0018;
+20a : C3A00000;
+20b : 379CFFD0;
+20c : 5B8B0030;
+20d : 5B8C002C;
+20e : 5B8D0028;
+20f : 5B8E0024;
+210 : 5B8F0020;
+211 : 5B90001C;
+212 : 5B910018;
+213 : 5B920014;
+214 : 5B930010;
+215 : 5B94000C;
+216 : 5B950008;
+217 : 5B9D0004;
+218 : B8603000;
+219 : B8209800;
+21a : B8409000;
+21b : 78010000;
+21c : B880A800;
+21d : 38216020;
+21e : BA601000;
+21f : BA401800;
+220 : B8C02000;
+221 : B8A0A000;
+222 : 78110000;
+223 : F800063A;
+224 : 78100000;
+225 : 780F0000;
+226 : 780E0000;
+227 : 780D0000;
+228 : B8205800;
+229 : 340C0000;
+22a : 3A316034;
+22b : 3A10603C;
+22c : 39EF70EC;
+22d : 39CE7ABC;
+22e : 39AD7374;
+22f : E0000017;
+230 : 5CC00006;
+231 : BA200800;
+232 : BA601000;
+233 : BA401800;
+234 : F8000629;
+235 : B5615800;
+236 : B6AC1000;
+237 : 40420000;
+238 : BA000800;
+239 : 358C0001;
+23a : F8000623;
+23b : 21820003;
+23c : B42B5800;
+23d : B9E03000;
+23e : 5C400005;
+23f : 2181000F;
+240 : B9C03000;
+241 : 44220002;
+242 : B9A03000;
+243 : B8C00800;
+244 : F8000619;
+245 : B5615800;
+246 : 2186000F;
+247 : 4A8CFFE9;
+248 : 44C00005;
+249 : 78010000;
+24a : 38217ABC;
+24b : F8000612;
+24c : B42B5800;
+24d : B9600800;
+24e : 2B9D0004;
+24f : 2B8B0030;
+250 : 2B8C002C;
+251 : 2B8D0028;
+252 : 2B8E0024;
+253 : 2B8F0020;
+254 : 2B90001C;
+255 : 2B910018;
+256 : 2B920014;
+257 : 2B930010;
+258 : 2B94000C;
+259 : 2B950008;
+25a : 379C0030;
+25b : C3A00000;
+25c : 379CFFB8;
+25d : 5B8B0048;
+25e : 5B8C0044;
+25f : 5B8D0040;
+260 : 5B8E003C;
+261 : 5B8F0038;
+262 : 5B900034;
+263 : 5B910030;
+264 : 5B92002C;
+265 : 5B930028;
+266 : 5B940024;
+267 : 5B950020;
+268 : 5B96001C;
+269 : 5B970018;
+26a : 5B980014;
+26b : 5B9D0010;
+26c : B8608000;
+26d : 40430001;
+26e : B8206000;
+26f : 34010002;
+270 : 2063000F;
+271 : B8406800;
+272 : 404E0000;
+273 : 44610006;
+274 : 78010000;
+275 : B9801000;
+276 : 38216044;
+277 : F80005E6;
+278 : E0000150;
+279 : 40450002;
+27a : 40460003;
+27b : 21CE000F;
+27c : 3CA50008;
+27d : 78010000;
+27e : B8C52800;
+27f : 41A60004;
+280 : 34030002;
+281 : B9C02000;
+282 : 344B0022;
+283 : 38216064;
+284 : B9801000;
+285 : F80005D8;
+286 : 41A30006;
+287 : 41A40007;
+288 : 29A5000C;
+289 : 3C630008;
+28a : 78010000;
+28b : B8831800;
+28c : 29A40008;
+28d : B8A03000;
+28e : B9801000;
+28f : 38216090;
+290 : F80005CD;
+291 : 78020000;
+292 : B9800800;
+293 : 384260C0;
+294 : 35A30014;
+295 : FBFFFF5B;
+296 : 41A3001E;
+297 : 41A4001F;
+298 : 41A50021;
+299 : 3C630008;
+29a : 78010000;
+29b : B8831800;
+29c : 41A40020;
+29d : 382160C8;
+29e : B9801000;
+29f : F80005BE;
+2a0 : 3401000C;
+2a1 : 55C100E9;
+2a2 : 78010000;
+2a3 : 3DCE0002;
+2a4 : 38218218;
+2a5 : B42E0800;
+2a6 : 28210000;
+2a7 : C0200000;
+2a8 : 78010000;
+2a9 : B9801000;
+2aa : 382160F4;
+2ab : F80005B2;
+2ac : 41620002;
+2ad : 41610003;
+2ae : 41640004;
+2af : 3C420018;
+2b0 : 3C210010;
+2b1 : 3C840008;
+2b2 : B8220800;
+2b3 : B8812000;
+2b4 : 41620006;
+2b5 : 41610007;
+2b6 : 41650008;
+2b7 : 3C420018;
+2b8 : 3C210010;
+2b9 : 3CA50008;
+2ba : B8220800;
+2bb : B8A12800;
+2bc : 78030000;
+2bd : 78010000;
+2be : 41670005;
+2bf : 41660009;
+2c0 : 3821610C;
+2c1 : B9801000;
+2c2 : 3863611C;
+2c3 : E000001C;
+2c4 : 78010000;
+2c5 : B9801000;
+2c6 : 38216128;
+2c7 : F8000596;
+2c8 : 41620002;
+2c9 : 41610003;
+2ca : 41640004;
+2cb : 3C420018;
+2cc : 3C210010;
+2cd : 3C840008;
+2ce : B8220800;
+2cf : B8812000;
+2d0 : 41620006;
+2d1 : 41610007;
+2d2 : 41650008;
+2d3 : 3C420018;
+2d4 : 3C210010;
+2d5 : 3CA50008;
+2d6 : B8220800;
+2d7 : 41670005;
+2d8 : 41660009;
+2d9 : B8A12800;
+2da : 78030000;
+2db : 78010000;
+2dc : 3821610C;
+2dd : B9801000;
+2de : 38636144;
+2df : B8E42000;
+2e0 : B8C52800;
+2e1 : F800057C;
+2e2 : E00000A6;
+2e3 : 78010000;
+2e4 : B9801000;
+2e5 : 38216154;
+2e6 : F8000577;
+2e7 : 41620002;
+2e8 : 41610003;
+2e9 : 41640004;
+2ea : 3C420018;
+2eb : 3C210010;
+2ec : 3C840008;
+2ed : B8220800;
+2ee : B8812000;
+2ef : 41620006;
+2f0 : 41610007;
+2f1 : 41650008;
+2f2 : 3C420018;
+2f3 : 3C210010;
+2f4 : 3CA50008;
+2f5 : B8220800;
+2f6 : B8A12800;
+2f7 : 78030000;
+2f8 : 78010000;
+2f9 : 41670005;
+2fa : 41660009;
+2fb : 3821610C;
+2fc : B9801000;
+2fd : 38636170;
+2fe : E3FFFFE1;
+2ff : 78010000;
+300 : B9801000;
+301 : 38216180;
+302 : F800055B;
+303 : 41620002;
+304 : 41610003;
+305 : 41640004;
+306 : 3C420018;
+307 : 3C210010;
+308 : 3C840008;
+309 : B8220800;
+30a : B8812000;
+30b : 41620006;
+30c : 41610007;
+30d : 41650008;
+30e : 3C420018;
+30f : 3C210010;
+310 : 41670005;
+311 : 41660009;
+312 : 3CA50008;
+313 : B8220800;
+314 : 780E0000;
+315 : 39CE619C;
+316 : B8A12800;
+317 : 78010000;
+318 : B9801000;
+319 : B9C01800;
+31a : B8E42000;
+31b : B8C52800;
+31c : 3821610C;
+31d : F8000540;
+31e : 3563000A;
+31f : B9800800;
+320 : B9C01000;
+321 : FBFFFECF;
+322 : 340B0036;
+323 : E0000098;
+324 : 78010000;
+325 : B9801000;
+326 : 382161B0;
+327 : F8000536;
+328 : 41620002;
+329 : 41610003;
+32a : 41640004;
+32b : 3C420018;
+32c : 3C210010;
+32d : 3C840008;
+32e : B8220800;
+32f : B8812000;
+330 : 41620006;
+331 : 41610007;
+332 : 41650008;
+333 : 3C420018;
+334 : 3C210010;
+335 : 41670005;
+336 : 41660009;
+337 : 3CA50008;
+338 : B8220800;
+339 : B8A12800;
+33a : 78030000;
+33b : 78010000;
+33c : B8E42000;
+33d : B8C52800;
+33e : B9801000;
+33f : 386361CC;
+340 : 3821610C;
+341 : F800051C;
+342 : 4162000E;
+343 : 4161000F;
+344 : 41640010;
+345 : 3C420018;
+346 : 3C210010;
+347 : 3C840008;
+348 : B8220800;
+349 : B8812000;
+34a : 41620012;
+34b : 41610013;
+34c : 41650014;
+34d : 3C420018;
+34e : 3C210010;
+34f : 3CA50008;
+350 : B8220800;
+351 : B8A12800;
+352 : 41620016;
+353 : 41610017;
+354 : 41660018;
+355 : 3C420018;
+356 : 3C210010;
+357 : 41690011;
+358 : 41680015;
+359 : 41670019;
+35a : 3CC60008;
+35b : B8220800;
+35c : B8C13000;
+35d : 78030000;
+35e : 78010000;
+35f : B9242000;
+360 : B9052800;
+361 : B8E63000;
+362 : B9801000;
+363 : 386361F8;
+364 : 382161E4;
+365 : F80004F8;
+366 : 4163000D;
+367 : 4164001A;
+368 : 78010000;
+369 : B9801000;
+36a : 3821621C;
+36b : F80004F2;
+36c : 41610020;
+36d : 4164001B;
+36e : 4165001C;
+36f : 4166001D;
+370 : 4167001E;
+371 : 4168001F;
+372 : 5B810004;
+373 : 41610021;
+374 : 78030000;
+375 : B9801000;
+376 : 5B810008;
+377 : 41610022;
+378 : 38636274;
+379 : 340B0040;
+37a : 5B81000C;
+37b : 78010000;
+37c : 38216244;
+37d : F80004E0;
+37e : E000003D;
+37f : 78010000;
+380 : B9801000;
+381 : 38216294;
+382 : F80004DB;
+383 : 78020000;
+384 : B9800800;
+385 : 384262B0;
+386 : B9601800;
+387 : FBFFFE69;
+388 : 340B002C;
+389 : E0000032;
+38a : 340B0022;
+38b : E0000030;
+38c : 55F70009;
+38d : 78010000;
+38e : B9801000;
+38f : BA001800;
+390 : B9602000;
+391 : B9E02800;
+392 : 382162CC;
+393 : F80004CA;
+394 : E0000034;
+395 : B5AB7000;
+396 : 41D60002;
+397 : 41C10003;
+398 : 41C30000;
+399 : 3ED60008;
+39a : 41C40001;
+39b : B836B000;
+39c : 41C10008;
+39d : 41C50004;
+39e : 41C60005;
+39f : 41C70006;
+3a0 : 41C80007;
+3a1 : 5B810004;
+3a2 : 41C10009;
+3a3 : 3C630008;
+3a4 : 36D10004;
+3a5 : 5B810008;
+3a6 : B8831800;
+3a7 : BAA00800;
+3a8 : B9801000;
+3a9 : BA202000;
+3aa : F80004B3;
+3ab : 4DF10007;
+3ac : BA400800;
+3ad : B9801000;
+3ae : BA201800;
+3af : B9E02000;
+3b0 : F80004AD;
+3b1 : E0000008;
+3b2 : B9800800;
+3b3 : BA801000;
+3b4 : BA601800;
+3b5 : 35C4000A;
+3b6 : 36C5FFFA;
+3b7 : FBFFFE54;
+3b8 : BA207800;
+3b9 : B56F5800;
+3ba : E000000B;
+3bb : 78150000;
+3bc : 78140000;
+3bd : 78130000;
+3be : 78120000;
+3bf : 34180002;
+3c0 : 34170009;
+3c1 : 3AB562F0;
+3c2 : 3A94635C;
+3c3 : 3A736364;
+3c4 : 3A526330;
+3c5 : 4D700003;
+3c6 : CA0B7800;
+3c7 : 49F8FFC5;
+3c8 : 78020000;
+3c9 : 78030000;
+3ca : B9800800;
+3cb : 38426370;
+3cc : 38636378;
+3cd : B9A02000;
+3ce : BA002800;
+3cf : FBFFFE3C;
+3d0 : 2B9D0010;
+3d1 : 2B8B0048;
+3d2 : 2B8C0044;
+3d3 : 2B8D0040;
+3d4 : 2B8E003C;
+3d5 : 2B8F0038;
+3d6 : 2B900034;
+3d7 : 2B910030;
+3d8 : 2B92002C;
+3d9 : 2B930028;
+3da : 2B940024;
+3db : 2B950020;
+3dc : 2B96001C;
+3dd : 2B970018;
+3de : 2B980014;
+3df : 379C0048;
+3e0 : C3A00000;
+3e1 : 379CFFF0;
+3e2 : 5B8B000C;
+3e3 : 5B8C0008;
+3e4 : 5B9D0004;
+3e5 : B8206000;
+3e6 : B8405800;
+3e7 : 44800005;
+3e8 : B8801000;
+3e9 : 5B830010;
+3ea : FBFFFDE1;
+3eb : 2B830010;
+3ec : B9800800;
+3ed : B9601000;
+3ee : FBFFFE6E;
+3ef : 34010000;
+3f0 : 2B9D0004;
+3f1 : 2B8B000C;
+3f2 : 2B8C0008;
+3f3 : 379C0010;
+3f4 : C3A00000;
+3f5 : 379CFFE8;
+3f6 : 5B8B0018;
+3f7 : 5B8C0014;
+3f8 : 5B8D0010;
+3f9 : 5B8E000C;
+3fa : 5B8F0008;
+3fb : 5B9D0004;
+3fc : 282D0000;
+3fd : B8207800;
+3fe : 282E0004;
+3ff : B8406000;
+400 : 340B0000;
+401 : 34010000;
+402 : 34040000;
+403 : 544D0006;
+404 : B9A00800;
+405 : F800122E;
+406 : 882C1000;
+407 : B9602000;
+408 : C9A26800;
+409 : 34030000;
+40a : 34020001;
+40b : E000000B;
+40c : 3D850001;
+40d : 3D6B0001;
+40e : F5856000;
+40f : 3C630001;
+410 : B58B5800;
+411 : B8A06000;
+412 : 3C450001;
+413 : F4451000;
+414 : B4431800;
+415 : B8A01000;
+416 : 1565001F;
+417 : C8AC3000;
+418 : F4C53000;
+419 : C8AB2800;
+41a : C8A62800;
+41b : 00A5001F;
+41c : 34060001;
+41d : 55AB0004;
+41e : 5DAB0002;
+41f : 55CC0002;
+420 : 34060000;
+421 : A0A63000;
+422 : 5CC0FFEA;
+423 : 556D000D;
+424 : 5D6D0002;
+425 : 558E000B;
+426 : C9CC2800;
+427 : F4AE7000;
+428 : C9AB6800;
+429 : C9AE6800;
+42a : B8A07000;
+42b : B4822800;
+42c : F4852000;
+42d : B4230800;
+42e : B4810800;
+42f : B8A02000;
+430 : 3C65001F;
+431 : 00420001;
+432 : 00630001;
+433 : B8A21000;
+434 : B8622800;
+435 : 44A00006;
+436 : 3D65001F;
+437 : 018C0001;
+438 : 016B0001;
+439 : B8AC6000;
+43a : E3FFFFE9;
+43b : 59E10000;
+43c : B9C00800;
+43d : 59E40004;
+43e : 2B9D0004;
+43f : 2B8B0018;
+440 : 2B8C0014;
+441 : 2B8D0010;
+442 : 2B8E000C;
+443 : 2B8F0008;
+444 : 379C0018;
+445 : C3A00000;
+446 : 379CFFF8;
+447 : 5B8B0008;
+448 : 5B9D0004;
+449 : B8405800;
+44a : F80008DB;
+44b : B42B0800;
+44c : 2B9D0004;
+44d : 2B8B0008;
+44e : 379C0008;
+44f : C3A00000;
+450 : 379CFFF8;
+451 : 5B8B0008;
+452 : 5B9D0004;
+453 : 78040000;
+454 : B8405800;
+455 : 78050000;
+456 : 34020006;
+457 : 34030001;
+458 : 38846428;
+459 : 38A5824C;
+45a : B9603000;
+45b : FBFFFC76;
+45c : 45600005;
+45d : 1562001F;
+45e : 34010002;
+45f : B9601800;
+460 : F80009E6;
+461 : 34010000;
+462 : 2B9D0004;
+463 : 2B8B0008;
+464 : 379C0008;
+465 : C3A00000;
+466 : 379CFFF4;
+467 : 5B8B000C;
+468 : 5B8C0008;
+469 : 5B9D0004;
+46a : B8206000;
+46b : B8405800;
+46c : B8603000;
+46d : 44600008;
+46e : 78040000;
+46f : 78050000;
+470 : 34020006;
+471 : 34030001;
+472 : 38846434;
+473 : 38A5826C;
+474 : FBFFFC5D;
+475 : B9800800;
+476 : B9601000;
+477 : FBFFFFD9;
+478 : 2B9D0004;
+479 : 2B8B000C;
+47a : 2B8C0008;
+47b : 379C000C;
+47c : C3A00000;
+47d : 379CFFF0;
+47e : 5B8B0010;
+47f : 5B8C000C;
+480 : 5B8D0008;
+481 : 5B9D0004;
+482 : B8206800;
+483 : 44400015;
+484 : 28410008;
+485 : 2C4B000C;
+486 : 284C0004;
+487 : 3C210010;
+488 : 34040003;
+489 : B82B5800;
+48a : 28410000;
+48b : B9601800;
+48c : B9801000;
+48d : F80009D7;
+48e : 78040000;
+48f : 78050000;
+490 : B9A00800;
+491 : 34020006;
+492 : 34030001;
+493 : 38846460;
+494 : 38A58280;
+495 : B9803000;
+496 : B9603800;
+497 : FBFFFC3A;
+498 : 34010000;
+499 : 2B9D0004;
+49a : 2B8B0010;
+49b : 2B8C000C;
+49c : 2B8D0008;
+49d : 379C0010;
+49e : C3A00000;
+49f : 379CFFE8;
+4a0 : 5B8B000C;
+4a1 : 5B8C0008;
+4a2 : 5B9D0004;
+4a3 : B8405800;
+4a4 : B8206000;
+4a5 : 37820018;
+4a6 : 37810010;
+4a7 : F80009DD;
+4a8 : 2B870018;
+4a9 : 2B810010;
+4aa : 2B860014;
+4ab : 00E20010;
+4ac : 59610000;
+4ad : 59620008;
+4ae : 3CE10010;
+4af : 78020000;
+4b0 : 38428E44;
+4b1 : 5961000C;
+4b2 : 28410000;
+4b3 : 59660004;
+4b4 : 20210001;
+4b5 : 5C200009;
+4b6 : 78040000;
+4b7 : 78050000;
+4b8 : B9800800;
+4b9 : 34020006;
+4ba : 34030002;
+4bb : 38846460;
+4bc : 38A58290;
+4bd : FBFFFC14;
+4be : 34010000;
+4bf : 2B9D0004;
+4c0 : 2B8B000C;
+4c1 : 2B8C0008;
+4c2 : 379C0018;
+4c3 : C3A00000;
+4c4 : 379CFFB0;
+4c5 : 5B8B001C;
+4c6 : 5B8C0018;
+4c7 : 5B8D0014;
+4c8 : 5B8E0010;
+4c9 : 5B8F000C;
+4ca : 5B900008;
+4cb : 5B9D0004;
+4cc : 0884000C;
+4cd : B8205800;
+4ce : 342D0110;
+4cf : 78010000;
+4d0 : 38218444;
+4d1 : B4240800;
+4d2 : B8407800;
+4d3 : 40220007;
+4d4 : 78050000;
+4d5 : 378C0040;
+4d6 : 08420006;
+4d7 : 38A582B0;
+4d8 : 29700068;
+4d9 : 340188F7;
+4da : B4451000;
+4db : B8607000;
+4dc : 0F81004C;
+4dd : 34030006;
+4de : B9800800;
+4df : F8001194;
+4e0 : B9801000;
+4e1 : BA000800;
+4e2 : B9E01800;
+4e3 : B9C02000;
+4e4 : 37850020;
+4e5 : F800032F;
+4e6 : B8206000;
+4e7 : 45A0001F;
+4e8 : 2B810028;
+4e9 : 2B820024;
+4ea : 2B830020;
+4eb : 1425001F;
+4ec : 00240010;
+4ed : 3CA50010;
+4ee : 3C210010;
+4ef : B8852800;
+4f0 : 2B84003C;
+4f1 : 59630110;
+4f2 : 59620114;
+4f3 : 59650118;
+4f4 : 5961011C;
+4f5 : 5C800004;
+4f6 : 78048F00;
+4f7 : B8641800;
+4f8 : 59630110;
+4f9 : 3CA90010;
+4fa : 00280010;
+4fb : 29670114;
+4fc : 78040000;
+4fd : 78050000;
+4fe : B9600800;
+4ff : 34020005;
+500 : 34030002;
+501 : 38846470;
+502 : 38A582A0;
+503 : B9803000;
+504 : B9284000;
+505 : FBFFFBCC;
+506 : 78010000;
+507 : 38218E4C;
+508 : 28220000;
+509 : 34010004;
+50a : 5C41000D;
+50b : 2964011C;
+50c : 29650118;
+50d : 29620114;
+50e : 00830010;
+50f : 2084FFFF;
+510 : 088403E8;
+511 : 3CA50010;
+512 : 78010000;
+513 : 00840010;
+514 : 38216490;
+515 : B8A31800;
+516 : F8000347;
+517 : 4C0C0010;
+518 : 78010000;
+519 : 38218E44;
+51a : 28220000;
+51b : 2961001C;
+51c : B8410800;
+51d : 00210014;
+51e : 34020001;
+51f : 2021000F;
+520 : 50410007;
+521 : 78010000;
+522 : 382164A0;
+523 : B9E01000;
+524 : B9C01800;
+525 : B9A02000;
+526 : FBFFFEBB;
+527 : B9800800;
+528 : 2B9D0004;
+529 : 2B8B001C;
+52a : 2B8C0018;
+52b : 2B8D0014;
+52c : 2B8E0010;
+52d : 2B8F000C;
+52e : 2B900008;
+52f : 379C0050;
+530 : C3A00000;
+531 : 379CFF90;
+532 : 5B8B001C;
+533 : 5B8C0018;
+534 : 5B8D0014;
+535 : 5B8E0010;
+536 : 5B8F000C;
+537 : 5B900008;
+538 : 5B9D0004;
+539 : B8206000;
+53a : 28210068;
+53b : B8602800;
+53c : B8407000;
+53d : B8805800;
+53e : 37820040;
+53f : B8A02000;
+540 : B9C01800;
+541 : 37850020;
+542 : F800025F;
+543 : B8206800;
+544 : 4C010065;
+545 : 45600021;
+546 : 2B81002C;
+547 : 2B8F0024;
+548 : 2B900020;
+549 : 3C210010;
+54a : 340203E8;
+54b : 59700000;
+54c : 596F0004;
+54d : F80010B9;
+54e : 2B850028;
+54f : B8202000;
+550 : 1422001F;
+551 : 14A1001F;
+552 : 00A30010;
+553 : 3CA50010;
+554 : 3C210010;
+555 : B4852800;
+556 : B8610800;
+557 : F4852000;
+558 : B4410800;
+559 : B4810800;
+55a : 59610008;
+55b : 2B81003C;
+55c : 5965000C;
+55d : 5C200009;
+55e : 78010000;
+55f : 38218E4C;
+560 : 28220000;
+561 : 34010004;
+562 : 44410004;
+563 : 78018F00;
+564 : BA018000;
+565 : 59700000;
+566 : 78010000;
+567 : 38218E44;
+568 : 2982001C;
+569 : 28210000;
+56a : B8220800;
+56b : 00210014;
+56c : 34020001;
+56d : 2021000F;
+56e : 50410007;
+56f : 78010000;
+570 : 382164A8;
+571 : B9C01000;
+572 : B9A01800;
+573 : B9602000;
+574 : FBFFFE6D;
+575 : 78010000;
+576 : 38218E4C;
+577 : 28220000;
+578 : 34010004;
+579 : 5C410030;
+57a : 29640000;
+57b : 29630004;
+57c : 29620008;
+57d : 2961000C;
+57e : 5B840064;
+57f : 5B830068;
+580 : 5B82006C;
+581 : 5B810070;
+582 : F800046C;
+583 : 3C210010;
+584 : 340203E8;
+585 : 5B800058;
+586 : 5B800054;
+587 : F800107F;
+588 : 1422001F;
+589 : 378B0064;
+58a : 5B810060;
+58b : 5B82005C;
+58c : B9600800;
+58d : 37820054;
+58e : F80000EC;
+58f : 2B840070;
+590 : 2B85006C;
+591 : 2B820068;
+592 : 00830010;
+593 : 2084FFFF;
+594 : 088403E8;
+595 : 3CA50010;
+596 : 78010000;
+597 : 00840010;
+598 : B8A31800;
+599 : 382164B0;
+59a : F80002C3;
+59b : B9600800;
+59c : 35820110;
+59d : F80000DD;
+59e : 2B830070;
+59f : 2B84006C;
+5a0 : 78010000;
+5a1 : 00620010;
+5a2 : 2063FFFF;
+5a3 : 086303E8;
+5a4 : 3C840010;
+5a5 : 382164C0;
+5a6 : 00630010;
+5a7 : B8821000;
+5a8 : F80002B5;
+5a9 : B9A00800;
+5aa : 2B9D0004;
+5ab : 2B8B001C;
+5ac : 2B8C0018;
+5ad : 2B8D0014;
+5ae : 2B8E0010;
+5af : 2B8F000C;
+5b0 : 2B900008;
+5b1 : 379C0070;
+5b2 : C3A00000;
+5b3 : 379CFFFC;
+5b4 : 5B9D0004;
+5b5 : 28210068;
+5b6 : F8000191;
+5b7 : 34010000;
+5b8 : 2B9D0004;
+5b9 : 379C0004;
+5ba : C3A00000;
+5bb : 379CFFD4;
+5bc : 5B8B0010;
+5bd : 5B8C000C;
+5be : 5B8D0008;
+5bf : 5B9D0004;
+5c0 : B8205800;
+5c1 : 28210068;
+5c2 : 44200002;
+5c3 : F8000184;
+5c4 : B9600800;
+5c5 : F8000025;
+5c6 : 378C0014;
+5c7 : 340188F7;
+5c8 : 78020000;
+5c9 : 0F810020;
+5ca : 384281F0;
+5cb : B9800800;
+5cc : 34030006;
+5cd : F80010A6;
+5ce : 78010000;
+5cf : B9801000;
+5d0 : 38218A50;
+5d1 : 34030001;
+5d2 : 34040000;
+5d3 : F800012B;
+5d4 : B8206000;
+5d5 : 4420000E;
+5d6 : 378D0028;
+5d7 : B9A01000;
+5d8 : F8000115;
+5d9 : B9A01000;
+5da : 34030006;
+5db : 35610070;
+5dc : F8001097;
+5dd : 3561005C;
+5de : 596C0068;
+5df : B9A01000;
+5e0 : 34030006;
+5e1 : F8001092;
+5e2 : 596C0054;
+5e3 : 34010000;
+5e4 : 2B9D0004;
+5e5 : 2B8B0010;
+5e6 : 2B8C000C;
+5e7 : 2B8D0008;
+5e8 : 379C002C;
+5e9 : C3A00000;
+5ea : 28220028;
+5eb : 34030001;
+5ec : 4443000A;
+5ed : 34030002;
+5ee : 44430003;
+5ef : 5C400009;
+5f0 : E0000006;
+5f1 : 34020012;
+5f2 : 58220084;
+5f3 : 3402000E;
+5f4 : 58220088;
+5f5 : E0000003;
+5f6 : 58200084;
+5f7 : 58200088;
+5f8 : 28240084;
+5f9 : 2825003C;
+5fa : 34020000;
+5fb : B4A42800;
+5fc : 20A30003;
+5fd : 44600003;
+5fe : 34020004;
+5ff : C8431000;
+600 : B4A22800;
+601 : 28260040;
+602 : 28220088;
+603 : 5825004C;
+604 : 34030000;
+605 : B4C23000;
+606 : 20C70003;
+607 : 44E00003;
+608 : 34030004;
+609 : C8671800;
+60a : B4C31800;
+60b : C8A42000;
+60c : C8621000;
+60d : 58230050;
+60e : 58240044;
+60f : 58220048;
+610 : C3A00000;
+611 : 379CFFE8;
+612 : 5B8B0018;
+613 : 5B8C0014;
+614 : 5B8D0010;
+615 : 5B8E000C;
+616 : 5B8F0008;
+617 : 5B9D0004;
+618 : 28230000;
+619 : B8205800;
+61a : 28240004;
+61b : 48030006;
+61c : B8640800;
+61d : 340D0000;
+61e : 340C0001;
+61f : 44200009;
+620 : E000000E;
+621 : 14620018;
+622 : 34010080;
+623 : 204200C0;
+624 : 340DFFFF;
+625 : 340CFFFF;
+626 : 5C410008;
+627 : E0000005;
+628 : 29620008;
+629 : 340DFFFF;
+62a : 340CFFFF;
+62b : 48220003;
+62c : 340D0000;
+62d : 340C0001;
+62e : B9A00800;
+62f : B9801000;
+630 : F8000FBE;
+631 : 2964000C;
+632 : 29630008;
+633 : 59610000;
+634 : 59620004;
+635 : B9A00800;
+636 : B9801000;
+637 : F8000FB7;
+638 : 59610008;
+639 : 5962000C;
+63a : 7804CA00;
+63b : E000000F;
+63c : 29660004;
+63d : 29650000;
+63e : 34213B9A;
+63f : 34C3FFFF;
+640 : F4C33000;
+641 : 59630004;
+642 : B4441800;
+643 : F4431000;
+644 : 34A5FFFF;
+645 : B4C52800;
+646 : B4410800;
+647 : 59650000;
+648 : 59610008;
+649 : 5963000C;
+64a : 29610008;
+64b : 2962000C;
+64c : 4801FFF0;
+64d : E000000F;
+64e : 29650004;
+64f : 29660000;
+650 : 35EFC465;
+651 : 34A20001;
+652 : F4A22800;
+653 : 59620004;
+654 : B5C31000;
+655 : F5C27000;
+656 : B4A62800;
+657 : B5CF7000;
+658 : 59650000;
+659 : 596E0008;
+65a : 5962000C;
+65b : E0000004;
+65c : 34013B9A;
+65d : 7804CA00;
+65e : 78033600;
+65f : 296F0008;
+660 : 296E000C;
+661 : 49E1FFED;
+662 : 5DE10002;
+663 : 55C4FFEB;
+664 : 29630000;
+665 : 29640004;
+666 : B9A00800;
+667 : B9801000;
+668 : F8000F86;
+669 : 59610000;
+66a : 59620004;
+66b : B9E00800;
+66c : B9C01000;
+66d : B9A01800;
+66e : B9802000;
+66f : F8000F7F;
+670 : 59610008;
+671 : 5962000C;
+672 : 2B9D0004;
+673 : 2B8B0018;
+674 : 2B8C0014;
+675 : 2B8D0010;
+676 : 2B8E000C;
+677 : 2B8F0008;
+678 : 379C0018;
+679 : C3A00000;
+67a : 379CFFFC;
+67b : 5B9D0004;
+67c : 28440004;
+67d : 28260004;
+67e : 28450000;
+67f : 28270000;
+680 : C8C42000;
+681 : F4863000;
+682 : C8E52800;
+683 : C8A62800;
+684 : 58250000;
+685 : 58240004;
+686 : 28460008;
+687 : 2825000C;
+688 : 2842000C;
+689 : 28240008;
+68a : C8A21000;
+68b : F4452800;
+68c : C8862000;
+68d : C8852000;
+68e : 58240008;
+68f : 5822000C;
+690 : FBFFFF81;
+691 : 2B9D0004;
+692 : 379C0004;
+693 : C3A00000;
+694 : 379CFFF4;
+695 : 5B8B0008;
+696 : 5B9D0004;
+697 : B8205800;
+698 : FBFFFB2F;
+699 : 34020003;
+69a : 5C220003;
+69b : 34010002;
+69c : E0000002;
+69d : 34010001;
+69e : 59610028;
+69f : 3562004C;
+6a0 : 35610048;
+6a1 : F8000357;
+6a2 : 34010000;
+6a3 : 59600040;
+6a4 : 59600044;
+6a5 : 59600088;
+6a6 : 5960008C;
+6a7 : 3782000C;
+6a8 : 34030000;
+6a9 : F8000D7B;
+6aa : 44200006;
+6ab : 2B81000C;
+6ac : 596100A0;
+6ad : 34010001;
+6ae : 596100A4;
+6af : E0000003;
+6b0 : 596000A0;
+6b1 : 596000A4;
+6b2 : 34010000;
+6b3 : F800031D;
+6b4 : 5961002C;
+6b5 : 34010001;
+6b6 : 59610054;
+6b7 : 59610050;
+6b8 : 34010000;
+6b9 : F8000D32;
+6ba : 59610034;
+6bb : 34011F40;
+6bc : 596100B4;
+6bd : 78010000;
+6be : 38218430;
+6bf : 28210000;
+6c0 : 596100B8;
+6c1 : 596100BC;
+6c2 : 35610014;
+6c3 : F80002C8;
+6c4 : 34010000;
+6c5 : 5960001C;
+6c6 : 2B9D0004;
+6c7 : 2B8B0008;
+6c8 : 379C000C;
+6c9 : C3A00000;
+6ca : B8202800;
+6cb : 5C800002;
+6cc : B8602000;
+6cd : B8803000;
+6ce : 50640002;
+6cf : B8603000;
+6d0 : B4260800;
+6d1 : E000000E;
+6d2 : 2C460002;
+6d3 : 2847000C;
+6d4 : B4E63800;
+6d5 : 40E60000;
+6d6 : 30A60000;
+6d7 : 2C470002;
+6d8 : 2C460006;
+6d9 : 34A50001;
+6da : 34E70001;
+6db : 20E7FFFF;
+6dc : 0C470002;
+6dd : 5CC70002;
+6de : 0C400002;
+6df : 5CA1FFF3;
+6e0 : 5083000B;
+6e1 : 2C410002;
+6e2 : B4610800;
+6e3 : C8242000;
+6e4 : 0C440002;
+6e5 : 2C410006;
+6e6 : E0000003;
+6e7 : C8812000;
+6e8 : 0C440002;
+6e9 : 2C440002;
+6ea : 5481FFFD;
+6eb : B8600800;
+6ec : C3A00000;
+6ed : 379CFFFC;
+6ee : 5B9D0004;
+6ef : B8400800;
+6f0 : F800029B;
+6f1 : 34010000;
+6f2 : 2B9D0004;
+6f3 : 379C0004;
+6f4 : C3A00000;
+6f5 : 78020000;
+6f6 : 38429350;
+6f7 : 34430030;
+6f8 : E0000004;
+6f9 : 28440000;
+6fa : 34420004;
+6fb : 5881001C;
+6fc : 5C43FFFD;
+6fd : C3A00000;
+6fe : 379CFF24;
+6ff : 5B8B0014;
+700 : 5B8C0010;
+701 : 5B8D000C;
+702 : 5B8E0008;
+703 : 5B9D0004;
+704 : 78050000;
+705 : B8205800;
+706 : B8406000;
+707 : B8607000;
+708 : B8806800;
+709 : 38A59350;
+70a : 34010000;
+70b : 3402000C;
+70c : 28A30000;
+70d : 34A50004;
+70e : 5C600009;
+70f : 3C220002;
+710 : 78050000;
+711 : 38A59350;
+712 : B4A22800;
+713 : 58AB0000;
+714 : 3402000C;
+715 : 5C22000A;
+716 : E0000003;
+717 : 34210001;
+718 : 5C22FFF4;
+719 : 78010000;
+71a : 78020000;
+71b : 384282BC;
+71c : 38217A6C;
+71d : F8000140;
+71e : E0000020;
+71f : 78020000;
+720 : 37810018;
+721 : 38427A88;
+722 : FBFFFF72;
+723 : 4801001B;
+724 : B9600800;
+725 : 34020000;
+726 : 34030012;
+727 : F8000F85;
+728 : 45800005;
+729 : B9600800;
+72a : B9801000;
+72b : 34030012;
+72c : F8000F47;
+72d : 0D60000E;
+72e : 5DC00004;
+72f : 34010800;
+730 : 0D61000C;
+731 : 0D6D000E;
+732 : 35610012;
+733 : F8000258;
+734 : 2B8100D0;
+735 : 0D600026;
+736 : 0D600024;
+737 : 5961001C;
+738 : 2B8100B8;
+739 : 0D60002C;
+73a : 59610020;
+73b : 2D61002A;
+73c : 0D610028;
+73d : E0000002;
+73e : 340B0000;
+73f : B9600800;
+740 : 2B9D0004;
+741 : 2B8B0014;
+742 : 2B8C0010;
+743 : 2B8D000C;
+744 : 2B8E0008;
+745 : 379C00DC;
+746 : C3A00000;
+747 : 78020000;
+748 : 38429350;
+749 : 34430030;
+74a : E0000005;
+74b : 28440000;
+74c : 5C810002;
+74d : 58400000;
+74e : 34420004;
+74f : 5C43FFFC;
+750 : 34010000;
+751 : C3A00000;
+752 : 379CFFE8;
+753 : 5B8B0018;
+754 : 5B8C0014;
+755 : 5B8D0010;
+756 : 5B8E000C;
+757 : 5B8F0008;
+758 : 5B9D0004;
+759 : B8205800;
+75a : 59620010;
+75b : B8407000;
+75c : B8807800;
+75d : B8A06000;
+75e : 282D0008;
+75f : 44600005;
+760 : B8A00800;
+761 : 3402FC18;
+762 : F8000EA4;
+763 : B42D6800;
+764 : C9CF2000;
+765 : B8801800;
+766 : 4C800002;
+767 : B48C1800;
+768 : 0181001F;
+769 : B42C0800;
+76a : 14210001;
+76b : B4242000;
+76c : 4C800002;
+76d : B48C2000;
+76e : 49840002;
+76f : C88C2000;
+770 : 09820003;
+771 : 1445001F;
+772 : 00A5001E;
+773 : B4A21000;
+774 : 14420002;
+775 : 48620006;
+776 : 1582001F;
+777 : 0042001E;
+778 : B44C1000;
+779 : 14420002;
+77a : 4C62000D;
+77b : B4812000;
+77c : 596D0008;
+77d : 5964000C;
+77e : 4984000A;
+77f : C88C2000;
+780 : 5964000C;
+781 : B9800800;
+782 : 340203E8;
+783 : F8000E83;
+784 : B5A10800;
+785 : 59610008;
+786 : E0000002;
+787 : 5963000C;
+788 : 78030000;
+789 : 38638160;
+78a : 29610008;
+78b : 28620000;
+78c : 4C41000D;
+78d : 78030000;
+78e : 38638154;
+78f : 28620000;
+790 : 29630000;
+791 : B4220800;
+792 : 29620004;
+793 : 59610008;
+794 : 34410001;
+795 : F4411000;
+796 : 59610004;
+797 : B4431000;
+798 : 59620000;
+799 : 2B9D0004;
+79a : 2B8B0018;
+79b : 2B8C0014;
+79c : 2B8D0010;
+79d : 2B8E000C;
+79e : 2B8F0008;
+79f : 379C0018;
+7a0 : C3A00000;
+7a1 : 379CFFB4;
+7a2 : 5B8B0024;
+7a3 : 5B8C0020;
+7a4 : 5B8D001C;
+7a5 : 5B8E0018;
+7a6 : 5B8F0014;
+7a7 : 5B900010;
+7a8 : 5B91000C;
+7a9 : 5B920008;
+7aa : 5B9D0004;
+7ab : B8406800;
+7ac : 2C22002C;
+7ad : B8A05800;
+7ae : B8206000;
+7af : B8609000;
+7b0 : B8807800;
+7b1 : 34050000;
+7b2 : 44400056;
+7b3 : 342E0024;
+7b4 : 2C310028;
+7b5 : 3442FFFF;
+7b6 : 0C22002C;
+7b7 : 34030002;
+7b8 : B9C01000;
+7b9 : 34040000;
+7ba : 3781004E;
+7bb : FBFFFF0F;
+7bc : B6218800;
+7bd : 2231FFFF;
+7be : 0D910028;
+7bf : B9C01000;
+7c0 : 34030018;
+7c1 : 34040000;
+7c2 : 37810028;
+7c3 : FBFFFF07;
+7c4 : B6218800;
+7c5 : 2231FFFF;
+7c6 : 37900040;
+7c7 : 0D910028;
+7c8 : B9C01000;
+7c9 : 3403000E;
+7ca : 34040000;
+7cb : BA000800;
+7cc : FBFFFEFE;
+7cd : B6218800;
+7ce : 2F83004E;
+7cf : 2231FFFF;
+7d0 : B9C01000;
+7d1 : B9E02000;
+7d2 : 0D910028;
+7d3 : BA400800;
+7d4 : FBFFFEF6;
+7d5 : B6210800;
+7d6 : 0D810028;
+7d7 : 2F81004C;
+7d8 : 78030000;
+7d9 : 38638E40;
+7da : 0DA1000C;
+7db : 28610000;
+7dc : 37820046;
+7dd : 34030006;
+7de : 0DA10010;
+7df : B9A00800;
+7e0 : F8000E93;
+7e1 : 35A10006;
+7e2 : BA001000;
+7e3 : 34030006;
+7e4 : F8000E8F;
+7e5 : 4560001F;
+7e6 : 2B810038;
+7e7 : 59610014;
+7e8 : 2B81002C;
+7e9 : 59610018;
+7ea : 34010000;
+7eb : F8000C6D;
+7ec : B8206800;
+7ed : 35620010;
+7ee : 34030000;
+7ef : 34010000;
+7f0 : F8000C34;
+7f1 : 2B810030;
+7f2 : 43820028;
+7f3 : 2B83002C;
+7f4 : 59610000;
+7f5 : 2B810034;
+7f6 : 7C420000;
+7f7 : 2984001C;
+7f8 : 59610004;
+7f9 : 2B810038;
+7fa : 5960000C;
+7fb : 34051F40;
+7fc : 59610008;
+7fd : 21A100FF;
+7fe : 64210000;
+7ff : A0220800;
+800 : 29620010;
+801 : 5961001C;
+802 : B9600800;
+803 : FBFFFF4F;
+804 : 2F81004E;
+805 : B9E02800;
+806 : 502F0002;
+807 : B8202800;
+808 : B8A00800;
+809 : 2B9D0004;
+80a : 2B8B0024;
+80b : 2B8C0020;
+80c : 2B8D001C;
+80d : 2B8E0018;
+80e : 2B8F0014;
+80f : 2B900010;
+810 : 2B91000C;
+811 : 2B920008;
+812 : 379C004C;
+813 : C3A00000;
+814 : 379CFFC0;
+815 : 5B8B0014;
+816 : 5B8C0010;
+817 : 5B8D000C;
+818 : 5B8E0008;
+819 : 5B9D0004;
+81a : B8206000;
+81b : B8607000;
+81c : 37810030;
+81d : 34030006;
+81e : B8A05800;
+81f : B8806800;
+820 : F8000E53;
+821 : 37810036;
+822 : 35820012;
+823 : 34030006;
+824 : F8000E4F;
+825 : 78010000;
+826 : 38218E40;
+827 : 28250000;
+828 : 2D81000C;
+829 : 44A00009;
+82a : 34028100;
+82b : 0F82003C;
+82c : 2D820018;
+82d : 0F810040;
+82e : 3C42000D;
+82f : B8452800;
+830 : 0F85003E;
+831 : E0000002;
+832 : 0F81003C;
+833 : 37810030;
+834 : B9C01000;
+835 : B9A01800;
+836 : 37840018;
+837 : F8000437;
+838 : 4560000A;
+839 : 2B820020;
+83a : 5960000C;
+83b : 59620000;
+83c : 2B820024;
+83d : 59620004;
+83e : 2B820028;
+83f : 59620008;
+840 : 43820018;
+841 : 5962001C;
+842 : 2B9D0004;
+843 : 2B8B0014;
+844 : 2B8C0010;
+845 : 2B8D000C;
+846 : 2B8E0008;
+847 : 379C0040;
+848 : C3A00000;
+849 : 379CFFF4;
+84a : 5B8B000C;
+84b : 5B8C0008;
+84c : 5B9D0004;
+84d : 780B0000;
+84e : B8202000;
+84f : 396B9380;
+850 : B8401800;
+851 : B9600800;
+852 : B8801000;
+853 : F8000019;
+854 : B8206000;
+855 : B9600800;
+856 : F80000F5;
+857 : B9800800;
+858 : 2B9D0004;
+859 : 2B8B000C;
+85a : 2B8C0008;
+85b : 379C000C;
+85c : C3A00000;
+85d : 379CFFDC;
+85e : 5B9D0004;
+85f : 5B82000C;
+860 : 3782000C;
+861 : 5B810008;
+862 : 5B830010;
+863 : 5B840014;
+864 : 5B850018;
+865 : 5B86001C;
+866 : 5B870020;
+867 : 5B880024;
+868 : FBFFFFE1;
+869 : 2B9D0004;
+86a : 379C0024;
+86b : C3A00000;
+86c : 379CFF9C;
+86d : 5B8B0044;
+86e : 5B8C0040;
+86f : 5B8D003C;
+870 : 5B8E0038;
+871 : 5B8F0034;
+872 : 5B900030;
+873 : 5B91002C;
+874 : 5B920028;
+875 : 5B930024;
+876 : 5B940020;
+877 : 5B95001C;
+878 : 5B960018;
+879 : 5B970014;
+87a : 5B980010;
+87b : 5B99000C;
+87c : 5B9B0008;
+87d : 5B9D0004;
+87e : 78160000;
+87f : B820C800;
+880 : B840A000;
+881 : B8209800;
+882 : 34180025;
+883 : 34090069;
+884 : 34080070;
+885 : 34070058;
+886 : 341B002A;
+887 : 340A0030;
+888 : 34170010;
+889 : 37950058;
+88a : 3AD67A94;
+88b : E0000096;
+88c : 340F0000;
+88d : 34110020;
+88e : 340D000A;
+88f : 44380004;
+890 : 32610000;
+891 : E000003C;
+892 : 34110030;
+893 : 36940001;
+894 : 42810000;
+895 : 44290040;
+896 : 5429000F;
+897 : 4427003B;
+898 : 54270008;
+899 : 443B001A;
+89a : 543B0004;
+89b : 44200088;
+89c : 5C38001A;
+89d : E000002F;
+89e : 5C2A0018;
+89f : E0000016;
+8a0 : 34020063;
+8a1 : 4422001C;
+8a2 : 34040064;
+8a3 : 5C240013;
+8a4 : E0000031;
+8a5 : 4428002D;
+8a6 : 54280006;
+8a7 : 3402006E;
+8a8 : 44220078;
+8a9 : 3404006F;
+8aa : 5C24000C;
+8ab : E0000024;
+8ac : 34020075;
+8ad : 44220028;
+8ae : 34040078;
+8af : 44240023;
+8b0 : 34020073;
+8b1 : 5C220005;
+8b2 : E0000010;
+8b3 : 286D0000;
+8b4 : 34630004;
+8b5 : 45E0FFDD;
+8b6 : 3421FFD0;
+8b7 : 202200FF;
+8b8 : 34040009;
+8b9 : 5444FFDA;
+8ba : 09EF000A;
+8bb : B42F7800;
+8bc : E3FFFFD7;
+8bd : 28610000;
+8be : 34630004;
+8bf : 32610000;
+8c0 : 36730001;
+8c1 : E000005F;
+8c2 : B8600800;
+8c3 : 28210000;
+8c4 : 34630004;
+8c5 : E0000004;
+8c6 : 32620000;
+8c7 : 34210001;
+8c8 : 36730001;
+8c9 : 40220000;
+8ca : 5C40FFFC;
+8cb : E0000055;
+8cc : 32780000;
+8cd : 36730001;
+8ce : E0000052;
+8cf : 3401000A;
+8d0 : 45A10004;
+8d1 : E0000004;
+8d2 : 340D0010;
+8d3 : E0000002;
+8d4 : 340D0008;
+8d5 : 28650000;
+8d6 : 34720004;
+8d7 : B8A07000;
+8d8 : 5DE00002;
+8d9 : 340F0001;
+8da : 00A6001F;
+8db : 65A3000A;
+8dc : 34100000;
+8dd : A0C31800;
+8de : 44600003;
+8df : C8057000;
+8e0 : 34100001;
+8e1 : 340C0010;
+8e2 : E0000015;
+8e3 : B9C00800;
+8e4 : B9A01000;
+8e5 : 5B87004C;
+8e6 : 5B880050;
+8e7 : 5B890054;
+8e8 : 5B8A0048;
+8e9 : F8000D5A;
+8ea : B6C11800;
+8eb : 40630000;
+8ec : 358CFFFF;
+8ed : B6AC5800;
+8ee : B9C00800;
+8ef : 31630000;
+8f0 : B9A01000;
+8f1 : F8000D42;
+8f2 : 2B8A0048;
+8f3 : 2B890054;
+8f4 : 2B880050;
+8f5 : 2B87004C;
+8f6 : B8207000;
+8f7 : 7D840000;
+8f8 : 7DC30000;
+8f9 : A0831800;
+8fa : 5C60FFE9;
+8fb : 5D970004;
+8fc : 34020030;
+8fd : 33820067;
+8fe : 340C000F;
+8ff : 66220020;
+900 : A2021000;
+901 : 4440000B;
+902 : 358CFFFF;
+903 : B6AC1000;
+904 : 3403002D;
+905 : 30430000;
+906 : 34100000;
+907 : E0000005;
+908 : 358CFFFF;
+909 : B6AC1000;
+90a : 30510000;
+90b : E0000003;
+90c : CAEF0800;
+90d : B4300800;
+90e : 4981FFFA;
+90f : 46000005;
+910 : 358CFFFF;
+911 : B6AC0800;
+912 : 3402002D;
+913 : 30220000;
+914 : CAEC1800;
+915 : BA600800;
+916 : 3404000F;
+917 : E0000006;
+918 : B6AC1000;
+919 : 40420000;
+91a : 358C0001;
+91b : 30220000;
+91c : 34210001;
+91d : 4C8CFFFB;
+91e : B6639800;
+91f : BA401800;
+920 : 36940001;
+921 : 42810000;
+922 : 5C20FF6A;
+923 : CA790800;
+924 : 32600000;
+925 : 2B9D0004;
+926 : 2B8B0044;
+927 : 2B8C0040;
+928 : 2B8D003C;
+929 : 2B8E0038;
+92a : 2B8F0034;
+92b : 2B900030;
+92c : 2B91002C;
+92d : 2B920028;
+92e : 2B930024;
+92f : 2B940020;
+930 : 2B95001C;
+931 : 2B960018;
+932 : 2B970014;
+933 : 2B980010;
+934 : 2B99000C;
+935 : 2B9B0008;
+936 : 379C0064;
+937 : C3A00000;
+938 : 379CFFF8;
+939 : 5B8B0008;
+93a : 5B9D0004;
+93b : B8205800;
+93c : 3401000A;
+93d : 5D610003;
+93e : 3401000D;
+93f : FBFFFFF9;
+940 : 78020000;
+941 : 38429750;
+942 : 28420000;
+943 : 28410000;
+944 : 20210001;
+945 : 5C20FFFE;
+946 : 584B0008;
+947 : 2B9D0004;
+948 : 2B8B0008;
+949 : 379C0008;
+94a : C3A00000;
+94b : 379CFFF4;
+94c : 5B8B000C;
+94d : 5B8C0008;
+94e : 5B9D0004;
+94f : B8206000;
+950 : B8205800;
+951 : E0000004;
+952 : B8400800;
+953 : 356B0001;
+954 : FBFFFFE4;
+955 : 41620000;
+956 : 5C40FFFC;
+957 : C96C0800;
+958 : 2B9D0004;
+959 : 2B8B000C;
+95a : 2B8C0008;
+95b : 379C000C;
+95c : C3A00000;
+95d : 78020000;
+95e : 14210002;
+95f : 3842974C;
+960 : 28420000;
+961 : 202100FF;
+962 : 3C210010;
+963 : 5841002C;
+964 : 28410030;
+965 : 4C20FFFF;
+966 : 28410030;
+967 : 2021FFFF;
+968 : C3A00000;
+969 : 14210002;
+96a : 78030000;
+96b : 3863974C;
+96c : 202100FF;
+96d : 28630000;
+96e : 2042FFFF;
+96f : 78048000;
+970 : 3C210010;
+971 : B8441000;
+972 : B8411000;
+973 : 5862002C;
+974 : 28610030;
+975 : 4C20FFFF;
+976 : C3A00000;
+977 : 40240002;
+978 : 40230003;
+979 : 78020000;
+97a : 3C840018;
+97b : 3C630010;
+97c : 3842974C;
+97d : B8831800;
+97e : 40240005;
+97f : 28420000;
+980 : B8641800;
+981 : 40240004;
+982 : 3C840008;
+983 : B8641800;
+984 : 58430028;
+985 : 40230001;
+986 : 40210000;
+987 : 3C210008;
+988 : B8610800;
+989 : 58410024;
+98a : C3A00000;
+98b : 78020000;
+98c : 3842974C;
+98d : 28430000;
+98e : 28630028;
+98f : 30230005;
+990 : 28430000;
+991 : 28630028;
+992 : 00630008;
+993 : 30230004;
+994 : 28430000;
+995 : 28630028;
+996 : 00630010;
+997 : 30230003;
+998 : 28430000;
+999 : 28630028;
+99a : 00630018;
+99b : 30230002;
+99c : 28430000;
+99d : 28630024;
+99e : 30230001;
+99f : 28420000;
+9a0 : 28420024;
+9a1 : 00420008;
+9a2 : 30220000;
+9a3 : C3A00000;
+9a4 : 379CFFF4;
+9a5 : 5B8B000C;
+9a6 : 5B8C0008;
+9a7 : 5B9D0004;
+9a8 : 780B0000;
+9a9 : B8406000;
+9aa : 396B974C;
+9ab : 5C200004;
+9ac : 29610000;
+9ad : 58200000;
+9ae : E000001C;
+9af : 29610000;
+9b0 : 58200000;
+9b1 : F80000B8;
+9b2 : 29610000;
+9b3 : 340200E0;
+9b4 : 58220000;
+9b5 : 78010000;
+9b6 : 38219400;
+9b7 : 582C0000;
+9b8 : 34020800;
+9b9 : 34010000;
+9ba : FBFFFFAF;
+9bb : 34010000;
+9bc : 38028000;
+9bd : FBFFFFAC;
+9be : 34010000;
+9bf : 34020000;
+9c0 : FBFFFFA9;
+9c1 : 34010010;
+9c2 : 34020000;
+9c3 : FBFFFFA6;
+9c4 : 7D820000;
+9c5 : 34010000;
+9c6 : C8021000;
+9c7 : 20421200;
+9c8 : 34420140;
+9c9 : FBFFFFA0;
+9ca : 34010000;
+9cb : 2B9D0004;
+9cc : 2B8B000C;
+9cd : 2B8C0008;
+9ce : 379C000C;
+9cf : C3A00000;
+9d0 : 379CFFF0;
+9d1 : 5B8B000C;
+9d2 : 5B8C0008;
+9d3 : 5B9D0004;
+9d4 : 78020000;
+9d5 : 38429400;
+9d6 : 284B0000;
+9d7 : B8206000;
+9d8 : 34010004;
+9d9 : FBFFFF84;
+9da : 7D6B0000;
+9db : 0F810012;
+9dc : 34010004;
+9dd : C80B5800;
+9de : FBFFFF7F;
+9df : 216B0020;
+9e0 : 0F810012;
+9e1 : 356B0004;
+9e2 : 45800004;
+9e3 : 34010014;
+9e4 : FBFFFF79;
+9e5 : 0D810000;
+9e6 : 2F810012;
+9e7 : A1610800;
+9e8 : E42B0800;
+9e9 : 2B9D0004;
+9ea : 2B8B000C;
+9eb : 2B8C0008;
+9ec : 379C0010;
+9ed : C3A00000;
+9ee : 379CFFFC;
+9ef : 5B9D0004;
+9f0 : 34010040;
+9f1 : FBFFFF6C;
+9f2 : 00210004;
+9f3 : 2021001F;
+9f4 : 08210320;
+9f5 : 2B9D0004;
+9f6 : 379C0004;
+9f7 : C3A00000;
+9f8 : 379CFFF4;
+9f9 : 5B8B000C;
+9fa : 5B8C0008;
+9fb : 5B9D0004;
+9fc : 78030000;
+9fd : 38639408;
+9fe : B8405800;
+9ff : 28620000;
+a00 : 58220000;
+a01 : 78010000;
+a02 : 3821940C;
+a03 : 282C0000;
+a04 : 34010040;
+a05 : FBFFFF58;
+a06 : 00210004;
+a07 : 2021001F;
+a08 : 08210320;
+a09 : B42C0800;
+a0a : 59610000;
+a0b : 34010000;
+a0c : 2B9D0004;
+a0d : 2B8B000C;
+a0e : 2B8C0008;
+a0f : 379C000C;
+a10 : C3A00000;
+a11 : 379CFFFC;
+a12 : 5B9D0004;
+a13 : 34010040;
+a14 : FBFFFF49;
+a15 : 38220001;
+a16 : 34010040;
+a17 : FBFFFF52;
+a18 : 34010000;
+a19 : 2B9D0004;
+a1a : 379C0004;
+a1b : C3A00000;
+a1c : 379CFFFC;
+a1d : 5B9D0004;
+a1e : 34010040;
+a1f : FBFFFF3E;
+a20 : 3402FFFE;
+a21 : A0221000;
+a22 : 34010040;
+a23 : FBFFFF46;
+a24 : 34010000;
+a25 : 2B9D0004;
+a26 : 379C0004;
+a27 : C3A00000;
+a28 : 379CFFF8;
+a29 : 5B8B0008;
+a2a : 5B9D0004;
+a2b : 780B0000;
+a2c : 396B974C;
+a2d : 29610000;
+a2e : 28220004;
+a2f : 38420010;
+a30 : 58220004;
+a31 : 34010001;
+a32 : F80002F8;
+a33 : 29610000;
+a34 : 28210004;
+a35 : 20210020;
+a36 : 7C210000;
+a37 : 2B9D0004;
+a38 : 2B8B0008;
+a39 : 379C0008;
+a3a : C3A00000;
+a3b : 379CFFF8;
+a3c : 5B8B0008;
+a3d : 5B9D0004;
+a3e : B8205800;
+a3f : 34010044;
+a40 : FBFFFF1D;
+a41 : 38220020;
+a42 : 45600003;
+a43 : 3402FFDF;
+a44 : A0221000;
+a45 : 34010044;
+a46 : FBFFFF23;
+a47 : 34010000;
+a48 : 2B9D0004;
+a49 : 2B8B0008;
+a4a : 379C0008;
+a4b : C3A00000;
+a4c : 379CFFF8;
+a4d : 5B8B0008;
+a4e : 5B9D0004;
+a4f : 78020000;
+a50 : 38429440;
+a51 : 28420000;
+a52 : 780B0000;
+a53 : 396B974C;
+a54 : 59620000;
+a55 : FBFFFF22;
+a56 : 34010001;
+a57 : FBFFFFE4;
+a58 : 29610000;
+a59 : 78040000;
+a5a : 38848170;
+a5b : 28830000;
+a5c : 58200000;
+a5d : 34020003;
+a5e : 5822000C;
+a5f : 58230008;
+a60 : 78030000;
+a61 : 38638174;
+a62 : 58220004;
+a63 : 28620000;
+a64 : 5822003C;
+a65 : 2B9D0004;
+a66 : 2B8B0008;
+a67 : 379C0008;
+a68 : C3A00000;
+a69 : 379CFFE8;
+a6a : 5B8B0010;
+a6b : 5B8C000C;
+a6c : 5B8D0008;
+a6d : 5B9D0004;
+a6e : 78010000;
+a6f : 38218E40;
+a70 : 28220000;
+a71 : 78010000;
+a72 : 38218A84;
+a73 : 44400003;
+a74 : 78010000;
+a75 : 38218A8C;
+a76 : 282B0000;
+a77 : 5D600004;
+a78 : 78010000;
+a79 : 38217AA8;
+a7a : E0000036;
+a7b : 78030000;
+a7c : 38638178;
+a7d : 282C0004;
+a7e : 29620000;
+a7f : 28610000;
+a80 : 44410011;
+a81 : B9600800;
+a82 : 780400FF;
+a83 : E000000D;
+a84 : 28230000;
+a85 : 3C660018;
+a86 : 00650018;
+a87 : B8C52800;
+a88 : A0643000;
+a89 : 00C60008;
+a8a : 2063FF00;
+a8b : 3C630008;
+a8c : B8A62800;
+a8d : B8A31800;
+a8e : 58230000;
+a8f : 34210004;
+a90 : 5581FFF4;
+a91 : 78040000;
+a92 : 38848178;
+a93 : 29630000;
+a94 : 28810000;
+a95 : 44610005;
+a96 : 78010000;
+a97 : 38217AC0;
+a98 : FBFFFDC5;
+a99 : E00000AB;
+a9a : 78010000;
+a9b : 38219404;
+a9c : 28220000;
+a9d : 356B0004;
+a9e : 5C400016;
+a9f : 29630008;
+aa0 : 34021234;
+aa1 : 0063000D;
+aa2 : 2063FFFF;
+aa3 : 5C62000B;
+aa4 : 29630010;
+aa5 : 34025678;
+aa6 : 0063000D;
+aa7 : 2063FFFF;
+aa8 : 5C620006;
+aa9 : 29630018;
+aaa : 34424444;
+aab : 0063000D;
+aac : 2063FFFF;
+aad : 44620005;
+aae : 78010000;
+aaf : 38217AE8;
+ab0 : FBFFFDAD;
+ab1 : E0000093;
+ab2 : 34020001;
+ab3 : 58220000;
+ab4 : 37810014;
+ab5 : FBFFFED6;
+ab6 : 78060000;
+ab7 : 38C6817C;
+ab8 : 28C50000;
+ab9 : 29670008;
+aba : 29660010;
+abb : 29610018;
+abc : A0E53800;
+abd : A0C53000;
+abe : A0250800;
+abf : 59670008;
+ac0 : 59660010;
+ac1 : 59610018;
+ac2 : 43880014;
+ac3 : 43890015;
+ac4 : 35640008;
+ac5 : 3D080008;
+ac6 : 35630010;
+ac7 : B9094000;
+ac8 : 3D08000D;
+ac9 : 35620018;
+aca : B8E83800;
+acb : 59670008;
+acc : 43870016;
+acd : 43880017;
+ace : 3809CAFE;
+acf : 3CE70008;
+ad0 : B8E83800;
+ad1 : 3CE7000D;
+ad2 : 34080001;
+ad3 : B8C73000;
+ad4 : 59660010;
+ad5 : 43860018;
+ad6 : 43870019;
+ad7 : 3CC60008;
+ad8 : B8C73000;
+ad9 : 3CC6000D;
+ada : B8260800;
+adb : 78060000;
+adc : 38C68180;
+add : 59610018;
+ade : 28C70000;
+adf : B9600800;
+ae0 : E000000B;
+ae1 : 28260000;
+ae2 : 00CA000D;
+ae3 : 214AFFFF;
+ae4 : 5D490006;
+ae5 : 20CA0007;
+ae6 : 5D480004;
+ae7 : A0C53000;
+ae8 : B8C73000;
+ae9 : 58260000;
+aea : 34210008;
+aeb : 5581FFF6;
+aec : 78070000;
+aed : 38E7817C;
+aee : 78060000;
+aef : B9600800;
+af0 : 34050000;
+af1 : 340A0AAA;
+af2 : 34090007;
+af3 : 28E80000;
+af4 : 38C68E40;
+af5 : E0000010;
+af6 : 28270000;
+af7 : 00ED000D;
+af8 : 21ADFFFF;
+af9 : 5DAA000B;
+afa : 00ED0007;
+afb : 21AD001F;
+afc : 5DA90008;
+afd : A0E83800;
+afe : 58270000;
+aff : 28C50000;
+b00 : 3CA5000D;
+b01 : B8A73800;
+b02 : 58270000;
+b03 : B8202800;
+b04 : 34210008;
+b05 : 5581FFF1;
+b06 : 78010000;
+b07 : 3821974C;
+b08 : 28210000;
+b09 : 34060000;
+b0a : 58200014;
+b0b : E000000F;
+b0c : 29670000;
+b0d : 29690004;
+b0e : 356B0008;
+b0f : 20E80FFF;
+b10 : 3D290014;
+b11 : 00E7000C;
+b12 : 58280018;
+b13 : B9273800;
+b14 : 3CE70008;
+b15 : 20C9003F;
+b16 : 38E70040;
+b17 : B8E93800;
+b18 : 58270014;
+b19 : 34C60001;
+b1a : 558BFFF2;
+b1b : 44A0000B;
+b1c : 78080000;
+b1d : 3908817C;
+b1e : 28A70000;
+b1f : 29060000;
+b20 : 78080000;
+b21 : 39088184;
+b22 : A0E63000;
+b23 : 29070000;
+b24 : B8C73000;
+b25 : 58A60000;
+b26 : 78070000;
+b27 : 38E7817C;
+b28 : 28860000;
+b29 : 28E50000;
+b2a : 78080000;
+b2b : 39088188;
+b2c : A0C53000;
+b2d : 58860000;
+b2e : 28660000;
+b2f : A0C53000;
+b30 : 58660000;
+b31 : 28460000;
+b32 : A0C52800;
+b33 : 58450000;
+b34 : 28860000;
+b35 : 29050000;
+b36 : B8C52800;
+b37 : 58850000;
+b38 : 28650000;
+b39 : 78040ACF;
+b3a : B8A42000;
+b3b : 78050000;
+b3c : 58640000;
+b3d : 38A5818C;
+b3e : 28440000;
+b3f : 28A30000;
+b40 : B8831800;
+b41 : 58430000;
+b42 : 34020080;
+b43 : 58220014;
+b44 : 2B9D0004;
+b45 : 2B8B0010;
+b46 : 2B8C000C;
+b47 : 2B8D0008;
+b48 : 379C0018;
+b49 : C3A00000;
+b4a : 78030000;
+b4b : 38639748;
+b4c : 44400004;
+b4d : 28620000;
+b4e : 58410004;
+b4f : C3A00000;
+b50 : 28620000;
+b51 : 58410008;
+b52 : C3A00000;
+b53 : 78030000;
+b54 : 38639748;
+b55 : 44400004;
+b56 : 28620000;
+b57 : 58410004;
+b58 : C3A00000;
+b59 : 28620000;
+b5a : 58410008;
+b5b : C3A00000;
+b5c : 34020000;
+b5d : E0000003;
+b5e : 34000000;
+b5f : 34420001;
+b60 : 5C41FFFE;
+b61 : C3A00000;
+b62 : 379CFFF8;
+b63 : 5B8B0008;
+b64 : 5B9D0004;
+b65 : 202100FF;
+b66 : 082B000C;
+b67 : 78020000;
+b68 : 38428A94;
+b69 : B44B5800;
+b6a : 29610004;
+b6b : 34020000;
+b6c : FBFFFFDE;
+b6d : 29610008;
+b6e : FBFFFFEE;
+b6f : 29610000;
+b70 : 34020000;
+b71 : FBFFFFD9;
+b72 : 29610008;
+b73 : FBFFFFE9;
+b74 : 2B9D0004;
+b75 : 2B8B0008;
+b76 : 379C0008;
+b77 : C3A00000;
+b78 : 379CFFF8;
+b79 : 5B8B0008;
+b7a : 5B9D0004;
+b7b : 202100FF;
+b7c : 082B000C;
+b7d : 78020000;
+b7e : 38428A94;
+b7f : B44B5800;
+b80 : 29610004;
+b81 : 34020001;
+b82 : FBFFFFC8;
+b83 : 29610008;
+b84 : FBFFFFD8;
+b85 : 29610000;
+b86 : 34020001;
+b87 : FBFFFFC3;
+b88 : 29610008;
+b89 : FBFFFFD3;
+b8a : 29610004;
+b8b : 34020000;
+b8c : FBFFFFBE;
+b8d : 29610008;
+b8e : FBFFFFCE;
+b8f : 29610000;
+b90 : 34020000;
+b91 : FBFFFFB9;
+b92 : 29610008;
+b93 : FBFFFFC9;
+b94 : 2B9D0004;
+b95 : 2B8B0008;
+b96 : 379C0008;
+b97 : C3A00000;
+b98 : 379CFFF8;
+b99 : 5B8B0008;
+b9a : 5B9D0004;
+b9b : 202100FF;
+b9c : 082B000C;
+b9d : 78020000;
+b9e : 38428A94;
+b9f : B44B5800;
+ba0 : 29610004;
+ba1 : 34020000;
+ba2 : FBFFFFA8;
+ba3 : 29610008;
+ba4 : FBFFFFB8;
+ba5 : 29610000;
+ba6 : 34020001;
+ba7 : FBFFFFA3;
+ba8 : 29610008;
+ba9 : FBFFFFB3;
+baa : 29610004;
+bab : 34020001;
+bac : FBFFFF9E;
+bad : 29610008;
+bae : FBFFFFAE;
+baf : 2B9D0004;
+bb0 : 2B8B0008;
+bb1 : 379C0008;
+bb2 : C3A00000;
+bb3 : 379CFFE8;
+bb4 : 5B8B0018;
+bb5 : 5B8C0014;
+bb6 : 5B8D0010;
+bb7 : 5B8E000C;
+bb8 : 5B8F0008;
+bb9 : 5B9D0004;
+bba : 202100FF;
+bbb : 082B000C;
+bbc : 78030000;
+bbd : 38638A94;
+bbe : 204F00FF;
+bbf : 340E0008;
+bc0 : B46B5800;
+bc1 : 29610004;
+bc2 : 21E20080;
+bc3 : 35CEFFFF;
+bc4 : FBFFFF86;
+bc5 : 29610008;
+bc6 : 3DEF0001;
+bc7 : 21CE00FF;
+bc8 : FBFFFF94;
+bc9 : 29610000;
+bca : 34020001;
+bcb : 356D0004;
+bcc : FBFFFF7E;
+bcd : 29610008;
+bce : 356C0008;
+bcf : 21EF00FF;
+bd0 : FBFFFF8C;
+bd1 : 29610000;
+bd2 : 34020000;
+bd3 : FBFFFF77;
+bd4 : 29610008;
+bd5 : FBFFFF87;
+bd6 : 5DC0FFEB;
+bd7 : 29A10000;
+bd8 : 34020001;
+bd9 : FBFFFF71;
+bda : 29810000;
+bdb : FBFFFF81;
+bdc : 29610000;
+bdd : 34020001;
+bde : FBFFFF6C;
+bdf : 29810000;
+be0 : FBFFFF7C;
+be1 : 78010000;
+be2 : 38219748;
+be3 : 28210000;
+be4 : 29AE0000;
+be5 : 34020000;
+be6 : 28210004;
+be7 : A02E7000;
+be8 : 29610000;
+be9 : FBFFFF61;
+bea : 29810000;
+beb : FBFFFF71;
+bec : 29A10000;
+bed : 34020000;
+bee : FBFFFF5C;
+bef : 29810000;
+bf0 : FBFFFF6C;
+bf1 : 7DC10000;
+bf2 : 2B9D0004;
+bf3 : 2B8B0018;
+bf4 : 2B8C0014;
+bf5 : 2B8D0010;
+bf6 : 2B8E000C;
+bf7 : 2B8F0008;
+bf8 : 379C0018;
+bf9 : C3A00000;
+bfa : 379CFFE0;
+bfb : 5B8B0020;
+bfc : 5B8C001C;
+bfd : 5B8D0018;
+bfe : 5B8E0014;
+bff : 5B8F0010;
+c00 : 5B90000C;
+c01 : 5B910008;
+c02 : 5B9D0004;
+c03 : 202100FF;
+c04 : 082B000C;
+c05 : 78040000;
+c06 : 38848A94;
+c07 : B48B5800;
+c08 : 29610004;
+c09 : B8408000;
+c0a : 34020001;
+c0b : 207100FF;
+c0c : FBFFFF3E;
+c0d : 29610008;
+c0e : 780F0000;
+c0f : 340E0008;
+c10 : FBFFFF4C;
+c11 : 29610000;
+c12 : 34020000;
+c13 : 340D0000;
+c14 : FBFFFF36;
+c15 : 29610008;
+c16 : 39EF9748;
+c17 : FBFFFF45;
+c18 : 29610000;
+c19 : 34020001;
+c1a : 3DAD0001;
+c1b : FBFFFF2F;
+c1c : 29610008;
+c1d : 21AD00FF;
+c1e : FBFFFF3E;
+c1f : 29E10000;
+c20 : 29620004;
+c21 : 28210004;
+c22 : A0220800;
+c23 : 44200002;
+c24 : 39AD0001;
+c25 : 29610000;
+c26 : 34020000;
+c27 : 35CEFFFF;
+c28 : FBFFFF22;
+c29 : 29610008;
+c2a : 356C0008;
+c2b : FBFFFF31;
+c2c : 5DC0FFEC;
+c2d : 462E0004;
+c2e : 29610004;
+c2f : 34020001;
+c30 : E0000003;
+c31 : 29610004;
+c32 : 34020000;
+c33 : FBFFFF17;
+c34 : 29810000;
+c35 : FBFFFF27;
+c36 : 29610000;
+c37 : 34020001;
+c38 : FBFFFF12;
+c39 : 29810000;
+c3a : FBFFFF22;
+c3b : 29610000;
+c3c : 34020000;
+c3d : FBFFFF0D;
+c3e : 29810000;
+c3f : FBFFFF1D;
+c40 : 320D0000;
+c41 : 2B9D0004;
+c42 : 2B8B0020;
+c43 : 2B8C001C;
+c44 : 2B8D0018;
+c45 : 2B8E0014;
+c46 : 2B8F0010;
+c47 : 2B90000C;
+c48 : 2B910008;
+c49 : 379C0020;
+c4a : C3A00000;
+c4b : 20210003;
+c4c : 3C210010;
+c4d : B8221000;
+c4e : 78010000;
+c4f : 38219758;
+c50 : 28210000;
+c51 : 58220004;
+c52 : C3A00000;
+c53 : 379CFFF8;
+c54 : 5B8B0008;
+c55 : 5B9D0004;
+c56 : 78010000;
+c57 : 38219758;
+c58 : 28210000;
+c59 : 780B0000;
+c5a : 34040001;
+c5b : 28230000;
+c5c : 396B973C;
+c5d : 00620018;
+c5e : 2042000F;
+c5f : 44440006;
+c60 : 78010000;
+c61 : 38217B10;
+c62 : FBFFFBFB;
+c63 : 59600000;
+c64 : E0000006;
+c65 : 59620000;
+c66 : 34020007;
+c67 : 58220040;
+c68 : 38630400;
+c69 : 58230000;
+c6a : 2B9D0004;
+c6b : 2B8B0008;
+c6c : 379C0008;
+c6d : C3A00000;
+c6e : 379CFFD4;
+c6f : 5B8B0020;
+c70 : 5B8C001C;
+c71 : 5B8D0018;
+c72 : 5B8E0014;
+c73 : 5B8F0010;
+c74 : 5B90000C;
+c75 : 5B910008;
+c76 : 5B9D0004;
+c77 : B8406800;
+c78 : 78020000;
+c79 : 3842973C;
+c7a : 28420000;
+c7b : B8207800;
+c7c : B8606000;
+c7d : B8805800;
+c7e : 34010000;
+c7f : 4440008A;
+c80 : 2DE3000C;
+c81 : 38018100;
+c82 : FC611800;
+c83 : 3401FFFC;
+c84 : C8031800;
+c85 : A0611800;
+c86 : 34630012;
+c87 : B46C1000;
+c88 : 3401003B;
+c89 : 14710001;
+c8a : 54410003;
+c8b : 340C003C;
+c8c : C9836000;
+c8d : 35900001;
+c8e : 34010002;
+c8f : 34020000;
+c90 : 02100001;
+c91 : FBFFFFBA;
+c92 : 340E0000;
+c93 : E0000006;
+c94 : 2DE20000;
+c95 : 34010000;
+c96 : 35CE0001;
+c97 : FBFFFFB4;
+c98 : 35EF0002;
+c99 : 562EFFFB;
+c9a : B9A07800;
+c9b : 340E0000;
+c9c : 3610FFFF;
+c9d : E0000006;
+c9e : 2DE20000;
+c9f : 34010000;
+ca0 : 35CE0001;
+ca1 : FBFFFFAA;
+ca2 : 35EF0002;
+ca3 : 560EFFFB;
+ca4 : 21820001;
+ca5 : 3E010001;
+ca6 : 5C400004;
+ca7 : B5A16800;
+ca8 : 34010000;
+ca9 : E0000003;
+caa : B5A16800;
+cab : 34010003;
+cac : 2DA20000;
+cad : FBFFFF9E;
+cae : 45600007;
+caf : 34010001;
+cb0 : 34021000;
+cb1 : FBFFFF9A;
+cb2 : 34010001;
+cb3 : 34020000;
+cb4 : FBFFFF97;
+cb5 : 78010000;
+cb6 : 38219758;
+cb7 : 28220000;
+cb8 : 340D0000;
+cb9 : B8207800;
+cba : 28430000;
+cbb : 341003E8;
+cbc : 38630001;
+cbd : 58430000;
+cbe : 29E10000;
+cbf : 282E0000;
+cc0 : 21C10002;
+cc1 : 5C200009;
+cc2 : 34010001;
+cc3 : 35AD0001;
+cc4 : F8000066;
+cc5 : 5DB0FFF9;
+cc6 : 78010000;
+cc7 : 38217BA4;
+cc8 : B9C01000;
+cc9 : FBFFFB94;
+cca : 4560003E;
+ccb : 780D0000;
+ccc : 340E0000;
+ccd : 39AD9758;
+cce : 340F0064;
+ccf : 29A10000;
+cd0 : 28220000;
+cd1 : 20420800;
+cd2 : 5C40000A;
+cd3 : 34010001;
+cd4 : 35CE0001;
+cd5 : F8000055;
+cd6 : 5DCFFFF9;
+cd7 : 78010000;
+cd8 : 38217BD4;
+cd9 : FBFFFB84;
+cda : 340E0000;
+cdb : E0000003;
+cdc : 282E0014;
+cdd : 21CE0001;
+cde : 78010000;
+cdf : 38219758;
+ce0 : 28210000;
+ce1 : 78020000;
+ce2 : 38428190;
+ce3 : 282D0018;
+ce4 : 28210014;
+ce5 : 28410000;
+ce6 : 3782002C;
+ce7 : A1A16800;
+ce8 : 37810024;
+ce9 : F800019B;
+cea : 78030000;
+ceb : 38638194;
+cec : 28610000;
+ced : 502D000E;
+cee : 78030000;
+cef : 38638198;
+cf0 : 2B82002C;
+cf1 : 28610000;
+cf2 : 54410009;
+cf3 : 2B830028;
+cf4 : 2B820024;
+cf5 : 3461FFFF;
+cf6 : F4611800;
+cf7 : 3442FFFF;
+cf8 : B4621000;
+cf9 : 5B820024;
+cfa : 5B810028;
+cfb : 2B810024;
+cfc : 316E0000;
+cfd : 3DAD0003;
+cfe : 59610008;
+cff : 2B810028;
+d00 : 59600004;
+d01 : 596D0010;
+d02 : 5961000C;
+d03 : 78010000;
+d04 : 3821971C;
+d05 : 28220000;
+d06 : 34420001;
+d07 : 58220000;
+d08 : B9800800;
+d09 : 2B9D0004;
+d0a : 2B8B0020;
+d0b : 2B8C001C;
+d0c : 2B8D0018;
+d0d : 2B8E0014;
+d0e : 2B8F0010;
+d0f : 2B90000C;
+d10 : 2B910008;
+d11 : 379C002C;
+d12 : C3A00000;
+d13 : 78020000;
+d14 : 3842975C;
+d15 : 28420000;
+d16 : 78030000;
+d17 : 38639748;
+d18 : 58620000;
+d19 : 44200005;
+d1a : 28430018;
+d1b : 78018000;
+d1c : B8610800;
+d1d : E0000006;
+d1e : 78040000;
+d1f : 3884814C;
+d20 : 28430018;
+d21 : 28810000;
+d22 : A0610800;
+d23 : 58410018;
+d24 : C3A00000;
+d25 : 78010000;
+d26 : 38219748;
+d27 : 28210000;
+d28 : 2821001C;
+d29 : C3A00000;
+d2a : 78020000;
+d2b : 38429748;
+d2c : 28420000;
+d2d : 2843001C;
+d2e : B4230800;
+d2f : 2843001C;
+d30 : C8611800;
+d31 : 4803FFFE;
+d32 : C3A00000;
+d33 : 379CFFF4;
+d34 : 5B8B000C;
+d35 : 5B8C0008;
+d36 : 5B9D0004;
+d37 : 34020000;
+d38 : B8206000;
+d39 : F80001FA;
+d3a : B8205800;
+d3b : 4C200005;
+d3c : 78010000;
+d3d : 38217C2C;
+d3e : B9601000;
+d3f : E0000004;
+d40 : 29820000;
+d41 : 78010000;
+d42 : 38217C58;
+d43 : FBFFFB1A;
+d44 : B9600800;
+d45 : 2B9D0004;
+d46 : 2B8B000C;
+d47 : 2B8C0008;
+d48 : 379C000C;
+d49 : C3A00000;
+d4a : 379CFFFC;
+d4b : 5B9D0004;
+d4c : 78010000;
+d4d : 38219410;
+d4e : 58200000;
+d4f : 78020000;
+d50 : 78010000;
+d51 : 38219424;
+d52 : 38429414;
+d53 : 3403FFFF;
+d54 : 58230000;
+d55 : 58430000;
+d56 : 58200008;
+d57 : 58400008;
+d58 : 58400004;
+d59 : 58200004;
+d5a : 5840000C;
+d5b : 5820000C;
+d5c : 34020000;
+d5d : 34010000;
+d5e : F800069E;
+d5f : 2B9D0004;
+d60 : 379C0004;
+d61 : C3A00000;
+d62 : 379CFFF4;
+d63 : 5B8B000C;
+d64 : 5B8C0008;
+d65 : 5B9D0004;
+d66 : B8206000;
+d67 : 34010000;
+d68 : F80006F0;
+d69 : B8205800;
+d6a : 34020000;
+d6b : 5C200081;
+d6c : FBFFFCBC;
+d6d : 78030000;
+d6e : 38639414;
+d6f : 28650008;
+d70 : 78020000;
+d71 : 38429410;
+d72 : B8202000;
+d73 : 28420000;
+d74 : 44AB0004;
+d75 : 34010001;
+d76 : 5CA1001D;
+d77 : E0000010;
+d78 : 34010001;
+d79 : 44810005;
+d7a : 28610004;
+d7b : 34210001;
+d7c : 58610004;
+d7d : E0000002;
+d7e : 58600004;
+d7f : 78030000;
+d80 : 38639414;
+d81 : 28650004;
+d82 : 34010004;
+d83 : 4C250010;
+d84 : 34010001;
+d85 : 58610008;
+d86 : E0000002;
+d87 : 44850003;
+d88 : 58600004;
+d89 : E000000A;
+d8a : 28650004;
+d8b : 34010004;
+d8c : 34A50001;
+d8d : 58650004;
+d8e : 4C250005;
+d8f : 34010002;
+d90 : 58610008;
+d91 : 3441FE0C;
+d92 : 5861000C;
+d93 : 78030000;
+d94 : 38639424;
+d95 : 28650008;
+d96 : 44A00004;
+d97 : 34010001;
+d98 : 5CA1001C;
+d99 : E000000F;
+d9a : 44850005;
+d9b : 28610004;
+d9c : 34210001;
+d9d : 58610004;
+d9e : E0000002;
+d9f : 58600004;
+da0 : 78030000;
+da1 : 38639424;
+da2 : 28640004;
+da3 : 34010004;
+da4 : 4C240010;
+da5 : 34010001;
+da6 : 58610008;
+da7 : E0000002;
+da8 : 44800003;
+da9 : 58600004;
+daa : E000000A;
+dab : 28640004;
+dac : 34010004;
+dad : 34840001;
+dae : 58640004;
+daf : 4C240005;
+db0 : 34010002;
+db1 : 58610008;
+db2 : 3441FE0C;
+db3 : 5861000C;
+db4 : 3401251B;
+db5 : 4C220030;
+db6 : 78020000;
+db7 : 38429414;
+db8 : 28440008;
+db9 : 34010002;
+dba : 3402FFFF;
+dbb : 5C810031;
+dbc : 78030000;
+dbd : 38639424;
+dbe : 28610008;
+dbf : 5C24002D;
+dc0 : 2862000C;
+dc1 : 34011F3F;
+dc2 : E0000002;
+dc3 : 3442E0C0;
+dc4 : 4841FFFF;
+dc5 : 78030000;
+dc6 : 38639424;
+dc7 : 5862000C;
+dc8 : 78030000;
+dc9 : 38639414;
+dca : 2863000C;
+dcb : 34011F3F;
+dcc : E0000002;
+dcd : 3463E0C0;
+dce : 4861FFFF;
+dcf : 78040000;
+dd0 : 38849414;
+dd1 : 5883000C;
+dd2 : 4C620003;
+dd3 : 3444F060;
+dd4 : E0000004;
+dd5 : 34040000;
+dd6 : 4C430002;
+dd7 : 34440FA0;
+dd8 : B4831800;
+dd9 : 0062001F;
+dda : B4431800;
+ddb : 14620001;
+ddc : 4C400003;
+ddd : 34421F40;
+dde : E0000004;
+ddf : 34011F3F;
+de0 : 4C220002;
+de1 : 3442E0C0;
+de2 : 59820000;
+de3 : 34020001;
+de4 : E0000008;
+de5 : 78010000;
+de6 : 34420064;
+de7 : 38219410;
+de8 : 58220000;
+de9 : 34010000;
+dea : F8000612;
+deb : 34020000;
+dec : B8400800;
+ded : 2B9D0004;
+dee : 2B8B000C;
+def : 2B8C0008;
+df0 : 379C000C;
+df1 : C3A00000;
+df2 : 379CFFEC;
+df3 : 5B8B0010;
+df4 : 5B8C000C;
+df5 : 5B8D0008;
+df6 : 5B9D0004;
+df7 : B8405800;
+df8 : 34020003;
+df9 : 340C0000;
+dfa : 340D03E9;
+dfb : 5C220022;
+dfc : E0000005;
+dfd : 458D0027;
+dfe : FBFFFBD2;
+dff : 44200025;
+e00 : 358C0001;
+e01 : B9600800;
+e02 : FBFFFF60;
+e03 : 4420FFFA;
+e04 : 4C200002;
+e05 : E0000018;
+e06 : 37810014;
+e07 : 34020000;
+e08 : F800012B;
+e09 : 48010007;
+e0a : 29620000;
+e0b : 2B810014;
+e0c : 3443FF38;
+e0d : 54610003;
+e0e : 344200C8;
+e0f : 5041001D;
+e10 : 34020001;
+e11 : B9600800;
+e12 : F8000121;
+e13 : 78030000;
+e14 : 29620000;
+e15 : 38637CC8;
+e16 : 4C200003;
+e17 : 78030000;
+e18 : 38637CC0;
+e19 : 78010000;
+e1a : 38217CD0;
+e1b : FBFFFA42;
+e1c : E0000010;
+e1d : B9600800;
+e1e : FBFFFF15;
+e1f : B8206000;
+e20 : 48010005;
+e21 : 29610000;
+e22 : FBFFF8D3;
+e23 : E0000002;
+e24 : 340CFFFF;
+e25 : B9800800;
+e26 : 2B9D0004;
+e27 : 2B8B0010;
+e28 : 2B8C000C;
+e29 : 2B8D0008;
+e2a : 379C0014;
+e2b : C3A00000;
+e2c : 340C0000;
+e2d : E3FFFFF4;
+e2e : 78010000;
+e2f : 38219474;
+e30 : 28210000;
+e31 : 28220008;
+e32 : 2821000C;
+e33 : 202100FF;
+e34 : C3A00000;
+e35 : 78010000;
+e36 : 78030000;
+e37 : 3863819C;
+e38 : 38219474;
+e39 : 28210000;
+e3a : 28620000;
+e3b : 78040000;
+e3c : 388481A0;
+e3d : 58220000;
+e3e : 58200014;
+e3f : 28830000;
+e40 : 58200018;
+e41 : 58200010;
+e42 : 58230000;
+e43 : 58220000;
+e44 : 5820001C;
+e45 : C3A00000;
+e46 : 78040000;
+e47 : 34050002;
+e48 : 38849474;
+e49 : 5C25000E;
+e4a : 28810000;
+e4b : 1444001F;
+e4c : 20840007;
+e4d : B4831800;
+e4e : F4832000;
+e4f : 00630003;
+e50 : B4821000;
+e51 : 3C42001D;
+e52 : 58200014;
+e53 : 58200018;
+e54 : B8431800;
+e55 : 58230010;
+e56 : E0000006;
+e57 : 28810000;
+e58 : 204200FF;
+e59 : 58230014;
+e5a : 58220018;
+e5b : 58200010;
+e5c : 78010000;
+e5d : 38219474;
+e5e : 28210000;
+e5f : 28220000;
+e60 : 38420004;
+e61 : 58220000;
+e62 : 34010000;
+e63 : C3A00000;
+e64 : 78050000;
+e65 : 38A59474;
+e66 : 28A50000;
+e67 : 202100FF;
+e68 : 00630003;
+e69 : 58A20014;
+e6a : 58A10018;
+e6b : 58A30010;
+e6c : 34010003;
+e6d : 5C810007;
+e6e : 28A20000;
+e6f : 3401FFF3;
+e70 : A0410800;
+e71 : 38210008;
+e72 : 58A10000;
+e73 : C3A00000;
+e74 : 34010001;
+e75 : 5C810007;
+e76 : 28A2001C;
+e77 : 3401FFE7;
+e78 : A0410800;
+e79 : 38210010;
+e7a : 58A1001C;
+e7b : C3A00000;
+e7c : 34010002;
+e7d : 5C810006;
+e7e : 28A2001C;
+e7f : 3401FFC7;
+e80 : A0410800;
+e81 : 38210020;
+e82 : 58A1001C;
+e83 : C3A00000;
+e84 : 379CFFE0;
+e85 : 5B8B0020;
+e86 : 5B8C001C;
+e87 : 5B8D0018;
+e88 : 5B8E0014;
+e89 : 5B8F0010;
+e8a : 5B90000C;
+e8b : 5B910008;
+e8c : 5B9D0004;
+e8d : B8206000;
+e8e : 78010000;
+e8f : 38218190;
+e90 : 282F0000;
+e91 : 780B0000;
+e92 : B8406800;
+e93 : 396B9474;
+e94 : FBFFFF9A;
+e95 : B8208800;
+e96 : 29610000;
+e97 : B8408000;
+e98 : 282E0004;
+e99 : A1CF7000;
+e9a : FBFFFF94;
+e9b : 5C31FFF9;
+e9c : 5C50FFF8;
+e9d : 45800003;
+e9e : 59810000;
+e9f : 59820004;
+ea0 : 45A00003;
+ea1 : 3DC10003;
+ea2 : 59A10000;
+ea3 : 2B9D0004;
+ea4 : 2B8B0020;
+ea5 : 2B8C001C;
+ea6 : 2B8D0018;
+ea7 : 2B8E0014;
+ea8 : 2B8F0010;
+ea9 : 2B90000C;
+eaa : 2B910008;
+eab : 379C0020;
+eac : C3A00000;
+ead : 78010000;
+eae : 38219474;
+eaf : 28210000;
+eb0 : 28210000;
+eb1 : 20210004;
+eb2 : 64210000;
+eb3 : C3A00000;
+eb4 : 78020000;
+eb5 : 38429474;
+eb6 : 28420000;
+eb7 : 2843001C;
+eb8 : 44200003;
+eb9 : 3863000C;
+eba : E0000003;
+ebb : 3401FFF3;
+ebc : A0611800;
+ebd : 5843001C;
+ebe : 34010000;
+ebf : C3A00000;
+ec0 : 379CFFE8;
+ec1 : 5B8B0018;
+ec2 : 5B8C0014;
+ec3 : 5B8D0010;
+ec4 : 5B8E000C;
+ec5 : 5B8F0008;
+ec6 : 5B9D0004;
+ec7 : 282B0004;
+ec8 : B8806800;
+ec9 : B8607800;
+eca : 41610003;
+ecb : B8406000;
+ecc : 35AEFFFF;
+ecd : FBFFFC95;
+ece : 29620004;
+ecf : 41610003;
+ed0 : 3C420001;
+ed1 : 204200FE;
+ed2 : FBFFFCE1;
+ed3 : 15820008;
+ed4 : 41610003;
+ed5 : 204200FF;
+ed6 : FBFFFCDD;
+ed7 : 41610003;
+ed8 : 218200FF;
+ed9 : 340C0000;
+eda : FBFFFCD9;
+edb : 41610003;
+edc : FBFFFC9C;
+edd : 29620004;
+ede : 41610003;
+edf : 3C420001;
+ee0 : 38420001;
+ee1 : 204200FF;
+ee2 : FBFFFCD1;
+ee3 : E0000005;
+ee4 : 20A100FF;
+ee5 : 34030000;
+ee6 : FBFFFD14;
+ee7 : 358C0001;
+ee8 : B5EC1000;
+ee9 : 29650000;
+eea : 49CCFFFA;
+eeb : 20A100FF;
+eec : 34030001;
+eed : FBFFFD0D;
+eee : 41610003;
+eef : FBFFFCA9;
+ef0 : B9A00800;
+ef1 : 2B9D0004;
+ef2 : 2B8B0018;
+ef3 : 2B8C0014;
+ef4 : 2B8D0010;
+ef5 : 2B8E000C;
+ef6 : 2B8F0008;
+ef7 : 379C0018;
+ef8 : C3A00000;
+ef9 : 379CFFE4;
+efa : 5B8B001C;
+efb : 5B8C0018;
+efc : 5B8D0014;
+efd : 5B8E0010;
+efe : 5B8F000C;
+eff : 5B900008;
+f00 : 5B9D0004;
+f01 : 340C0000;
+f02 : B8406800;
+f03 : B8607800;
+f04 : B8807000;
+f05 : 282B0004;
+f06 : E0000022;
+f07 : 41610003;
+f08 : FBFFFC5A;
+f09 : 29620004;
+f0a : 41610003;
+f0b : 3C420001;
+f0c : 204200FE;
+f0d : FBFFFCA6;
+f0e : 15A20008;
+f0f : 41610003;
+f10 : 204200FF;
+f11 : FBFFFCA2;
+f12 : 41610003;
+f13 : 21A200FF;
+f14 : 35AD0001;
+f15 : FBFFFC9E;
+f16 : B5EC1000;
+f17 : 41610003;
+f18 : 40420000;
+f19 : FBFFFC9A;
+f1a : 41610003;
+f1b : FBFFFC7D;
+f1c : 41610003;
+f1d : FBFFFC45;
+f1e : 29620004;
+f1f : 41610003;
+f20 : 3C420001;
+f21 : 204200FE;
+f22 : FBFFFC91;
+f23 : B8208000;
+f24 : 41610003;
+f25 : FBFFFC73;
+f26 : 5E00FFF6;
+f27 : 358C0001;
+f28 : 49CCFFDF;
+f29 : B9C00800;
+f2a : 2B9D0004;
+f2b : 2B8B001C;
+f2c : 2B8C0018;
+f2d : 2B8D0014;
+f2e : 2B8E0010;
+f2f : 2B8F000C;
+f30 : 2B900008;
+f31 : 379C001C;
+f32 : C3A00000;
+f33 : 379CFFE8;
+f34 : 5B8B0014;
+f35 : 5B8C0010;
+f36 : 5B8D000C;
+f37 : 5B8E0008;
+f38 : 5B9D0004;
+f39 : 78030000;
+f3a : 78040000;
+f3b : 78050000;
+f3c : 386381A4;
+f3d : 388481A8;
+f3e : 38A581B8;
+f3f : 204E00FF;
+f40 : 780B0000;
+f41 : 28620000;
+f42 : 28830000;
+f43 : 28A40000;
+f44 : 396B8AB0;
+f45 : B8206800;
+f46 : B9600800;
+f47 : F80005F0;
+f48 : 340CFFFF;
+f49 : 48010024;
+f4a : 45C00012;
+f4b : 29630070;
+f4c : 34020000;
+f4d : B9600800;
+f4e : F8000674;
+f4f : 29A20000;
+f50 : 78018000;
+f51 : 37830018;
+f52 : B8410800;
+f53 : 5B810018;
+f54 : 34020000;
+f55 : B9600800;
+f56 : 34040004;
+f57 : F800063F;
+f58 : 7C210004;
+f59 : C8016000;
+f5a : 398C0001;
+f5b : E000000F;
+f5c : 34020000;
+f5d : B9600800;
+f5e : 37830018;
+f5f : 34040004;
+f60 : F800060A;
+f61 : 34020004;
+f62 : 5C220008;
+f63 : 78020000;
+f64 : 3842814C;
+f65 : 2B8C0018;
+f66 : 28410000;
+f67 : A1810800;
+f68 : 018C001F;
+f69 : 59A10000;
+f6a : 78010000;
+f6b : 38218AB0;
+f6c : F80005FB;
+f6d : B9800800;
+f6e : 2B9D0004;
+f6f : 2B8B0014;
+f70 : 2B8C0010;
+f71 : 2B8D000C;
+f72 : 2B8E0008;
+f73 : 379C0018;
+f74 : C3A00000;
+f75 : 28250008;
+f76 : 28240000;
+f77 : 28260004;
+f78 : B4451800;
+f79 : 88642000;
+f7a : 5822001C;
+f7b : 88461000;
+f7c : B4821000;
+f7d : 2824000C;
+f7e : 1442000C;
+f7f : B4442000;
+f80 : 28220014;
+f81 : 4C820005;
+f82 : 28240010;
+f83 : 44800008;
+f84 : 4CA3000B;
+f85 : E0000006;
+f86 : 28220018;
+f87 : 4C440006;
+f88 : 28240010;
+f89 : 44800002;
+f8a : 4C650005;
+f8b : 58230008;
+f8c : E0000003;
+f8d : 58230008;
+f8e : B8801000;
+f8f : 58220020;
+f90 : B8400800;
+f91 : C3A00000;
+f92 : 2822000C;
+f93 : 58200008;
+f94 : 58220020;
+f95 : C3A00000;
+f96 : 379CFFF8;
+f97 : 5B8B0008;
+f98 : 5B9D0004;
+f99 : B8205800;
+f9a : 58200014;
+f9b : B8400800;
+f9c : F80006D3;
+f9d : 2963000C;
+f9e : 29620000;
+f9f : 4823000B;
+fa0 : 29610004;
+fa1 : 4C410003;
+fa2 : 34420001;
+fa3 : 59620000;
+fa4 : 29620000;
+fa5 : 5C410011;
+fa6 : 34010001;
+fa7 : 59610014;
+fa8 : 59610010;
+fa9 : E000000E;
+faa : 29610008;
+fab : 4C220003;
+fac : 3442FFFF;
+fad : 59620000;
+fae : 29620000;
+faf : 5C410007;
+fb0 : 34010001;
+fb1 : 59610014;
+fb2 : 59600000;
+fb3 : 59600010;
+fb4 : 3401FFFF;
+fb5 : E0000002;
+fb6 : 29610010;
+fb7 : 2B9D0004;
+fb8 : 2B8B0008;
+fb9 : 379C0008;
+fba : C3A00000;
+fbb : 58200010;
+fbc : 58200000;
+fbd : 58200014;
+fbe : C3A00000;
+fbf : 78030000;
+fc0 : 38639738;
+fc1 : 28640000;
+fc2 : 48810013;
+fc3 : 78030000;
+fc4 : 38639458;
+fc5 : C8240800;
+fc6 : 44400007;
+fc7 : 28620000;
+fc8 : 34040001;
+fc9 : BC810800;
+fca : 28430028;
+fcb : B8230800;
+fcc : E0000007;
+fcd : 28620000;
+fce : 34040001;
+fcf : BC810800;
+fd0 : 28430028;
+fd1 : A4200800;
+fd2 : A0230800;
+fd3 : 58410028;
+fd4 : C3A00000;
+fd5 : 78030000;
+fd6 : 38639458;
+fd7 : 44400007;
+fd8 : 28620000;
+fd9 : 34040001;
+fda : BC810800;
+fdb : 28430024;
+fdc : B8230800;
+fdd : E0000007;
+fde : 28620000;
+fdf : 34040001;
+fe0 : BC810800;
+fe1 : 28430024;
+fe2 : A4200800;
+fe3 : A0230800;
+fe4 : 58410024;
+fe5 : C3A00000;
+fe6 : 379CFFF0;
+fe7 : 5B8B0010;
+fe8 : 5B8C000C;
+fe9 : 5B8D0008;
+fea : 5B9D0004;
+feb : 780B0000;
+fec : B8206000;
+fed : 78010000;
+fee : 396B9738;
+fef : 38219730;
+ff0 : 28210000;
+ff1 : 296D0000;
+ff2 : B42D6800;
+ff3 : 29810000;
+ff4 : B9A01000;
+ff5 : F800005C;
+ff6 : 29810004;
+ff7 : 29630000;
+ff8 : B9A01000;
+ff9 : F80000DB;
+ffa : 5980000C;
+ffb : 59800008;
+ffc : 2B9D0004;
+ffd : 2B8B0010;
+ffe : 2B8C000C;
+fff : 2B8D0008;
+1000 : 379C0010;
+1001 : C3A00000;
+1002 : 379CFFF8;
+1003 : 5B8B0008;
+1004 : 5B9D0004;
+1005 : B8205800;
+1006 : 28210000;
+1007 : F80000B3;
+1008 : 78010000;
+1009 : 38219458;
+100a : 28210000;
+100b : 34020001;
+100c : 34030009;
+100d : 58220004;
+100e : 5963000C;
+100f : 78030000;
+1010 : 386381CC;
+1011 : 59620008;
+1012 : 28620000;
+1013 : 5822004C;
+1014 : 2B9D0004;
+1015 : 2B8B0008;
+1016 : 379C0008;
+1017 : C3A00000;
+1018 : B8201000;
+1019 : 28210000;
+101a : 28230048;
+101b : 34010000;
+101c : 44600016;
+101d : 28430004;
+101e : 28630038;
+101f : 44600013;
+1020 : 78030000;
+1021 : 38639458;
+1022 : 28630000;
+1023 : 28640004;
+1024 : 20840004;
+1025 : 4480000D;
+1026 : 28630004;
+1027 : 20630008;
+1028 : 5C60000A;
+1029 : 2842000C;
+102a : 3403000A;
+102b : 34010001;
+102c : 54430006;
+102d : 78010000;
+102e : 3C420002;
+102f : 382182D8;
+1030 : B4220800;
+1031 : 28210000;
+1032 : C3A00000;
+1033 : 78040000;
+1034 : 38849458;
+1035 : 28850000;
+1036 : 34040000;
+1037 : 44600002;
+1038 : 78048000;
+1039 : 78060000;
+103a : 38C681D4;
+103b : 28C30000;
+103c : 3C210018;
+103d : A0431000;
+103e : B8410800;
+103f : B8242000;
+1040 : 58A4004C;
+1041 : C3A00000;
+1042 : 78040000;
+1043 : 38849458;
+1044 : 28850000;
+1045 : 34040000;
+1046 : 44600002;
+1047 : 78048000;
+1048 : 78060000;
+1049 : 38C681D4;
+104a : 28C30000;
+104b : 3C210018;
+104c : A0431000;
+104d : B8410800;
+104e : B8242000;
+104f : 58A4004C;
+1050 : C3A00000;
+1051 : 34030005;
+1052 : 58230028;
+1053 : 3803FFFB;
+1054 : 5823002C;
+1055 : 3403FF6A;
+1056 : 58230018;
+1057 : 3403FFFE;
+1058 : 58230014;
+1059 : 34030001;
+105a : 58230024;
+105b : 340300C8;
+105c : 58230044;
+105d : 34032710;
+105e : 5823003C;
+105f : 34030064;
+1060 : 58230040;
+1061 : 5822000C;
+1062 : C3A00000;
+1063 : 379CFFF0;
+1064 : 5B8B0010;
+1065 : 5B8C000C;
+1066 : 5B8D0008;
+1067 : 5B9D0004;
+1068 : B8205800;
+1069 : 2821000C;
+106a : B8406800;
+106b : 340C0000;
+106c : 5C610047;
+106d : 34010022;
+106e : 34030000;
+106f : FBFFFFC4;
+1070 : 29620004;
+1071 : 34010025;
+1072 : 34030000;
+1073 : FBFFFFC0;
+1074 : 29610008;
+1075 : 4C200004;
+1076 : 596D0004;
+1077 : 596D0008;
+1078 : E000003B;
+1079 : 4DA10005;
+107a : 29620000;
+107b : 78010040;
+107c : B4410800;
+107d : 59610000;
+107e : 29630000;
+107f : 78050000;
+1080 : 29620004;
+1081 : 38A581D8;
+1082 : 28A10000;
+1083 : B5A32000;
+1084 : C8826000;
+1085 : 482C0006;
+1086 : 78050000;
+1087 : 38A581DC;
+1088 : 28A10000;
+1089 : 49810002;
+108a : E0000002;
+108b : B8206000;
+108c : 78050000;
+108d : 38A581E0;
+108e : 28A10000;
+108f : 4C240006;
+1090 : 4C220005;
+1091 : C8611800;
+1092 : C8410800;
+1093 : 59630000;
+1094 : 59610004;
+1095 : 29610004;
+1096 : B9801000;
+1097 : 596D0008;
+1098 : 34214000;
+1099 : 59610004;
+109a : 35610014;
+109b : FBFFFEDA;
+109c : 78030000;
+109d : 38639458;
+109e : 29620010;
+109f : B8206800;
+10a0 : 28610000;
+10a1 : 34030000;
+10a2 : 582D0040;
+10a3 : 34410001;
+10a4 : 59610010;
+10a5 : 34010026;
+10a6 : FBFFFF8D;
+10a7 : 34010020;
+10a8 : B9A01000;
+10a9 : 34030000;
+10aa : FBFFFF89;
+10ab : B9801000;
+10ac : 34010021;
+10ad : 34030001;
+10ae : FBFFFF85;
+10af : B9801000;
+10b0 : 35610038;
+10b1 : FBFFFEE5;
+10b2 : 7C2C0000;
+10b3 : B9800800;
+10b4 : 2B9D0004;
+10b5 : 2B8B0010;
+10b6 : 2B8C000C;
+10b7 : 2B8D0008;
+10b8 : 379C0010;
+10b9 : C3A00000;
+10ba : 379CFFF8;
+10bb : 5B8B0008;
+10bc : 5B9D0004;
+10bd : B8205800;
+10be : 28210028;
+10bf : 59600004;
+10c0 : 59600000;
+10c1 : 59610020;
+10c2 : 3401FFFF;
+10c3 : 59610008;
+10c4 : 59600010;
+10c5 : 35610014;
+10c6 : FBFFFECC;
+10c7 : 35610038;
+10c8 : FBFFFEF3;
+10c9 : 2961000C;
+10ca : 34020001;
+10cb : FBFFFEF4;
+10cc : 34010024;
+10cd : 34020001;
+10ce : 34030001;
+10cf : FBFFFF64;
+10d0 : 2B9D0004;
+10d1 : 2B8B0008;
+10d2 : 379C0008;
+10d3 : C3A00000;
+10d4 : 379CFFF8;
+10d5 : 5B8B0008;
+10d6 : 5B9D0004;
+10d7 : B8205800;
+10d8 : 34010005;
+10d9 : 59610018;
+10da : 3801FFFA;
+10db : 5961001C;
+10dc : 34010001;
+10dd : 59610014;
+10de : 34017530;
+10df : 59610010;
+10e0 : 3401FBB4;
+10e1 : 59610008;
+10e2 : 3401FFE2;
+10e3 : 59610004;
+10e4 : 340104B0;
+10e5 : 59610034;
+10e6 : 340103E8;
+10e7 : 5961002C;
+10e8 : 34010064;
+10e9 : 59610030;
+10ea : 78010000;
+10eb : 38219738;
+10ec : 28210000;
+10ed : 59630064;
+10ee : 59620060;
+10ef : C8611800;
+10f0 : 5963006C;
+10f1 : 35610004;
+10f2 : 59600070;
+10f3 : FBFFFE9F;
+10f4 : 35610028;
+10f5 : FBFFFEC6;
+10f6 : 2B9D0004;
+10f7 : 2B8B0008;
+10f8 : 379C0008;
+10f9 : C3A00000;
+10fa : 379CFFF8;
+10fb : 5B8B0008;
+10fc : 5B9D0004;
+10fd : B8205800;
+10fe : 58200044;
+10ff : 58200040;
+1100 : 3401FFFF;
+1101 : 59610048;
+1102 : 5961004C;
+1103 : 59610050;
+1104 : 59610054;
+1105 : 34010001;
+1106 : 59610070;
+1107 : 59600058;
+1108 : 35610004;
+1109 : 5960005C;
+110a : 59600068;
+110b : FBFFFE87;
+110c : 35610028;
+110d : FBFFFEAE;
+110e : 29610060;
+110f : 34020001;
+1110 : FBFFFEAF;
+1111 : 29610064;
+1112 : 34020001;
+1113 : FBFFFEAC;
+1114 : 34010004;
+1115 : 34020001;
+1116 : 34030001;
+1117 : FBFFFF2B;
+1118 : 2B9D0004;
+1119 : 2B8B0008;
+111a : 379C0008;
+111b : C3A00000;
+111c : 379CFFF0;
+111d : 5B8B0010;
+111e : 5B8C000C;
+111f : 5B8D0008;
+1120 : 5B9D0004;
+1121 : 28240070;
+1122 : B8205800;
+1123 : 34010001;
+1124 : 44800078;
+1125 : 29610060;
+1126 : 5C610002;
+1127 : 59620048;
+1128 : 29610064;
+1129 : 5C610002;
+112a : 5962004C;
+112b : 29610048;
+112c : 48010009;
+112d : 29620050;
+112e : 48020006;
+112f : 4C220005;
+1130 : 29630040;
+1131 : 78020040;
+1132 : B4621000;
+1133 : 59620040;
+1134 : 59610050;
+1135 : 2961004C;
+1136 : 48010009;
+1137 : 29620054;
+1138 : 48020006;
+1139 : 4C220005;
+113a : 29630044;
+113b : 78020040;
+113c : B4621000;
+113d : 59620044;
+113e : 59610054;
+113f : 29630048;
+1140 : 34010000;
+1141 : 4803005B;
+1142 : 2962004C;
+1143 : 48020059;
+1144 : 296C0040;
+1145 : 29610038;
+1146 : B46C1800;
+1147 : 296C0044;
+1148 : C8621000;
+1149 : C84C6000;
+114a : 44200006;
+114b : 218C3FFF;
+114c : 21812000;
+114d : 44200003;
+114e : 3401C000;
+114f : B9816000;
+1150 : B9801000;
+1151 : 35610004;
+1152 : FBFFFE23;
+1153 : 2962006C;
+1154 : 78030000;
+1155 : 38639458;
+1156 : 2042000F;
+1157 : B8206800;
+1158 : 3C420010;
+1159 : 28610000;
+115a : 21A3FFFF;
+115b : B8621000;
+115c : 58220044;
+115d : 29630040;
+115e : 29620048;
+115f : 34010005;
+1160 : B4621000;
+1161 : 34030000;
+1162 : FBFFFEE0;
+1163 : 29630044;
+1164 : 2962004C;
+1165 : 34010002;
+1166 : B4621000;
+1167 : 34030000;
+1168 : FBFFFEDA;
+1169 : 34010001;
+116a : B9801000;
+116b : 34030000;
+116c : FBFFFED6;
+116d : 29620068;
+116e : 34030000;
+116f : 34410001;
+1170 : 59610068;
+1171 : 34010006;
+1172 : FBFFFED0;
+1173 : 34010000;
+1174 : B9A01000;
+1175 : 34030001;
+1176 : FBFFFECC;
+1177 : 78020000;
+1178 : 3401FFFF;
+1179 : 384281E4;
+117a : 5961004C;
+117b : 59610048;
+117c : 29630040;
+117d : 28410000;
+117e : 4C23000A;
+117f : 29620044;
+1180 : 4C220008;
+1181 : 78040000;
+1182 : 388481E8;
+1183 : 28810000;
+1184 : B4611800;
+1185 : B4410800;
+1186 : 59630040;
+1187 : 59610044;
+1188 : 29610038;
+1189 : 4420000F;
+118a : 2961005C;
+118b : 29620058;
+118c : 4C220006;
+118d : 34210001;
+118e : 5961005C;
+118f : 29610040;
+1190 : 3421FFFF;
+1191 : E0000006;
+1192 : 4C410006;
+1193 : 3421FFFF;
+1194 : 5961005C;
+1195 : 29610040;
+1196 : 34210001;
+1197 : 59610040;
+1198 : 35610028;
+1199 : B9801000;
+119a : FBFFFDFC;
+119b : 7C210000;
+119c : 2B9D0004;
+119d : 2B8B0010;
+119e : 2B8C000C;
+119f : 2B8D0008;
+11a0 : 379C0010;
+11a1 : C3A00000;
+11a2 : 379CFFF0;
+11a3 : 5B8B0008;
+11a4 : 5B9D0004;
+11a5 : B8205800;
+11a6 : 1443001F;
+11a7 : 3781000C;
+11a8 : 4802000B;
+11a9 : 00440012;
+11aa : 3C63000E;
+11ab : 3C42000E;
+11ac : B8641800;
+11ad : 5B820010;
+11ae : 34021F40;
+11af : 5B83000C;
+11b0 : FBFFF245;
+11b1 : 2B820010;
+11b2 : E0000009;
+11b3 : 0842C000;
+11b4 : 5B820010;
+11b5 : 1442001F;
+11b6 : 5B82000C;
+11b7 : 34021F40;
+11b8 : FBFFF23D;
+11b9 : 2B820010;
+11ba : C8021000;
+11bb : 0041001F;
+11bc : B4221000;
+11bd : 14420001;
+11be : 34010000;
+11bf : 59620058;
+11c0 : 2B9D0004;
+11c1 : 2B8B0008;
+11c2 : 379C0010;
+11c3 : C3A00000;
+11c4 : 28220058;
+11c5 : 2821005C;
+11c6 : FC410800;
+11c7 : C3A00000;
+11c8 : 58220004;
+11c9 : 5820001C;
+11ca : 58230008;
+11cb : 5820000C;
+11cc : 58200010;
+11cd : 58200000;
+11ce : C3A00000;
+11cf : 379CFFFC;
+11d0 : 5B9D0004;
+11d1 : 34020001;
+11d2 : 58220000;
+11d3 : 58200014;
+11d4 : 5820001C;
+11d5 : 5820000C;
+11d6 : 58200010;
+11d7 : 28210004;
+11d8 : FBFFFDE7;
+11d9 : 78010000;
+11da : 38219738;
+11db : 28210000;
+11dc : 34020001;
+11dd : FBFFFDE2;
+11de : 2B9D0004;
+11df : 379C0004;
+11e0 : C3A00000;
+11e1 : 379CFFB0;
+11e2 : 5B8B0010;
+11e3 : 5B8C000C;
+11e4 : 5B8D0008;
+11e5 : 5B9D0004;
+11e6 : B8205800;
+11e7 : B8406000;
+11e8 : B8606800;
+11e9 : 37810014;
+11ea : 34020000;
+11eb : 34030040;
+11ec : F80004C0;
+11ed : 3401C000;
+11ee : 78040000;
+11ef : 5B810020;
+11f0 : 38849738;
+11f1 : 34014000;
+11f2 : 5B810044;
+11f3 : 28810000;
+11f4 : 5DA10005;
+11f5 : 78030000;
+11f6 : 38638DA4;
+11f7 : 586C0000;
+11f8 : E0000027;
+11f9 : 3DAD0005;
+11fa : B56D5800;
+11fb : 29610000;
+11fc : 44200023;
+11fd : 78030000;
+11fe : 38638DA4;
+11ff : 28610000;
+1200 : 29620010;
+1201 : C9810800;
+1202 : 20213FFF;
+1203 : 1423000C;
+1204 : 5C400007;
+1205 : 3C630002;
+1206 : 5961000C;
+1207 : 34010001;
+1208 : 59630014;
+1209 : 59610010;
+120a : E0000015;
+120b : 2964000C;
+120c : 34420001;
+120d : B4240800;
+120e : 29640014;
+120f : B4641800;
+1210 : 3C630002;
+1211 : 37840050;
+1212 : B4831800;
+1213 : 2863FFC4;
+1214 : 59620010;
+1215 : B4230800;
+1216 : 29630008;
+1217 : 5961000C;
+1218 : 5C430007;
+1219 : F80003ED;
+121a : 59610018;
+121b : 34010001;
+121c : 5961001C;
+121d : 5960000C;
+121e : 59600010;
+121f : 34010000;
+1220 : 2B9D0004;
+1221 : 2B8B0010;
+1222 : 2B8C000C;
+1223 : 2B8D0008;
+1224 : 379C0050;
+1225 : C3A00000;
+1226 : 78030000;
+1227 : 38639458;
+1228 : 5C40000A;
+1229 : 34040001;
+122a : 28620000;
+122b : BC810800;
+122c : 202100FF;
+122d : 28430020;
+122e : 3C210010;
+122f : A4200800;
+1230 : A0230800;
+1231 : E0000008;
+1232 : 28620000;
+1233 : 34040001;
+1234 : BC810800;
+1235 : 28430020;
+1236 : 202100FF;
+1237 : 3C210010;
+1238 : B8230800;
+1239 : 58410020;
+123a : C3A00000;
+123b : 379CFFF8;
+123c : 5B8B0008;
+123d : 5B9D0004;
+123e : 78030000;
+123f : B8405800;
+1240 : 38639500;
+1241 : 44200007;
+1242 : 3421FFFF;
+1243 : 0823007C;
+1244 : 78010000;
+1245 : 38219478;
+1246 : B4610800;
+1247 : 34230104;
+1248 : B8600800;
+1249 : B9601000;
+124a : FBFFFF58;
+124b : 78010000;
+124c : 38219478;
+124d : 582B0014;
+124e : 2B9D0004;
+124f : 2B8B0008;
+1250 : 379C0008;
+1251 : C3A00000;
+1252 : 379CFFEC;
+1253 : 5B8B0014;
+1254 : 5B8C0010;
+1255 : 5B8D000C;
+1256 : 5B8E0008;
+1257 : 5B9D0004;
+1258 : 780C0000;
+1259 : 780D0000;
+125a : B8207000;
+125b : 340B0000;
+125c : 398C9738;
+125d : 39AD943C;
+125e : E000000A;
+125f : 29A10000;
+1260 : 942B0800;
+1261 : 20210001;
+1262 : 44200005;
+1263 : 3D620005;
+1264 : B5C21000;
+1265 : 344101F4;
+1266 : FBFFFF69;
+1267 : 356B0001;
+1268 : 29810000;
+1269 : 482BFFF6;
+126a : 2B9D0004;
+126b : 2B8B0014;
+126c : 2B8C0010;
+126d : 2B8D000C;
+126e : 2B8E0008;
+126f : 379C0014;
+1270 : C3A00000;
+1271 : 379CFFBC;
+1272 : 5B8B0044;
+1273 : 5B8C0040;
+1274 : 5B8D003C;
+1275 : 5B8E0038;
+1276 : 5B8F0034;
+1277 : 5B900030;
+1278 : 5B91002C;
+1279 : 5B920028;
+127a : 5B930024;
+127b : 5B940020;
+127c : 5B95001C;
+127d : 5B960018;
+127e : 5B970014;
+127f : 5B980010;
+1280 : 5B99000C;
+1281 : 5B9B0008;
+1282 : 5B9D0004;
+1283 : 781B0000;
+1284 : 780B0000;
+1285 : 78190000;
+1286 : 780D0000;
+1287 : 78110000;
+1288 : 78100000;
+1289 : 780C0000;
+128a : 78170000;
+128b : 780F0000;
+128c : 3B7B9458;
+128d : 396B9478;
+128e : 34140009;
+128f : 3B398304;
+1290 : 34180001;
+1291 : 34130003;
+1292 : 39AD94E0;
+1293 : 34120008;
+1294 : 3A319500;
+1295 : 3A109490;
+1296 : 398C9738;
+1297 : 3AF7966C;
+1298 : 39EF9730;
+1299 : E000007E;
+129a : 2875007C;
+129b : 780100FF;
+129c : 3821FFFF;
+129d : 02AE0018;
+129e : A2A1A800;
+129f : 29610004;
+12a0 : 21CE007F;
+12a1 : 3421FFFF;
+12a2 : 54340055;
+12a3 : 3C210002;
+12a4 : B7210800;
+12a5 : 28210000;
+12a6 : C0200000;
+12a7 : 29610044;
+12a8 : 58610040;
+12a9 : 296100A4;
+12aa : 296200A0;
+12ab : B4410800;
+12ac : 0022001F;
+12ad : B4410800;
+12ae : 14210001;
+12af : 34020001;
+12b0 : 58610044;
+12b1 : 29810000;
+12b2 : FBFFFD0D;
+12b3 : FBFFFA72;
+12b4 : 34210032;
+12b5 : 59610008;
+12b6 : 3401000A;
+12b7 : E0000011;
+12b8 : 29760008;
+12b9 : FBFFFA6C;
+12ba : CAC10800;
+12bb : 4C20003C;
+12bc : 29610000;
+12bd : 5C380003;
+12be : 59780004;
+12bf : E0000038;
+12c0 : 59730004;
+12c1 : E0000036;
+12c2 : 29810000;
+12c3 : 34020000;
+12c4 : FBFFFCFB;
+12c5 : B9A00800;
+12c6 : FBFFFD3C;
+12c7 : 34010002;
+12c8 : 59610004;
+12c9 : E000002E;
+12ca : B9A00800;
+12cb : FBFFFD4D;
+12cc : E0000012;
+12cd : BA000800;
+12ce : FBFFFDEC;
+12cf : 34010004;
+12d0 : E3FFFFF8;
+12d1 : 29610060;
+12d2 : 44200025;
+12d3 : 29610064;
+12d4 : 44200023;
+12d5 : 29610000;
+12d6 : 5C330009;
+12d7 : 34010005;
+12d8 : E3FFFFF0;
+12d9 : BA200800;
+12da : FBFFFE20;
+12db : 34010006;
+12dc : E3FFFFEC;
+12dd : 296100C0;
+12de : 44200019;
+12df : B9600800;
+12e0 : FBFFFF72;
+12e1 : 59720004;
+12e2 : 296100E8;
+12e3 : 34020001;
+12e4 : E0000012;
+12e5 : 29610000;
+12e6 : 5C380004;
+12e7 : B9A00800;
+12e8 : FBFFFD30;
+12e9 : 44200007;
+12ea : 29610060;
+12eb : 44200005;
+12ec : 29610000;
+12ed : 5C33000A;
+12ee : 296100C0;
+12ef : 5C200008;
+12f0 : 2961000C;
+12f1 : 34020000;
+12f2 : 34210001;
+12f3 : 5961000C;
+12f4 : 59740004;
+12f5 : 296100E8;
+12f6 : FBFFFF30;
+12f7 : BA000800;
+12f8 : BAA01000;
+12f9 : B9C01800;
+12fa : FBFFFD69;
+12fb : 29610060;
+12fc : 4420001B;
+12fd : BA200800;
+12fe : BAA01000;
+12ff : B9C01800;
+1300 : FBFFFE1C;
+1301 : 29610004;
+1302 : 5C320015;
+1303 : 29610000;
+1304 : 34160000;
+1305 : 5C33000C;
+1306 : E0000008;
+1307 : 0AC1007C;
+1308 : BAA01000;
+1309 : B9C01800;
+130a : B5610800;
+130b : 34210104;
+130c : FBFFFE10;
+130d : 36D60001;
+130e : 29E10000;
+130f : 3421FFFF;
+1310 : 4836FFF7;
+1311 : 29810000;
+1312 : 49C10005;
+1313 : BAE00800;
+1314 : BAA01000;
+1315 : B9C01800;
+1316 : FBFFFECB;
+1317 : 2B630000;
+1318 : 78020002;
+1319 : 28610080;
+131a : A0220800;
+131b : 4420FF7F;
+131c : 29610010;
+131d : 34210001;
+131e : 59610010;
+131f : 34010001;
+1320 : D0410000;
+1321 : 2B9D0004;
+1322 : 2B8B0044;
+1323 : 2B8C0040;
+1324 : 2B8D003C;
+1325 : 2B8E0038;
+1326 : 2B8F0034;
+1327 : 2B900030;
+1328 : 2B91002C;
+1329 : 2B920028;
+132a : 2B930024;
+132b : 2B940020;
+132c : 2B95001C;
+132d : 2B960018;
+132e : 2B970014;
+132f : 2B980010;
+1330 : 2B99000C;
+1331 : 2B9B0008;
+1332 : 379C0044;
+1333 : C3A00000;
+1334 : 78010000;
+1335 : 38219474;
+1336 : 28220000;
+1337 : 78030000;
+1338 : 78010000;
+1339 : 3821946C;
+133a : 386381EC;
+133b : 58220000;
+133c : 28610000;
+133d : 58410000;
+133e : C3A00000;
+133f : 379CFFD4;
+1340 : 5B8B0028;
+1341 : 5B8C0024;
+1342 : 5B8D0020;
+1343 : 5B8E001C;
+1344 : 5B8F0018;
+1345 : 5B900014;
+1346 : 5B910010;
+1347 : 5B92000C;
+1348 : 5B930008;
+1349 : 5B9D0004;
+134a : B8205800;
+134b : B8408000;
+134c : B8609000;
+134d : FBFFED25;
+134e : 78010000;
+134f : 38219760;
+1350 : 28240000;
+1351 : 78010000;
+1352 : 38219458;
+1353 : 58240000;
+1354 : 78010000;
+1355 : 28850000;
+1356 : 38219474;
+1357 : 28210000;
+1358 : 78020000;
+1359 : 3842946C;
+135a : 00A60010;
+135b : 58410000;
+135c : 78020000;
+135d : 38429738;
+135e : 20C6003F;
+135f : 00A50018;
+1360 : 58460000;
+1361 : 78020000;
+1362 : 38429730;
+1363 : 20A50007;
+1364 : 58450000;
+1365 : 78050000;
+1366 : 38A59478;
+1367 : 58AB0000;
+1368 : 58A0000C;
+1369 : 58800040;
+136a : 58800044;
+136b : 58800000;
+136c : 58800028;
+136d : 58800024;
+136e : 58800004;
+136f : 78030000;
+1370 : 58800020;
+1371 : 340203E8;
+1372 : 3863819C;
+1373 : 58820048;
+1374 : 28620000;
+1375 : 5820001C;
+1376 : 58220000;
+1377 : 34010004;
+1378 : 5D610004;
+1379 : 34010007;
+137a : 58A10004;
+137b : E0000006;
+137c : 34010009;
+137d : 58A10004;
+137e : 34010003;
+137f : 5D610002;
+1380 : BA003000;
+1381 : 78010000;
+1382 : B8C01000;
+1383 : 38219490;
+1384 : 780D0000;
+1385 : FBFFFCCC;
+1386 : 39AD9738;
+1387 : 29A30000;
+1388 : 78010000;
+1389 : 38219500;
+138a : BA001000;
+138b : 780F0000;
+138c : 780E0000;
+138d : FBFFFD47;
+138e : 340C0000;
+138f : 39EF9730;
+1390 : 39CE9478;
+1391 : 34130001;
+1392 : E000000C;
+1393 : 0991007C;
+1394 : 29A40000;
+1395 : BA001000;
+1396 : B5D10800;
+1397 : 34840001;
+1398 : B48C1800;
+1399 : 34210104;
+139a : B5D18800;
+139b : FBFFFD39;
+139c : 358C0001;
+139d : 5A3300FC;
+139e : 29E10000;
+139f : 3421FFFF;
+13a0 : 482CFFF3;
+13a1 : 34010002;
+13a2 : 5D610006;
+13a3 : 78010000;
+13a4 : 3821946C;
+13a5 : 28210000;
+13a6 : 3402000C;
+13a7 : 5822001C;
+13a8 : 780E0000;
+13a9 : 780D0000;
+13aa : 340C0000;
+13ab : 39CE9738;
+13ac : 39AD9478;
+13ad : E0000008;
+13ae : 3D810005;
+13af : B9801000;
+13b0 : B5A10800;
+13b1 : 342101F4;
+13b2 : 34030200;
+13b3 : FBFFFE15;
+13b4 : 358C0001;
+13b5 : 29C20000;
+13b6 : 484CFFF8;
+13b7 : 34010001;
+13b8 : 5D610017;
+13b9 : 78010000;
+13ba : 38219458;
+13bb : 28210000;
+13bc : 28210004;
+13bd : 20210002;
+13be : 44200021;
+13bf : 78010000;
+13c0 : 78040000;
+13c1 : 38219478;
+13c2 : 38849490;
+13c3 : 58240068;
+13c4 : 78040000;
+13c5 : 38849500;
+13c6 : 5824006C;
+13c7 : 78010000;
+13c8 : 38219730;
+13c9 : 28240000;
+13ca : 78010000;
+13cb : 382194E0;
+13cc : B4441000;
+13cd : BA401800;
+13ce : FBFFFC18;
+13cf : 78010000;
+13d0 : 38219458;
+13d1 : 28210000;
+13d2 : 78020002;
+13d3 : E0000003;
+13d4 : 2823007C;
+13d5 : 5B83002C;
+13d6 : 28230080;
+13d7 : A0621800;
+13d8 : 4460FFFC;
+13d9 : 34020001;
+13da : 58220064;
+13db : 28220028;
+13dc : 38420001;
+13dd : 58220028;
+13de : FBFFEC9D;
+13df : 2B9D0004;
+13e0 : 2B8B0028;
+13e1 : 2B8C0024;
+13e2 : 2B8D0020;
+13e3 : 2B8E001C;
+13e4 : 2B8F0018;
+13e5 : 2B900014;
+13e6 : 2B910010;
+13e7 : 2B92000C;
+13e8 : 2B930008;
+13e9 : 379C002C;
+13ea : C3A00000;
+13eb : 78020000;
+13ec : B8201800;
+13ed : 38429478;
+13ee : 5C200004;
+13ef : 28410004;
+13f0 : 64210008;
+13f1 : C3A00000;
+13f2 : 28450004;
+13f3 : 34040008;
+13f4 : 34010000;
+13f5 : 5CA40006;
+13f6 : 3463FFFF;
+13f7 : 0863007C;
+13f8 : B4431000;
+13f9 : 2841013C;
+13fa : 7C210000;
+13fb : C3A00000;
+13fc : 379CFFE8;
+13fd : 5B8B0018;
+13fe : 5B8C0014;
+13ff : 5B8D0010;
+1400 : 5B8E000C;
+1401 : 5B8F0008;
+1402 : 5B9D0004;
+1403 : 3403FFFF;
+1404 : B8407800;
+1405 : 5C230016;
+1406 : 34010000;
+1407 : 780C0000;
+1408 : 780D0000;
+1409 : FBFFFE32;
+140a : 340B0000;
+140b : 398C9730;
+140c : 39AD9478;
+140d : 340E0004;
+140e : E0000009;
+140f : 0961007C;
+1410 : B5A10800;
+1411 : 282100FC;
+1412 : 5C2E0004;
+1413 : 35610001;
+1414 : B9E01000;
+1415 : FBFFFE26;
+1416 : 356B0001;
+1417 : 29810000;
+1418 : 3421FFFF;
+1419 : 482BFFF6;
+141a : E0000002;
+141b : FBFFFE20;
+141c : 2B9D0004;
+141d : 2B8B0018;
+141e : 2B8C0014;
+141f : 2B8D0010;
+1420 : 2B8E000C;
+1421 : 2B8F0008;
+1422 : 379C0018;
+1423 : C3A00000;
+1424 : 379CFFF0;
+1425 : 5B8B0010;
+1426 : 5B8C000C;
+1427 : 5B8D0008;
+1428 : 5B9D0004;
+1429 : B8205800;
+142a : B8406800;
+142b : 78010000;
+142c : 3D620005;
+142d : 38219478;
+142e : B4220800;
+142f : 2824020C;
+1430 : B8606000;
+1431 : 4C800003;
+1432 : 34844000;
+1433 : E0000004;
+1434 : 34013FFF;
+1435 : 4C240002;
+1436 : 3484C000;
+1437 : 3C840001;
+1438 : 34010000;
+1439 : 20823FFE;
+143a : 34030000;
+143b : 34041F40;
+143c : F80001B2;
+143d : 3C210012;
+143e : 0044000E;
+143f : B8242000;
+1440 : 59A40000;
+1441 : 4580000C;
+1442 : 78010000;
+1443 : 3821943C;
+1444 : 28220000;
+1445 : 3D630005;
+1446 : 78010000;
+1447 : 38219478;
+1448 : B4230800;
+1449 : 282101F8;
+144a : 94410800;
+144b : 20210001;
+144c : 59810000;
+144d : 3D6B0005;
+144e : 78020000;
+144f : 38429478;
+1450 : B44B1000;
+1451 : 28410210;
+1452 : 2B9D0004;
+1453 : 2B8B0010;
+1454 : 2B8C000C;
+1455 : 2B8D0008;
+1456 : 379C0010;
+1457 : C3A00000;
+1458 : 379CFFFC;
+1459 : 5B9D0004;
+145a : 5C200004;
+145b : 78010000;
+145c : 38219500;
+145d : E0000007;
+145e : 3421FFFF;
+145f : 0821007C;
+1460 : 78020000;
+1461 : 38429478;
+1462 : B4220800;
+1463 : 34210104;
+1464 : FBFFFD60;
+1465 : 2B9D0004;
+1466 : 379C0004;
+1467 : C3A00000;
+1468 : 379CFFF0;
+1469 : 5B8B0010;
+146a : 5B8C000C;
+146b : 5B8D0008;
+146c : 5B9D0004;
+146d : 780D0000;
+146e : 780B0000;
+146f : B8206000;
+1470 : 39AD9478;
+1471 : 396B943C;
+1472 : 4440000D;
+1473 : 34020001;
+1474 : FBFFFB4B;
+1475 : 3D810005;
+1476 : B5A16800;
+1477 : 35A101F4;
+1478 : FBFFFD57;
+1479 : 29610000;
+147a : 34020001;
+147b : BC4C6000;
+147c : B9816000;
+147d : 596C0000;
+147e : E000000A;
+147f : 34030001;
+1480 : 29640000;
+1481 : BC611800;
+1482 : A4601800;
+1483 : A0641800;
+1484 : 59630000;
+1485 : 29A300E8;
+1486 : 44230002;
+1487 : FBFFFB38;
+1488 : 2B9D0004;
+1489 : 2B8B0010;
+148a : 2B8C000C;
+148b : 2B8D0008;
+148c : 379C0010;
+148d : C3A00000;
+148e : 379CFFF8;
+148f : 5B8B0008;
+1490 : 5B9D0004;
+1491 : 28240014;
+1492 : B8201800;
+1493 : B8403000;
+1494 : 44800015;
+1495 : 28250010;
+1496 : 20A50002;
+1497 : 5CA00007;
+1498 : B4862000;
+1499 : B8800800;
+149a : 2B9D0004;
+149b : 2B8B0008;
+149c : 379C0008;
+149d : C3A00000;
+149e : 346B0030;
+149f : B4861000;
+14a0 : B9600800;
+14a1 : 34030040;
+14a2 : F80001D1;
+14a3 : B9602000;
+14a4 : B8800800;
+14a5 : 2B9D0004;
+14a6 : 2B8B0008;
+14a7 : 379C0008;
+14a8 : C3A00000;
+14a9 : 28250010;
+14aa : 20A70004;
+14ab : 5CE4FFEB;
+14ac : 2825001C;
+14ad : 34040000;
+14ae : 44A7FFEB;
+14af : 342B0030;
+14b0 : 34040040;
+14b1 : B9601800;
+14b2 : D8A00000;
+14b3 : B9602000;
+14b4 : E3FFFFF0;
+14b5 : 379CFFF0;
+14b6 : 5B8B0010;
+14b7 : 5B8C000C;
+14b8 : 5B8D0008;
+14b9 : 5B9D0004;
+14ba : B8205800;
+14bb : 44400047;
+14bc : 2822000C;
+14bd : 58200080;
+14be : 582000B0;
+14bf : 58220090;
+14c0 : 340C0000;
+14c1 : B9600800;
+14c2 : FBFFFFCC;
+14c3 : 59610028;
+14c4 : 4022003F;
+14c5 : 5C400006;
+14c6 : 78040000;
+14c7 : 388481B0;
+14c8 : 28230000;
+14c9 : 28820000;
+14ca : 4462005D;
+14cb : 34010000;
+14cc : 45800030;
+14cd : 3583FFFF;
+14ce : 346C0028;
+14cf : B58C0800;
+14d0 : B4210800;
+14d1 : B5610800;
+14d2 : 28220000;
+14d3 : 5C40000F;
+14d4 : 34010000;
+14d5 : 44620027;
+14d6 : 34620027;
+14d7 : B4421000;
+14d8 : B4421000;
+14d9 : B5621000;
+14da : E0000002;
+14db : 44610044;
+14dc : 28410000;
+14dd : 3463FFFF;
+14de : 3442FFFC;
+14df : 4420FFFC;
+14e0 : 596300B0;
+14e1 : 346C0028;
+14e2 : 346D0024;
+14e3 : B5AD6800;
+14e4 : B5AD6800;
+14e5 : B56D6800;
+14e6 : 29A20000;
+14e7 : B9600800;
+14e8 : B58C6000;
+14e9 : FBFFFFA5;
+14ea : B58C6000;
+14eb : B56C1000;
+14ec : 29A40000;
+14ed : 28430000;
+14ee : 296C00B0;
+14ef : 34840040;
+14f0 : 3463FFFF;
+14f1 : 59610028;
+14f2 : 59A40000;
+14f3 : 58430000;
+14f4 : 35830020;
+14f5 : B4631800;
+14f6 : B4631800;
+14f7 : B5631800;
+14f8 : 2824000C;
+14f9 : 28620000;
+14fa : B4441000;
+14fb : 59620074;
+14fc : 2B9D0004;
+14fd : 2B8B0010;
+14fe : 2B8C000C;
+14ff : 2B8D0008;
+1500 : 379C0010;
+1501 : C3A00000;
+1502 : 28210028;
+1503 : 296300B0;
+1504 : 34050002;
+1505 : 4024003F;
+1506 : ECA32800;
+1507 : 64840002;
+1508 : A0852000;
+1509 : 4482FFC5;
+150a : 34620020;
+150b : B4421000;
+150c : B4421000;
+150d : B5621000;
+150e : 28450000;
+150f : 34640025;
+1510 : 28220004;
+1511 : B4842000;
+1512 : B4842000;
+1513 : B4A21000;
+1514 : B5642000;
+1515 : 58820000;
+1516 : 2824000C;
+1517 : 34610021;
+1518 : B4210800;
+1519 : B4210800;
+151a : B5610800;
+151b : B4852800;
+151c : 346C0001;
+151d : 58250000;
+151e : E3FFFFA3;
+151f : 34010000;
+1520 : 596000B0;
+1521 : 2B9D0004;
+1522 : 2B8B0010;
+1523 : 2B8C000C;
+1524 : 2B8D0008;
+1525 : 379C0010;
+1526 : C3A00000;
+1527 : 35820024;
+1528 : B4421000;
+1529 : B4421000;
+152a : B5621800;
+152b : 2C250004;
+152c : 28640000;
+152d : 35820028;
+152e : B4421000;
+152f : B4421000;
+1530 : B5621000;
+1531 : 34A5FFFF;
+1532 : 34840040;
+1533 : 58450000;
+1534 : 58640000;
+1535 : 596C00B0;
+1536 : E3FFFFBE;
+1537 : 379CFFEC;
+1538 : 5B8B0014;
+1539 : 5B8C0010;
+153a : 5B8D000C;
+153b : 5B8E0008;
+153c : 5B9D0004;
+153d : B8406000;
+153e : 34020001;
+153f : B8205800;
+1540 : B8607000;
+1541 : B8806800;
+1542 : FBFFFF73;
+1543 : B9600800;
+1544 : 34020000;
+1545 : FBFFFF70;
+1546 : B8202800;
+1547 : 4420001E;
+1548 : 28A10018;
+1549 : 5C2CFFFA;
+154a : 28A1001C;
+154b : 5C2EFFF8;
+154c : 28A10020;
+154d : 5C2DFFF6;
+154e : 296100B0;
+154f : 59650028;
+1550 : 28A2000C;
+1551 : 34210020;
+1552 : B4210800;
+1553 : B4210800;
+1554 : B5610800;
+1555 : 28230000;
+1556 : 34010000;
+1557 : B4431800;
+1558 : 59630074;
+1559 : 28A30014;
+155a : 59600078;
+155b : 34630001;
+155c : C8621000;
+155d : 59620070;
+155e : 2B9D0004;
+155f : 2B8B0014;
+1560 : 2B8C0010;
+1561 : 2B8D000C;
+1562 : 2B8E0008;
+1563 : 379C0014;
+1564 : C3A00000;
+1565 : 3401FFFE;
+1566 : E3FFFFF8;
+1567 : 58200028;
+1568 : 34010000;
+1569 : C3A00000;
+156a : 379CFFF0;
+156b : 5B8B0010;
+156c : 5B8C000C;
+156d : 5B8D0008;
+156e : 5B9D0004;
+156f : 28250028;
+1570 : B8205800;
+1571 : B8406000;
+1572 : B8806800;
+1573 : 3401FFFE;
+1574 : 44A00012;
+1575 : 4C400002;
+1576 : 296C0078;
+1577 : 29610070;
+1578 : B58D1000;
+1579 : 54410013;
+157a : 29640014;
+157b : 44800014;
+157c : 29620074;
+157d : B8600800;
+157e : B9A01800;
+157f : B5821000;
+1580 : B4821000;
+1581 : F80000F2;
+1582 : B9A00800;
+1583 : 4C010003;
+1584 : B42C6000;
+1585 : 596C0078;
+1586 : 2B9D0004;
+1587 : 2B8B0010;
+1588 : 2B8C000C;
+1589 : 2B8D0008;
+158a : 379C0010;
+158b : C3A00000;
+158c : 29640014;
+158d : C82C6800;
+158e : 5C80FFEE;
+158f : 29620074;
+1590 : 2965001C;
+1591 : B9600800;
+1592 : B5821000;
+1593 : B9A02000;
+1594 : D8A00000;
+1595 : E3FFFFEE;
+1596 : 379CFFF0;
+1597 : 5B8B0010;
+1598 : 5B8C000C;
+1599 : 5B8D0008;
+159a : 5B9D0004;
+159b : 28250028;
+159c : B8205800;
+159d : B8406000;
+159e : B8806800;
+159f : 3401FFFE;
+15a0 : 44A00012;
+15a1 : 4C400002;
+15a2 : 296C0078;
+15a3 : 29610070;
+15a4 : B58D1000;
+15a5 : 54410013;
+15a6 : 29640014;
+15a7 : 44800014;
+15a8 : 29610074;
+15a9 : B8601000;
+15aa : B9A01800;
+15ab : B5810800;
+15ac : B4810800;
+15ad : F80000C6;
+15ae : B9A00800;
+15af : 4C010003;
+15b0 : B42C6000;
+15b1 : 596C0078;
+15b2 : 2B9D0004;
+15b3 : 2B8B0010;
+15b4 : 2B8C000C;
+15b5 : 2B8D0008;
+15b6 : 379C0010;
+15b7 : C3A00000;
+15b8 : 29640014;
+15b9 : C82C6800;
+15ba : 5C80FFEE;
+15bb : 29620074;
+15bc : 29650020;
+15bd : B9600800;
+15be : B5821000;
+15bf : B9A02000;
+15c0 : D8A00000;
+15c1 : E3FFFFEE;
+15c2 : 379CFFF0;
+15c3 : 5B8B0010;
+15c4 : 5B8C000C;
+15c5 : 5B8D0008;
+15c6 : 5B9D0004;
+15c7 : 28240028;
+15c8 : B8205800;
+15c9 : B8406000;
+15ca : B8606800;
+15cb : 3401FFFE;
+15cc : 44800012;
+15cd : 4C400002;
+15ce : 296C0078;
+15cf : 29610070;
+15d0 : B58D1000;
+15d1 : 54410013;
+15d2 : 29640014;
+15d3 : 44800014;
+15d4 : 29610074;
+15d5 : 340200FF;
+15d6 : B9A01800;
+15d7 : B5810800;
+15d8 : B4810800;
+15d9 : F80000D3;
+15da : B9A00800;
+15db : 4C010003;
+15dc : B42C6000;
+15dd : 596C0078;
+15de : 2B9D0004;
+15df : 2B8B0010;
+15e0 : 2B8C000C;
+15e1 : 2B8D0008;
+15e2 : 379C0010;
+15e3 : C3A00000;
+15e4 : 29640014;
+15e5 : C82C6800;
+15e6 : 5C80FFEE;
+15e7 : 29620074;
+15e8 : 29640024;
+15e9 : B9600800;
+15ea : B5821000;
+15eb : B9A01800;
+15ec : D8800000;
+15ed : E3FFFFEE;
+15ee : 2045FFFF;
+15ef : 00460010;
+15f0 : 2088FFFF;
+15f1 : 00890010;
+15f2 : 89053800;
+15f3 : 89064000;
+15f4 : 89252800;
+15f5 : 00EA0010;
+15f6 : 89263000;
+15f7 : B5052800;
+15f8 : B4AA2800;
+15f9 : 50A80003;
+15fa : 78080001;
+15fb : B4C83000;
+15fc : 88431000;
+15fd : 88812000;
+15fe : 00A10010;
+15ff : 3CA50010;
+1600 : B4C13000;
+1601 : 20E7FFFF;
+1602 : B4440800;
+1603 : B4260800;
+1604 : B4A71000;
+1605 : C3A00000;
+1606 : 379CFFF8;
+1607 : 5B8B0008;
+1608 : 5B9D0004;
+1609 : 44400022;
+160a : B8412000;
+160b : 3403000F;
+160c : 5483000B;
+160d : 78030000;
+160e : 3863832C;
+160f : 3C210004;
+1610 : B4621000;
+1611 : B4410800;
+1612 : 40210000;
+1613 : 2B9D0004;
+1614 : 2B8B0008;
+1615 : 379C0008;
+1616 : C3A00000;
+1617 : 340B0000;
+1618 : 4C200003;
+1619 : C8010800;
+161a : 340B0001;
+161b : 4C400003;
+161c : C8021000;
+161d : 196B0001;
+161e : 90C01800;
+161f : 20630002;
+1620 : 44600008;
+1621 : 8C220800;
+1622 : 45600002;
+1623 : C8010800;
+1624 : 2B9D0004;
+1625 : 2B8B0008;
+1626 : 379C0008;
+1627 : C3A00000;
+1628 : 34030000;
+1629 : F800002A;
+162a : E3FFFFF8;
+162b : 90000800;
+162c : 20210001;
+162d : 3C210001;
+162e : D0010000;
+162f : 90E00800;
+1630 : BBA0F000;
+1631 : 342100A0;
+1632 : C0200000;
+1633 : 379CFFFC;
+1634 : 5B9D0004;
+1635 : 44400006;
+1636 : 34030000;
+1637 : F800001C;
+1638 : 2B9D0004;
+1639 : 379C0004;
+163a : C3A00000;
+163b : 90000800;
+163c : 20210001;
+163d : 3C210001;
+163e : D0010000;
+163f : 90E00800;
+1640 : BBA0F000;
+1641 : 342100A0;
+1642 : C0200000;
+1643 : 379CFFFC;
+1644 : 5B9D0004;
+1645 : 44400006;
+1646 : 34030001;
+1647 : F800000C;
+1648 : 2B9D0004;
+1649 : 379C0004;
+164a : C3A00000;
+164b : 90000800;
+164c : 20210001;
+164d : 3C210001;
+164e : D0010000;
+164f : 90E00800;
+1650 : BBA0F000;
+1651 : 342100A0;
+1652 : C0200000;
+1653 : F4222000;
+1654 : 44800018;
+1655 : 34040001;
+1656 : 4C40000B;
+1657 : 34050000;
+1658 : 54410003;
+1659 : C8220800;
+165a : B8A42800;
+165b : 00840001;
+165c : 00420001;
+165d : 5C80FFFB;
+165e : 5C600002;
+165f : B8A00800;
+1660 : C3A00000;
+1661 : 3C420001;
+1662 : 3C840001;
+1663 : F4222800;
+1664 : 7C860000;
+1665 : A0C52800;
+1666 : 44A00002;
+1667 : 4C40FFFA;
+1668 : 34050000;
+1669 : 4480FFF5;
+166a : 34050000;
+166b : E3FFFFED;
+166c : 34040001;
+166d : 34050000;
+166e : E3FFFFEA;
+166f : 1422001F;
+1670 : 98410800;
+1671 : C8220800;
+1672 : C3A00000;
+1673 : 3404000F;
+1674 : B8203800;
+1675 : B8403000;
+1676 : 5083002D;
+1677 : B8412000;
+1678 : 20840003;
+1679 : 5C80002B;
+167a : B8402000;
+167b : B8202800;
+167c : B8603000;
+167d : 3407000F;
+167e : 28880000;
+167f : 34C6FFF0;
+1680 : 58A80000;
+1681 : 28880004;
+1682 : 58A80004;
+1683 : 28880008;
+1684 : 58A80008;
+1685 : 2888000C;
+1686 : 34840010;
+1687 : 58A8000C;
+1688 : 34A50010;
+1689 : 54C7FFF5;
+168a : 3463FFF0;
+168b : 00660004;
+168c : 2063000F;
+168d : 34C60001;
+168e : 3CC60004;
+168f : B4263800;
+1690 : B4463000;
+1691 : 34020003;
+1692 : 50430011;
+1693 : 34020000;
+1694 : 34080003;
+1695 : B4C22000;
+1696 : 28850000;
+1697 : B4E22000;
+1698 : 34420004;
+1699 : 58850000;
+169a : C8622000;
+169b : 5488FFFA;
+169c : 3463FFFC;
+169d : 00620002;
+169e : 20630003;
+169f : 34420001;
+16a0 : 3C420002;
+16a1 : B4E23800;
+16a2 : B4C23000;
+16a3 : 44600008;
+16a4 : 34020000;
+16a5 : B4C22000;
+16a6 : 40850000;
+16a7 : B4E22000;
+16a8 : 34420001;
+16a9 : 30850000;
+16aa : 5C43FFFB;
+16ab : C3A00000;
+16ac : 20250003;
+16ad : B8202000;
+16ae : 44A0000B;
+16af : 4460002C;
+16b0 : 3463FFFF;
+16b1 : 204600FF;
+16b2 : E0000003;
+16b3 : 44600028;
+16b4 : 3463FFFF;
+16b5 : 30860000;
+16b6 : 34840001;
+16b7 : 20850003;
+16b8 : 5CA0FFFB;
+16b9 : 34050003;
+16ba : 50A3001A;
+16bb : 204500FF;
+16bc : 3CA60008;
+16bd : 340A000F;
+16be : B8C52800;
+16bf : 3CA60010;
+16c0 : B8804000;
+16c1 : B8C53000;
+16c2 : B8603800;
+16c3 : B8802800;
+16c4 : 3409000F;
+16c5 : 546A0017;
+16c6 : 34040000;
+16c7 : 34070003;
+16c8 : B5042800;
+16c9 : 34840004;
+16ca : 58A60000;
+16cb : C8642800;
+16cc : 54A7FFFC;
+16cd : 3463FFFC;
+16ce : 00640002;
+16cf : 20630003;
+16d0 : 34840001;
+16d1 : 3C840002;
+16d2 : B5044000;
+16d3 : B9002000;
+16d4 : 44600007;
+16d5 : 204200FF;
+16d6 : 34050000;
+16d7 : B4853000;
+16d8 : 30C20000;
+16d9 : 34A50001;
+16da : 5C65FFFD;
+16db : C3A00000;
+16dc : 58A60000;
+16dd : 58A60004;
+16de : 58A60008;
+16df : 58A6000C;
+16e0 : 34E7FFF0;
+16e1 : 34A50010;
+16e2 : 54E9FFFA;
+16e3 : 3463FFF0;
+16e4 : 00680004;
+16e5 : 2063000F;
+16e6 : 35080001;
+16e7 : 3D080004;
+16e8 : B4884000;
+16e9 : 34040003;
+16ea : 5464FFDC;
+16eb : B9002000;
+16ec : E3FFFFE8;
+16ed : 57522043;
+16ee : 6F72653A;
+16ef : 20737461;
+16f0 : 7274696E;
+16f1 : 67207570;
+16f2 : 2E2E2E0A;
+16f3 : 00000000;
+16f4 : 556E6162;
+16f5 : 6C652074;
+16f6 : 6F206465;
+16f7 : 7465726D;
+16f8 : 696E6520;
+16f9 : 4D414320;
+16fa : 61646472;
+16fb : 6573730A;
+16fc : 00000000;
+16fd : 4C6F6361;
+16fe : 6C204D41;
+16ff : 43206164;
+1700 : 64726573;
+1701 : 733A2025;
+1702 : 3032783A;
+1703 : 25303278;
+1704 : 3A253032;
+1705 : 783A2530;
+1706 : 32783A25;
+1707 : 3032783A;
+1708 : 25303278;
+1709 : 0A000000;
+170a : 4E657720;
+170b : 6D617820;
+170c : 72756E20;
+170d : 74696D65;
+170e : 20666F72;
+170f : 20612074;
+1710 : 61736B20;
+1711 : 25732C20;
+1712 : 6F6C6420;
+1713 : 256C642C;
+1714 : 206E6577;
+1715 : 2025640A;
+1716 : 00000000;
+1717 : 7461736B;
+1718 : 2025732C;
+1719 : 2072756E;
+171a : 20666F72;
+171b : 20256420;
+171c : 6D730A00;
+171d : 73706C6C;
+171e : 2D626800;
+171f : 7368656C;
+1720 : 6C2B6775;
+1721 : 69000000;
+1722 : 70747000;
+1723 : 75707469;
+1724 : 6D650000;
+1725 : 63686563;
+1726 : 6B2D6C69;
+1727 : 6E6B0000;
+1728 : 69646C65;
+1729 : 00000000;
+172a : 64696167;
+172b : 2D66736D;
+172c : 2D312D25;
+172d : 733A2025;
+172e : 3039642E;
+172f : 25303364;
+1730 : 3A200000;
+1731 : 454E5445;
+1732 : 52202573;
+1733 : 2C207061;
+1734 : 636B6574;
+1735 : 206C656E;
+1736 : 2025690A;
+1737 : 00000000;
+1738 : 25733A20;
+1739 : 7265656E;
+173a : 74657220;
+173b : 696E2025;
+173c : 69206D73;
+173d : 0A000000;
+173e : 4C454156;
+173f : 45202573;
+1740 : 20286E65;
+1741 : 78743A20;
+1742 : 25336929;
+1743 : 0A0A0000;
+1744 : 52454356;
+1745 : 20253032;
+1746 : 64206279;
+1747 : 74657320;
+1748 : 61742025;
+1749 : 39642E25;
+174a : 3039642E;
+174b : 25303364;
+174c : 20287479;
+174d : 70652025;
+174e : 782C2025;
+174f : 73290A00;
+1750 : 66736D3A;
+1751 : 20556E6B;
+1752 : 6E6F776E;
+1753 : 20737461;
+1754 : 74652066;
+1755 : 6F722070;
+1756 : 6F727420;
+1757 : 25730A00;
+1758 : 57726F6E;
+1759 : 6720646F;
+175a : 6D61696E;
+175b : 2025693A;
+175c : 20646973;
+175d : 63617264;
+175e : 0A000000;
+175f : 416C7465;
+1760 : 726E6174;
+1761 : 65206D61;
+1762 : 73746572;
+1763 : 3A206469;
+1764 : 73636172;
+1765 : 640A0000;
+1766 : 4C6F6F70;
+1767 : 696E6720;
+1768 : 6672616D;
+1769 : 653A2064;
+176a : 69736361;
+176b : 72640A00;
+176c : 66736D20;
+176d : 666F7220;
+176e : 25733A20;
+176f : 4572726F;
+1770 : 72202569;
+1771 : 20696E20;
+1772 : 25730A00;
+1773 : 70707369;
+1774 : 00000000;
+1775 : 25732D25;
+1776 : 692D2573;
+1777 : 3A200000;
+1778 : 25733A20;
+1779 : 6572726F;
+177a : 72207061;
+177b : 7273696E;
+177c : 67202225;
+177d : 73220A00;
+177e : 64696167;
+177f : 2D636F6E;
+1780 : 66696700;
+1781 : 64696167;
+1782 : 2D657874;
+1783 : 656E7369;
+1784 : 6F6E0000;
+1785 : 64696167;
+1786 : 2D626D63;
+1787 : 00000000;
+1788 : 64696167;
+1789 : 2D736572;
+178a : 766F0000;
+178b : 64696167;
+178c : 2D667261;
+178d : 6D657300;
+178e : 64696167;
+178f : 2D74696D;
+1790 : 65000000;
+1791 : 64696167;
+1792 : 2D66736D;
+1793 : 00000000;
+1794 : 6E657720;
+1795 : 74696D65;
+1796 : 6F757420;
+1797 : 666F7220;
+1798 : 25733A20;
+1799 : 25690A00;
+179a : 74696D65;
+179b : 6F757420;
+179c : 65787069;
+179d : 7265643A;
+179e : 2025730A;
+179f : 00000000;
+17a0 : 52455155;
+17a1 : 45535400;
+17a2 : 53594E43;
+17a3 : 5F53454E;
+17a4 : 44000000;
+17a5 : 414E4E5F;
+17a6 : 52454345;
+17a7 : 49505400;
+17a8 : 414E4E5F;
+17a9 : 53454E44;
+17aa : 00000000;
+17ab : 4641554C;
+17ac : 54000000;
+17ad : 5155414C;
+17ae : 00000000;
+17af : 73796E63;
+17b0 : 00000000;
+17b1 : 64656C61;
+17b2 : 795F7265;
+17b3 : 71000000;
+17b4 : 7064656C;
+17b5 : 61795F72;
+17b6 : 65710000;
+17b7 : 7064656C;
+17b8 : 61795F72;
+17b9 : 65737000;
+17ba : 64656C61;
+17bb : 795F7265;
+17bc : 73700000;
+17bd : 7064656C;
+17be : 61795F72;
+17bf : 6573705F;
+17c0 : 666F6C6C;
+17c1 : 6F775F75;
+17c2 : 70000000;
+17c3 : 616E6E6F;
+17c4 : 756E6365;
+17c5 : 00000000;
+17c6 : 7369676E;
+17c7 : 616C696E;
+17c8 : 67000000;
+17c9 : 6D616E61;
+17ca : 67656D65;
+17cb : 6E740000;
+17cc : 50505369;
+17cd : 20666F72;
+17ce : 20575250;
+17cf : 432E2043;
+17d0 : 6F6D6D69;
+17d1 : 74202573;
+17d2 : 2C206275;
+17d3 : 696C7420;
+17d4 : 6F6E2044;
+17d5 : 65632031;
+17d6 : 38203230;
+17d7 : 31370A00;
+17d8 : 70707369;
+17d9 : 2D763230;
+17da : 31362E31;
+17db : 322D3839;
+17dc : 2D676362;
+17dd : 35393334;
+17de : 65000000;
+17df : 50545020;
+17e0 : 73746172;
+17e1 : 740A0000;
+17e2 : 50545020;
+17e3 : 73746F70;
+17e4 : 0A000000;
+17e5 : 4C6F636B;
+17e6 : 696E6720;
+17e7 : 504C4C00;
+17e8 : 0A4C6F63;
+17e9 : 6B207469;
+17ea : 6D656F75;
+17eb : 742E0000;
+17ec : 2E000000;
+17ed : 77723100;
+17ee : 20696E76;
+17ef : 616C6964;
+17f0 : 00000000;
+17f1 : 25735449;
+17f2 : 4D453A20;
+17f3 : 28256C69;
+17f4 : 202D2030;
+17f5 : 78256C78;
+17f6 : 2920256C;
+17f7 : 692E2530;
+17f8 : 366C6925;
+17f9 : 730A0000;
+17fa : 25732573;
+17fb : 25303278;
+17fc : 2D253032;
+17fd : 782D2530;
+17fe : 32782D25;
+17ff : 3032782D;
+1800 : 25303278;
+1801 : 2D253032;
+1802 : 782D2530;
+1803 : 32782D25;
+1804 : 3032782D;
+1805 : 25303278;
+1806 : 2D253032;
+1807 : 780A0000;
+1808 : 25732573;
+1809 : 25732028;
+180a : 73697A65;
+180b : 20256929;
+180c : 0A000000;
+180d : 25732573;
+180e : 00000000;
+180f : 25303278;
+1810 : 00000000;
+1811 : 25735645;
+1812 : 5253494F;
+1813 : 4E3A2075;
+1814 : 6E737570;
+1815 : 706F7274;
+1816 : 65642028;
+1817 : 2569290A;
+1818 : 00000000;
+1819 : 25735645;
+181a : 5253494F;
+181b : 4E3A2025;
+181c : 69202874;
+181d : 79706520;
+181e : 25692C20;
+181f : 6C656E20;
+1820 : 25692C20;
+1821 : 646F6D61;
+1822 : 696E2025;
+1823 : 69290A00;
+1824 : 2573464C;
+1825 : 4147533A;
+1826 : 20307825;
+1827 : 30347820;
+1828 : 28636F72;
+1829 : 72656374;
+182a : 696F6E20;
+182b : 30782530;
+182c : 38783A25;
+182d : 30387820;
+182e : 25303875;
+182f : 290A0000;
+1830 : 504F5254;
+1831 : 3A200000;
+1832 : 25735245;
+1833 : 53543A20;
+1834 : 73657120;
+1835 : 25692C20;
+1836 : 6374726C;
+1837 : 2025692C;
+1838 : 206C6F67;
+1839 : 2D696E74;
+183a : 65727661;
+183b : 6C202569;
+183c : 0A000000;
+183d : 25734D45;
+183e : 53534147;
+183f : 453A2028;
+1840 : 45292053;
+1841 : 594E430A;
+1842 : 00000000;
+1843 : 25732573;
+1844 : 256C752E;
+1845 : 25303969;
+1846 : 0A000000;
+1847 : 4D53472D;
+1848 : 53594E43;
+1849 : 3A200000;
+184a : 25734D45;
+184b : 53534147;
+184c : 453A2028;
+184d : 45292044;
+184e : 454C4159;
+184f : 5F524551;
+1850 : 0A000000;
+1851 : 4D53472D;
+1852 : 44454C41;
+1853 : 595F5245;
+1854 : 513A2000;
+1855 : 25734D45;
+1856 : 53534147;
+1857 : 453A2028;
+1858 : 47292046;
+1859 : 4F4C4C4F;
+185a : 575F5550;
+185b : 0A000000;
+185c : 4D53472D;
+185d : 464F4C4C;
+185e : 4F575F55;
+185f : 503A2000;
+1860 : 25734D45;
+1861 : 53534147;
+1862 : 453A2028;
+1863 : 47292044;
+1864 : 454C4159;
+1865 : 5F524553;
+1866 : 500A0000;
+1867 : 4D53472D;
+1868 : 44454C41;
+1869 : 595F5245;
+186a : 53503A20;
+186b : 00000000;
+186c : 25734D45;
+186d : 53534147;
+186e : 453A2028;
+186f : 47292041;
+1870 : 4E4E4F55;
+1871 : 4E43450A;
+1872 : 00000000;
+1873 : 4D53472D;
+1874 : 414E4E4F;
+1875 : 554E4345;
+1876 : 3A207374;
+1877 : 616D7020;
+1878 : 00000000;
+1879 : 25732573;
+187a : 25303278;
+187b : 2D253032;
+187c : 782D2530;
+187d : 34780A00;
+187e : 4D53472D;
+187f : 414E4E4F;
+1880 : 554E4345;
+1881 : 3A206772;
+1882 : 616E646D;
+1883 : 61737465;
+1884 : 722D7175;
+1885 : 616C6974;
+1886 : 79200000;
+1887 : 25734D53;
+1888 : 472D414E;
+1889 : 4E4F554E;
+188a : 43453A20;
+188b : 6772616E;
+188c : 646D6173;
+188d : 7465722D;
+188e : 7072696F;
+188f : 20256920;
+1890 : 25690A00;
+1891 : 25732573;
+1892 : 25303278;
+1893 : 2D253032;
+1894 : 782D2530;
+1895 : 32782D25;
+1896 : 3032782D;
+1897 : 25303278;
+1898 : 2D253032;
+1899 : 782D2530;
+189a : 32782D25;
+189b : 3032780A;
+189c : 00000000;
+189d : 4D53472D;
+189e : 414E4E4F;
+189f : 554E4345;
+18a0 : 3A206772;
+18a1 : 616E646D;
+18a2 : 61737465;
+18a3 : 722D6964;
+18a4 : 20000000;
+18a5 : 25734D45;
+18a6 : 53534147;
+18a7 : 453A2028;
+18a8 : 47292053;
+18a9 : 49474E41;
+18aa : 4C494E47;
+18ab : 0A000000;
+18ac : 4D53472D;
+18ad : 5349474E;
+18ae : 414C494E;
+18af : 473A2074;
+18b0 : 61726765;
+18b1 : 742D706F;
+18b2 : 72742000;
+18b3 : 2573544C;
+18b4 : 563A2074;
+18b5 : 6F6F2073;
+18b6 : 686F7274;
+18b7 : 20282569;
+18b8 : 202D2025;
+18b9 : 69203D20;
+18ba : 2569290A;
+18bb : 00000000;
+18bc : 2573544C;
+18bd : 563A2074;
+18be : 79706520;
+18bf : 25303478;
+18c0 : 206C656E;
+18c1 : 20256920;
+18c2 : 6F756920;
+18c3 : 25303278;
+18c4 : 3A253032;
+18c5 : 783A2530;
+18c6 : 32782073;
+18c7 : 75622025;
+18c8 : 3032783A;
+18c9 : 25303278;
+18ca : 3A253032;
+18cb : 780A0000;
+18cc : 2573544C;
+18cd : 563A2074;
+18ce : 6F6F2073;
+18cf : 686F7274;
+18d0 : 20286578;
+18d1 : 70656374;
+18d2 : 65642025;
+18d3 : 692C2074;
+18d4 : 6F74616C;
+18d5 : 20256929;
+18d6 : 0A000000;
+18d7 : 544C563A;
+18d8 : 20000000;
+18d9 : 746C762D;
+18da : 636F6E74;
+18db : 656E7400;
+18dc : 44554D50;
+18dd : 3A200000;
+18de : 7061796C;
+18df : 6F616400;
+18e0 : 2573564C;
+18e1 : 414E2025;
+18e2 : 690A0000;
+18e3 : 25734554;
+18e4 : 483A2025;
+18e5 : 30347820;
+18e6 : 28253032;
+18e7 : 783A2530;
+18e8 : 32783A25;
+18e9 : 3032783A;
+18ea : 25303278;
+18eb : 3A253032;
+18ec : 783A2530;
+18ed : 3278202D;
+18ee : 3E202530;
+18ef : 32783A25;
+18f0 : 3032783A;
+18f1 : 25303278;
+18f2 : 3A253032;
+18f3 : 783A2530;
+18f4 : 32783A25;
+18f5 : 30327829;
+18f6 : 0A000000;
+18f7 : 25734950;
+18f8 : 3A202569;
+18f9 : 20282569;
+18fa : 2E25692E;
+18fb : 25692E25;
+18fc : 69202D3E;
+18fd : 2025692E;
+18fe : 25692E25;
+18ff : 692E2569;
+1900 : 29206C65;
+1901 : 6E202569;
+1902 : 0A000000;
+1903 : 25735544;
+1904 : 503A2028;
+1905 : 2569202D;
+1906 : 3E202569;
+1907 : 29206C65;
+1908 : 6E202569;
+1909 : 0A000000;
+190a : 25733A20;
+190b : 256C690A;
+190c : 00000000;
+190d : 5761726E;
+190e : 696E673A;
+190f : 2025733A;
+1910 : 2063616E;
+1911 : 206E6F74;
+1912 : 2061646A;
+1913 : 75737420;
+1914 : 66726571;
+1915 : 5F707062;
+1916 : 20256C69;
+1917 : 0A000000;
+1918 : 25733A20;
+1919 : 25396C75;
+191a : 2E253039;
+191b : 6C690A00;
+191c : 25733A20;
+191d : 736E743D;
+191e : 25642C20;
+191f : 7365633D;
+1920 : 256C642C;
+1921 : 206E7365;
+1922 : 633D256C;
+1923 : 640A0000;
+1924 : 25303964;
+1925 : 20253039;
+1926 : 64202530;
+1927 : 33642000;
+1928 : 73656E64;
+1929 : 3A200000;
+192a : 72656376;
+192b : 3A200000;
+192c : 25303964;
+192d : 20253039;
+192e : 64202530;
+192f : 33640000;
+1930 : 20202025;
+1931 : 39642E25;
+1932 : 33640A00;
+1933 : 696E6974;
+1934 : 69616C69;
+1935 : 7A696E67;
+1936 : 00000000;
+1937 : 6661756C;
+1938 : 74790000;
+1939 : 64697361;
+193a : 626C6564;
+193b : 00000000;
+193c : 6C697374;
+193d : 656E696E;
+193e : 67000000;
+193f : 7072652D;
+1940 : 6D617374;
+1941 : 65720000;
+1942 : 70617373;
+1943 : 69766500;
+1944 : 756E6361;
+1945 : 6C696272;
+1946 : 61746564;
+1947 : 00000000;
+1948 : 736C6176;
+1949 : 65000000;
+194a : 756E6361;
+194b : 6C696272;
+194c : 61746564;
+194d : 2F77722D;
+194e : 70726573;
+194f : 656E7400;
+1950 : 6D617374;
+1951 : 65722F77;
+1952 : 722D6D2D;
+1953 : 6C6F636B;
+1954 : 00000000;
+1955 : 756E6361;
+1956 : 6C696272;
+1957 : 61746564;
+1958 : 2F77722D;
+1959 : 732D6C6F;
+195a : 636B0000;
+195b : 756E6361;
+195c : 6C696272;
+195d : 61746564;
+195e : 2F77722D;
+195f : 6C6F636B;
+1960 : 65640000;
+1961 : 77722D63;
+1962 : 616C6962;
+1963 : 72617469;
+1964 : 6F6E0000;
+1965 : 77722D63;
+1966 : 616C6962;
+1967 : 72617465;
+1968 : 64000000;
+1969 : 77722D72;
+196a : 6573702D;
+196b : 63616C69;
+196c : 622D7265;
+196d : 71000000;
+196e : 77722D6C;
+196f : 696E6B2D;
+1970 : 6F6E0000;
+1971 : 6162736F;
+1972 : 6C757465;
+1973 : 2D63616C;
+1974 : 69627261;
+1975 : 74696F6E;
+1976 : 00000000;
+1977 : 686F6F6B;
+1978 : 3A202573;
+1979 : 0A000000;
+197a : 5432206F;
+197b : 72205433;
+197c : 20696E63;
+197d : 6F727265;
+197e : 63742C20;
+197f : 64697363;
+1980 : 61726469;
+1981 : 6E672074;
+1982 : 75706C65;
+1983 : 0A000000;
+1984 : 5433206F;
+1985 : 72205436;
+1986 : 20696E63;
+1987 : 6F727265;
+1988 : 63742C20;
+1989 : 64697363;
+198a : 61726469;
+198b : 6E672074;
+198c : 75706C65;
+198d : 0A000000;
+198e : 48616E64;
+198f : 7368616B;
+1990 : 65206661;
+1991 : 696C7572;
+1992 : 653A206E;
+1993 : 6F77206E;
+1994 : 6F6E2D77;
+1995 : 72202573;
+1996 : 0A000000;
+1997 : 52657472;
+1998 : 79206F6E;
+1999 : 2074696D;
+199a : 656F7574;
+199b : 0A000000;
+199c : 25733A20;
+199d : 73756273;
+199e : 74617465;
+199f : 2025690A;
+19a0 : 00000000;
+19a1 : 54783D3E;
+19a2 : 3E736361;
+19a3 : 6C656450;
+19a4 : 69636F73;
+19a5 : 65636F6E;
+19a6 : 64732E6D;
+19a7 : 7362203D;
+19a8 : 20307825;
+19a9 : 780A0000;
+19aa : 54783D3E;
+19ab : 3E736361;
+19ac : 6C656450;
+19ad : 69636F73;
+19ae : 65636F6E;
+19af : 64732E6C;
+19b0 : 7362203D;
+19b1 : 20307825;
+19b2 : 780A0000;
+19b3 : 52782066;
+19b4 : 69786564;
+19b5 : 2064656C;
+19b6 : 6179203D;
+19b7 : 2025640A;
+19b8 : 00000000;
+19b9 : 52783D3E;
+19ba : 3E736361;
+19bb : 6C656450;
+19bc : 69636F73;
+19bd : 65636F6E;
+19be : 64732E6D;
+19bf : 7362203D;
+19c0 : 20307825;
+19c1 : 780A0000;
+19c2 : 52783D3E;
+19c3 : 3E736361;
+19c4 : 6C656450;
+19c5 : 69636F73;
+19c6 : 65636F6E;
+19c7 : 64732E6C;
+19c8 : 7362203D;
+19c9 : 20307825;
+19ca : 780A0000;
+19cb : 23232320;
+19cc : 74342E70;
+19cd : 68617365;
+19ce : 20697320;
+19cf : 616C7265;
+19d0 : 61647920;
+19d1 : 636F7272;
+19d2 : 65637465;
+19d3 : 6420666F;
+19d4 : 72206269;
+19d5 : 74736C69;
+19d6 : 64650A00;
+19d7 : 74313A20;
+19d8 : 20202020;
+19d9 : 20202020;
+19da : 20202020;
+19db : 20202020;
+19dc : 20202020;
+19dd : 74343A20;
+19de : 20202020;
+19df : 20202020;
+19e0 : 20202020;
+19e1 : 20202020;
+19e2 : 20626974;
+19e3 : 736C6964;
+19e4 : 653A2025;
+19e5 : 640A0000;
+19e6 : 20202020;
+19e7 : 20207365;
+19e8 : 632E2020;
+19e9 : 20202020;
+19ea : 206E732E;
+19eb : 70686120;
+19ec : 20202020;
+19ed : 20207365;
+19ee : 632E2020;
+19ef : 20202020;
+19f0 : 206E732E;
+19f1 : 7068610A;
+19f2 : 00000000;
+19f3 : 4552524F;
+19f4 : 523A204E;
+19f5 : 65772063;
+19f6 : 6C617373;
+19f7 : 2025690A;
+19f8 : 00000000;
+19f9 : 4255473A;
+19fa : 20547279;
+19fb : 696E6720;
+19fc : 746F2073;
+19fd : 656E6420;
+19fe : 696E7661;
+19ff : 6C696420;
+1a00 : 77725F6D;
+1a01 : 7367206D;
+1a02 : 6F64653D;
+1a03 : 25782069;
+1a04 : 643D2578;
+1a05 : 00000000;
+1a06 : 68616E64;
+1a07 : 6C652053;
+1a08 : 69676E61;
+1a09 : 6C696E67;
+1a0a : 206D7367;
+1a0b : 2C206661;
+1a0c : 696C6564;
+1a0d : 2C205468;
+1a0e : 69732069;
+1a0f : 73206E6F;
+1a10 : 74206F72;
+1a11 : 67616E69;
+1a12 : 7A617469;
+1a13 : 6F6E2065;
+1a14 : 7874656E;
+1a15 : 73696F6E;
+1a16 : 20544C56;
+1a17 : 203D2030;
+1a18 : 7825780A;
+1a19 : 00000000;
+1a1a : 68616E64;
+1a1b : 6C652053;
+1a1c : 69676E61;
+1a1d : 6C696E67;
+1a1e : 206D7367;
+1a1f : 2C206661;
+1a20 : 696C6564;
+1a21 : 2C206E6F;
+1a22 : 74204345;
+1a23 : 524E2773;
+1a24 : 204F5549;
+1a25 : 203D2030;
+1a26 : 7825780A;
+1a27 : 00000000;
+1a28 : 68616E64;
+1a29 : 6C652053;
+1a2a : 69676E61;
+1a2b : 6C696E67;
+1a2c : 206D7367;
+1a2d : 2C206661;
+1a2e : 696C6564;
+1a2f : 2C206E6F;
+1a30 : 74205768;
+1a31 : 69746520;
+1a32 : 52616262;
+1a33 : 6974206D;
+1a34 : 61676963;
+1a35 : 206E756D;
+1a36 : 62657220;
+1a37 : 3D203078;
+1a38 : 25780A00;
+1a39 : 68616E64;
+1a3a : 6C652053;
+1a3b : 69676E61;
+1a3c : 6C696E67;
+1a3d : 206D7367;
+1a3e : 2C206661;
+1a3f : 696C6564;
+1a40 : 2C206E6F;
+1a41 : 74207375;
+1a42 : 70706F72;
+1a43 : 74656420;
+1a44 : 76657273;
+1a45 : 696F6E20;
+1a46 : 6E756D62;
+1a47 : 6572203D;
+1a48 : 20307825;
+1a49 : 780A0000;
+1a4a : 2573203D;
+1a4b : 20256C64;
+1a4c : 3A253039;
+1a4d : 6C643A25;
+1a4e : 30336C64;
+1a4f : 0A000000;
+1a50 : 556E696E;
+1a51 : 69746961;
+1a52 : 6C697A65;
+1a53 : 64000000;
+1a54 : 4552524F;
+1a55 : 523A2025;
+1a56 : 733A2054;
+1a57 : 696D6573;
+1a58 : 74616D70;
+1a59 : 73496E63;
+1a5a : 6F727265;
+1a5b : 63743A20;
+1a5c : 25642025;
+1a5d : 64202564;
+1a5e : 2025640A;
+1a5f : 00000000;
+1a60 : 73657276;
+1a61 : 6F3A7431;
+1a62 : 00000000;
+1a63 : 73657276;
+1a64 : 6F3A7432;
+1a65 : 00000000;
+1a66 : 73657276;
+1a67 : 6F3A7433;
+1a68 : 00000000;
+1a69 : 73657276;
+1a6a : 6F3A7434;
+1a6b : 00000000;
+1a6c : 73657276;
+1a6d : 6F3A7435;
+1a6e : 00000000;
+1a6f : 73657276;
+1a70 : 6F3A7436;
+1a71 : 00000000;
+1a72 : 2D3E6D64;
+1a73 : 656C6179;
+1a74 : 00000000;
+1a75 : 4552524F;
+1a76 : 523A2025;
+1a77 : 733A2054;
+1a78 : 696D6573;
+1a79 : 74616D70;
+1a7a : 73496E63;
+1a7b : 6F727265;
+1a7c : 63743A20;
+1a7d : 25642025;
+1a7e : 64200A00;
+1a7f : 20287761;
+1a80 : 69742066;
+1a81 : 6F722068;
+1a82 : 77290000;
+1a83 : 6F666673;
+1a84 : 65745F68;
+1a85 : 773A2025;
+1a86 : 6C692E25;
+1a87 : 30396C69;
+1a88 : 20282B25;
+1a89 : 6C69290A;
+1a8a : 00000000;
+1a8b : 504C4C20;
+1a8c : 4F75744F;
+1a8d : 664C6F63;
+1a8e : 6B2C2073;
+1a8f : 686F756C;
+1a90 : 64207265;
+1a91 : 73746172;
+1a92 : 74207379;
+1a93 : 6E630A00;
+1a94 : 73657276;
+1a95 : 6F3A6275;
+1a96 : 73790A00;
+1a97 : 77725F73;
+1a98 : 6572766F;
+1a99 : 20737461;
+1a9a : 74653A20;
+1a9b : 25732573;
+1a9c : 0A000000;
+1a9d : 6F6C6473;
+1a9e : 65747020;
+1a9f : 25692C20;
+1aa0 : 6F666673;
+1aa1 : 65742025;
+1aa2 : 693A2530;
+1aa3 : 34690A00;
+1aa4 : 61646A75;
+1aa5 : 73742070;
+1aa6 : 68617365;
+1aa7 : 2025690A;
+1aa8 : 00000000;
+1aa9 : 53594E43;
+1aaa : 5F4E5345;
+1aab : 43000000;
+1aac : 53594E43;
+1aad : 5F534543;
+1aae : 00000000;
+1aaf : 53594E43;
+1ab0 : 5F504841;
+1ab1 : 53450000;
+1ab2 : 54524143;
+1ab3 : 4B5F5048;
+1ab4 : 41534500;
+1ab5 : 57414954;
+1ab6 : 5F4F4646;
+1ab7 : 5345545F;
+1ab8 : 53544142;
+1ab9 : 4C450000;
+1aba : 636F756C;
+1abb : 64206E6F;
+1abc : 74207365;
+1abd : 6E642073;
+1abe : 796E630A;
+1abf : 00000000;
+1ac0 : 636F756C;
+1ac1 : 64206E6F;
+1ac2 : 74207365;
+1ac3 : 6E642061;
+1ac4 : 6E6E6F75;
+1ac5 : 6E63650A;
+1ac6 : 00000000;
+1ac7 : 636F756C;
+1ac8 : 64206E6F;
+1ac9 : 74207365;
+1aca : 6E642072;
+1acb : 65717565;
+1acc : 73740A00;
+1acd : 4E657720;
+1ace : 666F7265;
+1acf : 69676E20;
+1ad0 : 4D617374;
+1ad1 : 65722025;
+1ad2 : 69206164;
+1ad3 : 6465640A;
+1ad4 : 00000000;
+1ad5 : 25733A20;
+1ad6 : 63616E27;
+1ad7 : 7420696E;
+1ad8 : 69742065;
+1ad9 : 7874656E;
+1ada : 73696F6E;
+1adb : 0A000000;
+1adc : 636C6F63;
+1add : 6B20636C;
+1ade : 61737320;
+1adf : 3D202564;
+1ae0 : 0A000000;
+1ae1 : 636C6F63;
+1ae2 : 6B206163;
+1ae3 : 63757261;
+1ae4 : 6379203D;
+1ae5 : 2025640A;
+1ae6 : 00000000;
+1ae7 : 49676E6F;
+1ae8 : 72656420;
+1ae9 : 6672616D;
+1aea : 65202569;
+1aeb : 0A000000;
+1aec : 70705F73;
+1aed : 6C617665;
+1aee : 203A2044;
+1aef : 656C6179;
+1af0 : 20526573;
+1af1 : 7020646F;
+1af2 : 65736E27;
+1af3 : 74206D61;
+1af4 : 74636820;
+1af5 : 44656C61;
+1af6 : 79205265;
+1af7 : 71202866;
+1af8 : 20257829;
+1af9 : 0A000000;
+1afa : 70705F70;
+1afb : 636C6F63;
+1afc : 6B203A20;
+1afd : 5044656C;
+1afe : 61792052;
+1aff : 65737020;
+1b00 : 646F6573;
+1b01 : 6E277420;
+1b02 : 6D617463;
+1b03 : 68205044;
+1b04 : 656C6179;
+1b05 : 20526571;
+1b06 : 0A000000;
+1b07 : 25733A20;
+1b08 : 5044656C;
+1b09 : 61792052;
+1b0a : 65737020;
+1b0b : 462D7570;
+1b0c : 20646F65;
+1b0d : 736E2774;
+1b0e : 206D6174;
+1b0f : 63682050;
+1b10 : 44656C61;
+1b11 : 79205265;
+1b12 : 710A0000;
+1b13 : 4552524F;
+1b14 : 523A2025;
+1b15 : 733A2046;
+1b16 : 6F6C6C6F;
+1b17 : 77207570;
+1b18 : 206D6573;
+1b19 : 73616765;
+1b1a : 20697320;
+1b1b : 6E6F7420;
+1b1c : 66726F6D;
+1b1d : 20637572;
+1b1e : 72656E74;
+1b1f : 20706172;
+1b20 : 656E740A;
+1b21 : 00000000;
+1b22 : 4552524F;
+1b23 : 523A2025;
+1b24 : 733A2053;
+1b25 : 6C617665;
+1b26 : 20776173;
+1b27 : 206E6F74;
+1b28 : 20776169;
+1b29 : 74696E67;
+1b2a : 20612066;
+1b2b : 6F6C6C6F;
+1b2c : 77207570;
+1b2d : 206D6573;
+1b2e : 73616765;
+1b2f : 0A000000;
+1b30 : 4552524F;
+1b31 : 523A2025;
+1b32 : 733A2053;
+1b33 : 65717565;
+1b34 : 6E636549;
+1b35 : 44202564;
+1b36 : 20646F65;
+1b37 : 736E2774;
+1b38 : 206D6174;
+1b39 : 6368206C;
+1b3a : 61737420;
+1b3b : 53796E63;
+1b3c : 206D6573;
+1b3d : 73616765;
+1b3e : 2025640A;
+1b3f : 00000000;
+1b40 : 25732825;
+1b41 : 6429204D;
+1b42 : 65737361;
+1b43 : 67652063;
+1b44 : 616E2774;
+1b45 : 20626520;
+1b46 : 73656E74;
+1b47 : 0A000000;
+1b48 : 53454E54;
+1b49 : 20253032;
+1b4a : 64206279;
+1b4b : 74657320;
+1b4c : 61742025;
+1b4d : 642E2530;
+1b4e : 39642E25;
+1b4f : 30336420;
+1b50 : 28257329;
+1b51 : 0A000000;
+1b52 : 25733A25;
+1b53 : 693A2045;
+1b54 : 72726F72;
+1b55 : 20310A00;
+1b56 : 25733A25;
+1b57 : 693A2045;
+1b58 : 72726F72;
+1b59 : 20320A00;
+1b5a : 7072652D;
+1b5b : 00000000;
+1b5c : 42657374;
+1b5d : 20666F72;
+1b5e : 6569676E;
+1b5f : 206D6173;
+1b60 : 74657220;
+1b61 : 69732025;
+1b62 : 692F2569;
+1b63 : 0A000000;
+1b64 : 25733A20;
+1b65 : 6572726F;
+1b66 : 720A0000;
+1b67 : 25733A20;
+1b68 : 70617373;
+1b69 : 6976650A;
+1b6a : 00000000;
+1b6b : 25733A20;
+1b6c : 25736D61;
+1b6d : 73746572;
+1b6e : 0A000000;
+1b6f : 4E657720;
+1b70 : 55544320;
+1b71 : 6F666673;
+1b72 : 65743A20;
+1b73 : 25690A00;
+1b74 : 25733A20;
+1b75 : 736C6176;
+1b76 : 650A0000;
+1b77 : 2D000000;
+1b78 : 25732564;
+1b79 : 2E253039;
+1b7a : 64000000;
+1b7b : 5472696D;
+1b7c : 20746F6F;
+1b7d : 2D6C6F6E;
+1b7e : 67206D70;
+1b7f : 643A2025;
+1b80 : 690A0000;
+1b81 : 41667465;
+1b82 : 72206176;
+1b83 : 67282569;
+1b84 : 292C206D;
+1b85 : 65616E50;
+1b86 : 61746844;
+1b87 : 656C6179;
+1b88 : 3A202569;
+1b89 : 0A000000;
+1b8a : 6572726F;
+1b8b : 7220696E;
+1b8c : 20745F6F;
+1b8d : 70732D3E;
+1b8e : 73657276;
+1b8f : 6F5F696E;
+1b90 : 69740000;
+1b91 : 496E6974;
+1b92 : 69616C69;
+1b93 : 7A65643A;
+1b94 : 206F6273;
+1b95 : 5F647269;
+1b96 : 66742025;
+1b97 : 6C6C690A;
+1b98 : 00000000;
+1b99 : 4F666673;
+1b9a : 65742066;
+1b9b : 726F6D20;
+1b9c : 6D617374;
+1b9d : 65723A20;
+1b9e : 20202020;
+1b9f : 25730A00;
+1ba0 : 54313A20;
+1ba1 : 25730A00;
+1ba2 : 54323A20;
+1ba3 : 25730A00;
+1ba4 : 4F627365;
+1ba5 : 72766564;
+1ba6 : 20647269;
+1ba7 : 66743A20;
+1ba8 : 2539690A;
+1ba9 : 00000000;
+1baa : 64697363;
+1bab : 61726420;
+1bac : 54332F54;
+1bad : 343A2077;
+1bae : 65206D69;
+1baf : 73732054;
+1bb0 : 312F5432;
+1bb1 : 0A000000;
+1bb2 : 54333A20;
+1bb3 : 25730A00;
+1bb4 : 54343A20;
+1bb5 : 25730A00;
+1bb6 : 4D617374;
+1bb7 : 65722074;
+1bb8 : 6F20736C;
+1bb9 : 6176653A;
+1bba : 2025730A;
+1bbb : 00000000;
+1bbc : 536C6176;
+1bbd : 6520746F;
+1bbe : 206D6173;
+1bbf : 7465723A;
+1bc0 : 2025730A;
+1bc1 : 00000000;
+1bc2 : 6D65616E;
+1bc3 : 50617468;
+1bc4 : 44656C61;
+1bc5 : 793A2025;
+1bc6 : 730A0000;
+1bc7 : 54353A20;
+1bc8 : 25730A00;
+1bc9 : 54363A20;
+1bca : 25730A00;
+1bcb : 536C6176;
+1bcc : 65204F6E;
+1bcd : 6C792C20;
+1bce : 636C6F63;
+1bcf : 6B20636C;
+1bd0 : 61737320;
+1bd1 : 73657420;
+1bd2 : 746F2025;
+1bd3 : 640A0000;
+1bd4 : 25323075;
+1bd5 : 00000000;
+1bd6 : 25750000;
+1bd7 : 25313175;
+1bd8 : 25303975;
+1bd9 : 00000000;
+1bda : 25752530;
+1bdb : 39750000;
+1bdc : 6C6E6B3A;
+1bdd : 25642072;
+1bde : 783A2564;
+1bdf : 2074783A;
+1be0 : 25642000;
+1be1 : 6C6F636B;
+1be2 : 3A256420;
+1be3 : 00000000;
+1be4 : 7074703A;
+1be5 : 25732000;
+1be6 : 73763A25;
+1be7 : 64200000;
+1be8 : 73733A27;
+1be9 : 25732720;
+1bea : 00000000;
+1beb : 61757825;
+1bec : 643A2578;
+1bed : 20000000;
+1bee : 7365633A;
+1bef : 2564206E;
+1bf0 : 7365633A;
+1bf1 : 25642000;
+1bf2 : 6D753A25;
+1bf3 : 73200000;
+1bf4 : 646D733A;
+1bf5 : 25732000;
+1bf6 : 6474786D;
+1bf7 : 3A256420;
+1bf8 : 6472786D;
+1bf9 : 3A256420;
+1bfa : 00000000;
+1bfb : 64747873;
+1bfc : 3A256420;
+1bfd : 64727873;
+1bfe : 3A256420;
+1bff : 00000000;
+1c00 : 6173796D;
+1c01 : 3A256420;
+1c02 : 00000000;
+1c03 : 63727474;
+1c04 : 3A257320;
+1c05 : 00000000;
+1c06 : 636B6F3A;
+1c07 : 25642000;
+1c08 : 73657470;
+1c09 : 3A256420;
+1c0a : 00000000;
+1c0b : 75636E74;
+1c0c : 3A256420;
+1c0d : 00000000;
+1c0e : 68643A25;
+1c0f : 64206D64;
+1c10 : 3A256420;
+1c11 : 61643A25;
+1c12 : 64200000;
+1c13 : 70636200;
+1c14 : 74656D70;
+1c15 : 3A202564;
+1c16 : 2E253034;
+1c17 : 64204300;
+1c18 : 0A0A5054;
+1c19 : 50207374;
+1c1a : 61747573;
+1c1b : 3A200000;
+1c1c : 25730000;
+1c1d : 0A0A5379;
+1c1e : 6E632069;
+1c1f : 6E666F20;
+1c20 : 6E6F7420;
+1c21 : 76616C69;
+1c22 : 640A0000;
+1c23 : 0A0A5379;
+1c24 : 6E636872;
+1c25 : 6F6E697A;
+1c26 : 6174696F;
+1c27 : 6E207374;
+1c28 : 61747573;
+1c29 : 3A0A0000;
+1c2a : 57522050;
+1c2b : 54502043;
+1c2c : 6F726520;
+1c2d : 53796E63;
+1c2e : 204D6F6E;
+1c2f : 69746F72;
+1c30 : 20257300;
+1c31 : 0A457363;
+1c32 : 203D2065;
+1c33 : 78697400;
+1c34 : 0A0A5441;
+1c35 : 49205469;
+1c36 : 6D653A20;
+1c37 : 20202020;
+1c38 : 20202020;
+1c39 : 20202020;
+1c3a : 20202020;
+1c3b : 20000000;
+1c3c : 0A0A4C69;
+1c3d : 6E6B2073;
+1c3e : 74617475;
+1c3f : 733A0000;
+1c40 : 0A25733A;
+1c41 : 20000000;
+1c42 : 77727531;
+1c43 : 00000000;
+1c44 : 4C696E6B;
+1c45 : 20757020;
+1c46 : 20200000;
+1c47 : 4C696E6B;
+1c48 : 20646F77;
+1c49 : 6E200000;
+1c4a : 2852583A;
+1c4b : 2025642C;
+1c4c : 2054583A;
+1c4d : 20256429;
+1c4e : 00000000;
+1c4f : 0A4D6F64;
+1c50 : 653A2000;
+1c51 : 5752204F;
+1c52 : 66660000;
+1c53 : 0A436C6F;
+1c54 : 636B206F;
+1c55 : 66667365;
+1c56 : 743A2020;
+1c57 : 20202020;
+1c58 : 20202020;
+1c59 : 20202020;
+1c5a : 20202000;
+1c5b : 2532692E;
+1c5c : 25303969;
+1c5d : 20730000;
+1c5e : 25692E25;
+1c5f : 30396920;
+1c60 : 73000000;
+1c61 : 25396920;
+1c62 : 6E730000;
+1c63 : 0A4F6E65;
+1c64 : 2D776179;
+1c65 : 2064656C;
+1c66 : 61792061;
+1c67 : 76657261;
+1c68 : 6765643A;
+1c69 : 20202020;
+1c6a : 20202000;
+1c6b : 0A4F6273;
+1c6c : 65727665;
+1c6d : 64206472;
+1c6e : 6966743A;
+1c6f : 20202020;
+1c70 : 20202020;
+1c71 : 20202020;
+1c72 : 20202000;
+1c73 : 5752204D;
+1c74 : 61737465;
+1c75 : 72202000;
+1c76 : 57522053;
+1c77 : 6C617665;
+1c78 : 20202000;
+1c79 : 57522055;
+1c7a : 6E6B6E6F;
+1c7b : 776E2000;
+1c7c : 4C6F636B;
+1c7d : 65642000;
+1c7e : 4E6F4C6F;
+1c7f : 636B2000;
+1c80 : 43616C69;
+1c81 : 62726174;
+1c82 : 65640000;
+1c83 : 556E6361;
+1c84 : 6C696272;
+1c85 : 61746564;
+1c86 : 00000000;
+1c87 : 53657276;
+1c88 : 6F207374;
+1c89 : 6174653A;
+1c8a : 20202020;
+1c8b : 20202020;
+1c8c : 20202020;
+1c8d : 20202000;
+1c8e : 50686173;
+1c8f : 65207472;
+1c90 : 61636B69;
+1c91 : 6E673A20;
+1c92 : 20202020;
+1c93 : 20202020;
+1c94 : 20202000;
+1c95 : 4F4E0A00;
+1c96 : 4F46460A;
+1c97 : 00000000;
+1c98 : 41757820;
+1c99 : 636C6F63;
+1c9a : 6B202564;
+1c9b : 20737461;
+1c9c : 7475733A;
+1c9d : 20202020;
+1c9e : 20202020;
+1c9f : 00000000;
+1ca0 : 656E6162;
+1ca1 : 6C656400;
+1ca2 : 2C206C6F;
+1ca3 : 636B6564;
+1ca4 : 00000000;
+1ca5 : 0A54696D;
+1ca6 : 696E6720;
+1ca7 : 70617261;
+1ca8 : 6D657465;
+1ca9 : 72733A0A;
+1caa : 00000000;
+1cab : 526F756E;
+1cac : 642D7472;
+1cad : 69702074;
+1cae : 696D6520;
+1caf : 286D7529;
+1cb0 : 3A200000;
+1cb1 : 25732070;
+1cb2 : 730A0000;
+1cb3 : 4D617374;
+1cb4 : 65722D73;
+1cb5 : 6C617665;
+1cb6 : 2064656C;
+1cb7 : 61793A20;
+1cb8 : 20200000;
+1cb9 : 4D617374;
+1cba : 65722050;
+1cbb : 48592064;
+1cbc : 656C6179;
+1cbd : 733A2020;
+1cbe : 20202020;
+1cbf : 20202020;
+1cc0 : 20000000;
+1cc1 : 54583A20;
+1cc2 : 25396420;
+1cc3 : 70732C20;
+1cc4 : 52583A20;
+1cc5 : 25396420;
+1cc6 : 70730A00;
+1cc7 : 536C6176;
+1cc8 : 65205048;
+1cc9 : 59206465;
+1cca : 6C617973;
+1ccb : 3A202020;
+1ccc : 20202020;
+1ccd : 20202020;
+1cce : 20000000;
+1ccf : 546F7461;
+1cd0 : 6C206C69;
+1cd1 : 6E6B2061;
+1cd2 : 73796D6D;
+1cd3 : 65747279;
+1cd4 : 3A000000;
+1cd5 : 25323164;
+1cd6 : 2070730A;
+1cd7 : 00000000;
+1cd8 : 4361626C;
+1cd9 : 65207274;
+1cda : 74206465;
+1cdb : 6C61793A;
+1cdc : 20202020;
+1cdd : 20200000;
+1cde : 436C6F63;
+1cdf : 6B206F66;
+1ce0 : 66736574;
+1ce1 : 3A000000;
+1ce2 : 25323964;
+1ce3 : 2070730A;
+1ce4 : 00000000;
+1ce5 : 50686173;
+1ce6 : 65207365;
+1ce7 : 74706F69;
+1ce8 : 6E743A00;
+1ce9 : 25323764;
+1cea : 2070730A;
+1ceb : 00000000;
+1cec : 536B6577;
+1ced : 3A202020;
+1cee : 20200000;
+1cef : 25333264;
+1cf0 : 2070730A;
+1cf1 : 00000000;
+1cf2 : 55706461;
+1cf3 : 74652063;
+1cf4 : 6F756E74;
+1cf5 : 65723A00;
+1cf6 : 25323764;
+1cf7 : 0A000000;
+1cf8 : 756E6B6E;
+1cf9 : 6F776E00;
+1cfa : 73746174;
+1cfb : 73000000;
+1cfc : 1B5B3125;
+1cfd : 63000000;
+1cfe : 436F6D6D;
+1cff : 616E6420;
+1d00 : 22257322;
+1d01 : 3A206572;
+1d02 : 726F7220;
+1d03 : 25640A00;
+1d04 : 556E7265;
+1d05 : 636F676E;
+1d06 : 697A6564;
+1d07 : 20636F6D;
+1d08 : 6D616E64;
+1d09 : 20222573;
+1d0a : 222E0A00;
+1d0b : 77726323;
+1d0c : 20000000;
+1d0d : 25630000;
+1d0e : 456D7074;
+1d0f : 7920696E;
+1d10 : 69742073;
+1d11 : 63726970;
+1d12 : 742E2E2E;
+1d13 : 0A000000;
+1d14 : 65786563;
+1d15 : 7574696E;
+1d16 : 673A2025;
+1d17 : 730A0000;
+1d18 : 2D2D2062;
+1d19 : 75696C74;
+1d1a : 2D696E20;
+1d1b : 73637269;
+1d1c : 7074202D;
+1d1d : 2D0A0000;
+1d1e : 28656D70;
+1d1f : 7479290A;
+1d20 : 00000000;
+1d21 : 57522043;
+1d22 : 6F726520;
+1d23 : 6275696C;
+1d24 : 643A2025;
+1d25 : 7325730A;
+1d26 : 00000000;
+1d27 : 2028756E;
+1d28 : 73757070;
+1d29 : 6F727465;
+1d2a : 64206465;
+1d2b : 76656C6F;
+1d2c : 70657220;
+1d2d : 6275696C;
+1d2e : 64290000;
+1d2f : 4275696C;
+1d30 : 743A2025;
+1d31 : 73202573;
+1d32 : 20627920;
+1d33 : 25730A00;
+1d34 : 4275696C;
+1d35 : 7420666F;
+1d36 : 72202564;
+1d37 : 206B4220;
+1d38 : 52414D2C;
+1d39 : 20737461;
+1d3a : 636B2069;
+1d3b : 73202564;
+1d3c : 20627974;
+1d3d : 65730A00;
+1d3e : 5741524E;
+1d3f : 494E473A;
+1d40 : 20686172;
+1d41 : 64776172;
+1d42 : 65207361;
+1d43 : 79732025;
+1d44 : 696B4220;
+1d45 : 3C3D2052;
+1d46 : 414D203C;
+1d47 : 2025696B;
+1d48 : 420A0000;
+1d49 : 76657200;
+1d4a : 25733B20;
+1d4b : 25732025;
+1d4c : 730A0000;
+1d4d : 556E6B6E;
+1d4e : 6F776E20;
+1d4f : 73756263;
+1d50 : 6F6D6D61;
+1d51 : 6E642022;
+1d52 : 2573220A;
+1d53 : 00000000;
+1d54 : 73746172;
+1d55 : 74000000;
+1d56 : 73746F70;
+1d57 : 00000000;
+1d58 : 65326500;
+1d59 : 64656C61;
+1d5a : 79000000;
+1d5b : 676D0000;
+1d5c : 61627363;
+1d5d : 616C0000;
+1d5e : 6D6F6465;
+1d5f : 00000000;
+1d60 : 73746F70;
+1d61 : 70656400;
+1d62 : 72756E6E;
+1d63 : 696E6700;
+1d64 : 70327000;
+1d65 : 41766169;
+1d66 : 6C61626C;
+1d67 : 6520636F;
+1d68 : 6D6D616E;
+1d69 : 64733A0A;
+1d6a : 00000000;
+1d6b : 20202573;
+1d6c : 0A000000;
+1d6d : 68656C70;
+1d6e : 00000000;
+1d6f : 25303278;
+1d70 : 3A253032;
+1d71 : 783A2530;
+1d72 : 32783A25;
+1d73 : 3032783A;
+1d74 : 25303278;
+1d75 : 3A253032;
+1d76 : 78000000;
+1d77 : 67657400;
+1d78 : 67657470;
+1d79 : 00000000;
+1d7a : 73657400;
+1d7b : 73657470;
+1d7c : 00000000;
+1d7d : 4D41432D;
+1d7e : 61646472;
+1d7f : 6573733A;
+1d80 : 2025730A;
+1d81 : 00000000;
+1d82 : 6D616300;
+1d83 : 72657365;
+1d84 : 74000000;
+1d85 : 6D617800;
+1d86 : 7072696E;
+1d87 : 745F7461;
+1d88 : 736B5F74;
+1d89 : 696D655F;
+1d8a : 74687265;
+1d8b : 73686F6C;
+1d8c : 64202564;
+1d8d : 0A000000;
+1d8e : 20697465;
+1d8f : 72617469;
+1d90 : 6F6E7320;
+1d91 : 20202020;
+1d92 : 7365636F;
+1d93 : 6E64732E;
+1d94 : 6D696372;
+1d95 : 6F732020;
+1d96 : 20206D61;
+1d97 : 785F6D73;
+1d98 : 206E616D;
+1d99 : 650A0000;
+1d9a : 20202539;
+1d9b : 6C692020;
+1d9c : 2025396C;
+1d9d : 692E2530;
+1d9e : 366C6920;
+1d9f : 25396C64;
+1da0 : 2025730A;
+1da1 : 00000000;
+1da2 : 70730000;
+1da3 : 25750A00;
+1da4 : 55736167;
+1da5 : 653A2072;
+1da6 : 65667265;
+1da7 : 7368203C;
+1da8 : 7365636F;
+1da9 : 6E64733E;
+1daa : 0A000000;
+1dab : 72656672;
+1dac : 65736800;
+1dad : 73746174;
+1dae : 69737469;
+1daf : 6373206E;
+1db0 : 6F77206F;
+1db1 : 66660A00;
+1db2 : 62747300;
+1db3 : 6F666600;
+1db4 : 73746174;
+1db5 : 00000000;
+1db6 : 57726F6E;
+1db7 : 67207061;
+1db8 : 72616D65;
+1db9 : 7465720A;
+1dba : 00000000;
+1dbb : 65726173;
+1dbc : 65000000;
+1dbd : 436F756C;
+1dbe : 64206E6F;
+1dbf : 74206572;
+1dc0 : 61736520;
+1dc1 : 44420A00;
+1dc2 : 61646400;
+1dc3 : 53465020;
+1dc4 : 44422069;
+1dc5 : 73206675;
+1dc6 : 6C6C0A00;
+1dc7 : 49324320;
+1dc8 : 6572726F;
+1dc9 : 720A0000;
+1dca : 53465020;
+1dcb : 64617461;
+1dcc : 62617365;
+1dcd : 20657272;
+1dce : 6F722028;
+1dcf : 2564290A;
+1dd0 : 00000000;
+1dd1 : 25642053;
+1dd2 : 46507320;
+1dd3 : 696E2044;
+1dd4 : 420A0000;
+1dd5 : 73686F77;
+1dd6 : 00000000;
+1dd7 : 53465020;
+1dd8 : 64617461;
+1dd9 : 62617365;
+1dda : 20656D70;
+1ddb : 74790A00;
+1ddc : 25643A20;
+1ddd : 504E3A00;
+1dde : 20645478;
+1ddf : 3A202538;
+1de0 : 64206452;
+1de1 : 783A2025;
+1de2 : 38642061;
+1de3 : 6C706861;
+1de4 : 3A202538;
+1de5 : 640A0000;
+1de6 : 6D617463;
+1de7 : 68000000;
+1de8 : 4E6F2053;
+1de9 : 46502E0A;
+1dea : 00000000;
+1deb : 53465020;
+1dec : 72656164;
+1ded : 20657272;
+1dee : 6F720A00;
+1def : 436F756C;
+1df0 : 64206E6F;
+1df1 : 74206D61;
+1df2 : 74636820;
+1df3 : 746F2044;
+1df4 : 420A0000;
+1df5 : 53465020;
+1df6 : 6D617463;
+1df7 : 6865642C;
+1df8 : 20645478;
+1df9 : 3D256420;
+1dfa : 6452783D;
+1dfb : 25642061;
+1dfc : 6C706861;
+1dfd : 3D25640A;
+1dfe : 00000000;
+1dff : 656E6100;
+1e00 : 73667000;
+1e01 : 696E6974;
+1e02 : 00000000;
+1e03 : 636C0000;
+1e04 : 73707300;
+1e05 : 67707300;
+1e06 : 25642025;
+1e07 : 640A0000;
+1e08 : 73646163;
+1e09 : 00000000;
+1e0a : 67646163;
+1e0b : 00000000;
+1e0c : 63686563;
+1e0d : 6B76636F;
+1e0e : 00000000;
+1e0f : 706C6C00;
+1e10 : 666F7263;
+1e11 : 65000000;
+1e12 : 466F756E;
+1e13 : 64207068;
+1e14 : 61736520;
+1e15 : 7472616E;
+1e16 : 73697469;
+1e17 : 6F6E2069;
+1e18 : 6E204545;
+1e19 : 50524F4D;
+1e1a : 3A202564;
+1e1b : 70730A00;
+1e1c : 4D656173;
+1e1d : 7572696E;
+1e1e : 67207432;
+1e1f : 2F743420;
+1e20 : 70686173;
+1e21 : 65207472;
+1e22 : 616E7369;
+1e23 : 74696F6E;
+1e24 : 2E2E2E0A;
+1e25 : 00000000;
+1e26 : 63616C69;
+1e27 : 62726174;
+1e28 : 696F6E00;
+1e29 : 73657473;
+1e2a : 65630000;
+1e2b : 7365746E;
+1e2c : 73656300;
+1e2d : 72617700;
+1e2e : 2573202B;
+1e2f : 2564206E;
+1e30 : 616E6F73;
+1e31 : 65636F6E;
+1e32 : 64732E0A;
+1e33 : 00000000;
+1e34 : 74696D65;
+1e35 : 00000000;
+1e36 : 67756900;
+1e37 : 66730000;
+1e38 : 66736500;
+1e39 : 73646200;
+1e3a : 4F4E0000;
+1e3b : 4F464600;
+1e3c : 656E6162;
+1e3d : 6C650000;
+1e3e : 64697361;
+1e3f : 626C6500;
+1e40 : 70686173;
+1e41 : 65207472;
+1e42 : 61636B69;
+1e43 : 6E672025;
+1e44 : 730A0000;
+1e45 : 70747261;
+1e46 : 636B0000;
+1e47 : 50505349;
+1e48 : 20766572;
+1e49 : 626F7369;
+1e4a : 74793A20;
+1e4b : 2530386C;
+1e4c : 780A0000;
+1e4d : 76657262;
+1e4e : 6F736500;
+1e4f : 436F756C;
+1e50 : 64206E6F;
+1e51 : 74206572;
+1e52 : 61736520;
+1e53 : 696E6974;
+1e54 : 20736372;
+1e55 : 6970740A;
+1e56 : 00000000;
+1e57 : 436F756C;
+1e58 : 64206E6F;
+1e59 : 74206164;
+1e5a : 64207468;
+1e5b : 6520636F;
+1e5c : 6D6D616E;
+1e5d : 640A0000;
+1e5e : 4F4B2E0A;
+1e5f : 00000000;
+1e60 : 626F6F74;
+1e61 : 00000000;
+1e62 : 25732C20;
+1e63 : 25732025;
+1e64 : 642C2025;
+1e65 : 642C2025;
+1e66 : 3032643A;
+1e67 : 25303264;
+1e68 : 3A253032;
+1e69 : 64000000;
+1e6a : 25732025;
+1e6b : 32642025;
+1e6c : 3032643A;
+1e6d : 25303264;
+1e6e : 3A253032;
+1e6f : 64000000;
+1e70 : 2534642D;
+1e71 : 25303264;
+1e72 : 2D253032;
+1e73 : 642D2530;
+1e74 : 32643A25;
+1e75 : 3032643A;
+1e76 : 25303264;
+1e77 : 00000000;
+1e78 : 1B5B3025;
+1e79 : 643B3325;
+1e7a : 646D0000;
+1e7b : 1B5B6D00;
+1e7c : 1B5B2564;
+1e7d : 3B256466;
+1e7e : 00000000;
+1e7f : 1B5B324A;
+1e80 : 1B5B313B;
+1e81 : 31480000;
+1e82 : 53756E00;
+1e83 : 4D6F6E00;
+1e84 : 54756500;
+1e85 : 57656400;
+1e86 : 54687500;
+1e87 : 46726900;
+1e88 : 53617400;
+1e89 : 4A616E00;
+1e8a : 46656200;
+1e8b : 4D617200;
+1e8c : 41707200;
+1e8d : 4D617900;
+1e8e : 4A756E00;
+1e8f : 4A756C00;
+1e90 : 41756700;
+1e91 : 53657000;
+1e92 : 4F637400;
+1e93 : 4E6F7600;
+1e94 : 44656300;
+1e95 : 4C6F6F70;
+1e96 : 73207065;
+1e97 : 72206A69;
+1e98 : 6666793A;
+1e99 : 2025690A;
+1e9a : 00000000;
+1e9b : 25733A20;
+1e9c : 6E6F2073;
+1e9d : 6F636B65;
+1e9e : 7420736C;
+1e9f : 6F747320;
+1ea0 : 6C656674;
+1ea1 : 0A000000;
+1ea2 : 77723000;
+1ea3 : 6E65742D;
+1ea4 : 62680000;
+1ea5 : 30313233;
+1ea6 : 34353637;
+1ea7 : 38396162;
+1ea8 : 63646566;
+1ea9 : 00000000;
+1eaa : 6E6F2070;
+1eab : 66696C74;
+1eac : 65722072;
+1ead : 756C652D;
+1eae : 73657421;
+1eaf : 0A000000;
+1eb0 : 7066696C;
+1eb1 : 7465723A;
+1eb2 : 2077726F;
+1eb3 : 6E67206D;
+1eb4 : 61676963;
+1eb5 : 206E756D;
+1eb6 : 62657220;
+1eb7 : 28676F74;
+1eb8 : 20307825;
+1eb9 : 78290A00;
+1eba : 7066696C;
+1ebb : 7465723A;
+1ebc : 2077726F;
+1ebd : 6E672072;
+1ebe : 756C652D;
+1ebf : 7365742C;
+1ec0 : 2063616E;
+1ec1 : 27742061;
+1ec2 : 70706C79;
+1ec3 : 0A000000;
+1ec4 : 4572726F;
+1ec5 : 723A204D;
+1ec6 : 696E6963;
+1ec7 : 2048444C;
+1ec8 : 20766572;
+1ec9 : 73696F6E;
+1eca : 20256420;
+1ecb : 6E6F7420;
+1ecc : 73757070;
+1ecd : 6F727465;
+1ece : 64206279;
+1ecf : 2073770A;
+1ed0 : 00000000;
+1ed1 : 5761726E;
+1ed2 : 696E673A;
+1ed3 : 204D696E;
+1ed4 : 69632072;
+1ed5 : 65636569;
+1ed6 : 76656420;
+1ed7 : 6572726F;
+1ed8 : 6E656F75;
+1ed9 : 73206672;
+1eda : 616D650A;
+1edb : 00000000;
+1edc : 5761726E;
+1edd : 696E673A;
+1ede : 204D696E;
+1edf : 69632052;
+1ee0 : 78206669;
+1ee1 : 666F2066;
+1ee2 : 756C6C2C;
+1ee3 : 20657870;
+1ee4 : 65637420;
+1ee5 : 77726F6E;
+1ee6 : 67206672;
+1ee7 : 616D6573;
+1ee8 : 0A000000;
+1ee9 : 5761726E;
+1eea : 696E673A;
+1eeb : 20747820;
+1eec : 6E6F7420;
+1eed : 7465726D;
+1eee : 696E6174;
+1eef : 65642069;
+1ef0 : 6E66696E;
+1ef1 : 69746520;
+1ef2 : 6D63723D;
+1ef3 : 30782578;
+1ef4 : 0A000000;
+1ef5 : 5761726E;
+1ef6 : 696E673A;
+1ef7 : 20747820;
+1ef8 : 74696D65;
+1ef9 : 7374616D;
+1efa : 70206E65;
+1efb : 76657220;
+1efc : 62656361;
+1efd : 6D652061;
+1efe : 7661696C;
+1eff : 61626C65;
+1f00 : 0A000000;
+1f01 : 64657620;
+1f02 : 20307825;
+1f03 : 30386C78;
+1f04 : 20402025;
+1f05 : 30366C78;
+1f06 : 2C202573;
+1f07 : 0A000000;
+1f08 : 66706761;
+1f09 : 2D617265;
+1f0a : 61000000;
+1f0b : 4572726F;
+1f0c : 72202564;
+1f0d : 20776869;
+1f0e : 6C652072;
+1f0f : 65616469;
+1f10 : 6E672074;
+1f11 : 32347020;
+1f12 : 66726F6D;
+1f13 : 2073746F;
+1f14 : 72616765;
+1f15 : 0A000000;
+1f16 : 74323470;
+1f17 : 20726561;
+1f18 : 64206672;
+1f19 : 6F6D2073;
+1f1a : 746F7261;
+1f1b : 67653A20;
+1f1c : 25642070;
+1f1d : 730A0000;
+1f1e : 57616974;
+1f1f : 696E6720;
+1f20 : 666F7220;
+1f21 : 6C696E6B;
+1f22 : 2E2E2E0A;
+1f23 : 00000000;
+1f24 : 4C6F636B;
+1f25 : 696E6720;
+1f26 : 504C4C2E;
+1f27 : 2E2E0A00;
+1f28 : 43616C69;
+1f29 : 62726174;
+1f2a : 696E6720;
+1f2b : 52582074;
+1f2c : 696D6573;
+1f2d : 74616D70;
+1f2e : 65722E2E;
+1f2f : 2E0A0000;
+1f30 : 4661696C;
+1f31 : 65640000;
+1f32 : 53756363;
+1f33 : 65737300;
+1f34 : 57726F74;
+1f35 : 65206E65;
+1f36 : 77207432;
+1f37 : 34702076;
+1f38 : 616C7565;
+1f39 : 3A202564;
+1f3a : 20707320;
+1f3b : 28257329;
+1f3c : 0A000000;
+1f3d : 20454E4F;
+1f3e : 53504300;
+1f3f : 25732573;
+1f40 : 3A000000;
+1f41 : 494E5641;
+1f42 : 4C494400;
+1f43 : 25642E25;
+1f44 : 30346400;
+1f45 : 74656D70;
+1f46 : 00000000;
+1f47 : 74656D70;
+1f48 : 65726174;
+1f49 : 75726500;
+1f4a : 7366703A;
+1f4b : 20636F72;
+1f4c : 72757074;
+1f4d : 65642063;
+1f4e : 6865636B;
+1f4f : 73756D0A;
+1f50 : 00000000;
+1f51 : 73646266;
+1f52 : 733A2066;
+1f53 : 6F756E64;
+1f54 : 20617420;
+1f55 : 25692069;
+1f56 : 6E20466C;
+1f57 : 6173680A;
+1f58 : 00000000;
+1f59 : 73646266;
+1f5a : 733A2066;
+1f5b : 6F756E64;
+1f5c : 20617420;
+1f5d : 25692069;
+1f5e : 6E205731;
+1f5f : 0A000000;
+1f60 : 73646266;
+1f61 : 733A2066;
+1f62 : 6F756E64;
+1f63 : 20617420;
+1f64 : 25692069;
+1f65 : 6E204932;
+1f66 : 43283078;
+1f67 : 25325829;
+1f68 : 0A000000;
+1f69 : 66696C65;
+1f6a : 20307825;
+1f6b : 30387820;
+1f6c : 40202534;
+1f6d : 692C206E;
+1f6e : 616D6520;
+1f6f : 25730A00;
+1f70 : 25733A20;
+1f71 : 53444220;
+1f72 : 6572726F;
+1f73 : 720A0000;
+1f74 : 25733A20;
+1f75 : 53444220;
+1f76 : 66696C65;
+1f77 : 20697320;
+1f78 : 656D7074;
+1f79 : 790A0000;
+1f7a : 25733A20;
+1f7b : 5573696E;
+1f7c : 67205731;
+1f7d : 20736572;
+1f7e : 69616C20;
+1f7f : 6E756D62;
+1f80 : 65720A00;
+1f81 : 25733A20;
+1f82 : 6661696C;
+1f83 : 7572650A;
+1f84 : 00000000;
+1f85 : 25733A20;
+1f86 : 53444220;
+1f87 : 6572726F;
+1f88 : 722C2063;
+1f89 : 616E2774;
+1f8a : 20736176;
+1f8b : 650A0000;
+1f8c : 41646469;
+1f8d : 6E67206E;
+1f8e : 65772053;
+1f8f : 46502065;
+1f90 : 6E747279;
+1f91 : 0A000000;
+1f92 : 55706461;
+1f93 : 74652065;
+1f94 : 78697374;
+1f95 : 696E6720;
+1f96 : 53465020;
+1f97 : 656E7472;
+1f98 : 790A0000;
+1f99 : 2D2D2075;
+1f9a : 7365722D;
+1f9b : 64656669;
+1f9c : 6E656420;
+1f9d : 73637269;
+1f9e : 7074202D;
+1f9f : 2D0A0000;
+1fa0 : 45726173;
+1fa1 : 696E6720;
+1fa2 : 466C6173;
+1fa3 : 68283078;
+1fa4 : 2578292E;
+1fa5 : 2E2E0A00;
+1fa6 : 45726173;
+1fa7 : 696E6720;
+1fa8 : 45455052;
+1fa9 : 4F4D2025;
+1faa : 64202830;
+1fab : 78257829;
+1fac : 2E2E2E0A;
+1fad : 00000000;
+1fae : 45726173;
+1faf : 696E6720;
+1fb0 : 312D5720;
+1fb1 : 45455052;
+1fb2 : 4F4D2028;
+1fb3 : 30782578;
+1fb4 : 292E2E2E;
+1fb5 : 0A000000;
+1fb6 : 66696C65;
+1fb7 : 6E616D65;
+1fb8 : 3A202573;
+1fb9 : 3B206669;
+1fba : 7273743A;
+1fbb : 2025783B;
+1fbc : 206C6173;
+1fbd : 743A2025;
+1fbe : 780A0000;
+1fbf : 466F726D;
+1fc0 : 61747469;
+1fc1 : 6E672053;
+1fc2 : 44424653;
+1fc3 : 20696E20;
+1fc4 : 466C6173;
+1fc5 : 68283078;
+1fc6 : 2578292E;
+1fc7 : 2E2E0A00;
+1fc8 : 49324320;
+1fc9 : 45455052;
+1fca : 4F4D206E;
+1fcb : 6F742066;
+1fcc : 6F756E64;
+1fcd : 0A000000;
+1fce : 466F726D;
+1fcf : 61747469;
+1fd0 : 6E672053;
+1fd1 : 44424653;
+1fd2 : 20696E20;
+1fd3 : 49324320;
+1fd4 : 45455052;
+1fd5 : 4F4D2025;
+1fd6 : 64202830;
+1fd7 : 78257829;
+1fd8 : 2E2E2E0A;
+1fd9 : 00000000;
+1fda : 312D5769;
+1fdb : 72652045;
+1fdc : 4550524F;
+1fdd : 4D206E6F;
+1fde : 7420666F;
+1fdf : 756E640A;
+1fe0 : 00000000;
+1fe1 : 466F726D;
+1fe2 : 61747469;
+1fe3 : 6E672053;
+1fe4 : 44424653;
+1fe5 : 20696E20;
+1fe6 : 312D5720;
+1fe7 : 45455052;
+1fe8 : 4F4D2028;
+1fe9 : 30782578;
+1fea : 292E2E2E;
+1feb : 0A000000;
+1fec : 65657072;
+1fed : 6F6D0000;
+1fee : 6F666673;
+1fef : 65742025;
+1ff0 : 34692028;
+1ff1 : 30782530;
+1ff2 : 3378293A;
+1ff3 : 20253369;
+1ff4 : 20283078;
+1ff5 : 25303278;
+1ff6 : 290A0000;
+1ff7 : 77726974;
+1ff8 : 65283078;
+1ff9 : 25782C20;
+1ffa : 2569293A;
+1ffb : 20726573;
+1ffc : 756C7420;
+1ffd : 3D202569;
+1ffe : 0A000000;
+1fff : 72656164;
+2000 : 28307825;
+2001 : 782C2025;
+2002 : 69293A20;
+2003 : 72657375;
+2004 : 6C74203D;
+2005 : 2025690A;
+2006 : 00000000;
+2007 : 64657669;
+2008 : 63652025;
+2009 : 693A2025;
+200a : 30387825;
+200b : 3038780A;
+200c : 00000000;
+200d : 74656D70;
+200e : 3A202564;
+200f : 2E253034;
+2010 : 640A0000;
+2011 : 77310000;
+2012 : 77317200;
+2013 : 77317700;
+2014 : 3C556E6B;
+2015 : 6E6F776E;
+2016 : 3E000000;
+2017 : 736F6674;
+2018 : 706C6C3A;
+2019 : 20697271;
+201a : 73202564;
+201b : 20736571;
+201c : 20257320;
+201d : 6D6F6465;
+201e : 20256420;
+201f : 616C6967;
+2020 : 6E6D656E;
+2021 : 745F7374;
+2022 : 61746520;
+2023 : 25642048;
+2024 : 4C256420;
+2025 : 4D4C2564;
+2026 : 2048593D;
+2027 : 2564204D;
+2028 : 593D2564;
+2029 : 2044656C;
+202a : 436E743D;
+202b : 25640A00;
+202c : 73746172;
+202d : 742D6578;
+202e : 74000000;
+202f : 77616974;
+2030 : 2D657874;
+2031 : 00000000;
+2032 : 73746172;
+2033 : 742D6865;
+2034 : 6C706572;
+2035 : 00000000;
+2036 : 77616974;
+2037 : 2D68656C;
+2038 : 70657200;
+2039 : 73746172;
+203a : 742D6D61;
+203b : 696E0000;
+203c : 77616974;
+203d : 2D6D6169;
+203e : 6E000000;
+203f : 72656164;
+2040 : 79000000;
+2041 : 636C6561;
+2042 : 722D6461;
+2043 : 63730000;
+2044 : 77616974;
+2045 : 2D636C65;
+2046 : 61722D64;
+2047 : 61637300;
+2048 : BADC0FFE;
+2049 : 3B9ACA00;
+204a : 00020100;
+204b : 00020200;
+204c : 00020300;
+204d : 00020400;
+204e : 00020500;
+204f : 00020600;
+2050 : 00020700;
+2051 : 000F4240;
+2052 : 41C64E6D;
+2053 : 7FFFFFFF;
+2054 : 00080030;
+2055 : C4653600;
+2056 : FFF0BDC0;
+2057 : 0007D000;
+2058 : 3B9AC9FF;
+2059 : 00010043;
+205a : 00010044;
+205b : 00015180;
+205c : 005EE000;
+205d : 01000001;
+205e : 11223344;
+205f : E0001FFF;
+2060 : 00246000;
+2061 : 01554000;
+2062 : 02468000;
+2063 : 13578000;
+2064 : 0FFFFFFF;
+2065 : 059682F0;
+2066 : 0EE6B27F;
+2067 : 01312D02;
+2068 : 01312D0A;
+2069 : 46696C65;
+206a : 44617461;
+206b : 7366702D;
+206c : 5344422D;
+206d : 6D61632D;
+206e : 63616C69;
+206f : 77722D69;
+2070 : 003D0137;
+2071 : 8000001F;
+2072 : 009895B6;
+2073 : C4000001;
+2074 : 000186A0;
+2075 : 00FFFFFF;
+2076 : FFFDB610;
+2077 : 000249F0;
+2078 : 05F5E100;
+2079 : 0BEBC200;
+207a : FA0A1F00;
+207b : 01312D03;
+207c : 011B1900;
+207d : 00000000;
+207e : 00000000;
+207f : 00005DF8;
+2080 : 00005E04;
+2081 : 00005E14;
+2082 : 00005E20;
+2083 : 00005E2C;
+2084 : 00005E38;
+2085 : 00005E44;
+2086 : 00000AA0;
+2087 : 00000B10;
+2088 : 00000E28;
+2089 : 00000E28;
+208a : 00000E28;
+208b : 00000E28;
+208c : 00000E28;
+208d : 00000E28;
+208e : 00000B8C;
+208f : 00000BFC;
+2090 : 00000E28;
+2091 : 00000C90;
+2092 : 00000DFC;
+2093 : 77727063;
+2094 : 5F74696D;
+2095 : 655F6164;
+2096 : 6A757374;
+2097 : 5F6F6666;
+2098 : 73657400;
+2099 : 77725F73;
+209a : 31000000;
+209b : 77727063;
+209c : 5F74696D;
+209d : 655F6164;
+209e : 6A757374;
+209f : 00000000;
+20a0 : 77727063;
+20a1 : 5F74696D;
+20a2 : 655F7365;
+20a3 : 74000000;
+20a4 : 77727063;
+20a5 : 5F74696D;
+20a6 : 655F6765;
+20a7 : 74000000;
+20a8 : 77727063;
+20a9 : 5F6E6574;
+20aa : 5F73656E;
+20ab : 64000000;
+20ac : 011B1900;
+20ad : 00000180;
+20ae : C200000E;
+20af : 70747064;
+20b0 : 5F6E6574;
+20b1 : 69665F63;
+20b2 : 72656174;
+20b3 : 655F736F;
+20b4 : 636B6574;
+20b5 : 00000000;
+20b6 : 00000000;
+20b7 : 00000000;
+20b8 : 00000000;
+20b9 : 00000000;
+20ba : 00000001;
+20bb : 00000001;
+20bc : 00000001;
+20bd : 00000001;
+20be : 00000000;
+20bf : 00000000;
+20c0 : 00000000;
+20c1 : 00004B08;
+20c2 : 00004B28;
+20c3 : 00004B34;
+20c4 : 00004B44;
+20c5 : 00004B64;
+20c6 : 00004B74;
+20c7 : 00004BDC;
+20c8 : 00004B94;
+20c9 : 00004A9C;
+20ca : 00004AE0;
+20cb : 00000000;
+20cc : 00000000;
+20cd : 00000000;
+20ce : 00000000;
+20cf : 00010000;
+20d0 : 00000000;
+20d1 : 00000000;
+20d2 : 00000000;
+20d3 : 00020100;
+20d4 : 00000000;
+20d5 : 00000000;
+20d6 : 00000000;
+20d7 : 00030101;
+20d8 : 00000000;
+20d9 : 00000000;
+20da : 00000000;
+20db : 00040201;
+20dc : 01000000;
+20dd : 00000000;
+20de : 00000000;
+20df : 00050201;
+20e0 : 01010000;
+20e1 : 00000000;
+20e2 : 00000000;
+20e3 : 00060302;
+20e4 : 01010100;
+20e5 : 00000000;
+20e6 : 00000000;
+20e7 : 00070302;
+20e8 : 01010101;
+20e9 : 00000000;
+20ea : 00000000;
+20eb : 00080402;
+20ec : 02010101;
+20ed : 01000000;
+20ee : 00000000;
+20ef : 00090403;
+20f0 : 02010101;
+20f1 : 01010000;
+20f2 : 00000000;
+20f3 : 000A0503;
+20f4 : 02020101;
+20f5 : 01010100;
+20f6 : 00000000;
+20f7 : 000B0503;
+20f8 : 02020101;
+20f9 : 01010101;
+20fa : 00000000;
+20fb : 000C0604;
+20fc : 03020201;
+20fd : 01010101;
+20fe : 01000000;
+20ff : 000D0604;
+2100 : 03020201;
+2101 : 01010101;
+2102 : 01010000;
+2103 : 000E0704;
+2104 : 03020202;
+2105 : 01010101;
+2106 : 01010100;
+2107 : 000F0705;
+2108 : 03030202;
+2109 : 01010101;
+210a : 01010101;
+210b : 00000000;
+210c : 00000955;
+210d : 4D433EBC;
+210e : 00000001;
+210f : 00000000;
+2110 : 00000000;
+2111 : 00005EBC;
+2112 : 002C0100;
+2113 : 00010000;
+2114 : 00005EC4;
+2115 : 002C0100;
+2116 : 017F0000;
+2117 : 00005ED0;
+2118 : 00360101;
+2119 : 057F0000;
+211a : 00005EDC;
+211b : 00360101;
+211c : 057F0000;
+211d : 00000000;
+211e : 00000000;
+211f : 00000000;
+2120 : 00000000;
+2121 : 00000000;
+2122 : 00000000;
+2123 : 00000000;
+2124 : 00000000;
+2125 : 00000000;
+2126 : 00000000;
+2127 : 00000000;
+2128 : 00000000;
+2129 : 00005F00;
+212a : 002C0000;
+212b : 02010000;
+212c : 00005EE8;
+212d : 00360000;
+212e : 03020000;
+212f : 00005EF4;
+2130 : 00360001;
+2131 : 057F0000;
+2132 : 00005F0C;
+2133 : 00400000;
+2134 : 05000000;
+2135 : 00005F18;
+2136 : FFFF0000;
+2137 : 057F0000;
+2138 : 00005F24;
+2139 : FFFF0000;
+213a : 047F0000;
+213b : 00000000;
+213c : 00000000;
+213d : 00000000;
+213e : 00000000;
+213f : 00000000;
+2140 : 00000000;
+2141 : 00000000;
+2142 : 00000000;
+2143 : 00000000;
+2144 : 00000000;
+2145 : 00000000;
+2146 : 00000000;
+2147 : 00000000;
+2148 : 00000000;
+2149 : 00000000;
+214a : 00000000;
+214b : 00000000;
+214c : 00000000;
+214d : 00000000;
+214e : 00008920;
+214f : 00008A3C;
+2150 : 00008A20;
+2151 : 00008E50;
+2152 : 00008ED0;
+2153 : 00000000;
+2154 : 00000000;
+2155 : 00000000;
+2156 : 00000000;
+2157 : 00000000;
+2158 : 00000000;
+2159 : 00000000;
+215a : 00000000;
+215b : 00000000;
+215c : 00000000;
+215d : 00000000;
+215e : 00000000;
+215f : 00000000;
+2160 : 00000000;
+2161 : 00000000;
+2162 : 00000000;
+2163 : 00000000;
+2164 : 00000000;
+2165 : 00000000;
+2166 : 00000000;
+2167 : 00000000;
+2168 : 00000000;
+2169 : 00000000;
+216a : 00000000;
+216b : 00000000;
+216c : 00000000;
+216d : 00000000;
+216e : 00000000;
+216f : 00000000;
+2170 : 00000000;
+2171 : 00000000;
+2172 : 00000000;
+2173 : 00000000;
+2174 : 00000000;
+2175 : 00000000;
+2176 : 00000000;
+2177 : 00000000;
+2178 : 00000000;
+2179 : 00000000;
+217a : 00000000;
+217b : 00000000;
+217c : 00000000;
+217d : 00000000;
+217e : 00000000;
+217f : 00000000;
+2180 : 00000000;
+2181 : 00000000;
+2182 : 00000000;
+2183 : 00000000;
+2184 : 00000000;
+2185 : 00000000;
+2186 : 00000000;
+2187 : 00000000;
+2188 : 00000000;
+2189 : 00000000;
+218a : 00000000;
+218b : 00000000;
+218c : 00000000;
+218d : 00000000;
+218e : 00000000;
+218f : 00000000;
+2190 : 00000000;
+2191 : 00000000;
+2192 : 00000000;
+2193 : 00000000;
+2194 : 00000000;
+2195 : 00000000;
+2196 : 00000000;
+2197 : 00000000;
+2198 : 00000000;
+2199 : 00000000;
+219a : 00000000;
+219b : 00000000;
+219c : 00000000;
+219d : 00000000;
+219e : 00000000;
+219f : 00000000;
+21a0 : 00000000;
+21a1 : 00000000;
+21a2 : 00000000;
+21a3 : 00000000;
+21a4 : 00000000;
+21a5 : 00000000;
+21a6 : 00000000;
+21a7 : 00000000;
+21a8 : 00000000;
+21a9 : 00000000;
+21aa : 00000000;
+21ab : 00000000;
+21ac : 00000000;
+21ad : 00000000;
+21ae : 00000000;
+21af : 00000000;
+21b0 : 00000000;
+21b1 : 00000000;
+21b2 : 00000000;
+21b3 : 00000000;
+21b4 : 00000000;
+21b5 : 00000000;
+21b6 : 00000000;
+21b7 : 00000000;
+21b8 : 00000000;
+21b9 : 00000000;
+21ba : 00000000;
+21bb : 00000000;
+21bc : 00000000;
+21bd : 00000000;
+21be : 00000000;
+21bf : 00000000;
+21c0 : 00000000;
+21c1 : 00000000;
+21c2 : 00000000;
+21c3 : 00000000;
+21c4 : 00000000;
+21c5 : 00000000;
+21c6 : 00000000;
+21c7 : 00000000;
+21c8 : 00000000;
+21c9 : 00000000;
+21ca : 00000000;
+21cb : 00000000;
+21cc : 00000000;
+21cd : 00000000;
+21ce : 00000000;
+21cf : 00000000;
+21d0 : 00000000;
+21d1 : 00000000;
+21d2 : 00000000;
+21d3 : 00000000;
+21d4 : 00000000;
+21d5 : 00000000;
+21d6 : 00000000;
+21d7 : 00000000;
+21d8 : 00000000;
+21d9 : 00000000;
+21da : 00000000;
+21db : 00000000;
+21dc : 00000000;
+21dd : 00000000;
+21de : 00000000;
+21df : 00000000;
+21e0 : 00000000;
+21e1 : 00000000;
+21e2 : 00000000;
+21e3 : 00000000;
+21e4 : 00000000;
+21e5 : 00000000;
+21e6 : 00000000;
+21e7 : 00000000;
+21e8 : 00000000;
+21e9 : 00000000;
+21ea : 00000000;
+21eb : 00000000;
+21ec : 00000000;
+21ed : 00000000;
+21ee : 00000000;
+21ef : 00000000;
+21f0 : 00000000;
+21f1 : 00000000;
+21f2 : 00000000;
+21f3 : 00000000;
+21f4 : 00000000;
+21f5 : 00000000;
+21f6 : 00000000;
+21f7 : 00000000;
+21f8 : 00000000;
+21f9 : 00000000;
+21fa : 00000000;
+21fb : 00000000;
+21fc : 00000000;
+21fd : 00000000;
+21fe : 00000000;
+21ff : 00000000;
+2200 : 00000000;
+2201 : 00000000;
+2202 : 00000000;
+2203 : 00000000;
+2204 : 00000000;
+2205 : 00000000;
+2206 : 00000000;
+2207 : 00000000;
+2208 : 00000000;
+2209 : 00000000;
+220a : 00000000;
+220b : 00000000;
+220c : 00000000;
+220d : 00000000;
+220e : 00000000;
+220f : 00000000;
+2210 : 00000000;
+2211 : 00000000;
+2212 : 00000000;
+2213 : 00000000;
+2214 : 00000000;
+2215 : 00000000;
+2216 : 00000000;
+2217 : 00000000;
+2218 : 00008964;
+2219 : 00000000;
+221a : 00000000;
+221b : 00000000;
+221c : 00000000;
+221d : 00000000;
+221e : 00000000;
+221f : 00000000;
+2220 : 00000000;
+2221 : 00000000;
+2222 : 00000000;
+2223 : 00000000;
+2224 : 00000000;
+2225 : 00000000;
+2226 : 00000000;
+2227 : 00000000;
+2228 : 00000000;
+2229 : 00000000;
+222a : 00000000;
+222b : 00000000;
+222c : 00000000;
+222d : 00000000;
+222e : 00000000;
+222f : 00000000;
+2230 : 00000000;
+2231 : 00000000;
+2232 : 00000000;
+2233 : 00000000;
+2234 : 00000000;
+2235 : 00000000;
+2236 : 00005FB4;
+2237 : 00005FB4;
+2238 : 00000000;
+2239 : 00000001;
+223a : 00000000;
+223b : 00000000;
+223c : 00000000;
+223d : 00000000;
+223e : 00000000;
+223f : 00000000;
+2240 : 00000000;
+2241 : 00000000;
+2242 : 00000000;
+2243 : 00000000;
+2244 : 00000000;
+2245 : 00000000;
+2246 : 00000000;
+2247 : 00000000;
+2248 : 00008508;
+2249 : 00008F50;
+224a : 00000000;
+224b : 00008F90;
+224c : 00008FB8;
+224d : 00008FE8;
+224e : 00009010;
+224f : 00000000;
+2250 : 00000000;
+2251 : 00000000;
+2252 : 00000000;
+2253 : 00000000;
+2254 : 00000000;
+2255 : 00000000;
+2256 : 00000000;
+2257 : 00000000;
+2258 : 00009030;
+2259 : 00000000;
+225a : 00000000;
+225b : 00000000;
+225c : 00000000;
+225d : 00008978;
+225e : 000089E4;
+225f : 00000000;
+2260 : 00000000;
+2261 : 00000000;
+2262 : 00000000;
+2263 : 00000000;
+2264 : 00000000;
+2265 : 00000000;
+2266 : 00000000;
+2267 : 00000000;
+2268 : 00000000;
+2269 : 00000000;
+226a : 00000000;
+226b : 00000000;
+226c : 00000000;
+226d : 00000000;
+226e : 00000000;
+226f : 00000000;
+2270 : 00000000;
+2271 : 00000000;
+2272 : 00000000;
+2273 : 00000000;
+2274 : 00000000;
+2275 : 00000000;
+2276 : 00000000;
+2277 : 00000000;
+2278 : 00000000;
+2279 : 000003DC;
+227a : 00000414;
+227b : 000004A4;
+227c : 000004AC;
+227d : 00000504;
+227e : 00000530;
+227f : 00000588;
+2280 : 000005AC;
+2281 : 00000670;
+2282 : 00000678;
+2283 : 00000680;
+2284 : 000006E4;
+2285 : 00000700;
+2286 : 000004D0;
+2287 : 00000000;
+2288 : 0000127C;
+2289 : 000011F4;
+228a : 00001198;
+228b : 00001140;
+228c : 00000000;
+228d : 00000000;
+228e : 00001118;
+228f : 000016EC;
+2290 : 000016CC;
+2291 : 000014C4;
+2292 : 00001310;
+2293 : 00000000;
+2294 : 00000000;
+2295 : 00000000;
+2296 : 00000000;
+2297 : 00000000;
+2298 : 00000000;
+2299 : 00000000;
+229a : 00000000;
+229b : 00000000;
+229c : 00000000;
+229d : 00000000;
+229e : 00000200;
+229f : 00000000;
+22a0 : 00009150;
+22a1 : 00008B68;
+22a2 : 00008C64;
+22a3 : 00000000;
+22a4 : 00000000;
+22a5 : 00000004;
+22a6 : 00000008;
+22a7 : 0000000F;
+22a8 : 00000100;
+22a9 : 00000200;
+22aa : 0000012C;
+22ab : 046362A0;
+22ac : 00007FB0;
+22ad : 00009434;
+22ae : 00000001;
+22af : 00000000;
+22b0 : 00000000;
+22b1 : 00000000;
+22b2 : 00000000;
+22b3 : 00003B00;
+22b4 : 00003BE4;
+22b5 : 00000000;
+22b6 : 00000000;
+22b7 : 00000000;
+22b8 : 00000000;
+22b9 : 00000000;
+22ba : 00000000;
+22bb : 00000000;
+22bc : 00000000;
+22bd : 00000000;
+22be : 00000000;
+22bf : 00000000;
+22c0 : 00000000;
+22c1 : 00000000;
+22c2 : 00000000;
+22c3 : 00000000;
+22c4 : 00000000;
+22c5 : 00000000;
+22c6 : 00000000;
+22c7 : 00000000;
+22c8 : 00000000;
+22c9 : 00000000;
+22ca : 00000000;
+22cb : 00000000;
+22cc : 00000000;
+22cd : 00000000;
+22ce : 00000000;
+22cf : 00000000;
+22d0 : 00000000;
+22d1 : 00000000;
+22d2 : 00000000;
+22d3 : 00000000;
+22d4 : 00000000;
+22d5 : 00000000;
+22d6 : 00000000;
+22d7 : 00000000;
+22d8 : 00000000;
+22d9 : 00000000;
+22da : 44332211;
+22db : 00000000;
+22dc : 04000000;
+22dd : 138046E2;
+22de : 01000000;
+22df : 9000CFEA;
+22e0 : 01000000;
+22e1 : 108157F3;
+22e2 : 01000000;
+22e3 : 0BE0FFFF;
+22e4 : 01000000;
+22e5 : 88E0FFFF;
+22e6 : 01000000;
+22e7 : 08E1FFFF;
+22e8 : 01000000;
+22e9 : 1B0020E0;
+22ea : 01000000;
+22eb : 9800C0EB;
+22ec : 01000000;
+22ed : 6B2130E0;
+22ee : 01000000;
+22ef : 69610DE0;
+22f0 : 01000000;
+22f1 : 10A38900;
+22f2 : 04000000;
+22f3 : 6B0320F0;
+22f4 : 01000000;
+22f5 : BB0D8001;
+22f6 : 04000000;
+22f7 : 33E31EF1;
+22f8 : 01000000;
+22f9 : 31C35FF9;
+22fa : 01000000;
+22fb : 2B0300E1;
+22fc : 01000000;
+22fd : 43C300E1;
+22fe : 01000000;
+22ff : 79411400;
+2300 : 04000000;
+2301 : CB250060;
+2302 : 00000000;
+2303 : D3250260;
+2304 : 00000000;
+2305 : 50EA8101;
+2306 : 04000000;
+2307 : 81C88001;
+2308 : 04000000;
+2309 : 802FC100;
+230a : 04000000;
+230b : 5B090080;
+230c : 01000000;
+230d : 59092080;
+230e : 01000000;
+230f : C06AC100;
+2310 : 04000000;
+2311 : 63097AFD;
+2312 : 01000000;
+2313 : F88A8101;
+2314 : 04000000;
+2315 : F48A8101;
+2316 : 04000000;
+2317 : 00000000;
+2318 : 08000000;
+2319 : 5344422D;
+231a : 00050101;
+231b : 00000000;
+231c : 00000000;
+231d : 00000000;
+231e : 0000037F;
+231f : 46696C65;
+2320 : 44617461;
+2321 : 2E202020;
+2322 : 00000001;
+2323 : 00000000;
+2324 : 2E202020;
+2325 : 20202020;
+2326 : 20202020;
+2327 : 20202020;
+2328 : 20202000;
+2329 : 00000000;
+232a : 00000006;
+232b : 00000000;
+232c : 00000140;
+232d : 00000000;
+232e : 0000023F;
+232f : 46696C65;
+2330 : 44617461;
+2331 : 77722D69;
+2332 : 00000001;
+2333 : 00000000;
+2334 : 77722D69;
+2335 : 6E697420;
+2336 : 20202020;
+2337 : 20202020;
+2338 : 20202001;
+2339 : 00000000;
+233a : 00000006;
+233b : 00000000;
+233c : 00000240;
+233d : 00000000;
+233e : 000002BF;
+233f : 46696C65;
+2340 : 44617461;
+2341 : 63616C69;
+2342 : 00000001;
+2343 : 00000000;
+2344 : 63616C69;
+2345 : 62726174;
+2346 : 696F6E20;
+2347 : 20202020;
+2348 : 20202001;
+2349 : 00000000;
+234a : 00000006;
+234b : 00000000;
+234c : 000002C0;
+234d : 00000000;
+234e : 000002C5;
+234f : 46696C65;
+2350 : 44617461;
+2351 : 6D61632D;
+2352 : 00000001;
+2353 : 00000000;
+2354 : 6D61632D;
+2355 : 61646472;
+2356 : 65737320;
+2357 : 20202020;
+2358 : 20202001;
+2359 : 00000000;
+235a : 00000006;
+235b : 00000000;
+235c : 00000300;
+235d : 00000000;
+235e : 0000037F;
+235f : 46696C65;
+2360 : 44617461;
+2361 : 7366702D;
+2362 : 00000001;
+2363 : 00000000;
+2364 : 7366702D;
+2365 : 64617461;
+2366 : 62617365;
+2367 : 20202020;
+2368 : 20202001;
+2369 : FFFFFFFF;
+236a : 5B1157A7;
+236b : 00000003;
+236c : 00000000;
+236d : 00000000;
+236e : 00000000;
+236f : 00000000;
+2370 : 00000000;
+2371 : 00000000;
+2372 : 00000000;
+2373 : 00000000;
+2374 : 00000000;
+2375 : 00000000;
+2376 : 00000000;
+2377 : 77727063;
+2378 : 2D76342E;
+2379 : 32000000;
+237a : 00000000;
+237b : 00000000;
+237c : 00000000;
+237d : 00000000;
+237e : 00000000;
+237f : 44656320;
+2380 : 31382032;
+2381 : 30313700;
+2382 : 00000000;
+2383 : 30393A33;
+2384 : 393A3337;
+2385 : 00000000;
+2386 : 00000000;
+2387 : 47727A65;
+2388 : 676F727A;
+2389 : 2044616E;
+238a : 696C756B;
+238b : 00000000;
+238c : 00000000;
+238d : 00000000;
+238e : 00000000;
+238f : 00000000;
+2390 : 00000000;
+2391 : 00000000;
+2392 : 00000000;
+2393 : 00000000;
+2394 : 00000000;
+2395 : 00000000;
+2396 : 00000000;
+2397 : 00000000;
+2398 : 00000000;
+2399 : 00000000;
+239a : 00000000;
+239b : 00000000;
+239c : 00000000;
+239d : 00000000;
+239e : 00000000;
+239f : 00000000;
+23a0 : 00000000;
+23a1 : 00000000;
+23a2 : 00000000;
+23a3 : 00000000;
+23a4 : 00000000;
+23a5 : 00000000;
+23a6 : 00000000;
+23a7 : 00000000;
+23a8 : 00000000;
+23a9 : 00000000;
+23aa : 00000000;
+23ab : 00000000;
+23ac : 00000000;
+23ad : 00000000;
+23ae : 00000000;
+23af : 00000000;
+23b0 : 00000000;
+23b1 : 00000000;
+23b2 : 00000000;
+23b3 : 00000000;
+23b4 : 00000000;
+23b5 : 00000000;
+23b6 : 00000000;
+23b7 : 00000000;
+23b8 : 00000000;
+23b9 : 00000000;
+23ba : 00000000;
+23bb : 00000000;
+23bc : 00000000;
+23bd : 00000000;
+23be : 00000000;
+23bf : 00000000;
+23c0 : 00000000;
+23c1 : 00000000;
+23c2 : 00000000;
+23c3 : 00000000;
+23c4 : 00000000;
+23c5 : 00000000;
+23c6 : 00000000;
+23c7 : 00000000;
+23c8 : 00000000;
+23c9 : 00000000;
+23ca : 00000000;
+23cb : 00000000;
+23cc : 00000000;
+23cd : 00000000;
+23ce : 00000000;
+23cf : 00000000;
+23d0 : 00000000;
+23d1 : 00000000;
+23d2 : 00000000;
+23d3 : 00000000;
+23d4 : 00000000;
+23d5 : 00000000;
+23d6 : 00000000;
+23d7 : 00000000;
+23d8 : 00000000;
+23d9 : 00000000;
+23da : 00000000;
+23db : 00000000;
+23dc : 00000000;
+23dd : 00000000;
+23de : 00000000;
+23df : 00000000;
+23e0 : 00000000;
+23e1 : 00000000;
+23e2 : 00000000;
+23e3 : 00000000;
+23e4 : 00000000;
+23e5 : 00000000;
+23e6 : 00000000;
+23e7 : 00000000;
+23e8 : 00000000;
+23e9 : 00000000;
+23ea : 00000000;
+23eb : 00000000;
+23ec : 00000000;
+23ed : 00000000;
+23ee : 00000000;
+23ef : 00000000;
+23f0 : 00000000;
+23f1 : 00000000;
+23f2 : 00000000;
+23f3 : 00000000;
+23f4 : 00000000;
+23f5 : 00000000;
+23f6 : 00000000;
+23f7 : 00000000;
+23f8 : 00000000;
+23f9 : 00000000;
+23fa : 00000000;
+23fb : 00000000;
+23fc : 00000000;
+23fd : 00000000;
+23fe : 00000000;
+23ff : 00000000;
+2400 : 00000000;
+2401 : 00000000;
+2402 : 00000000;
+2403 : 00000000;
+2404 : 00000000;
+2405 : 00000000;
+2406 : 00000000;
+2407 : 00000000;
+2408 : 00000000;
+2409 : 00000000;
+240a : 00000000;
+240b : 00000000;
+240c : 00000000;
+240d : 00000000;
+240e : 00000000;
+240f : 00000000;
+2410 : 00000000;
+2411 : 00000000;
+2412 : 00000000;
+2413 : 00000000;
+2414 : 00000000;
+2415 : 00000000;
+2416 : 00000000;
+2417 : 00000000;
+2418 : 00000000;
+2419 : 00000000;
+241a : 00000000;
+241b : 00000000;
+241c : 00000000;
+241d : 00000000;
+241e : 00000000;
+241f : 00000000;
+2420 : 00000000;
+2421 : 00000000;
+2422 : 00000000;
+2423 : 00000000;
+2424 : 00000000;
+2425 : 00000000;
+2426 : 00000000;
+2427 : 00000000;
+2428 : 00000000;
+2429 : 00000000;
+242a : 00000000;
+242b : 00000000;
+242c : 00000000;
+242d : 00000000;
+242e : 00000000;
+242f : 00000000;
+2430 : 00000000;
+2431 : 00000000;
+2432 : 00000000;
+2433 : 00000000;
+2434 : 00000000;
+2435 : 00000000;
+2436 : 00000000;
+2437 : 00000000;
+2438 : 00000000;
+2439 : 00000000;
+243a : 00000000;
+243b : 00000000;
+243c : 00000000;
+243d : 00000000;
+243e : 00000000;
+243f : 00000000;
+2440 : 00000000;
+2441 : 00000000;
+2442 : 00000000;
+2443 : 00000000;
+2444 : 00000000;
+2445 : 00000000;
+2446 : 00000000;
+2447 : 00000000;
+2448 : 00000000;
+2449 : 00000000;
+244a : 00000000;
+244b : 00000000;
+244c : 00000000;
+244d : 00000000;
+244e : 00000000;
+244f : 00000000;
+2450 : 00000000;
+2451 : 00000000;
+2452 : 00000000;
+2453 : 00000000;
+2454 : 00000000;
+2455 : 00000000;
+2456 : 00000000;
+2457 : 00000000;
+2458 : 00000000;
+2459 : 00000000;
+245a : 00000000;
+245b : 00000000;
+245c : 00000000;
+245d : 00000000;
+245e : 00000000;
+245f : 00000000;
+2460 : 00000000;
+2461 : 00000000;
+2462 : 00000000;
+2463 : 00000000;
+2464 : 00000000;
+2465 : 00000000;
+2466 : 00000000;
+2467 : 00000000;
+2468 : 00000000;
+2469 : 00000000;
+246a : 00000000;
+246b : 00000000;
+246c : 00000000;
+246d : 00000000;
+246e : 00000000;
+246f : 00000000;
+2470 : 00000000;
+2471 : 00000000;
+2472 : 00000000;
+2473 : 00000000;
+2474 : 00000000;
+2475 : 00000000;
+2476 : 00000000;
+2477 : 00000000;
+2478 : 00000000;
+2479 : 00000000;
+247a : 00000000;
+247b : 00000000;
+247c : 00000000;
+247d : 00000000;
+247e : 00000000;
+247f : 00000000;
+2480 : 00000000;
+2481 : 00000000;
+2482 : 00000000;
+2483 : 00000000;
+2484 : 00000000;
+2485 : 00000000;
+2486 : 00000000;
+2487 : 00000000;
+2488 : 00000000;
+2489 : 00000000;
+248a : 00000000;
+248b : 00000000;
+248c : 00000000;
+248d : 00000000;
+248e : 00000000;
+248f : 00000000;
+2490 : 00000000;
+2491 : 00000000;
+2492 : 00000000;
+2493 : 00000000;
+2494 : 00000000;
+2495 : 00000000;
+2496 : 00000000;
+2497 : 00000000;
+2498 : 00000000;
+2499 : 00000000;
+249a : 00000000;
+249b : 00000000;
+249c : 00000000;
+249d : 00000000;
+249e : 00000000;
+249f : 00000000;
+24a0 : 00000000;
+24a1 : 00000000;
+24a2 : 00000000;
+24a3 : 00000000;
+24a4 : 00000000;
+24a5 : 00000000;
+24a6 : 00000000;
+24a7 : 00000000;
+24a8 : 00000000;
+24a9 : 00000000;
+24aa : 00000000;
+24ab : 00000000;
+24ac : 00000000;
+24ad : 00000000;
+24ae : 00000000;
+24af : 00000000;
+24b0 : 00000000;
+24b1 : 00000000;
+24b2 : 00000000;
+24b3 : 00000000;
+24b4 : 00000000;
+24b5 : 00000000;
+24b6 : 00000000;
+24b7 : 00000000;
+24b8 : 00000000;
+24b9 : 00000000;
+24ba : 00000000;
+24bb : 00000000;
+24bc : 00000000;
+24bd : 00000000;
+24be : 00000000;
+24bf : 00000000;
+24c0 : 00000000;
+24c1 : 00000000;
+24c2 : 00000000;
+24c3 : 00000000;
+24c4 : 00000000;
+24c5 : 00000000;
+24c6 : 00000000;
+24c7 : 00000000;
+24c8 : 00000000;
+24c9 : 00000000;
+24ca : 00000000;
+24cb : 00000000;
+24cc : 00000000;
+24cd : 00000000;
+24ce : 00000000;
+24cf : 00000000;
+24d0 : 00000000;
+24d1 : 00000000;
+24d2 : 00000000;
+24d3 : 00000000;
+24d4 : 00000000;
+24d5 : 00000000;
+24d6 : 00000000;
+24d7 : 00000000;
+24d8 : 00000000;
+24d9 : 00000000;
+24da : 00000000;
+24db : 00000000;
+24dc : 00000000;
+24dd : 00000000;
+24de : 00000000;
+24df : 00000000;
+24e0 : 00000000;
+24e1 : 00000000;
+24e2 : 00000000;
+24e3 : 00000000;
+24e4 : 00000000;
+24e5 : 00000000;
+24e6 : 00000000;
+24e7 : 00000000;
+24e8 : 00000000;
+24e9 : 00000000;
+24ea : 00000000;
+24eb : 00000000;
+24ec : 00000000;
+24ed : 00000000;
+24ee : 00000000;
+24ef : 00000000;
+24f0 : 00000000;
+24f1 : 00000000;
+24f2 : 00000000;
+24f3 : 00000000;
+24f4 : 00000000;
+24f5 : 00000000;
+24f6 : 00000000;
+24f7 : 00000000;
+24f8 : 00000000;
+24f9 : 00000000;
+24fa : 00000000;
+24fb : 00000000;
+24fc : 00000000;
+24fd : 00000000;
+24fe : 00000000;
+24ff : 00000000;
+2500 : 00000000;
+2501 : 00000000;
+2502 : 00000000;
+2503 : 00000000;
+2504 : 00000000;
+2505 : 00000000;
+2506 : 00000000;
+2507 : 00000000;
+2508 : 00000000;
+2509 : 00000000;
+250a : 00000000;
+250b : 00000000;
+250c : 00000000;
+250d : 00000000;
+250e : 00000000;
+250f : 00000000;
+2510 : 00000000;
+2511 : 00000000;
+2512 : 00000000;
+2513 : 00000000;
+2514 : 00000000;
+2515 : 00000000;
+2516 : 00000000;
+2517 : 00000000;
+2518 : 00000000;
+2519 : 00000000;
+251a : 00000000;
+251b : 00000000;
+251c : 00000000;
+251d : 00000000;
+251e : 00000000;
+251f : 00000000;
+2520 : 00000000;
+2521 : 00000000;
+2522 : 00000000;
+2523 : 00000000;
+2524 : 00000000;
+2525 : 00000000;
+2526 : 00000000;
+2527 : 00000000;
+2528 : 00000000;
+2529 : 00000000;
+252a : 00000000;
+252b : 00000000;
+252c : 00000000;
+252d : 00000000;
+252e : 00000000;
+252f : 00000000;
+2530 : 00000000;
+2531 : 00000000;
+2532 : 00000000;
+2533 : 00000000;
+2534 : 00000000;
+2535 : 00000000;
+2536 : 00000000;
+2537 : 00000000;
+2538 : 00000000;
+2539 : 00000000;
+253a : 00000000;
+253b : 00000000;
+253c : 00000000;
+253d : 00000000;
+253e : 00000000;
+253f : 00000000;
+2540 : 00000000;
+2541 : 00000000;
+2542 : 00000000;
+2543 : 00000000;
+2544 : 00000000;
+2545 : 00000000;
+2546 : 00000000;
+2547 : 00000000;
+2548 : 00000000;
+2549 : 00000000;
+254a : 00000000;
+254b : 00000000;
+254c : 00000000;
+254d : 00000000;
+254e : 00000000;
+254f : 00000000;
+2550 : 00000000;
+2551 : 00000000;
+2552 : 00000000;
+2553 : 00000000;
+2554 : 00000000;
+2555 : 00000000;
+2556 : 00000000;
+2557 : 00000000;
+2558 : 00000000;
+2559 : 00000000;
+255a : 00000000;
+255b : 00000000;
+255c : 00000000;
+255d : 00000000;
+255e : 00000000;
+255f : 00000000;
+2560 : 00000000;
+2561 : 00000000;
+2562 : 00000000;
+2563 : 00000000;
+2564 : 00000000;
+2565 : 00000000;
+2566 : 00000000;
+2567 : 00000000;
+2568 : 00000000;
+2569 : 00000000;
+256a : 00000000;
+256b : 00000000;
+256c : 00000000;
+256d : 00000000;
+256e : 00000000;
+256f : 00000000;
+2570 : 00000000;
+2571 : 00000000;
+2572 : 00000000;
+2573 : 00000000;
+2574 : 00000000;
+2575 : 00000000;
+2576 : 00000000;
+2577 : 00000000;
+2578 : 00000000;
+2579 : 00000000;
+257a : 00000000;
+257b : 00000000;
+257c : 00000000;
+257d : 00000000;
+257e : 00000000;
+257f : 00000000;
+2580 : 00000000;
+2581 : 00000000;
+2582 : 00000000;
+2583 : 00000000;
+2584 : 00000000;
+2585 : 00000000;
+2586 : 00000000;
+2587 : 00000000;
+2588 : 00000000;
+2589 : 00000000;
+258a : 00000000;
+258b : 00000000;
+258c : 00000000;
+258d : 00000000;
+258e : 00000000;
+258f : 00000000;
+2590 : 00000000;
+2591 : 00000000;
+2592 : 00000000;
+2593 : 00000000;
+2594 : 00000000;
+2595 : 00000000;
+2596 : 00000000;
+2597 : 00000000;
+2598 : 00000000;
+2599 : 00000000;
+259a : 00000000;
+259b : 00000000;
+259c : 00000000;
+259d : 00000000;
+259e : 00000000;
+259f : 00000000;
+25a0 : 00000000;
+25a1 : 00000000;
+25a2 : 00000000;
+25a3 : 00000000;
+25a4 : 00000000;
+25a5 : 00000000;
+25a6 : 00000000;
+25a7 : 00000000;
+25a8 : 00000000;
+25a9 : 00000000;
+25aa : 00000000;
+25ab : 00000000;
+25ac : 00000000;
+25ad : 00000000;
+25ae : 00000000;
+25af : 00000000;
+25b0 : 00000000;
+25b1 : 00000000;
+25b2 : 00000000;
+25b3 : 00000000;
+25b4 : 00000000;
+25b5 : 00000000;
+25b6 : 00000000;
+25b7 : 00000000;
+25b8 : 00000000;
+25b9 : 00000000;
+25ba : 00000000;
+25bb : 00000000;
+25bc : 00000000;
+25bd : 00000000;
+25be : 00000000;
+25bf : 00000000;
+25c0 : 00000000;
+25c1 : 00000000;
+25c2 : 00000000;
+25c3 : 00000000;
+25c4 : 00000000;
+25c5 : 00000000;
+25c6 : 00000000;
+25c7 : 00000000;
+25c8 : 00000000;
+25c9 : 00000000;
+25ca : 00000000;
+25cb : 00000000;
+25cc : 00000000;
+25cd : 00000000;
+25ce : 00000000;
+25cf : 00000000;
+25d0 : 00000000;
+25d1 : 00000000;
+25d2 : 00000000;
+25d3 : 00000000;
+25d4 : 00000000;
+25d5 : 00000000;
+25d6 : 00000000;
+25d7 : 00000000;
+25d8 : 00000000;
+25d9 : 00000000;
+25da : 00000000;
+25db : 00000000;
+25dc : 00000000;
+25dd : 00000000;
+25de : 00000000;
+25df : 00000000;
+25e0 : 00000000;
+25e1 : 00000000;
+25e2 : 00000000;
+25e3 : 00000000;
+25e4 : 00000000;
+25e5 : 00000000;
+25e6 : 00000000;
+25e7 : 00000000;
+25e8 : 00000000;
+25e9 : 00000000;
+25ea : 00000000;
+25eb : 00000000;
+25ec : 00000000;
+25ed : 00000000;
+25ee : 00000000;
+25ef : 00000000;
+25f0 : 00000000;
+25f1 : 00000000;
+25f2 : 00000000;
+25f3 : 00000000;
+25f4 : 00000000;
+25f5 : 00000000;
+25f6 : 00000000;
+25f7 : 00000000;
+25f8 : 00000000;
+25f9 : 00000000;
+25fa : 00000000;
+25fb : 00000000;
+25fc : 00000000;
+25fd : 00000000;
+25fe : 00000000;
+25ff : 00000000;
+2600 : 00000000;
+2601 : 00000000;
+2602 : 00000000;
+2603 : 00000000;
+2604 : 00000000;
+2605 : 00000000;
+2606 : 00000000;
+2607 : 00000000;
+2608 : 00000000;
+2609 : 00000000;
+260a : 00000000;
+260b : 00000000;
+260c : 00000000;
+260d : 00000000;
+260e : 00000000;
+260f : 00000000;
+2610 : 00000000;
+2611 : 00000000;
+2612 : 00000000;
+2613 : 00000000;
+2614 : 00000000;
+2615 : 00000000;
+2616 : 00000000;
+2617 : 00000000;
+2618 : 00000000;
+2619 : 00000000;
+261a : 00000000;
+261b : 00000000;
+261c : 00000000;
+261d : 00000000;
+261e : 00000000;
+261f : 00000000;
+2620 : 00000000;
+2621 : 00000000;
+2622 : 00000000;
+2623 : 00000000;
+2624 : 00000000;
+2625 : 00000000;
+2626 : 00000000;
+2627 : 00000000;
+2628 : 00000000;
+2629 : 00000000;
+262a : 00000000;
+262b : 00000000;
+262c : 00000000;
+262d : 00000000;
+262e : 00000000;
+262f : 00000000;
+2630 : 00000000;
+2631 : 00000000;
+2632 : 00000000;
+2633 : 00000000;
+2634 : 00000000;
+2635 : 00000000;
+2636 : 00000000;
+2637 : 00000000;
+2638 : 00000000;
+2639 : 00000000;
+263a : 00000000;
+263b : 00000000;
+263c : 00000000;
+263d : 00000000;
+263e : 00000000;
+263f : 00000000;
+2640 : 00000000;
+2641 : 00000000;
+2642 : 00000000;
+2643 : 00000000;
+2644 : 00000000;
+2645 : 00000000;
+2646 : 00000000;
+2647 : 00000000;
+2648 : 00000000;
+2649 : 00000000;
+264a : 00000000;
+264b : 00000000;
+264c : 00000000;
+264d : 00000000;
+264e : 00000000;
+264f : 00000000;
+2650 : 00000000;
+2651 : 00000000;
+2652 : 00000000;
+2653 : 00000000;
+2654 : 00000000;
+2655 : 00000000;
+2656 : 00000000;
+2657 : 00000000;
+2658 : 00000000;
+2659 : 00000000;
+265a : 00000000;
+265b : 00000000;
+265c : 00000000;
+265d : 00000000;
+265e : 00000000;
+265f : 00000000;
+2660 : 00000000;
+2661 : 00000000;
+2662 : 00000000;
+2663 : 00000000;
+2664 : 00000000;
+2665 : 00000000;
+2666 : 00000000;
+2667 : 00000000;
+2668 : 00000000;
+2669 : 00000000;
+266a : 00000000;
+266b : 00000000;
+266c : 00000000;
+266d : 00000000;
+266e : 00000000;
+266f : 00000000;
+2670 : 00000000;
+2671 : 00000000;
+2672 : 00000000;
+2673 : 00000000;
+2674 : 00000000;
+2675 : 00000000;
+2676 : 00000000;
+2677 : 00000000;
+2678 : 00000000;
+2679 : 00000000;
+267a : 00000000;
+267b : 00000000;
+267c : 00000000;
+267d : 00000000;
+267e : 00000000;
+267f : 00000000;
+2680 : 00000000;
+2681 : 00000000;
+2682 : 00000000;
+2683 : 00000000;
+2684 : 00000000;
+2685 : 00000000;
+2686 : 00000000;
+2687 : 00000000;
+2688 : 00000000;
+2689 : 00000000;
+268a : 00000000;
+268b : 00000000;
+268c : 00000000;
+268d : 00000000;
+268e : 00000000;
+268f : 00000000;
+2690 : 00000000;
+2691 : 00000000;
+2692 : 00000000;
+2693 : 00000000;
+2694 : 00000000;
+2695 : 00000000;
+2696 : 00000000;
+2697 : 00000000;
+2698 : 00000000;
+2699 : 00000000;
+269a : 00000000;
+269b : 00000000;
+269c : 00000000;
+269d : 00000000;
+269e : 00000000;
+269f : 00000000;
+26a0 : 00000000;
+26a1 : 00000000;
+26a2 : 00000000;
+26a3 : 00000000;
+26a4 : 00000000;
+26a5 : 00000000;
+26a6 : 00000000;
+26a7 : 00000000;
+26a8 : 00000000;
+26a9 : 00000000;
+26aa : 00000000;
+26ab : 00000000;
+26ac : 00000000;
+26ad : 00000000;
+26ae : 00000000;
+26af : 00000000;
+26b0 : 00000000;
+26b1 : 00000000;
+26b2 : 00000000;
+26b3 : 00000000;
+26b4 : 00000000;
+26b5 : 00000000;
+26b6 : 00000000;
+26b7 : 00000000;
+26b8 : 00000000;
+26b9 : 00000000;
+26ba : 00000000;
+26bb : 00000000;
+26bc : 00000000;
+26bd : 00000000;
+26be : 00000000;
+26bf : 00000000;
+26c0 : 00000000;
+26c1 : 00000000;
+26c2 : 00000000;
+26c3 : 00000000;
+26c4 : 00000000;
+26c5 : 00000000;
+26c6 : 00000000;
+26c7 : 00000000;
+26c8 : 00000000;
+26c9 : 00000000;
+26ca : 00000000;
+26cb : 00000000;
+26cc : 00000000;
+26cd : 00000000;
+26ce : 00000000;
+26cf : 00000000;
+26d0 : 00000000;
+26d1 : 00000000;
+26d2 : 00000000;
+26d3 : 00000000;
+26d4 : 00000000;
+26d5 : 00000000;
+26d6 : 00000000;
+26d7 : 00000000;
+26d8 : 00000000;
+26d9 : 00000000;
+26da : 00000000;
+26db : 00000000;
+26dc : 00000000;
+26dd : 00000000;
+26de : 00000000;
+26df : 00000000;
+26e0 : 00000000;
+26e1 : 00000000;
+26e2 : 00000000;
+26e3 : 00000000;
+26e4 : 00000000;
+26e5 : 00000000;
+26e6 : 00000000;
+26e7 : 00000000;
+26e8 : 00000000;
+26e9 : 00000000;
+26ea : 00000000;
+26eb : 00000000;
+26ec : 00000000;
+26ed : 00000000;
+26ee : 00000000;
+26ef : 00000000;
+26f0 : 00000000;
+26f1 : 00000000;
+26f2 : 00000000;
+26f3 : 00000000;
+26f4 : 00000000;
+26f5 : 00000000;
+26f6 : 00000000;
+26f7 : 00000000;
+26f8 : 00000000;
+26f9 : 00000000;
+26fa : 00000000;
+26fb : 00000000;
+26fc : 00000000;
+26fd : 00000000;
+26fe : 00000000;
+26ff : 00000000;
+2700 : 00000000;
+2701 : 00000000;
+2702 : 00000000;
+2703 : 00000000;
+2704 : 00000000;
+2705 : 00000000;
+2706 : 00000000;
+2707 : 00000000;
+2708 : 00000000;
+2709 : 00000000;
+270a : 00000000;
+270b : 00000000;
+270c : 00000000;
+270d : 00000000;
+270e : 00000000;
+270f : 00000000;
+2710 : 00000000;
+2711 : 00000000;
+2712 : 00000000;
+2713 : 00000000;
+2714 : 00000000;
+2715 : 00000000;
+2716 : 00000000;
+2717 : 00000000;
+2718 : 00000000;
+2719 : 00000000;
+271a : 00000000;
+271b : 00000000;
+271c : 00000000;
+271d : 00000000;
+271e : 00000000;
+271f : 00000000;
+2720 : 00000000;
+2721 : 00000000;
+2722 : 00000000;
+2723 : 00000000;
+2724 : 00000000;
+2725 : 00000000;
+2726 : 00000000;
+2727 : 00000000;
+2728 : 00000000;
+2729 : 00000000;
+272a : 00000000;
+272b : 00000000;
+272c : 00000000;
+272d : 00000000;
+272e : 00000000;
+272f : 00000000;
+2730 : 00000000;
+2731 : 00000000;
+2732 : 00000000;
+2733 : 00000000;
+2734 : 00000000;
+2735 : 00000000;
+2736 : 00000000;
+2737 : 00000000;
+2738 : 00000000;
+2739 : 00000000;
+273a : 00000000;
+273b : 00000000;
+273c : 00000000;
+273d : 00000000;
+273e : 00000000;
+273f : 00000000;
+2740 : 00000000;
+2741 : 00000000;
+2742 : 00000000;
+2743 : 00000000;
+2744 : 00000000;
+2745 : 00000000;
+2746 : 00000000;
+2747 : 00000000;
+2748 : 00000000;
+2749 : 00000000;
+274a : 00000000;
+274b : 00000000;
+274c : 00000000;
+274d : 00000000;
+274e : 00000000;
+274f : 00000000;
+2750 : 00000000;
+2751 : 00000000;
+2752 : 00000000;
+2753 : 00000000;
+2754 : 00000000;
+2755 : 00000000;
+2756 : 00000000;
+2757 : 00000000;
+2758 : 00000000;
+2759 : 00000000;
+275a : 00000000;
+275b : 00000000;
+275c : 00000000;
+275d : 00000000;
+275e : 00000000;
+275f : 00000000;
+2760 : 00000000;
+2761 : 00000000;
+2762 : 00000000;
+2763 : 00000000;
+2764 : 00000000;
+2765 : 00000000;
+2766 : 00000000;
+2767 : 00000000;
+2768 : 00000000;
+2769 : 00000000;
+276a : 00000000;
+276b : 00000000;
+276c : 00000000;
+276d : 00000000;
+276e : 00000000;
+276f : 00000000;
+2770 : 00000000;
+2771 : 00000000;
+2772 : 00000000;
+2773 : 00000000;
+2774 : 00000000;
+2775 : 00000000;
+2776 : 00000000;
+2777 : 00000000;
+2778 : 00000000;
+2779 : 00000000;
+277a : 00000000;
+277b : 00000000;
+277c : 00000000;
+277d : 00000000;
+277e : 00000000;
+277f : 00000000;
+2780 : 00000000;
+2781 : 00000000;
+2782 : 00000000;
+2783 : 00000000;
+2784 : 00000000;
+2785 : 00000000;
+2786 : 00000000;
+2787 : 00000000;
+2788 : 00000000;
+2789 : 00000000;
+278a : 00000000;
+278b : 00000000;
+278c : 00000000;
+278d : 00000000;
+278e : 00000000;
+278f : 00000000;
+2790 : 00000000;
+2791 : 00000000;
+2792 : 00000000;
+2793 : 00000000;
+2794 : 00000000;
+2795 : 00000000;
+2796 : 00000000;
+2797 : 00000000;
+2798 : 00000000;
+2799 : 00000000;
+279a : 00000000;
+279b : 00000000;
+279c : 00000000;
+279d : 00000000;
+279e : 00000000;
+279f : 00000000;
+27a0 : 00000000;
+27a1 : 00000000;
+27a2 : 00000000;
+27a3 : 00000000;
+27a4 : 00000000;
+27a5 : 00000000;
+27a6 : 00000000;
+27a7 : 00000000;
+27a8 : 00000000;
+27a9 : 00000000;
+27aa : 00000000;
+27ab : 00000000;
+27ac : 00000000;
+27ad : 00000000;
+27ae : 00000000;
+27af : 00000000;
+27b0 : 00000000;
+27b1 : 00000000;
+27b2 : 00000000;
+27b3 : 00000000;
+27b4 : 00000000;
+27b5 : 00000000;
+27b6 : 00000000;
+27b7 : 00000000;
+27b8 : 00000000;
+27b9 : 00000000;
+27ba : 00000000;
+27bb : 00000000;
+27bc : 00000000;
+27bd : 00000000;
+27be : 00000000;
+27bf : 00000000;
+27c0 : 00000000;
+27c1 : 00000000;
+27c2 : 00000000;
+27c3 : 00000000;
+27c4 : 00000000;
+27c5 : 00000000;
+27c6 : 00000000;
+27c7 : 00000000;
+27c8 : 00000000;
+27c9 : 00000000;
+27ca : 00000000;
+27cb : 00000000;
+27cc : 00000000;
+27cd : 00000000;
+27ce : 00000000;
+27cf : 00000000;
+27d0 : 00000000;
+27d1 : 00000000;
+27d2 : 00000000;
+27d3 : 00000000;
+27d4 : 00000000;
+27d5 : 00000000;
+27d6 : 00000000;
+27d7 : 00000000;
+27d8 : 00000000;
+27d9 : 00000000;
+27da : 00000000;
+27db : 00000000;
+27dc : 00000000;
+27dd : 00000000;
+27de : 00000000;
+27df : 00000000;
+27e0 : 00000000;
+27e1 : 00000000;
+27e2 : 00000000;
+27e3 : 00000000;
+27e4 : 00000000;
+27e5 : 00000000;
+27e6 : 00000000;
+27e7 : 00000000;
+27e8 : 00000000;
+27e9 : 00000000;
+27ea : 00000000;
+27eb : 00000000;
+27ec : 00000000;
+27ed : 00000000;
+27ee : 00000000;
+27ef : 00000000;
+27f0 : 00000000;
+27f1 : 00000000;
+27f2 : 00000000;
+27f3 : 00000000;
+27f4 : 00000000;
+27f5 : 00000000;
+27f6 : 00000000;
+27f7 : 00000000;
+27f8 : 00000000;
+27f9 : 00000000;
+27fa : 00000000;
+27fb : 00000000;
+27fc : 00000000;
+27fd : 00000000;
+27fe : 00000000;
+27ff : 00000000;
+2800 : 00000000;
+2801 : 00000000;
+2802 : 00000000;
+2803 : 00000000;
+2804 : 00000000;
+2805 : 00000000;
+2806 : 00000000;
+2807 : 00000000;
+2808 : 00000000;
+2809 : 00000000;
+280a : 00000000;
+280b : 00000000;
+280c : 00000000;
+280d : 00000000;
+280e : 00000000;
+280f : 00000000;
+2810 : 00000000;
+2811 : 00000000;
+2812 : 00000000;
+2813 : 00000000;
+2814 : 00000000;
+2815 : 00000000;
+2816 : 00000000;
+2817 : 00000000;
+2818 : 00000000;
+2819 : 00000000;
+281a : 00000000;
+281b : 00000000;
+281c : 00000000;
+281d : 00000000;
+281e : 00000000;
+281f : 00000000;
+2820 : 00000000;
+2821 : 00000000;
+2822 : 00000000;
+2823 : 00000000;
+2824 : 00000000;
+2825 : 00000000;
+2826 : 00000000;
+2827 : 00000000;
+2828 : 00000000;
+2829 : 00000000;
+282a : 00000000;
+282b : 00000000;
+282c : 00000000;
+282d : 00000000;
+282e : 00000000;
+282f : 00000000;
+2830 : 00000000;
+2831 : 00000000;
+2832 : 00000000;
+2833 : 00000000;
+2834 : 00000000;
+2835 : 00000000;
+2836 : 00000000;
+2837 : 00000000;
+2838 : 00000000;
+2839 : 00000000;
+283a : 00000000;
+283b : 00000000;
+283c : 00000000;
+283d : 00000000;
+283e : 00000000;
+283f : 00000000;
+2840 : 00000000;
+2841 : 00000000;
+2842 : 00000000;
+2843 : 00000000;
+2844 : 00000000;
+2845 : 00000000;
+2846 : 00000000;
+2847 : 00000000;
+2848 : 00000000;
+2849 : 00000000;
+284a : 00000000;
+284b : 00000000;
+284c : 00000000;
+284d : 00000000;
+284e : 00000000;
+284f : 00000000;
+2850 : 00000000;
+2851 : 00000000;
+2852 : 00000000;
+2853 : 00000000;
+2854 : 00000000;
+2855 : 00000000;
+2856 : 00000000;
+2857 : 00000000;
+2858 : 00000000;
+2859 : 00000000;
+285a : 00000000;
+285b : 00000000;
+285c : 00000000;
+285d : 00000000;
+285e : 00000000;
+285f : 00000000;
+2860 : 00000000;
+2861 : 00000000;
+2862 : 00000000;
+2863 : 00000000;
+2864 : 00000000;
+2865 : 00000000;
+2866 : 00000000;
+2867 : 00000000;
+2868 : 00000000;
+2869 : 00000000;
+286a : 00000000;
+286b : 00000000;
+286c : 00000000;
+286d : 00000000;
+286e : 00000000;
+286f : 00000000;
+2870 : 00000000;
+2871 : 00000000;
+2872 : 00000000;
+2873 : 00000000;
+2874 : 00000000;
+2875 : 00000000;
+2876 : 00000000;
+2877 : 00000000;
+2878 : 00000000;
+2879 : 00000000;
+287a : 00000000;
+287b : 00000000;
+287c : 00000000;
+287d : 00000000;
+287e : 00000000;
+287f : 00000000;
+2880 : 00000000;
+2881 : 00000000;
+2882 : 00000000;
+2883 : 00000000;
+2884 : 00000000;
+2885 : 00000000;
+2886 : 00000000;
+2887 : 00000000;
+2888 : 00000000;
+2889 : 00000000;
+288a : 00000000;
+288b : 00000000;
+288c : 00000000;
+288d : 00000000;
+288e : 00000000;
+288f : 00000000;
+2890 : 00000000;
+2891 : 00000000;
+2892 : 00000000;
+2893 : 00000000;
+2894 : 00000000;
+2895 : 00000000;
+2896 : 00000000;
+2897 : 00000000;
+2898 : 00000000;
+2899 : 00000000;
+289a : 00000000;
+289b : 00000000;
+289c : 00000000;
+289d : 00000000;
+289e : 00000000;
+289f : 00000000;
+28a0 : 00000000;
+28a1 : 00000000;
+28a2 : 00000000;
+28a3 : 00000000;
+28a4 : 00000000;
+28a5 : 00000000;
+28a6 : 00000000;
+28a7 : 00000000;
+28a8 : 00000000;
+28a9 : 00000000;
+28aa : 00000000;
+28ab : 00000000;
+28ac : 00000000;
+28ad : 00000000;
+28ae : 00000000;
+28af : 00000000;
+28b0 : 00000000;
+28b1 : 00000000;
+28b2 : 00000000;
+28b3 : 00000000;
+28b4 : 00000000;
+28b5 : 00000000;
+28b6 : 00000000;
+28b7 : 00000000;
+28b8 : 00000000;
+28b9 : 00000000;
+28ba : 00000000;
+28bb : 00000000;
+28bc : 00000000;
+28bd : 00000000;
+28be : 00000000;
+28bf : 00000000;
+28c0 : 00000000;
+28c1 : 00000000;
+28c2 : 00000000;
+28c3 : 00000000;
+28c4 : 00000000;
+28c5 : 00000000;
+28c6 : 00000000;
+28c7 : 00000000;
+28c8 : 00000000;
+28c9 : 00000000;
+28ca : 00000000;
+28cb : 00000000;
+28cc : 00000000;
+28cd : 00000000;
+28ce : 00000000;
+28cf : 00000000;
+28d0 : 00000000;
+28d1 : 00000000;
+28d2 : 00000000;
+28d3 : 00000000;
+28d4 : 00000000;
+28d5 : 00000000;
+28d6 : 00000000;
+28d7 : 00000000;
+28d8 : 00000000;
+28d9 : 00000000;
+28da : 00000000;
+28db : 00000000;
+28dc : 00000000;
+28dd : 00000000;
+28de : 00000000;
+28df : 00000000;
+28e0 : 00000000;
+28e1 : 00000000;
+28e2 : 00000000;
+28e3 : 00000000;
+28e4 : 00000000;
+28e5 : 00000000;
+28e6 : 00000000;
+28e7 : 00000000;
+28e8 : 00000000;
+28e9 : 00000000;
+28ea : 00000000;
+28eb : 00000000;
+28ec : 00000000;
+28ed : 00000000;
+28ee : 00000000;
+28ef : 00000000;
+28f0 : 00000000;
+28f1 : 00000000;
+28f2 : 00000000;
+28f3 : 00000000;
+28f4 : 00000000;
+28f5 : 00000000;
+28f6 : 00000000;
+28f7 : 00000000;
+28f8 : 00000000;
+28f9 : 00000000;
+28fa : 00000000;
+28fb : 00000000;
+28fc : 00000000;
+28fd : 00000000;
+28fe : 00000000;
+28ff : 00000000;
+2900 : 00000000;
+2901 : 00000000;
+2902 : 00000000;
+2903 : 00000000;
+2904 : 00000000;
+2905 : 00000000;
+2906 : 00000000;
+2907 : 00000000;
+2908 : 00000000;
+2909 : 00000000;
+290a : 00000000;
+290b : 00000000;
+290c : 00000000;
+290d : 00000000;
+290e : 00000000;
+290f : 00000000;
+2910 : 00000000;
+2911 : 00000000;
+2912 : 00000000;
+2913 : 00000000;
+2914 : 00000000;
+2915 : 00000000;
+2916 : 00000000;
+2917 : 00000000;
+2918 : 00000000;
+2919 : 00000000;
+291a : 00000000;
+291b : 00000000;
+291c : 00000000;
+291d : 00000000;
+291e : 00000000;
+291f : 00000000;
+2920 : 00000000;
+2921 : 00000000;
+2922 : 00000000;
+2923 : 00000000;
+2924 : 00000000;
+2925 : 00000000;
+2926 : 00000000;
+2927 : 00000000;
+2928 : 00000000;
+2929 : 00000000;
+292a : 00000000;
+292b : 00000000;
+292c : 00000000;
+292d : 00000000;
+292e : 00000000;
+292f : 00000000;
+2930 : 00000000;
+2931 : 00000000;
+2932 : 00000000;
+2933 : 00000000;
+2934 : 00000000;
+2935 : 00000000;
+2936 : 00000000;
+2937 : 00000000;
+2938 : 00000000;
+2939 : 00000000;
+293a : 00000000;
+293b : 00000000;
+293c : 00000000;
+293d : 00000000;
+293e : 00000000;
+293f : 00000000;
+2940 : 00000000;
+2941 : 00000000;
+2942 : 00000000;
+2943 : 00000000;
+2944 : 00000000;
+2945 : 00000000;
+2946 : 00000000;
+2947 : 00000000;
+2948 : 00000000;
+2949 : 00000000;
+294a : 00000000;
+294b : 00000000;
+294c : 00000000;
+294d : 00000000;
+294e : 00000000;
+294f : 00000000;
+2950 : 00000000;
+2951 : 00000000;
+2952 : 00000000;
+2953 : 00000000;
+2954 : 00000000;
+2955 : 00000000;
+2956 : 00000000;
+2957 : 00000000;
+2958 : 00000000;
+2959 : 00000000;
+295a : 00000000;
+295b : 00000000;
+295c : 00000000;
+295d : 00000000;
+295e : 00000000;
+295f : 00000000;
+2960 : 00000000;
+2961 : 00000000;
+2962 : 00000000;
+2963 : 00000000;
+2964 : 00000000;
+2965 : 00000000;
+2966 : 00000000;
+2967 : 00000000;
+2968 : 00000000;
+2969 : 00000000;
+296a : 00000000;
+296b : 00000000;
+296c : 00000000;
+296d : 00000000;
+296e : 00000000;
+296f : 00000000;
+2970 : 00000000;
+2971 : 00000000;
+2972 : 00000000;
+2973 : 00000000;
+2974 : 00000000;
+2975 : 00000000;
+2976 : 00000000;
+2977 : 00000000;
+2978 : 00000000;
+2979 : 00000000;
+297a : 00000000;
+297b : 00000000;
+297c : 00000000;
+297d : 00000000;
+297e : 00000000;
+297f : 00000000;
+2980 : 00000000;
+2981 : 00000000;
+2982 : 00000000;
+2983 : 00000000;
+2984 : 00000000;
+2985 : 00000000;
+2986 : 00000000;
+2987 : 00000000;
+2988 : 00000000;
+2989 : 00000000;
+298a : 00000000;
+298b : 00000000;
+298c : 00000000;
+298d : 00000000;
+298e : 00000000;
+298f : 00000000;
+2990 : 00000000;
+2991 : 00000000;
+2992 : 00000000;
+2993 : 00000000;
+2994 : 00000000;
+2995 : 00000000;
+2996 : 00000000;
+2997 : 00000000;
+2998 : 00000000;
+2999 : 00000000;
+299a : 00000000;
+299b : 00000000;
+299c : 00000000;
+299d : 00000000;
+299e : 00000000;
+299f : 00000000;
+29a0 : 00000000;
+29a1 : 00000000;
+29a2 : 00000000;
+29a3 : 00000000;
+29a4 : 00000000;
+29a5 : 00000000;
+29a6 : 00000000;
+29a7 : 00000000;
+29a8 : 00000000;
+29a9 : 00000000;
+29aa : 00000000;
+29ab : 00000000;
+29ac : 00000000;
+29ad : 00000000;
+29ae : 00000000;
+29af : 00000000;
+29b0 : 00000000;
+29b1 : 00000000;
+29b2 : 00000000;
+29b3 : 00000000;
+29b4 : 00000000;
+29b5 : 00000000;
+29b6 : 00000000;
+29b7 : 00000000;
+29b8 : 00000000;
+29b9 : 00000000;
+29ba : 00000000;
+29bb : 00000000;
+29bc : 00000000;
+29bd : 00000000;
+29be : 00000000;
+29bf : 00000000;
+29c0 : 00000000;
+29c1 : 00000000;
+29c2 : 00000000;
+29c3 : 00000000;
+29c4 : 00000000;
+29c5 : 00000000;
+29c6 : 00000000;
+29c7 : 00000000;
+29c8 : 00000000;
+29c9 : 00000000;
+29ca : 00000000;
+29cb : 00000000;
+29cc : 00000000;
+29cd : 00000000;
+29ce : 00000000;
+29cf : 00000000;
+29d0 : 00000000;
+29d1 : 00000000;
+29d2 : 00000000;
+29d3 : 00000000;
+29d4 : 00000000;
+29d5 : 00000000;
+29d6 : 00000000;
+29d7 : 00000000;
+29d8 : 00000000;
+29d9 : 00000000;
+29da : 00000000;
+29db : 00000000;
+29dc : 00000000;
+29dd : 00000000;
+29de : 00000000;
+29df : 00000000;
+29e0 : 00000000;
+29e1 : 00000000;
+29e2 : 00000000;
+29e3 : 00000000;
+29e4 : 00000000;
+29e5 : 00000000;
+29e6 : 00000000;
+29e7 : 00000000;
+29e8 : 00000000;
+29e9 : 00000000;
+29ea : 00000000;
+29eb : 00000000;
+29ec : 00000000;
+29ed : 00000000;
+29ee : 00000000;
+29ef : 00000000;
+29f0 : 00000000;
+29f1 : 00000000;
+29f2 : 00000000;
+29f3 : 00000000;
+29f4 : 00000000;
+29f5 : 00000000;
+29f6 : 00000000;
+29f7 : 00000000;
+29f8 : 00000000;
+29f9 : 00000000;
+29fa : 00000000;
+29fb : 00000000;
+29fc : 00000000;
+29fd : 00000000;
+29fe : 00000000;
+29ff : 00000000;
+2a00 : 00000000;
+2a01 : 00000000;
+2a02 : 00000000;
+2a03 : 00000000;
+2a04 : 00000000;
+2a05 : 00000000;
+2a06 : 00000000;
+2a07 : 00000000;
+2a08 : 00000000;
+2a09 : 00000000;
+2a0a : 00000000;
+2a0b : 00000000;
+2a0c : 00000000;
+2a0d : 00000000;
+2a0e : 00000000;
+2a0f : 00000000;
+2a10 : 00000000;
+2a11 : 00000000;
+2a12 : 00000000;
+2a13 : 00000000;
+2a14 : 00000000;
+2a15 : 00000000;
+2a16 : 00000000;
+2a17 : 00000000;
+2a18 : 00000000;
+2a19 : 00000000;
+2a1a : 00000000;
+2a1b : 00000000;
+2a1c : 00000000;
+2a1d : 00000000;
+2a1e : 00000000;
+2a1f : 00000000;
+2a20 : 00000000;
+2a21 : 00000000;
+2a22 : 00000000;
+2a23 : 00000000;
+2a24 : 00000000;
+2a25 : 00000000;
+2a26 : 00000000;
+2a27 : 00000000;
+2a28 : 00000000;
+2a29 : 00000000;
+2a2a : 00000000;
+2a2b : 00000000;
+2a2c : 00000000;
+2a2d : 00000000;
+2a2e : 00000000;
+2a2f : 00000000;
+2a30 : 00000000;
+2a31 : 00000000;
+2a32 : 00000000;
+2a33 : 00000000;
+2a34 : 00000000;
+2a35 : 00000000;
+2a36 : 00000000;
+2a37 : 00000000;
+2a38 : 00000000;
+2a39 : 00000000;
+2a3a : 00000000;
+2a3b : 00000000;
+2a3c : 00000000;
+2a3d : 00000000;
+2a3e : 00000000;
+2a3f : 00000000;
+2a40 : 00000000;
+2a41 : 00000000;
+2a42 : 00000000;
+2a43 : 00000000;
+2a44 : 00000000;
+2a45 : 00000000;
+2a46 : 00000000;
+2a47 : 00000000;
+2a48 : 00000000;
+2a49 : 00000000;
+2a4a : 00000000;
+2a4b : 00000000;
+2a4c : 00000000;
+2a4d : 00000000;
+2a4e : 00000000;
+2a4f : 00000000;
+2a50 : 00000000;
+2a51 : 00000000;
+2a52 : 00000000;
+2a53 : 00000000;
+2a54 : 00000000;
+2a55 : 00000000;
+2a56 : 00000000;
+2a57 : 00000000;
+2a58 : 00000000;
+2a59 : 00000000;
+2a5a : 00000000;
+2a5b : 00000000;
+2a5c : 00000000;
+2a5d : 00000000;
+2a5e : 00000000;
+2a5f : 00000000;
+2a60 : 00000000;
+2a61 : 00000000;
+2a62 : 00000000;
+2a63 : 00000000;
+2a64 : 00000000;
+2a65 : 00000000;
+2a66 : 00000000;
+2a67 : 00000000;
+2a68 : 00000000;
+2a69 : 00000000;
+2a6a : 00000000;
+2a6b : 00000000;
+2a6c : 00000000;
+2a6d : 00000000;
+2a6e : 00000000;
+2a6f : 00000000;
+2a70 : 00000000;
+2a71 : 00000000;
+2a72 : 00000000;
+2a73 : 00000000;
+2a74 : 00000000;
+2a75 : 00000000;
+2a76 : 00000000;
+2a77 : 00000000;
+2a78 : 00000000;
+2a79 : 00000000;
+2a7a : 00000000;
+2a7b : 00000000;
+2a7c : 00000000;
+2a7d : 00000000;
+2a7e : 00000000;
+2a7f : 00000000;
+2a80 : 00000000;
+2a81 : 00000000;
+2a82 : 00000000;
+2a83 : 00000000;
+2a84 : 00000000;
+2a85 : 00000000;
+2a86 : 00000000;
+2a87 : 00000000;
+2a88 : 00000000;
+2a89 : 00000000;
+2a8a : 00000000;
+2a8b : 00000000;
+2a8c : 00000000;
+2a8d : 00000000;
+2a8e : 00000000;
+2a8f : 00000000;
+2a90 : 00000000;
+2a91 : 00000000;
+2a92 : 00000000;
+2a93 : 00000000;
+2a94 : 00000000;
+2a95 : 00000000;
+2a96 : 00000000;
+2a97 : 00000000;
+2a98 : 00000000;
+2a99 : 00000000;
+2a9a : 00000000;
+2a9b : 00000000;
+2a9c : 00000000;
+2a9d : 00000000;
+2a9e : 00000000;
+2a9f : 00000000;
+2aa0 : 00000000;
+2aa1 : 00000000;
+2aa2 : 00000000;
+2aa3 : 00000000;
+2aa4 : 00000000;
+2aa5 : 00000000;
+2aa6 : 00000000;
+2aa7 : 00000000;
+2aa8 : 00000000;
+2aa9 : 00000000;
+2aaa : 00000000;
+2aab : 00000000;
+2aac : 00000000;
+2aad : 00000000;
+2aae : 00000000;
+2aaf : 00000000;
+2ab0 : 00000000;
+2ab1 : 00000000;
+2ab2 : 00000000;
+2ab3 : 00000000;
+2ab4 : 00000000;
+2ab5 : 00000000;
+2ab6 : 00000000;
+2ab7 : 00000000;
+2ab8 : 00000000;
+2ab9 : 00000000;
+2aba : 00000000;
+2abb : 00000000;
+2abc : 00000000;
+2abd : 00000000;
+2abe : 00000000;
+2abf : 00000000;
+2ac0 : 00000000;
+2ac1 : 00000000;
+2ac2 : 00000000;
+2ac3 : 00000000;
+2ac4 : 00000000;
+2ac5 : 00000000;
+2ac6 : 00000000;
+2ac7 : 00000000;
+2ac8 : 00000000;
+2ac9 : 00000000;
+2aca : 00000000;
+2acb : 00000000;
+2acc : 00000000;
+2acd : 00000000;
+2ace : 00000000;
+2acf : 00000000;
+2ad0 : 00000000;
+2ad1 : 00000000;
+2ad2 : 00000000;
+2ad3 : 00000000;
+2ad4 : 00000000;
+2ad5 : 00000000;
+2ad6 : 00000000;
+2ad7 : 00000000;
+2ad8 : 00000000;
+2ad9 : 00000000;
+2ada : 00000000;
+2adb : 00000000;
+2adc : 00000000;
+2add : 00000000;
+2ade : 00000000;
+2adf : 00000000;
+2ae0 : 00000000;
+2ae1 : 00000000;
+2ae2 : 00000000;
+2ae3 : 00000000;
+2ae4 : 00000000;
+2ae5 : 00000000;
+2ae6 : 00000000;
+2ae7 : 00000000;
+2ae8 : 00000000;
+2ae9 : 00000000;
+2aea : 00000000;
+2aeb : 00000000;
+2aec : 00000000;
+2aed : 00000000;
+2aee : 00000000;
+2aef : 00000000;
+2af0 : 00000000;
+2af1 : 00000000;
+2af2 : 00000000;
+2af3 : 00000000;
+2af4 : 00000000;
+2af5 : 00000000;
+2af6 : 00000000;
+2af7 : 00000000;
+2af8 : 00000000;
+2af9 : 00000000;
+2afa : 00000000;
+2afb : 00000000;
+2afc : 00000000;
+2afd : 00000000;
+2afe : 00000000;
+2aff : 00000000;
+2b00 : 00000000;
+2b01 : 00000000;
+2b02 : 00000000;
+2b03 : 00000000;
+2b04 : 00000000;
+2b05 : 00000000;
+2b06 : 00000000;
+2b07 : 00000000;
+2b08 : 00000000;
+2b09 : 00000000;
+2b0a : 00000000;
+2b0b : 00000000;
+2b0c : 00000000;
+2b0d : 00000000;
+2b0e : 00000000;
+2b0f : 00000000;
+2b10 : 00000000;
+2b11 : 00000000;
+2b12 : 00000000;
+2b13 : 00000000;
+2b14 : 00000000;
+2b15 : 00000000;
+2b16 : 00000000;
+2b17 : 00000000;
+2b18 : 00000000;
+2b19 : 00000000;
+2b1a : 00000000;
+2b1b : 00000000;
+2b1c : 00000000;
+2b1d : 00000000;
+2b1e : 00000000;
+2b1f : 00000000;
+2b20 : 00000000;
+2b21 : 00000000;
+2b22 : 00000000;
+2b23 : 00000000;
+2b24 : 00000000;
+2b25 : 00000000;
+2b26 : 00000000;
+2b27 : 00000000;
+2b28 : 00000000;
+2b29 : 00000000;
+2b2a : 00000000;
+2b2b : 00000000;
+2b2c : 00000000;
+2b2d : 00000000;
+2b2e : 00000000;
+2b2f : 00000000;
+2b30 : 00000000;
+2b31 : 00000000;
+2b32 : 00000000;
+2b33 : 00000000;
+2b34 : 00000000;
+2b35 : 00000000;
+2b36 : 00000000;
+2b37 : 00000000;
+2b38 : 00000000;
+2b39 : 00000000;
+2b3a : 00000000;
+2b3b : 00000000;
+2b3c : 00000000;
+2b3d : 00000000;
+2b3e : 00000000;
+2b3f : 00000000;
+2b40 : 00000000;
+2b41 : 00000000;
+2b42 : 00000000;
+2b43 : 00000000;
+2b44 : 00000000;
+2b45 : 00000000;
+2b46 : 00000000;
+2b47 : 00000000;
+2b48 : 00000000;
+2b49 : 00000000;
+2b4a : 00000000;
+2b4b : 00000000;
+2b4c : 00000000;
+2b4d : 00000000;
+2b4e : 00000000;
+2b4f : 00000000;
+2b50 : 00000000;
+2b51 : 00000000;
+2b52 : 00000000;
+2b53 : 00000000;
+2b54 : 00000000;
+2b55 : 00000000;
+2b56 : 00000000;
+2b57 : 00000000;
+2b58 : 00000000;
+2b59 : 00000000;
+2b5a : 00000000;
+2b5b : 00000000;
+2b5c : 00000000;
+2b5d : 00000000;
+2b5e : 00000000;
+2b5f : 00000000;
+2b60 : 00000000;
+2b61 : 00000000;
+2b62 : 00000000;
+2b63 : 00000000;
+2b64 : 00000000;
+2b65 : 00000000;
+2b66 : 00000000;
+2b67 : 00000000;
+2b68 : 00000000;
+2b69 : 00000000;
+2b6a : 00000000;
+2b6b : 00000000;
+2b6c : 00000000;
+2b6d : 00000000;
+2b6e : 00000000;
+2b6f : 00000000;
+2b70 : 00000000;
+2b71 : 00000000;
+2b72 : 00000000;
+2b73 : 00000000;
+2b74 : 00000000;
+2b75 : 00000000;
+2b76 : 00000000;
+2b77 : 00000000;
+2b78 : 00000000;
+2b79 : 00000000;
+2b7a : 00000000;
+2b7b : 00000000;
+2b7c : 00000000;
+2b7d : 00000000;
+2b7e : 00000000;
+2b7f : 00000000;
+2b80 : 00000000;
+2b81 : 00000000;
+2b82 : 00000000;
+2b83 : 00000000;
+2b84 : 00000000;
+2b85 : 00000000;
+2b86 : 00000000;
+2b87 : 00000000;
+2b88 : 00000000;
+2b89 : 00000000;
+2b8a : 00000000;
+2b8b : 00000000;
+2b8c : 00000000;
+2b8d : 00000000;
+2b8e : 00000000;
+2b8f : 00000000;
+2b90 : 00000000;
+2b91 : 00000000;
+2b92 : 00000000;
+2b93 : 00000000;
+2b94 : 00000000;
+2b95 : 00000000;
+2b96 : 00000000;
+2b97 : 00000000;
+2b98 : 00000000;
+2b99 : 00000000;
+2b9a : 00000000;
+2b9b : 00000000;
+2b9c : 00000000;
+2b9d : 00000000;
+2b9e : 00000000;
+2b9f : 00000000;
+2ba0 : 00000000;
+2ba1 : 00000000;
+2ba2 : 00000000;
+2ba3 : 00000000;
+2ba4 : 00000000;
+2ba5 : 00000000;
+2ba6 : 00000000;
+2ba7 : 00000000;
+2ba8 : 00000000;
+2ba9 : 00000000;
+2baa : 00000000;
+2bab : 00000000;
+2bac : 00000000;
+2bad : 00000000;
+2bae : 00000000;
+2baf : 00000000;
+2bb0 : 00000000;
+2bb1 : 00000000;
+2bb2 : 00000000;
+2bb3 : 00000000;
+2bb4 : 00000000;
+2bb5 : 00000000;
+2bb6 : 00000000;
+2bb7 : 00000000;
+2bb8 : 00000000;
+2bb9 : 00000000;
+2bba : 00000000;
+2bbb : 00000000;
+2bbc : 00000000;
+2bbd : 00000000;
+2bbe : 00000000;
+2bbf : 00000000;
+2bc0 : 00000000;
+2bc1 : 00000000;
+2bc2 : 00000000;
+2bc3 : 00000000;
+2bc4 : 00000000;
+2bc5 : 00000000;
+2bc6 : 00000000;
+2bc7 : 00000000;
+2bc8 : 00000000;
+2bc9 : 00000000;
+2bca : 00000000;
+2bcb : 00000000;
+2bcc : 00000000;
+2bcd : 00000000;
+2bce : 00000000;
+2bcf : 00000000;
+2bd0 : 00000000;
+2bd1 : 00000000;
+2bd2 : 00000000;
+2bd3 : 00000000;
+2bd4 : 00000000;
+2bd5 : 00000000;
+2bd6 : 00000000;
+2bd7 : 00000000;
+2bd8 : 00000000;
+2bd9 : 00000000;
+2bda : 00000000;
+2bdb : 00000000;
+2bdc : 00000000;
+2bdd : 00000000;
+2bde : 00000000;
+2bdf : 00000000;
+2be0 : 00000000;
+2be1 : 00000000;
+2be2 : 00000000;
+2be3 : 00000000;
+2be4 : 00000000;
+2be5 : 00000000;
+2be6 : 00000000;
+2be7 : 00000000;
+2be8 : 00000000;
+2be9 : 00000000;
+2bea : 00000000;
+2beb : 00000000;
+2bec : 00000000;
+2bed : 00000000;
+2bee : 00000000;
+2bef : 00000000;
+2bf0 : 00000000;
+2bf1 : 00000000;
+2bf2 : 00000000;
+2bf3 : 00000000;
+2bf4 : 00000000;
+2bf5 : 00000000;
+2bf6 : 00000000;
+2bf7 : 00000000;
+2bf8 : 00000000;
+2bf9 : 00000000;
+2bfa : 00000000;
+2bfb : 00000000;
+2bfc : 00000000;
+2bfd : 00000000;
+2bfe : 00000000;
+2bff : 00000000;
+2c00 : 00000000;
+2c01 : 00000000;
+2c02 : 00000000;
+2c03 : 00000000;
+2c04 : 00000000;
+2c05 : 00000000;
+2c06 : 00000000;
+2c07 : 00000000;
+2c08 : 00000000;
+2c09 : 00000000;
+2c0a : 00000000;
+2c0b : 00000000;
+2c0c : 00000000;
+2c0d : 00000000;
+2c0e : 00000000;
+2c0f : 00000000;
+2c10 : 00000000;
+2c11 : 00000000;
+2c12 : 00000000;
+2c13 : 00000000;
+2c14 : 00000000;
+2c15 : 00000000;
+2c16 : 00000000;
+2c17 : 00000000;
+2c18 : 00000000;
+2c19 : 00000000;
+2c1a : 00000000;
+2c1b : 00000000;
+2c1c : 00000000;
+2c1d : 00000000;
+2c1e : 00000000;
+2c1f : 00000000;
+2c20 : 00000000;
+2c21 : 00000000;
+2c22 : 00000000;
+2c23 : 00000000;
+2c24 : 00000000;
+2c25 : 00000000;
+2c26 : 00000000;
+2c27 : 00000000;
+2c28 : 00000000;
+2c29 : 00000000;
+2c2a : 00000000;
+2c2b : 00000000;
+2c2c : 00000000;
+2c2d : 00000000;
+2c2e : 00000000;
+2c2f : 00000000;
+2c30 : 00000000;
+2c31 : 00000000;
+2c32 : 00000000;
+2c33 : 00000000;
+2c34 : 00000000;
+2c35 : 00000000;
+2c36 : 00000000;
+2c37 : 00000000;
+2c38 : 00000000;
+2c39 : 00000000;
+2c3a : 00000000;
+2c3b : 00000000;
+2c3c : 00000000;
+2c3d : 00000000;
+2c3e : 00000000;
+2c3f : 00000000;
+2c40 : 00000000;
+2c41 : 00000000;
+2c42 : 00000000;
+2c43 : 00000000;
+2c44 : 00000000;
+2c45 : 00000000;
+2c46 : 00000000;
+2c47 : 00000000;
+2c48 : 00000000;
+2c49 : 00000000;
+2c4a : 00000000;
+2c4b : 00000000;
+2c4c : 00000000;
+2c4d : 00000000;
+2c4e : 00000000;
+2c4f : 00000000;
+2c50 : 00000000;
+2c51 : 00000000;
+2c52 : 00000000;
+2c53 : 00000000;
+2c54 : 00000000;
+2c55 : 00000000;
+2c56 : 00000000;
+2c57 : 00000000;
+2c58 : 00000000;
+2c59 : 00000000;
+2c5a : 00000000;
+2c5b : 00000000;
+2c5c : 00000000;
+2c5d : 00000000;
+2c5e : 00000000;
+2c5f : 00000000;
+2c60 : 00000000;
+2c61 : 00000000;
+2c62 : 00000000;
+2c63 : 00000000;
+2c64 : 00000000;
+2c65 : 00000000;
+2c66 : 00000000;
+2c67 : 00000000;
+2c68 : 00000000;
+2c69 : 00000000;
+2c6a : 00000000;
+2c6b : 00000000;
+2c6c : 00000000;
+2c6d : 00000000;
+2c6e : 00000000;
+2c6f : 00000000;
+2c70 : 00000000;
+2c71 : 00000000;
+2c72 : 00000000;
+2c73 : 00000000;
+2c74 : 00000000;
+2c75 : 00000000;
+2c76 : 00000000;
+2c77 : 00000000;
+2c78 : 00000000;
+2c79 : 00000000;
+2c7a : 00000000;
+2c7b : 00000000;
+2c7c : 00000000;
+2c7d : 00000000;
+2c7e : 00000000;
+2c7f : 00000000;
+2c80 : 00000000;
+2c81 : 00000000;
+2c82 : 00000000;
+2c83 : 00000000;
+2c84 : 00000000;
+2c85 : 00000000;
+2c86 : 00000000;
+2c87 : 00000000;
+2c88 : 00000000;
+2c89 : 00000000;
+2c8a : 00000000;
+2c8b : 00000000;
+2c8c : 00000000;
+2c8d : 00000000;
+2c8e : 00000000;
+2c8f : 00000000;
+2c90 : 00000000;
+2c91 : 00000000;
+2c92 : 00000000;
+2c93 : 00000000;
+2c94 : 00000000;
+2c95 : 00000000;
+2c96 : 00000000;
+2c97 : 00000000;
+2c98 : 00000000;
+2c99 : 00000000;
+2c9a : 00000000;
+2c9b : 00000000;
+2c9c : 00000000;
+2c9d : 00000000;
+2c9e : 00000000;
+2c9f : 00000000;
+2ca0 : 00000000;
+2ca1 : 00000000;
+2ca2 : 00000000;
+2ca3 : 00000000;
+2ca4 : 00000000;
+2ca5 : 00000000;
+2ca6 : 00000000;
+2ca7 : 00000000;
+2ca8 : 00000000;
+2ca9 : 00000000;
+2caa : 00000000;
+2cab : 00000000;
+2cac : 00000000;
+2cad : 00000000;
+2cae : 00000000;
+2caf : 00000000;
+2cb0 : 00000000;
+2cb1 : 00000000;
+2cb2 : 00000000;
+2cb3 : 00000000;
+2cb4 : 00000000;
+2cb5 : 00000000;
+2cb6 : 00000000;
+2cb7 : 00000000;
+2cb8 : 00000000;
+2cb9 : 00000000;
+2cba : 00000000;
+2cbb : 00000000;
+2cbc : 00000000;
+2cbd : 00000000;
+2cbe : 00000000;
+2cbf : 00000000;
+2cc0 : 00000000;
+2cc1 : 00000000;
+2cc2 : 00000000;
+2cc3 : 00000000;
+2cc4 : 00000000;
+2cc5 : 00000000;
+2cc6 : 00000000;
+2cc7 : 00000000;
+2cc8 : 00000000;
+2cc9 : 00000000;
+2cca : 00000000;
+2ccb : 00000000;
+2ccc : 00000000;
+2ccd : 00000000;
+2cce : 00000000;
+2ccf : 00000000;
+2cd0 : 00000000;
+2cd1 : 00000000;
+2cd2 : 00000000;
+2cd3 : 00000000;
+2cd4 : 00000000;
+2cd5 : 00000000;
+2cd6 : 00000000;
+2cd7 : 00000000;
+2cd8 : 00000000;
+2cd9 : 00000000;
+2cda : 00000000;
+2cdb : 00000000;
+2cdc : 00000000;
+2cdd : 00000000;
+2cde : 00000000;
+2cdf : 00000000;
+2ce0 : 00000000;
+2ce1 : 00000000;
+2ce2 : 00000000;
+2ce3 : 00000000;
+2ce4 : 00000000;
+2ce5 : 00000000;
+2ce6 : 00000000;
+2ce7 : 00000000;
+2ce8 : 00000000;
+2ce9 : 00000000;
+2cea : 00000000;
+2ceb : 00000000;
+2cec : 00000000;
+2ced : 00000000;
+2cee : 00000000;
+2cef : 00000000;
+2cf0 : 00000000;
+2cf1 : 00000000;
+2cf2 : 00000000;
+2cf3 : 00000000;
+2cf4 : 00000000;
+2cf5 : 00000000;
+2cf6 : 00000000;
+2cf7 : 00000000;
+2cf8 : 00000000;
+2cf9 : 00000000;
+2cfa : 00000000;
+2cfb : 00000000;
+2cfc : 00000000;
+2cfd : 00000000;
+2cfe : 00000000;
+2cff : 00000000;
+2d00 : 00000000;
+2d01 : 00000000;
+2d02 : 00000000;
+2d03 : 00000000;
+2d04 : 00000000;
+2d05 : 00000000;
+2d06 : 00000000;
+2d07 : 00000000;
+2d08 : 00000000;
+2d09 : 00000000;
+2d0a : 00000000;
+2d0b : 00000000;
+2d0c : 00000000;
+2d0d : 00000000;
+2d0e : 00000000;
+2d0f : 00000000;
+2d10 : 00000000;
+2d11 : 00000000;
+2d12 : 00000000;
+2d13 : 00000000;
+2d14 : 00000000;
+2d15 : 00000000;
+2d16 : 00000000;
+2d17 : 00000000;
+2d18 : 00000000;
+2d19 : 00000000;
+2d1a : 00000000;
+2d1b : 00000000;
+2d1c : 00000000;
+2d1d : 00000000;
+2d1e : 00000000;
+2d1f : 00000000;
+2d20 : 00000000;
+2d21 : 00000000;
+2d22 : 00000000;
+2d23 : 00000000;
+2d24 : 00000000;
+2d25 : 00000000;
+2d26 : 00000000;
+2d27 : 00000000;
+2d28 : 00000000;
+2d29 : 00000000;
+2d2a : 00000000;
+2d2b : 00000000;
+2d2c : 00000000;
+2d2d : 00000000;
+2d2e : 00000000;
+2d2f : 00000000;
+2d30 : 00000000;
+2d31 : 00000000;
+2d32 : 00000000;
+2d33 : 00000000;
+2d34 : 00000000;
+2d35 : 00000000;
+2d36 : 00000000;
+2d37 : 00000000;
+2d38 : 00000000;
+2d39 : 00000000;
+2d3a : 00000000;
+2d3b : 00000000;
+2d3c : 00000000;
+2d3d : 00000000;
+2d3e : 00000000;
+2d3f : 00000000;
+2d40 : 00000000;
+2d41 : 00000000;
+2d42 : 00000000;
+2d43 : 00000000;
+2d44 : 00000000;
+2d45 : 00000000;
+2d46 : 00000000;
+2d47 : 00000000;
+2d48 : 00000000;
+2d49 : 00000000;
+2d4a : 00000000;
+2d4b : 00000000;
+2d4c : 00000000;
+2d4d : 00000000;
+2d4e : 00000000;
+2d4f : 00000000;
+2d50 : 00000000;
+2d51 : 00000000;
+2d52 : 00000000;
+2d53 : 00000000;
+2d54 : 00000000;
+2d55 : 00000000;
+2d56 : 00000000;
+2d57 : 00000000;
+2d58 : 00000000;
+2d59 : 00000000;
+2d5a : 00000000;
+2d5b : 00000000;
+2d5c : 00000000;
+2d5d : 00000000;
+2d5e : 00000000;
+2d5f : 00000000;
+2d60 : 00000000;
+2d61 : 00000000;
+2d62 : 00000000;
+2d63 : 00000000;
+2d64 : 00000000;
+2d65 : 00000000;
+2d66 : 00000000;
+2d67 : 00000000;
+2d68 : 00000000;
+2d69 : 00000000;
+2d6a : 00000000;
+2d6b : 00000000;
+2d6c : 00000000;
+2d6d : 00000000;
+2d6e : 00000000;
+2d6f : 00000000;
+2d70 : 00000000;
+2d71 : 00000000;
+2d72 : 00000000;
+2d73 : 00000000;
+2d74 : 00000000;
+2d75 : 00000000;
+2d76 : 00000000;
+2d77 : 00000000;
+2d78 : 00000000;
+2d79 : 00000000;
+2d7a : 00000000;
+2d7b : 00000000;
+2d7c : 00000000;
+2d7d : 00000000;
+2d7e : 00000000;
+2d7f : 00000000;
+2d80 : 00000000;
+2d81 : 00000000;
+2d82 : 00000000;
+2d83 : 00000000;
+2d84 : 00000000;
+2d85 : 00000000;
+2d86 : 00000000;
+2d87 : 00000000;
+2d88 : 00000000;
+2d89 : 00000000;
+2d8a : 00000000;
+2d8b : 00000000;
+2d8c : 00000000;
+2d8d : 00000000;
+2d8e : 00000000;
+2d8f : 00000000;
+2d90 : 00000000;
+2d91 : 00000000;
+2d92 : 00000000;
+2d93 : 00000000;
+2d94 : 00000000;
+2d95 : 00000000;
+2d96 : 00000000;
+2d97 : 00000000;
+2d98 : 00000000;
+2d99 : 00000000;
+2d9a : 00000000;
+2d9b : 00000000;
+2d9c : 00000000;
+2d9d : 00000000;
+2d9e : 00000000;
+2d9f : 00000000;
+2da0 : 00000000;
+2da1 : 00000000;
+2da2 : 00000000;
+2da3 : 00000000;
+2da4 : 00000000;
+2da5 : 00000000;
+2da6 : 00000000;
+2da7 : 00000000;
+2da8 : 00000000;
+2da9 : 00000000;
+2daa : 00000000;
+2dab : 00000000;
+2dac : 00000000;
+2dad : 00000000;
+2dae : 00000000;
+2daf : 00000000;
+2db0 : 00000000;
+2db1 : 00000000;
+2db2 : 00000000;
+2db3 : 00000000;
+2db4 : 00000000;
+2db5 : 00000000;
+2db6 : 00000000;
+2db7 : 00000000;
+2db8 : 00000000;
+2db9 : 00000000;
+2dba : 00000000;
+2dbb : 00000000;
+2dbc : 00000000;
+2dbd : 00000000;
+2dbe : 00000000;
+2dbf : 00000000;
+2dc0 : 00000000;
+2dc1 : 00000000;
+2dc2 : 00000000;
+2dc3 : 00000000;
+2dc4 : 00000000;
+2dc5 : 00000000;
+2dc6 : 00000000;
+2dc7 : 00000000;
+2dc8 : 00000000;
+2dc9 : 00000000;
+2dca : 00000000;
+2dcb : 00000000;
+2dcc : 00000000;
+2dcd : 00000000;
+2dce : 00000000;
+2dcf : 00000000;
+2dd0 : 00000000;
+2dd1 : 00000000;
+2dd2 : 00000000;
+2dd3 : 00000000;
+2dd4 : 00000000;
+2dd5 : 00000000;
+2dd6 : 00000000;
+2dd7 : 00000000;
+2dd8 : 00000000;
+2dd9 : 00000000;
+2dda : 00000000;
+2ddb : 00000000;
+2ddc : 00000000;
+2ddd : 00000000;
+2dde : 00000000;
+2ddf : 00000000;
+2de0 : 00000000;
+2de1 : 00000000;
+2de2 : 00000000;
+2de3 : 00000000;
+2de4 : 00000000;
+2de5 : 00000000;
+2de6 : 00000000;
+2de7 : 00000000;
+2de8 : 00000000;
+2de9 : 00000000;
+2dea : 00000000;
+2deb : 00000000;
+2dec : 00000000;
+2ded : 00000000;
+2dee : 00000000;
+2def : 00000000;
+2df0 : 00000000;
+2df1 : 00000000;
+2df2 : 00000000;
+2df3 : 00000000;
+2df4 : 00000000;
+2df5 : 00000000;
+2df6 : 00000000;
+2df7 : 00000000;
+2df8 : 00000000;
+2df9 : 00000000;
+2dfa : 00000000;
+2dfb : 00000000;
+2dfc : 00000000;
+2dfd : 00000000;
+2dfe : 00000000;
+2dff : 00000000;
+2e00 : 00000000;
+2e01 : 00000000;
+2e02 : 00000000;
+2e03 : 00000000;
+2e04 : 00000000;
+2e05 : 00000000;
+2e06 : 00000000;
+2e07 : 00000000;
+2e08 : 00000000;
+2e09 : 00000000;
+2e0a : 00000000;
+2e0b : 00000000;
+2e0c : 00000000;
+2e0d : 00000000;
+2e0e : 00000000;
+2e0f : 00000000;
+2e10 : 00000000;
+2e11 : 00000000;
+2e12 : 00000000;
+2e13 : 00000000;
+2e14 : 00000000;
+2e15 : 00000000;
+2e16 : 00000000;
+2e17 : 00000000;
+2e18 : 00000000;
+2e19 : 00000000;
+2e1a : 00000000;
+2e1b : 00000000;
+2e1c : 00000000;
+2e1d : 00000000;
+2e1e : 00000000;
+2e1f : 00000000;
+2e20 : 00000000;
+2e21 : 00000000;
+2e22 : 00000000;
+2e23 : 00000000;
+2e24 : 00000000;
+2e25 : 00000000;
+2e26 : 00000000;
+2e27 : 00000000;
+2e28 : 00000000;
+2e29 : 00000000;
+2e2a : 00000000;
+2e2b : 00000000;
+2e2c : 00000000;
+2e2d : 00000000;
+2e2e : 00000000;
+2e2f : 00000000;
+2e30 : 00000000;
+2e31 : 00000000;
+2e32 : 00000000;
+2e33 : 00000000;
+2e34 : 00000000;
+2e35 : 00000000;
+2e36 : 00000000;
+2e37 : 00000000;
+2e38 : 00000000;
+2e39 : 00000000;
+2e3a : 00000000;
+2e3b : 00000000;
+2e3c : 00000000;
+2e3d : 00000000;
+2e3e : 00000000;
+2e3f : 00000000;
+2e40 : 00000000;
+2e41 : 00000000;
+2e42 : 00000000;
+2e43 : 00000000;
+2e44 : 00000000;
+2e45 : 00000000;
+2e46 : 00000000;
+2e47 : 00000000;
+2e48 : 00000000;
+2e49 : 00000000;
+2e4a : 00000000;
+2e4b : 00000000;
+2e4c : 00000000;
+2e4d : 00000000;
+2e4e : 00000000;
+2e4f : 00000000;
+2e50 : 00000000;
+2e51 : 00000000;
+2e52 : 00000000;
+2e53 : 00000000;
+2e54 : 00000000;
+2e55 : 00000000;
+2e56 : 00000000;
+2e57 : 00000000;
+2e58 : 00000000;
+2e59 : 00000000;
+2e5a : 00000000;
+2e5b : 00000000;
+2e5c : 00000000;
+2e5d : 00000000;
+2e5e : 00000000;
+2e5f : 00000000;
+2e60 : 00000000;
+2e61 : 00000000;
+2e62 : 00000000;
+2e63 : 00000000;
+2e64 : 00000000;
+2e65 : 00000000;
+2e66 : 00000000;
+2e67 : 00000000;
+2e68 : 00000000;
+2e69 : 00000000;
+2e6a : 00000000;
+2e6b : 00000000;
+2e6c : 00000000;
+2e6d : 00000000;
+2e6e : 00000000;
+2e6f : 00000000;
+2e70 : 00000000;
+2e71 : 00000000;
+2e72 : 00000000;
+2e73 : 00000000;
+2e74 : 00000000;
+2e75 : 00000000;
+2e76 : 00000000;
+2e77 : 00000000;
+2e78 : 00000000;
+2e79 : 00000000;
+2e7a : 00000000;
+2e7b : 00000000;
+2e7c : 00000000;
+2e7d : 00000000;
+2e7e : 00000000;
+2e7f : 00000000;
+2e80 : 00000000;
+2e81 : 00000000;
+2e82 : 00000000;
+2e83 : 00000000;
+2e84 : 00000000;
+2e85 : 00000000;
+2e86 : 00000000;
+2e87 : 00000000;
+2e88 : 00000000;
+2e89 : 00000000;
+2e8a : 00000000;
+2e8b : 00000000;
+2e8c : 00000000;
+2e8d : 00000000;
+2e8e : 00000000;
+2e8f : 00000000;
+2e90 : 00000000;
+2e91 : 00000000;
+2e92 : 00000000;
+2e93 : 00000000;
+2e94 : 00000000;
+2e95 : 00000000;
+2e96 : 00000000;
+2e97 : 00000000;
+2e98 : 00000000;
+2e99 : 00000000;
+2e9a : 00000000;
+2e9b : 00000000;
+2e9c : 00000000;
+2e9d : 00000000;
+2e9e : 00000000;
+2e9f : 00000000;
+2ea0 : 00000000;
+2ea1 : 00000000;
+2ea2 : 00000000;
+2ea3 : 00000000;
+2ea4 : 00000000;
+2ea5 : 00000000;
+2ea6 : 00000000;
+2ea7 : 00000000;
+2ea8 : 00000000;
+2ea9 : 00000000;
+2eaa : 00000000;
+2eab : 00000000;
+2eac : 00000000;
+2ead : 00000000;
+2eae : 00000000;
+2eaf : 00000000;
+2eb0 : 00000000;
+2eb1 : 00000000;
+2eb2 : 00000000;
+2eb3 : 00000000;
+2eb4 : 00000000;
+2eb5 : 00000000;
+2eb6 : 00000000;
+2eb7 : 00000000;
+2eb8 : 00000000;
+2eb9 : 00000000;
+2eba : 00000000;
+2ebb : 00000000;
+2ebc : 00000000;
+2ebd : 00000000;
+2ebe : 00000000;
+2ebf : 00000000;
+2ec0 : 00000000;
+2ec1 : 00000000;
+2ec2 : 00000000;
+2ec3 : 00000000;
+2ec4 : 00000000;
+2ec5 : 00000000;
+2ec6 : 00000000;
+2ec7 : 00000000;
+2ec8 : 00000000;
+2ec9 : 00000000;
+2eca : 00000000;
+2ecb : 00000000;
+2ecc : 00000000;
+2ecd : 00000000;
+2ece : 00000000;
+2ecf : 00000000;
+2ed0 : 00000000;
+2ed1 : 00000000;
+2ed2 : 00000000;
+2ed3 : 00000000;
+2ed4 : 00000000;
+2ed5 : 00000000;
+2ed6 : 00000000;
+2ed7 : 00000000;
+2ed8 : 00000000;
+2ed9 : 00000000;
+2eda : 00000000;
+2edb : 00000000;
+2edc : 00000000;
+2edd : 00000000;
+2ede : 00000000;
+2edf : 00000000;
+2ee0 : 00000000;
+2ee1 : 00000000;
+2ee2 : 00000000;
+2ee3 : 00000000;
+2ee4 : 00000000;
+2ee5 : 00000000;
+2ee6 : 00000000;
+2ee7 : 00000000;
+2ee8 : 00000000;
+2ee9 : 00000000;
+2eea : 00000000;
+2eeb : 00000000;
+2eec : 00000000;
+2eed : 00000000;
+2eee : 00000000;
+2eef : 00000000;
+2ef0 : 00000000;
+2ef1 : 00000000;
+2ef2 : 00000000;
+2ef3 : 00000000;
+2ef4 : 00000000;
+2ef5 : 00000000;
+2ef6 : 00000000;
+2ef7 : 00000000;
+2ef8 : 00000000;
+2ef9 : 00000000;
+2efa : 00000000;
+2efb : 00000000;
+2efc : 00000000;
+2efd : 00000000;
+2efe : 00000000;
+2eff : 00000000;
+2f00 : 00000000;
+2f01 : 00000000;
+2f02 : 00000000;
+2f03 : 00000000;
+2f04 : 00000000;
+2f05 : 00000000;
+2f06 : 00000000;
+2f07 : 00000000;
+2f08 : 00000000;
+2f09 : 00000000;
+2f0a : 00000000;
+2f0b : 00000000;
+2f0c : 00000000;
+2f0d : 00000000;
+2f0e : 00000000;
+2f0f : 00000000;
+2f10 : 00000000;
+2f11 : 00000000;
+2f12 : 00000000;
+2f13 : 00000000;
+2f14 : 00000000;
+2f15 : 00000000;
+2f16 : 00000000;
+2f17 : 00000000;
+2f18 : 00000000;
+2f19 : 00000000;
+2f1a : 00000000;
+2f1b : 00000000;
+2f1c : 00000000;
+2f1d : 00000000;
+2f1e : 00000000;
+2f1f : 00000000;
+2f20 : 00000000;
+2f21 : 00000000;
+2f22 : 00000000;
+2f23 : 00000000;
+2f24 : 00000000;
+2f25 : 00000000;
+2f26 : 00000000;
+2f27 : 00000000;
+2f28 : 00000000;
+2f29 : 00000000;
+2f2a : 00000000;
+2f2b : 00000000;
+2f2c : 00000000;
+2f2d : 00000000;
+2f2e : 00000000;
+2f2f : 00000000;
+2f30 : 00000000;
+2f31 : 00000000;
+2f32 : 00000000;
+2f33 : 00000000;
+2f34 : 00000000;
+2f35 : 00000000;
+2f36 : 00000000;
+2f37 : 00000000;
+2f38 : 00000000;
+2f39 : 00000000;
+2f3a : 00000000;
+2f3b : 00000000;
+2f3c : 00000000;
+2f3d : 00000000;
+2f3e : 00000000;
+2f3f : 00000000;
+2f40 : 00000000;
+2f41 : 00000000;
+2f42 : 00000000;
+2f43 : 00000000;
+2f44 : 00000000;
+2f45 : 00000000;
+2f46 : 00000000;
+2f47 : 00000000;
+2f48 : 00000000;
+2f49 : 00000000;
+2f4a : 00000000;
+2f4b : 00000000;
+2f4c : 00000000;
+2f4d : 00000000;
+2f4e : 00000000;
+2f4f : 00000000;
+2f50 : 00000000;
+2f51 : 00000000;
+2f52 : 00000000;
+2f53 : 00000000;
+2f54 : 00000000;
+2f55 : 00000000;
+2f56 : 00000000;
+2f57 : 00000000;
+2f58 : 00000000;
+2f59 : 00000000;
+2f5a : 00000000;
+2f5b : 00000000;
+2f5c : 00000000;
+2f5d : 00000000;
+2f5e : 00000000;
+2f5f : 00000000;
+2f60 : 00000000;
+2f61 : 00000000;
+2f62 : 00000000;
+2f63 : 00000000;
+2f64 : 00000000;
+2f65 : 00000000;
+2f66 : 00000000;
+2f67 : 00000000;
+2f68 : 00000000;
+2f69 : 00000000;
+2f6a : 00000000;
+2f6b : 00000000;
+2f6c : 00000000;
+2f6d : 00000000;
+2f6e : 00000000;
+2f6f : 00000000;
+2f70 : 00000000;
+2f71 : 00000000;
+2f72 : 00000000;
+2f73 : 00000000;
+2f74 : 00000000;
+2f75 : 00000000;
+2f76 : 00000000;
+2f77 : 00000000;
+2f78 : 00000000;
+2f79 : 00000000;
+2f7a : 00000000;
+2f7b : 00000000;
+2f7c : 00000000;
+2f7d : 00000000;
+2f7e : 00000000;
+2f7f : 00000000;
+2f80 : 00000000;
+2f81 : 00000000;
+2f82 : 00000000;
+2f83 : 00000000;
+2f84 : 00000000;
+2f85 : 00000000;
+2f86 : 00000000;
+2f87 : 00000000;
+2f88 : 00000000;
+2f89 : 00000000;
+2f8a : 00000000;
+2f8b : 00000000;
+2f8c : 00000000;
+2f8d : 00000000;
+2f8e : 00000000;
+2f8f : 00000000;
+2f90 : 00000000;
+2f91 : 00000000;
+2f92 : 00000000;
+2f93 : 00000000;
+2f94 : 00000000;
+2f95 : 00000000;
+2f96 : 00000000;
+2f97 : 00000000;
+2f98 : 00000000;
+2f99 : 00000000;
+2f9a : 00000000;
+2f9b : 00000000;
+2f9c : 00000000;
+2f9d : 00000000;
+2f9e : 00000000;
+2f9f : 00000000;
+2fa0 : 00000000;
+2fa1 : 00000000;
+2fa2 : 00000000;
+2fa3 : 00000000;
+2fa4 : 00000000;
+2fa5 : 00000000;
+2fa6 : 00000000;
+2fa7 : 00000000;
+2fa8 : 00000000;
+2fa9 : 00000000;
+2faa : 00000000;
+2fab : 00000000;
+2fac : 00000000;
+2fad : 00000000;
+2fae : 00000000;
+2faf : 00000000;
+2fb0 : 00000000;
+2fb1 : 00000000;
+2fb2 : 00000000;
+2fb3 : 00000000;
+2fb4 : 00000000;
+2fb5 : 00000000;
+2fb6 : 00000000;
+2fb7 : 00000000;
+2fb8 : 00000000;
+2fb9 : 00000000;
+2fba : 00000000;
+2fbb : 00000000;
+2fbc : 00000000;
+2fbd : 00000000;
+2fbe : 00000000;
+2fbf : 00000000;
+2fc0 : 00000000;
+2fc1 : 00000000;
+2fc2 : 00000000;
+2fc3 : 00000000;
+2fc4 : 00000000;
+2fc5 : 00000000;
+2fc6 : 00000000;
+2fc7 : 00000000;
+2fc8 : 00000000;
+2fc9 : 00000000;
+2fca : 00000000;
+2fcb : 00000000;
+2fcc : 00000000;
+2fcd : 00000000;
+2fce : 00000000;
+2fcf : 00000000;
+2fd0 : 00000000;
+2fd1 : 00000000;
+2fd2 : 00000000;
+2fd3 : 00000000;
+2fd4 : 00000000;
+2fd5 : 00000000;
+2fd6 : 00000000;
+2fd7 : 00000000;
+2fd8 : 00000000;
+2fd9 : 00000000;
+2fda : 00000000;
+2fdb : 00000000;
+2fdc : 00000000;
+2fdd : 00000000;
+2fde : 00000000;
+2fdf : 00000000;
+2fe0 : 00000000;
+2fe1 : 00000000;
+2fe2 : 00000000;
+2fe3 : 00000000;
+2fe4 : 00000000;
+2fe5 : 00000000;
+2fe6 : 00000000;
+2fe7 : 00000000;
+2fe8 : 00000000;
+2fe9 : 00000000;
+2fea : 00000000;
+2feb : 00000000;
+2fec : 00000000;
+2fed : 00000000;
+2fee : 00000000;
+2fef : 00000000;
+2ff0 : 00000000;
+2ff1 : 00000000;
+2ff2 : 00000000;
+2ff3 : 00000000;
+2ff4 : 00000000;
+2ff5 : 00000000;
+2ff6 : 00000000;
+2ff7 : 00000000;
+2ff8 : 00000000;
+2ff9 : 00000000;
+2ffa : 00000000;
+2ffb : 00000000;
+2ffc : 00000000;
+2ffd : 00000000;
+2ffe : 00000000;
+2fff : 00000000;
+3000 : 00000000;
+3001 : 00000000;
+3002 : 00000000;
+3003 : 00000000;
+3004 : 00000000;
+3005 : 00000000;
+3006 : 00000000;
+3007 : 00000000;
+3008 : 00000000;
+3009 : 00000000;
+300a : 00000000;
+300b : 00000000;
+300c : 00000000;
+300d : 00000000;
+300e : 00000000;
+300f : 00000000;
+3010 : 00000000;
+3011 : 00000000;
+3012 : 00000000;
+3013 : 00000000;
+3014 : 00000000;
+3015 : 00000000;
+3016 : 00000000;
+3017 : 00000000;
+3018 : 00000000;
+3019 : 00000000;
+301a : 00000000;
+301b : 00000000;
+301c : 00000000;
+301d : 00000000;
+301e : 00000000;
+301f : 00000000;
+3020 : 00000000;
+3021 : 00000000;
+3022 : 00000000;
+3023 : 00000000;
+3024 : 00000000;
+3025 : 00000000;
+3026 : 00000000;
+3027 : 00000000;
+3028 : 00000000;
+3029 : 00000000;
+302a : 00000000;
+302b : 00000000;
+302c : 00000000;
+302d : 00000000;
+302e : 00000000;
+302f : 00000000;
+3030 : 00000000;
+3031 : 00000000;
+3032 : 00000000;
+3033 : 00000000;
+3034 : 00000000;
+3035 : 00000000;
+3036 : 00000000;
+3037 : 00000000;
+3038 : 00000000;
+3039 : 00000000;
+303a : 00000000;
+303b : 00000000;
+303c : 00000000;
+303d : 00000000;
+303e : 00000000;
+303f : 00000000;
+3040 : 00000000;
+3041 : 00000000;
+3042 : 00000000;
+3043 : 00000000;
+3044 : 00000000;
+3045 : 00000000;
+3046 : 00000000;
+3047 : 00000000;
+3048 : 00000000;
+3049 : 00000000;
+304a : 00000000;
+304b : 00000000;
+304c : 00000000;
+304d : 00000000;
+304e : 00000000;
+304f : 00000000;
+3050 : 00000000;
+3051 : 00000000;
+3052 : 00000000;
+3053 : 00000000;
+3054 : 00000000;
+3055 : 00000000;
+3056 : 00000000;
+3057 : 00000000;
+3058 : 00000000;
+3059 : 00000000;
+305a : 00000000;
+305b : 00000000;
+305c : 00000000;
+305d : 00000000;
+305e : 00000000;
+305f : 00000000;
+3060 : 00000000;
+3061 : 00000000;
+3062 : 00000000;
+3063 : 00000000;
+3064 : 00000000;
+3065 : 00000000;
+3066 : 00000000;
+3067 : 00000000;
+3068 : 00000000;
+3069 : 00000000;
+306a : 00000000;
+306b : 00000000;
+306c : 00000000;
+306d : 00000000;
+306e : 00000000;
+306f : 00000000;
+3070 : 00000000;
+3071 : 00000000;
+3072 : 00000000;
+3073 : 00000000;
+3074 : 00000000;
+3075 : 00000000;
+3076 : 00000000;
+3077 : 00000000;
+3078 : 00000000;
+3079 : 00000000;
+307a : 00000000;
+307b : 00000000;
+307c : 00000000;
+307d : 00000000;
+307e : 00000000;
+307f : 00000000;
+3080 : 00000000;
+3081 : 00000000;
+3082 : 00000000;
+3083 : 00000000;
+3084 : 00000000;
+3085 : 00000000;
+3086 : 00000000;
+3087 : 00000000;
+3088 : 00000000;
+3089 : 00000000;
+308a : 00000000;
+308b : 00000000;
+308c : 00000000;
+308d : 00000000;
+308e : 00000000;
+308f : 00000000;
+3090 : 00000000;
+3091 : 00000000;
+3092 : 00000000;
+3093 : 00000000;
+3094 : 00000000;
+3095 : 00000000;
+3096 : 00000000;
+3097 : 00000000;
+3098 : 00000000;
+3099 : 00000000;
+309a : 00000000;
+309b : 00000000;
+309c : 00000000;
+309d : 00000000;
+309e : 00000000;
+309f : 00000000;
+30a0 : 00000000;
+30a1 : 00000000;
+30a2 : 00000000;
+30a3 : 00000000;
+30a4 : 00000000;
+30a5 : 00000000;
+30a6 : 00000000;
+30a7 : 00000000;
+30a8 : 00000000;
+30a9 : 00000000;
+30aa : 00000000;
+30ab : 00000000;
+30ac : 00000000;
+30ad : 00000000;
+30ae : 00000000;
+30af : 00000000;
+30b0 : 00000000;
+30b1 : 00000000;
+30b2 : 00000000;
+30b3 : 00000000;
+30b4 : 00000000;
+30b5 : 00000000;
+30b6 : 00000000;
+30b7 : 00000000;
+30b8 : 00000000;
+30b9 : 00000000;
+30ba : 00000000;
+30bb : 00000000;
+30bc : 00000000;
+30bd : 00000000;
+30be : 00000000;
+30bf : 00000000;
+30c0 : 00000000;
+30c1 : 00000000;
+30c2 : 00000000;
+30c3 : 00000000;
+30c4 : 00000000;
+30c5 : 00000000;
+30c6 : 00000000;
+30c7 : 00000000;
+30c8 : 00000000;
+30c9 : 00000000;
+30ca : 00000000;
+30cb : 00000000;
+30cc : 00000000;
+30cd : 00000000;
+30ce : 00000000;
+30cf : 00000000;
+30d0 : 00000000;
+30d1 : 00000000;
+30d2 : 00000000;
+30d3 : 00000000;
+30d4 : 00000000;
+30d5 : 00000000;
+30d6 : 00000000;
+30d7 : 00000000;
+30d8 : 00000000;
+30d9 : 00000000;
+30da : 00000000;
+30db : 00000000;
+30dc : 00000000;
+30dd : 00000000;
+30de : 00000000;
+30df : 00000000;
+30e0 : 00000000;
+30e1 : 00000000;
+30e2 : 00000000;
+30e3 : 00000000;
+30e4 : 00000000;
+30e5 : 00000000;
+30e6 : 00000000;
+30e7 : 00000000;
+30e8 : 00000000;
+30e9 : 00000000;
+30ea : 00000000;
+30eb : 00000000;
+30ec : 00000000;
+30ed : 00000000;
+30ee : 00000000;
+30ef : 00000000;
+30f0 : 00000000;
+30f1 : 00000000;
+30f2 : 00000000;
+30f3 : 00000000;
+30f4 : 00000000;
+30f5 : 00000000;
+30f6 : 00000000;
+30f7 : 00000000;
+30f8 : 00000000;
+30f9 : 00000000;
+30fa : 00000000;
+30fb : 00000000;
+30fc : 00000000;
+30fd : 00000000;
+30fe : 00000000;
+30ff : 00000000;
+3100 : 00000000;
+3101 : 00000000;
+3102 : 00000000;
+3103 : 00000000;
+3104 : 00000000;
+3105 : 00000000;
+3106 : 00000000;
+3107 : 00000000;
+3108 : 00000000;
+3109 : 00000000;
+310a : 00000000;
+310b : 00000000;
+310c : 00000000;
+310d : 00000000;
+310e : 00000000;
+310f : 00000000;
+3110 : 00000000;
+3111 : 00000000;
+3112 : 00000000;
+3113 : 00000000;
+3114 : 00000000;
+3115 : 00000000;
+3116 : 00000000;
+3117 : 00000000;
+3118 : 00000000;
+3119 : 00000000;
+311a : 00000000;
+311b : 00000000;
+311c : 00000000;
+311d : 00000000;
+311e : 00000000;
+311f : 00000000;
+3120 : 00000000;
+3121 : 00000000;
+3122 : 00000000;
+3123 : 00000000;
+3124 : 00000000;
+3125 : 00000000;
+3126 : 00000000;
+3127 : 00000000;
+3128 : 00000000;
+3129 : 00000000;
+312a : 00000000;
+312b : 00000000;
+312c : 00000000;
+312d : 00000000;
+312e : 00000000;
+312f : 00000000;
+3130 : 00000000;
+3131 : 00000000;
+3132 : 00000000;
+3133 : 00000000;
+3134 : 00000000;
+3135 : 00000000;
+3136 : 00000000;
+3137 : 00000000;
+3138 : 00000000;
+3139 : 00000000;
+313a : 00000000;
+313b : 00000000;
+313c : 00000000;
+313d : 00000000;
+313e : 00000000;
+313f : 00000000;
+3140 : 00000000;
+3141 : 00000000;
+3142 : 00000000;
+3143 : 00000000;
+3144 : 00000000;
+3145 : 00000000;
+3146 : 00000000;
+3147 : 00000000;
+3148 : 00000000;
+3149 : 00000000;
+314a : 00000000;
+314b : 00000000;
+314c : 00000000;
+314d : 00000000;
+314e : 00000000;
+314f : 00000000;
+3150 : 00000000;
+3151 : 00000000;
+3152 : 00000000;
+3153 : 00000000;
+3154 : 00000000;
+3155 : 00000000;
+3156 : 00000000;
+3157 : 00000000;
+3158 : 00000000;
+3159 : 00000000;
+315a : 00000000;
+315b : 00000000;
+315c : 00000000;
+315d : 00000000;
+315e : 00000000;
+315f : 00000000;
+3160 : 00000000;
+3161 : 00000000;
+3162 : 00000000;
+3163 : 00000000;
+3164 : 00000000;
+3165 : 00000000;
+3166 : 00000000;
+3167 : 00000000;
+3168 : 00000000;
+3169 : 00000000;
+316a : 00000000;
+316b : 00000000;
+316c : 00000000;
+316d : 00000000;
+316e : 00000000;
+316f : 00000000;
+3170 : 00000000;
+3171 : 00000000;
+3172 : 00000000;
+3173 : 00000000;
+3174 : 00000000;
+3175 : 00000000;
+3176 : 00000000;
+3177 : 00000000;
+3178 : 00000000;
+3179 : 00000000;
+317a : 00000000;
+317b : 00000000;
+317c : 00000000;
+317d : 00000000;
+317e : 00000000;
+317f : 00000000;
+3180 : 00000000;
+3181 : 00000000;
+3182 : 00000000;
+3183 : 00000000;
+3184 : 00000000;
+3185 : 00000000;
+3186 : 00000000;
+3187 : 00000000;
+3188 : 00000000;
+3189 : 00000000;
+318a : 00000000;
+318b : 00000000;
+318c : 00000000;
+318d : 00000000;
+318e : 00000000;
+318f : 00000000;
+3190 : 00000000;
+3191 : 00000000;
+3192 : 00000000;
+3193 : 00000000;
+3194 : 00000000;
+3195 : 00000000;
+3196 : 00000000;
+3197 : 00000000;
+3198 : 00000000;
+3199 : 00000000;
+319a : 00000000;
+319b : 00000000;
+319c : 00000000;
+319d : 00000000;
+319e : 00000000;
+319f : 00000000;
+31a0 : 00000000;
+31a1 : 00000000;
+31a2 : 00000000;
+31a3 : 00000000;
+31a4 : 00000000;
+31a5 : 00000000;
+31a6 : 00000000;
+31a7 : 00000000;
+31a8 : 00000000;
+31a9 : 00000000;
+31aa : 00000000;
+31ab : 00000000;
+31ac : 00000000;
+31ad : 00000000;
+31ae : 00000000;
+31af : 00000000;
+31b0 : 00000000;
+31b1 : 00000000;
+31b2 : 00000000;
+31b3 : 00000000;
+31b4 : 00000000;
+31b5 : 00000000;
+31b6 : 00000000;
+31b7 : 00000000;
+31b8 : 00000000;
+31b9 : 00000000;
+31ba : 00000000;
+31bb : 00000000;
+31bc : 00000000;
+31bd : 00000000;
+31be : 00000000;
+31bf : 00000000;
+31c0 : 00000000;
+31c1 : 00000000;
+31c2 : 00000000;
+31c3 : 00000000;
+31c4 : 00000000;
+31c5 : 00000000;
+31c6 : 00000000;
+31c7 : 00000000;
+31c8 : 00000000;
+31c9 : 00000000;
+31ca : 00000000;
+31cb : 00000000;
+31cc : 00000000;
+31cd : 00000000;
+31ce : 00000000;
+31cf : 00000000;
+31d0 : 00000000;
+31d1 : 00000000;
+31d2 : 00000000;
+31d3 : 00000000;
+31d4 : 00000000;
+31d5 : 00000000;
+31d6 : 00000000;
+31d7 : 00000000;
+31d8 : 00000000;
+31d9 : 00000000;
+31da : 00000000;
+31db : 00000000;
+31dc : 00000000;
+31dd : 00000000;
+31de : 00000000;
+31df : 00000000;
+31e0 : 00000000;
+31e1 : 00000000;
+31e2 : 00000000;
+31e3 : 00000000;
+31e4 : 00000000;
+31e5 : 00000000;
+31e6 : 00000000;
+31e7 : 00000000;
+31e8 : 00000000;
+31e9 : 00000000;
+31ea : 00000000;
+31eb : 00000000;
+31ec : 00000000;
+31ed : 00000000;
+31ee : 00000000;
+31ef : 00000000;
+31f0 : 00000000;
+31f1 : 00000000;
+31f2 : 00000000;
+31f3 : 00000000;
+31f4 : 00000000;
+31f5 : 00000000;
+31f6 : 00000000;
+31f7 : 00000000;
+31f8 : 00000000;
+31f9 : 00000000;
+31fa : 00000000;
+31fb : 00000000;
+31fc : 00000000;
+31fd : 00000000;
+31fe : 00000000;
+31ff : 00000000;
+3200 : 00000000;
+3201 : 00000000;
+3202 : 00000000;
+3203 : 00000000;
+3204 : 00000000;
+3205 : 00000000;
+3206 : 00000000;
+3207 : 00000000;
+3208 : 00000000;
+3209 : 00000000;
+320a : 00000000;
+320b : 00000000;
+320c : 00000000;
+320d : 00000000;
+320e : 00000000;
+320f : 00000000;
+3210 : 00000000;
+3211 : 00000000;
+3212 : 00000000;
+3213 : 00000000;
+3214 : 00000000;
+3215 : 00000000;
+3216 : 00000000;
+3217 : 00000000;
+3218 : 00000000;
+3219 : 00000000;
+321a : 00000000;
+321b : 00000000;
+321c : 00000000;
+321d : 00000000;
+321e : 00000000;
+321f : 00000000;
+3220 : 00000000;
+3221 : 00000000;
+3222 : 00000000;
+3223 : 00000000;
+3224 : 00000000;
+3225 : 00000000;
+3226 : 00000000;
+3227 : 00000000;
+3228 : 00000000;
+3229 : 00000000;
+322a : 00000000;
+322b : 00000000;
+322c : 00000000;
+322d : 00000000;
+322e : 00000000;
+322f : 00000000;
+3230 : 00000000;
+3231 : 00000000;
+3232 : 00000000;
+3233 : 00000000;
+3234 : 00000000;
+3235 : 00000000;
+3236 : 00000000;
+3237 : 00000000;
+3238 : 00000000;
+3239 : 00000000;
+323a : 00000000;
+323b : 00000000;
+323c : 00000000;
+323d : 00000000;
+323e : 00000000;
+323f : 00000000;
+3240 : 00000000;
+3241 : 00000000;
+3242 : 00000000;
+3243 : 00000000;
+3244 : 00000000;
+3245 : 00000000;
+3246 : 00000000;
+3247 : 00000000;
+3248 : 00000000;
+3249 : 00000000;
+324a : 00000000;
+324b : 00000000;
+324c : 00000000;
+324d : 00000000;
+324e : 00000000;
+324f : 00000000;
+3250 : 00000000;
+3251 : 00000000;
+3252 : 00000000;
+3253 : 00000000;
+3254 : 00000000;
+3255 : 00000000;
+3256 : 00000000;
+3257 : 00000000;
+3258 : 00000000;
+3259 : 00000000;
+325a : 00000000;
+325b : 00000000;
+325c : 00000000;
+325d : 00000000;
+325e : 00000000;
+325f : 00000000;
+3260 : 00000000;
+3261 : 00000000;
+3262 : 00000000;
+3263 : 00000000;
+3264 : 00000000;
+3265 : 00000000;
+3266 : 00000000;
+3267 : 00000000;
+3268 : 00000000;
+3269 : 00000000;
+326a : 00000000;
+326b : 00000000;
+326c : 00000000;
+326d : 00000000;
+326e : 00000000;
+326f : 00000000;
+3270 : 00000000;
+3271 : 00000000;
+3272 : 00000000;
+3273 : 00000000;
+3274 : 00000000;
+3275 : 00000000;
+3276 : 00000000;
+3277 : 00000000;
+3278 : 00000000;
+3279 : 00000000;
+327a : 00000000;
+327b : 00000000;
+327c : 00000000;
+327d : 00000000;
+327e : 00000000;
+327f : 00000000;
+3280 : 00000000;
+3281 : 00000000;
+3282 : 00000000;
+3283 : 00000000;
+3284 : 00000000;
+3285 : 00000000;
+3286 : 00000000;
+3287 : 00000000;
+3288 : 00000000;
+3289 : 00000000;
+328a : 00000000;
+328b : 00000000;
+328c : 00000000;
+328d : 00000000;
+328e : 00000000;
+328f : 00000000;
+3290 : 00000000;
+3291 : 00000000;
+3292 : 00000000;
+3293 : 00000000;
+3294 : 00000000;
+3295 : 00000000;
+3296 : 00000000;
+3297 : 00000000;
+3298 : 00000000;
+3299 : 00000000;
+329a : 00000000;
+329b : 00000000;
+329c : 00000000;
+329d : 00000000;
+329e : 00000000;
+329f : 00000000;
+32a0 : 00000000;
+32a1 : 00000000;
+32a2 : 00000000;
+32a3 : 00000000;
+32a4 : 00000000;
+32a5 : 00000000;
+32a6 : 00000000;
+32a7 : 00000000;
+32a8 : 00000000;
+32a9 : 00000000;
+32aa : 00000000;
+32ab : 00000000;
+32ac : 00000000;
+32ad : 00000000;
+32ae : 00000000;
+32af : 00000000;
+32b0 : 00000000;
+32b1 : 00000000;
+32b2 : 00000000;
+32b3 : 00000000;
+32b4 : 00000000;
+32b5 : 00000000;
+32b6 : 00000000;
+32b7 : 00000000;
+32b8 : 00000000;
+32b9 : 00000000;
+32ba : 00000000;
+32bb : 00000000;
+32bc : 00000000;
+32bd : 00000000;
+32be : 00000000;
+32bf : 00000000;
+32c0 : 00000000;
+32c1 : 00000000;
+32c2 : 00000000;
+32c3 : 00000000;
+32c4 : 00000000;
+32c5 : 00000000;
+32c6 : 00000000;
+32c7 : 00000000;
+32c8 : 00000000;
+32c9 : 00000000;
+32ca : 00000000;
+32cb : 00000000;
+32cc : 00000000;
+32cd : 00000000;
+32ce : 00000000;
+32cf : 00000000;
+32d0 : 00000000;
+32d1 : 00000000;
+32d2 : 00000000;
+32d3 : 00000000;
+32d4 : 00000000;
+32d5 : 00000000;
+32d6 : 00000000;
+32d7 : 00000000;
+32d8 : 00000000;
+32d9 : 00000000;
+32da : 00000000;
+32db : 00000000;
+32dc : 00000000;
+32dd : 00000000;
+32de : 00000000;
+32df : 00000000;
+32e0 : 00000000;
+32e1 : 00000000;
+32e2 : 00000000;
+32e3 : 00000000;
+32e4 : 00000000;
+32e5 : 00000000;
+32e6 : 00000000;
+32e7 : 00000000;
+32e8 : 00000000;
+32e9 : 00000000;
+32ea : 00000000;
+32eb : 00000000;
+32ec : 00000000;
+32ed : 00000000;
+32ee : 00000000;
+32ef : 00000000;
+32f0 : 00000000;
+32f1 : 00000000;
+32f2 : 00000000;
+32f3 : 00000000;
+32f4 : 00000000;
+32f5 : 00000000;
+32f6 : 00000000;
+32f7 : 00000000;
+32f8 : 00000000;
+32f9 : 00000000;
+32fa : 00000000;
+32fb : 00000000;
+32fc : 00000000;
+32fd : 00000000;
+32fe : 00000000;
+32ff : 00000000;
+3300 : 00000000;
+3301 : 00000000;
+3302 : 00000000;
+3303 : 00000000;
+3304 : 00000000;
+3305 : 00000000;
+3306 : 00000000;
+3307 : 00000000;
+3308 : 00000000;
+3309 : 00000000;
+330a : 00000000;
+330b : 00000000;
+330c : 00000000;
+330d : 00000000;
+330e : 00000000;
+330f : 00000000;
+3310 : 00000000;
+3311 : 00000000;
+3312 : 00000000;
+3313 : 00000000;
+3314 : 00000000;
+3315 : 00000000;
+3316 : 00000000;
+3317 : 00000000;
+3318 : 00000000;
+3319 : 00000000;
+331a : 00000000;
+331b : 00000000;
+331c : 00000000;
+331d : 00000000;
+331e : 00000000;
+331f : 00000000;
+3320 : 00000000;
+3321 : 00000000;
+3322 : 00000000;
+3323 : 00000000;
+3324 : 00000000;
+3325 : 00000000;
+3326 : 00000000;
+3327 : 00000000;
+3328 : 00000000;
+3329 : 00000000;
+332a : 00000000;
+332b : 00000000;
+332c : 00000000;
+332d : 00000000;
+332e : 00000000;
+332f : 00000000;
+3330 : 00000000;
+3331 : 00000000;
+3332 : 00000000;
+3333 : 00000000;
+3334 : 00000000;
+3335 : 00000000;
+3336 : 00000000;
+3337 : 00000000;
+3338 : 00000000;
+3339 : 00000000;
+333a : 00000000;
+333b : 00000000;
+333c : 00000000;
+333d : 00000000;
+333e : 00000000;
+333f : 00000000;
+3340 : 00000000;
+3341 : 00000000;
+3342 : 00000000;
+3343 : 00000000;
+3344 : 00000000;
+3345 : 00000000;
+3346 : 00000000;
+3347 : 00000000;
+3348 : 00000000;
+3349 : 00000000;
+334a : 00000000;
+334b : 00000000;
+334c : 00000000;
+334d : 00000000;
+334e : 00000000;
+334f : 00000000;
+3350 : 00000000;
+3351 : 00000000;
+3352 : 00000000;
+3353 : 00000000;
+3354 : 00000000;
+3355 : 00000000;
+3356 : 00000000;
+3357 : 00000000;
+3358 : 00000000;
+3359 : 00000000;
+335a : 00000000;
+335b : 00000000;
+335c : 00000000;
+335d : 00000000;
+335e : 00000000;
+335f : 00000000;
+3360 : 00000000;
+3361 : 00000000;
+3362 : 00000000;
+3363 : 00000000;
+3364 : 00000000;
+3365 : 00000000;
+3366 : 00000000;
+3367 : 00000000;
+3368 : 00000000;
+3369 : 00000000;
+336a : 00000000;
+336b : 00000000;
+336c : 00000000;
+336d : 00000000;
+336e : 00000000;
+336f : 00000000;
+3370 : 00000000;
+3371 : 00000000;
+3372 : 00000000;
+3373 : 00000000;
+3374 : 00000000;
+3375 : 00000000;
+3376 : 00000000;
+3377 : 00000000;
+3378 : 00000000;
+3379 : 00000000;
+337a : 00000000;
+337b : 00000000;
+337c : 00000000;
+337d : 00000000;
+337e : 00000000;
+337f : 00000000;
+3380 : 00000000;
+3381 : 00000000;
+3382 : 00000000;
+3383 : 00000000;
+3384 : 00000000;
+3385 : 00000000;
+3386 : 00000000;
+3387 : 00000000;
+3388 : 00000000;
+3389 : 00000000;
+338a : 00000000;
+338b : 00000000;
+338c : 00000000;
+338d : 00000000;
+338e : 00000000;
+338f : 00000000;
+3390 : 00000000;
+3391 : 00000000;
+3392 : 00000000;
+3393 : 00000000;
+3394 : 00000000;
+3395 : 00000000;
+3396 : 00000000;
+3397 : 00000000;
+3398 : 00000000;
+3399 : 00000000;
+339a : 00000000;
+339b : 00000000;
+339c : 00000000;
+339d : 00000000;
+339e : 00000000;
+339f : 00000000;
+33a0 : 00000000;
+33a1 : 00000000;
+33a2 : 00000000;
+33a3 : 00000000;
+33a4 : 00000000;
+33a5 : 00000000;
+33a6 : 00000000;
+33a7 : 00000000;
+33a8 : 00000000;
+33a9 : 00000000;
+33aa : 00000000;
+33ab : 00000000;
+33ac : 00000000;
+33ad : 00000000;
+33ae : 00000000;
+33af : 00000000;
+33b0 : 00000000;
+33b1 : 00000000;
+33b2 : 00000000;
+33b3 : 00000000;
+33b4 : 00000000;
+33b5 : 00000000;
+33b6 : 00000000;
+33b7 : 00000000;
+33b8 : 00000000;
+33b9 : 00000000;
+33ba : 00000000;
+33bb : 00000000;
+33bc : 00000000;
+33bd : 00000000;
+33be : 00000000;
+33bf : 00000000;
+33c0 : 00000000;
+33c1 : 00000000;
+33c2 : 00000000;
+33c3 : 00000000;
+33c4 : 00000000;
+33c5 : 00000000;
+33c6 : 00000000;
+33c7 : 00000000;
+33c8 : 00000000;
+33c9 : 00000000;
+33ca : 00000000;
+33cb : 00000000;
+33cc : 00000000;
+33cd : 00000000;
+33ce : 00000000;
+33cf : 00000000;
+33d0 : 00000000;
+33d1 : 00000000;
+33d2 : 00000000;
+33d3 : 00000000;
+33d4 : 00000000;
+33d5 : 00000000;
+33d6 : 00000000;
+33d7 : 00000000;
+33d8 : 00000000;
+33d9 : 00000000;
+33da : 00000000;
+33db : 00000000;
+33dc : 00000000;
+33dd : 00000000;
+33de : 00000000;
+33df : 00000000;
+33e0 : 00000000;
+33e1 : 00000000;
+33e2 : 00000000;
+33e3 : 00000000;
+33e4 : 00000000;
+33e5 : 00000000;
+33e6 : 00000000;
+33e7 : 00000000;
+33e8 : 00000000;
+33e9 : 00000000;
+33ea : 00000000;
+33eb : 00000000;
+33ec : 00000000;
+33ed : 00000000;
+33ee : 00000000;
+33ef : 00000000;
+33f0 : 00000000;
+33f1 : 00000000;
+33f2 : 00000000;
+33f3 : 00000000;
+33f4 : 00000000;
+33f5 : 00000000;
+33f6 : 00000000;
+33f7 : 00000000;
+33f8 : 00000000;
+33f9 : 00000000;
+33fa : 00000000;
+33fb : 00000000;
+33fc : 00000000;
+33fd : 00000000;
+33fe : 00000000;
+33ff : 00000000;
+3400 : 00000000;
+3401 : 00000000;
+3402 : 00000000;
+3403 : 00000000;
+3404 : 00000000;
+3405 : 00000000;
+3406 : 00000000;
+3407 : 00000000;
+3408 : 00000000;
+3409 : 00000000;
+340a : 00000000;
+340b : 00000000;
+340c : 00000000;
+340d : 00000000;
+340e : 00000000;
+340f : 00000000;
+3410 : 00000000;
+3411 : 00000000;
+3412 : 00000000;
+3413 : 00000000;
+3414 : 00000000;
+3415 : 00000000;
+3416 : 00000000;
+3417 : 00000000;
+3418 : 00000000;
+3419 : 00000000;
+341a : 00000000;
+341b : 00000000;
+341c : 00000000;
+341d : 00000000;
+341e : 00000000;
+341f : 00000000;
+3420 : 00000000;
+3421 : 00000000;
+3422 : 00000000;
+3423 : 00000000;
+3424 : 00000000;
+3425 : 00000000;
+3426 : 00000000;
+3427 : 00000000;
+3428 : 00000000;
+3429 : 00000000;
+342a : 00000000;
+342b : 00000000;
+342c : 00000000;
+342d : 00000000;
+342e : 00000000;
+342f : 00000000;
+3430 : 00000000;
+3431 : 00000000;
+3432 : 00000000;
+3433 : 00000000;
+3434 : 00000000;
+3435 : 00000000;
+3436 : 00000000;
+3437 : 00000000;
+3438 : 00000000;
+3439 : 00000000;
+343a : 00000000;
+343b : 00000000;
+343c : 00000000;
+343d : 00000000;
+343e : 00000000;
+343f : 00000000;
+3440 : 00000000;
+3441 : 00000000;
+3442 : 00000000;
+3443 : 00000000;
+3444 : 00000000;
+3445 : 00000000;
+3446 : 00000000;
+3447 : 00000000;
+3448 : 00000000;
+3449 : 00000000;
+344a : 00000000;
+344b : 00000000;
+344c : 00000000;
+344d : 00000000;
+344e : 00000000;
+344f : 00000000;
+3450 : 00000000;
+3451 : 00000000;
+3452 : 00000000;
+3453 : 00000000;
+3454 : 00000000;
+3455 : 00000000;
+3456 : 00000000;
+3457 : 00000000;
+3458 : 00000000;
+3459 : 00000000;
+345a : 00000000;
+345b : 00000000;
+345c : 00000000;
+345d : 00000000;
+345e : 00000000;
+345f : 00000000;
+3460 : 00000000;
+3461 : 00000000;
+3462 : 00000000;
+3463 : 00000000;
+3464 : 00000000;
+3465 : 00000000;
+3466 : 00000000;
+3467 : 00000000;
+3468 : 00000000;
+3469 : 00000000;
+346a : 00000000;
+346b : 00000000;
+346c : 00000000;
+346d : 00000000;
+346e : 00000000;
+346f : 00000000;
+3470 : 00000000;
+3471 : 00000000;
+3472 : 00000000;
+3473 : 00000000;
+3474 : 00000000;
+3475 : 00000000;
+3476 : 00000000;
+3477 : 00000000;
+3478 : 00000000;
+3479 : 00000000;
+347a : 00000000;
+347b : 00000000;
+347c : 00000000;
+347d : 00000000;
+347e : 00000000;
+347f : 00000000;
+3480 : 00000000;
+3481 : 00000000;
+3482 : 00000000;
+3483 : 00000000;
+3484 : 00000000;
+3485 : 00000000;
+3486 : 00000000;
+3487 : 00000000;
+3488 : 00000000;
+3489 : 00000000;
+348a : 00000000;
+348b : 00000000;
+348c : 00000000;
+348d : 00000000;
+348e : 00000000;
+348f : 00000000;
+3490 : 00000000;
+3491 : 00000000;
+3492 : 00000000;
+3493 : 00000000;
+3494 : 00000000;
+3495 : 00000000;
+3496 : 00000000;
+3497 : 00000000;
+3498 : 00000000;
+3499 : 00000000;
+349a : 00000000;
+349b : 00000000;
+349c : 00000000;
+349d : 00000000;
+349e : 00000000;
+349f : 00000000;
+34a0 : 00000000;
+34a1 : 00000000;
+34a2 : 00000000;
+34a3 : 00000000;
+34a4 : 00000000;
+34a5 : 00000000;
+34a6 : 00000000;
+34a7 : 00000000;
+34a8 : 00000000;
+34a9 : 00000000;
+34aa : 00000000;
+34ab : 00000000;
+34ac : 00000000;
+34ad : 00000000;
+34ae : 00000000;
+34af : 00000000;
+34b0 : 00000000;
+34b1 : 00000000;
+34b2 : 00000000;
+34b3 : 00000000;
+34b4 : 00000000;
+34b5 : 00000000;
+34b6 : 00000000;
+34b7 : 00000000;
+34b8 : 00000000;
+34b9 : 00000000;
+34ba : 00000000;
+34bb : 00000000;
+34bc : 00000000;
+34bd : 00000000;
+34be : 00000000;
+34bf : 00000000;
+34c0 : 00000000;
+34c1 : 00000000;
+34c2 : 00000000;
+34c3 : 00000000;
+34c4 : 00000000;
+34c5 : 00000000;
+34c6 : 00000000;
+34c7 : 00000000;
+34c8 : 00000000;
+34c9 : 00000000;
+34ca : 00000000;
+34cb : 00000000;
+34cc : 00000000;
+34cd : 00000000;
+34ce : 00000000;
+34cf : 00000000;
+34d0 : 00000000;
+34d1 : 00000000;
+34d2 : 00000000;
+34d3 : 00000000;
+34d4 : 00000000;
+34d5 : 00000000;
+34d6 : 00000000;
+34d7 : 00000000;
+34d8 : 00000000;
+34d9 : 00000000;
+34da : 00000000;
+34db : 00000000;
+34dc : 00000000;
+34dd : 00000000;
+34de : 00000000;
+34df : 00000000;
+34e0 : 00000000;
+34e1 : 00000000;
+34e2 : 00000000;
+34e3 : 00000000;
+34e4 : 00000000;
+34e5 : 00000000;
+34e6 : 00000000;
+34e7 : 00000000;
+34e8 : 00000000;
+34e9 : 00000000;
+34ea : 00000000;
+34eb : 00000000;
+34ec : 00000000;
+34ed : 00000000;
+34ee : 00000000;
+34ef : 00000000;
+34f0 : 00000000;
+34f1 : 00000000;
+34f2 : 00000000;
+34f3 : 00000000;
+34f4 : 00000000;
+34f5 : 00000000;
+34f6 : 00000000;
+34f7 : 00000000;
+34f8 : 00000000;
+34f9 : 00000000;
+34fa : 00000000;
+34fb : 00000000;
+34fc : 00000000;
+34fd : 00000000;
+34fe : 00000000;
+34ff : 00000000;
+3500 : 00000000;
+3501 : 00000000;
+3502 : 00000000;
+3503 : 00000000;
+3504 : 00000000;
+3505 : 00000000;
+3506 : 00000000;
+3507 : 00000000;
+3508 : 00000000;
+3509 : 00000000;
+350a : 00000000;
+350b : 00000000;
+350c : 00000000;
+350d : 00000000;
+350e : 00000000;
+350f : 00000000;
+3510 : 00000000;
+3511 : 00000000;
+3512 : 00000000;
+3513 : 00000000;
+3514 : 00000000;
+3515 : 00000000;
+3516 : 00000000;
+3517 : 00000000;
+3518 : 00000000;
+3519 : 00000000;
+351a : 00000000;
+351b : 00000000;
+351c : 00000000;
+351d : 00000000;
+351e : 00000000;
+351f : 00000000;
+3520 : 00000000;
+3521 : 00000000;
+3522 : 00000000;
+3523 : 00000000;
+3524 : 00000000;
+3525 : 00000000;
+3526 : 00000000;
+3527 : 00000000;
+3528 : 00000000;
+3529 : 00000000;
+352a : 00000000;
+352b : 00000000;
+352c : 00000000;
+352d : 00000000;
+352e : 00000000;
+352f : 00000000;
+3530 : 00000000;
+3531 : 00000000;
+3532 : 00000000;
+3533 : 00000000;
+3534 : 00000000;
+3535 : 00000000;
+3536 : 00000000;
+3537 : 00000000;
+3538 : 00000000;
+3539 : 00000000;
+353a : 00000000;
+353b : 00000000;
+353c : 00000000;
+353d : 00000000;
+353e : 00000000;
+353f : 00000000;
+3540 : 00000000;
+3541 : 00000000;
+3542 : 00000000;
+3543 : 00000000;
+3544 : 00000000;
+3545 : 00000000;
+3546 : 00000000;
+3547 : 00000000;
+3548 : 00000000;
+3549 : 00000000;
+354a : 00000000;
+354b : 00000000;
+354c : 00000000;
+354d : 00000000;
+354e : 00000000;
+354f : 00000000;
+3550 : 00000000;
+3551 : 00000000;
+3552 : 00000000;
+3553 : 00000000;
+3554 : 00000000;
+3555 : 00000000;
+3556 : 00000000;
+3557 : 00000000;
+3558 : 00000000;
+3559 : 00000000;
+355a : 00000000;
+355b : 00000000;
+355c : 00000000;
+355d : 00000000;
+355e : 00000000;
+355f : 00000000;
+3560 : 00000000;
+3561 : 00000000;
+3562 : 00000000;
+3563 : 00000000;
+3564 : 00000000;
+3565 : 00000000;
+3566 : 00000000;
+3567 : 00000000;
+3568 : 00000000;
+3569 : 00000000;
+356a : 00000000;
+356b : 00000000;
+356c : 00000000;
+356d : 00000000;
+356e : 00000000;
+356f : 00000000;
+3570 : 00000000;
+3571 : 00000000;
+3572 : 00000000;
+3573 : 00000000;
+3574 : 00000000;
+3575 : 00000000;
+3576 : 00000000;
+3577 : 00000000;
+3578 : 00000000;
+3579 : 00000000;
+357a : 00000000;
+357b : 00000000;
+357c : 00000000;
+357d : 00000000;
+357e : 00000000;
+357f : 00000000;
+3580 : 00000000;
+3581 : 00000000;
+3582 : 00000000;
+3583 : 00000000;
+3584 : 00000000;
+3585 : 00000000;
+3586 : 00000000;
+3587 : 00000000;
+3588 : 00000000;
+3589 : 00000000;
+358a : 00000000;
+358b : 00000000;
+358c : 00000000;
+358d : 00000000;
+358e : 00000000;
+358f : 00000000;
+3590 : 00000000;
+3591 : 00000000;
+3592 : 00000000;
+3593 : 00000000;
+3594 : 00000000;
+3595 : 00000000;
+3596 : 00000000;
+3597 : 00000000;
+3598 : 00000000;
+3599 : 00000000;
+359a : 00000000;
+359b : 00000000;
+359c : 00000000;
+359d : 00000000;
+359e : 00000000;
+359f : 00000000;
+35a0 : 00000000;
+35a1 : 00000000;
+35a2 : 00000000;
+35a3 : 00000000;
+35a4 : 00000000;
+35a5 : 00000000;
+35a6 : 00000000;
+35a7 : 00000000;
+35a8 : 00000000;
+35a9 : 00000000;
+35aa : 00000000;
+35ab : 00000000;
+35ac : 00000000;
+35ad : 00000000;
+35ae : 00000000;
+35af : 00000000;
+35b0 : 00000000;
+35b1 : 00000000;
+35b2 : 00000000;
+35b3 : 00000000;
+35b4 : 00000000;
+35b5 : 00000000;
+35b6 : 00000000;
+35b7 : 00000000;
+35b8 : 00000000;
+35b9 : 00000000;
+35ba : 00000000;
+35bb : 00000000;
+35bc : 00000000;
+35bd : 00000000;
+35be : 00000000;
+35bf : 00000000;
+35c0 : 00000000;
+35c1 : 00000000;
+35c2 : 00000000;
+35c3 : 00000000;
+35c4 : 00000000;
+35c5 : 00000000;
+35c6 : 00000000;
+35c7 : 00000000;
+35c8 : 00000000;
+35c9 : 00000000;
+35ca : 00000000;
+35cb : 00000000;
+35cc : 00000000;
+35cd : 00000000;
+35ce : 00000000;
+35cf : 00000000;
+35d0 : 00000000;
+35d1 : 00000000;
+35d2 : 00000000;
+35d3 : 00000000;
+35d4 : 00000000;
+35d5 : 00000000;
+35d6 : 00000000;
+35d7 : 00000000;
+35d8 : 00000000;
+35d9 : 00000000;
+35da : 00000000;
+35db : 00000000;
+35dc : 00000000;
+35dd : 00000000;
+35de : 00000000;
+35df : 00000000;
+35e0 : 00000000;
+35e1 : 00000000;
+35e2 : 00000000;
+35e3 : 00000000;
+35e4 : 00000000;
+35e5 : 00000000;
+35e6 : 00000000;
+35e7 : 00000000;
+35e8 : 00000000;
+35e9 : 00000000;
+35ea : 00000000;
+35eb : 00000000;
+35ec : 00000000;
+35ed : 00000000;
+35ee : 00000000;
+35ef : 00000000;
+35f0 : 00000000;
+35f1 : 00000000;
+35f2 : 00000000;
+35f3 : 00000000;
+35f4 : 00000000;
+35f5 : 00000000;
+35f6 : 00000000;
+35f7 : 00000000;
+35f8 : 00000000;
+35f9 : 00000000;
+35fa : 00000000;
+35fb : 00000000;
+35fc : 00000000;
+35fd : 00000000;
+35fe : 00000000;
+35ff : 00000000;
+3600 : 00000000;
+3601 : 00000000;
+3602 : 00000000;
+3603 : 00000000;
+3604 : 00000000;
+3605 : 00000000;
+3606 : 00000000;
+3607 : 00000000;
+3608 : 00000000;
+3609 : 00000000;
+360a : 00000000;
+360b : 00000000;
+360c : 00000000;
+360d : 00000000;
+360e : 00000000;
+360f : 00000000;
+3610 : 00000000;
+3611 : 00000000;
+3612 : 00000000;
+3613 : 00000000;
+3614 : 00000000;
+3615 : 00000000;
+3616 : 00000000;
+3617 : 00000000;
+3618 : 00000000;
+3619 : 00000000;
+361a : 00000000;
+361b : 00000000;
+361c : 00000000;
+361d : 00000000;
+361e : 00000000;
+361f : 00000000;
+3620 : 00000000;
+3621 : 00000000;
+3622 : 00000000;
+3623 : 00000000;
+3624 : 00000000;
+3625 : 00000000;
+3626 : 00000000;
+3627 : 00000000;
+3628 : 00000000;
+3629 : 00000000;
+362a : 00000000;
+362b : 00000000;
+362c : 00000000;
+362d : 00000000;
+362e : 00000000;
+362f : 00000000;
+3630 : 00000000;
+3631 : 00000000;
+3632 : 00000000;
+3633 : 00000000;
+3634 : 00000000;
+3635 : 00000000;
+3636 : 00000000;
+3637 : 00000000;
+3638 : 00000000;
+3639 : 00000000;
+363a : 00000000;
+363b : 00000000;
+363c : 00000000;
+363d : 00000000;
+363e : 00000000;
+363f : 00000000;
+3640 : 00000000;
+3641 : 00000000;
+3642 : 00000000;
+3643 : 00000000;
+3644 : 00000000;
+3645 : 00000000;
+3646 : 00000000;
+3647 : 00000000;
+3648 : 00000000;
+3649 : 00000000;
+364a : 00000000;
+364b : 00000000;
+364c : 00000000;
+364d : 00000000;
+364e : 00000000;
+364f : 00000000;
+3650 : 00000000;
+3651 : 00000000;
+3652 : 00000000;
+3653 : 00000000;
+3654 : 00000000;
+3655 : 00000000;
+3656 : 00000000;
+3657 : 00000000;
+3658 : 00000000;
+3659 : 00000000;
+365a : 00000000;
+365b : 00000000;
+365c : 00000000;
+365d : 00000000;
+365e : 00000000;
+365f : 00000000;
+3660 : 00000000;
+3661 : 00000000;
+3662 : 00000000;
+3663 : 00000000;
+3664 : 00000000;
+3665 : 00000000;
+3666 : 00000000;
+3667 : 00000000;
+3668 : 00000000;
+3669 : 00000000;
+366a : 00000000;
+366b : 00000000;
+366c : 00000000;
+366d : 00000000;
+366e : 00000000;
+366f : 00000000;
+3670 : 00000000;
+3671 : 00000000;
+3672 : 00000000;
+3673 : 00000000;
+3674 : 00000000;
+3675 : 00000000;
+3676 : 00000000;
+3677 : 00000000;
+3678 : 00000000;
+3679 : 00000000;
+367a : 00000000;
+367b : 00000000;
+367c : 00000000;
+367d : 00000000;
+367e : 00000000;
+367f : 00000000;
+3680 : 00000000;
+3681 : 00000000;
+3682 : 00000000;
+3683 : 00000000;
+3684 : 00000000;
+3685 : 00000000;
+3686 : 00000000;
+3687 : 00000000;
+3688 : 00000000;
+3689 : 00000000;
+368a : 00000000;
+368b : 00000000;
+368c : 00000000;
+368d : 00000000;
+368e : 00000000;
+368f : 00000000;
+3690 : 00000000;
+3691 : 00000000;
+3692 : 00000000;
+3693 : 00000000;
+3694 : 00000000;
+3695 : 00000000;
+3696 : 00000000;
+3697 : 00000000;
+3698 : 00000000;
+3699 : 00000000;
+369a : 00000000;
+369b : 00000000;
+369c : 00000000;
+369d : 00000000;
+369e : 00000000;
+369f : 00000000;
+36a0 : 00000000;
+36a1 : 00000000;
+36a2 : 00000000;
+36a3 : 00000000;
+36a4 : 00000000;
+36a5 : 00000000;
+36a6 : 00000000;
+36a7 : 00000000;
+36a8 : 00000000;
+36a9 : 00000000;
+36aa : 00000000;
+36ab : 00000000;
+36ac : 00000000;
+36ad : 00000000;
+36ae : 00000000;
+36af : 00000000;
+36b0 : 00000000;
+36b1 : 00000000;
+36b2 : 00000000;
+36b3 : 00000000;
+36b4 : 00000000;
+36b5 : 00000000;
+36b6 : 00000000;
+36b7 : 00000000;
+36b8 : 00000000;
+36b9 : 00000000;
+36ba : 00000000;
+36bb : 00000000;
+36bc : 00000000;
+36bd : 00000000;
+36be : 00000000;
+36bf : 00000000;
+36c0 : 00000000;
+36c1 : 00000000;
+36c2 : 00000000;
+36c3 : 00000000;
+36c4 : 00000000;
+36c5 : 00000000;
+36c6 : 00000000;
+36c7 : 00000000;
+36c8 : 00000000;
+36c9 : 00000000;
+36ca : 00000000;
+36cb : 00000000;
+36cc : 00000000;
+36cd : 00000000;
+36ce : 00000000;
+36cf : 00000000;
+36d0 : 00000000;
+36d1 : 00000000;
+36d2 : 00000000;
+36d3 : 00000000;
+36d4 : 00000000;
+36d5 : 00000000;
+36d6 : 00000000;
+36d7 : 00000000;
+36d8 : 00000000;
+36d9 : 00000000;
+36da : 00000000;
+36db : 00000000;
+36dc : 00000000;
+36dd : 00000000;
+36de : 00000000;
+36df : 00000000;
+36e0 : 00000000;
+36e1 : 00000000;
+36e2 : 00000000;
+36e3 : 00000000;
+36e4 : 00000000;
+36e5 : 00000000;
+36e6 : 00000000;
+36e7 : 00000000;
+36e8 : 00000000;
+36e9 : 00000000;
+36ea : 00000000;
+36eb : 00000000;
+36ec : 00000000;
+36ed : 00000000;
+36ee : 00000000;
+36ef : 00000000;
+36f0 : 00000000;
+36f1 : 00000000;
+36f2 : 00000000;
+36f3 : 00000000;
+36f4 : 00000000;
+36f5 : 00000000;
+36f6 : 00000000;
+36f7 : 00000000;
+36f8 : 00000000;
+36f9 : 00000000;
+36fa : 00000000;
+36fb : 00000000;
+36fc : 00000000;
+36fd : 00000000;
+36fe : 00000000;
+36ff : 00000000;
+3700 : 00000000;
+3701 : 00000000;
+3702 : 00000000;
+3703 : 00000000;
+3704 : 00000000;
+3705 : 00000000;
+3706 : 00000000;
+3707 : 00000000;
+3708 : 00000000;
+3709 : 00000000;
+370a : 00000000;
+370b : 00000000;
+370c : 00000000;
+370d : 00000000;
+370e : 00000000;
+370f : 00000000;
+3710 : 00000000;
+3711 : 00000000;
+3712 : 00000000;
+3713 : 00000000;
+3714 : 00000000;
+3715 : 00000000;
+3716 : 00000000;
+3717 : 00000000;
+3718 : 00000000;
+3719 : 00000000;
+371a : 00000000;
+371b : 00000000;
+371c : 00000000;
+371d : 00000000;
+371e : 00000000;
+371f : 00000000;
+3720 : 00000000;
+3721 : 00000000;
+3722 : 00000000;
+3723 : 00000000;
+3724 : 00000000;
+3725 : 00000000;
+3726 : 00000000;
+3727 : 00000000;
+3728 : 00000000;
+3729 : 00000000;
+372a : 00000000;
+372b : 00000000;
+372c : 00000000;
+372d : 00000000;
+372e : 00000000;
+372f : 00000000;
+3730 : 00000000;
+3731 : 00000000;
+3732 : 00000000;
+3733 : 00000000;
+3734 : 00000000;
+3735 : 00000000;
+3736 : 00000000;
+3737 : 00000000;
+3738 : 00000000;
+3739 : 00000000;
+373a : 00000000;
+373b : 00000000;
+373c : 00000000;
+373d : 00000000;
+373e : 00000000;
+373f : 00000000;
+3740 : 00000000;
+3741 : 00000000;
+3742 : 00000000;
+3743 : 00000000;
+3744 : 00000000;
+3745 : 00000000;
+3746 : 00000000;
+3747 : 00000000;
+3748 : 00000000;
+3749 : 00000000;
+374a : 00000000;
+374b : 00000000;
+374c : 00000000;
+374d : 00000000;
+374e : 00000000;
+374f : 00000000;
+3750 : 00000000;
+3751 : 00000000;
+3752 : 00000000;
+3753 : 00000000;
+3754 : 00000000;
+3755 : 00000000;
+3756 : 00000000;
+3757 : 00000000;
+3758 : 00000000;
+3759 : 00000000;
+375a : 00000000;
+375b : 00000000;
+375c : 00000000;
+375d : 00000000;
+375e : 00000000;
+375f : 00000000;
+3760 : 00000000;
+3761 : 00000000;
+3762 : 00000000;
+3763 : 00000000;
+3764 : 00000000;
+3765 : 00000000;
+3766 : 00000000;
+3767 : 00000000;
+3768 : 00000000;
+3769 : 00000000;
+376a : 00000000;
+376b : 00000000;
+376c : 00000000;
+376d : 00000000;
+376e : 00000000;
+376f : 00000000;
+3770 : 00000000;
+3771 : 00000000;
+3772 : 00000000;
+3773 : 00000000;
+3774 : 00000000;
+3775 : 00000000;
+3776 : 00000000;
+3777 : 00000000;
+3778 : 00000000;
+3779 : 00000000;
+377a : 00000000;
+377b : 00000000;
+377c : 00000000;
+377d : 00000000;
+377e : 00000000;
+377f : 00000000;
+3780 : 00000000;
+3781 : 00000000;
+3782 : 00000000;
+3783 : 00000000;
+3784 : 00000000;
+3785 : 00000000;
+3786 : 00000000;
+3787 : 00000000;
+3788 : 00000000;
+3789 : 00000000;
+378a : 00000000;
+378b : 00000000;
+378c : 00000000;
+378d : 00000000;
+378e : 00000000;
+378f : 00000000;
+3790 : 00000000;
+3791 : 00000000;
+3792 : 00000000;
+3793 : 00000000;
+3794 : 00000000;
+3795 : 00000000;
+3796 : 00000000;
+3797 : 00000000;
+3798 : 00000000;
+3799 : 00000000;
+379a : 00000000;
+379b : 00000000;
+379c : 00000000;
+379d : 00000000;
+379e : 00000000;
+379f : 00000000;
+37a0 : 00000000;
+37a1 : 00000000;
+37a2 : 00000000;
+37a3 : 00000000;
+37a4 : 00000000;
+37a5 : 00000000;
+37a6 : 00000000;
+37a7 : 00000000;
+37a8 : 00000000;
+37a9 : 00000000;
+37aa : 00000000;
+37ab : 00000000;
+37ac : 00000000;
+37ad : 00000000;
+37ae : 00000000;
+37af : 00000000;
+37b0 : 00000000;
+37b1 : 00000000;
+37b2 : 00000000;
+37b3 : 00000000;
+37b4 : 00000000;
+37b5 : 00000000;
+37b6 : 00000000;
+37b7 : 00000000;
+37b8 : 00000000;
+37b9 : 00000000;
+37ba : 00000000;
+37bb : 00000000;
+37bc : 00000000;
+37bd : 00000000;
+37be : 00000000;
+37bf : 00000000;
+37c0 : 00000000;
+37c1 : 00000000;
+37c2 : 00000000;
+37c3 : 00000000;
+37c4 : 00000000;
+37c5 : 00000000;
+37c6 : 00000000;
+37c7 : 00000000;
+37c8 : 00000000;
+37c9 : 00000000;
+37ca : 00000000;
+37cb : 00000000;
+37cc : 00000000;
+37cd : 00000000;
+37ce : 00000000;
+37cf : 00000000;
+37d0 : 00000000;
+37d1 : 00000000;
+37d2 : 00000000;
+37d3 : 00000000;
+37d4 : 00000000;
+37d5 : 00000000;
+37d6 : 00000000;
+37d7 : 00000000;
+37d8 : 00000000;
+37d9 : 00000000;
+37da : 00000000;
+37db : 00000000;
+37dc : 00000000;
+37dd : 00000000;
+37de : 00000000;
+37df : 00000000;
+37e0 : 00000000;
+37e1 : 00000000;
+37e2 : 00000000;
+37e3 : 00000000;
+37e4 : 00000000;
+37e5 : 00000000;
+37e6 : 00000000;
+37e7 : 00000000;
+37e8 : 00000000;
+37e9 : 00000000;
+37ea : 00000000;
+37eb : 00000000;
+37ec : 00000000;
+37ed : 00000000;
+37ee : 00000000;
+37ef : 00000000;
+37f0 : 00000000;
+37f1 : 00000000;
+37f2 : 00000000;
+37f3 : 00000000;
+37f4 : 00000000;
+37f5 : 00000000;
+37f6 : 00000000;
+37f7 : 00000000;
+37f8 : 00000000;
+37f9 : 00000000;
+37fa : 00000000;
+37fb : 00000000;
+37fc : 00000000;
+37fd : 00000000;
+37fe : 00000000;
+37ff : 00000000;
+3800 : 00000000;
+3801 : 00000000;
+3802 : 00000000;
+3803 : 00000000;
+3804 : 00000000;
+3805 : 00000000;
+3806 : 00000000;
+3807 : 00000000;
+3808 : 00000000;
+3809 : 00000000;
+380a : 00000000;
+380b : 00000000;
+380c : 00000000;
+380d : 00000000;
+380e : 00000000;
+380f : 00000000;
+3810 : 00000000;
+3811 : 00000000;
+3812 : 00000000;
+3813 : 00000000;
+3814 : 00000000;
+3815 : 00000000;
+3816 : 00000000;
+3817 : 00000000;
+3818 : 00000000;
+3819 : 00000000;
+381a : 00000000;
+381b : 00000000;
+381c : 00000000;
+381d : 00000000;
+381e : 00000000;
+381f : 00000000;
+3820 : 00000000;
+3821 : 00000000;
+3822 : 00000000;
+3823 : 00000000;
+3824 : 00000000;
+3825 : 00000000;
+3826 : 00000000;
+3827 : 00000000;
+3828 : 00000000;
+3829 : 00000000;
+382a : 00000000;
+382b : 00000000;
+382c : 00000000;
+382d : 00000000;
+382e : 00000000;
+382f : 00000000;
+3830 : 00000000;
+3831 : 00000000;
+3832 : 00000000;
+3833 : 00000000;
+3834 : 00000000;
+3835 : 00000000;
+3836 : 00000000;
+3837 : 00000000;
+3838 : 00000000;
+3839 : 00000000;
+383a : 00000000;
+383b : 00000000;
+383c : 00000000;
+383d : 00000000;
+383e : 00000000;
+383f : 00000000;
+3840 : 00000000;
+3841 : 00000000;
+3842 : 00000000;
+3843 : 00000000;
+3844 : 00000000;
+3845 : 00000000;
+3846 : 00000000;
+3847 : 00000000;
+3848 : 00000000;
+3849 : 00000000;
+384a : 00000000;
+384b : 00000000;
+384c : 00000000;
+384d : 00000000;
+384e : 00000000;
+384f : 00000000;
+3850 : 00000000;
+3851 : 00000000;
+3852 : 00000000;
+3853 : 00000000;
+3854 : 00000000;
+3855 : 00000000;
+3856 : 00000000;
+3857 : 00000000;
+3858 : 00000000;
+3859 : 00000000;
+385a : 00000000;
+385b : 00000000;
+385c : 00000000;
+385d : 00000000;
+385e : 00000000;
+385f : 00000000;
+3860 : 00000000;
+3861 : 00000000;
+3862 : 00000000;
+3863 : 00000000;
+3864 : 00000000;
+3865 : 00000000;
+3866 : 00000000;
+3867 : 00000000;
+3868 : 00000000;
+3869 : 00000000;
+386a : 00000000;
+386b : 00000000;
+386c : 00000000;
+386d : 00000000;
+386e : 00000000;
+386f : 00000000;
+3870 : 00000000;
+3871 : 00000000;
+3872 : 00000000;
+3873 : 00000000;
+3874 : 00000000;
+3875 : 00000000;
+3876 : 00000000;
+3877 : 00000000;
+3878 : 00000000;
+3879 : 00000000;
+387a : 00000000;
+387b : 00000000;
+387c : 00000000;
+387d : 00000000;
+387e : 00000000;
+387f : 00000000;
+3880 : 00000000;
+3881 : 00000000;
+3882 : 00000000;
+3883 : 00000000;
+3884 : 00000000;
+3885 : 00000000;
+3886 : 00000000;
+3887 : 00000000;
+3888 : 00000000;
+3889 : 00000000;
+388a : 00000000;
+388b : 00000000;
+388c : 00000000;
+388d : 00000000;
+388e : 00000000;
+388f : 00000000;
+3890 : 00000000;
+3891 : 00000000;
+3892 : 00000000;
+3893 : 00000000;
+3894 : 00000000;
+3895 : 00000000;
+3896 : 00000000;
+3897 : 00000000;
+3898 : 00000000;
+3899 : 00000000;
+389a : 00000000;
+389b : 00000000;
+389c : 00000000;
+389d : 00000000;
+389e : 00000000;
+389f : 00000000;
+38a0 : 00000000;
+38a1 : 00000000;
+38a2 : 00000000;
+38a3 : 00000000;
+38a4 : 00000000;
+38a5 : 00000000;
+38a6 : 00000000;
+38a7 : 00000000;
+38a8 : 00000000;
+38a9 : 00000000;
+38aa : 00000000;
+38ab : 00000000;
+38ac : 00000000;
+38ad : 00000000;
+38ae : 00000000;
+38af : 00000000;
+38b0 : 00000000;
+38b1 : 00000000;
+38b2 : 00000000;
+38b3 : 00000000;
+38b4 : 00000000;
+38b5 : 00000000;
+38b6 : 00000000;
+38b7 : 00000000;
+38b8 : 00000000;
+38b9 : 00000000;
+38ba : 00000000;
+38bb : 00000000;
+38bc : 00000000;
+38bd : 00000000;
+38be : 00000000;
+38bf : 00000000;
+38c0 : 00000000;
+38c1 : 00000000;
+38c2 : 00000000;
+38c3 : 00000000;
+38c4 : 00000000;
+38c5 : 00000000;
+38c6 : 00000000;
+38c7 : 00000000;
+38c8 : 00000000;
+38c9 : 00000000;
+38ca : 00000000;
+38cb : 00000000;
+38cc : 00000000;
+38cd : 00000000;
+38ce : 00000000;
+38cf : 00000000;
+38d0 : 00000000;
+38d1 : 00000000;
+38d2 : 00000000;
+38d3 : 00000000;
+38d4 : 00000000;
+38d5 : 00000000;
+38d6 : 00000000;
+38d7 : 00000000;
+38d8 : 00000000;
+38d9 : 00000000;
+38da : 00000000;
+38db : 00000000;
+38dc : 00000000;
+38dd : 00000000;
+38de : 00000000;
+38df : 00000000;
+38e0 : 00000000;
+38e1 : 00000000;
+38e2 : 00000000;
+38e3 : 00000000;
+38e4 : 00000000;
+38e5 : 00000000;
+38e6 : 00000000;
+38e7 : 00000000;
+38e8 : 00000000;
+38e9 : 00000000;
+38ea : 00000000;
+38eb : 00000000;
+38ec : 00000000;
+38ed : 00000000;
+38ee : 00000000;
+38ef : 00000000;
+38f0 : 00000000;
+38f1 : 00000000;
+38f2 : 00000000;
+38f3 : 00000000;
+38f4 : 00000000;
+38f5 : 00000000;
+38f6 : 00000000;
+38f7 : 00000000;
+38f8 : 00000000;
+38f9 : 00000000;
+38fa : 00000000;
+38fb : 00000000;
+38fc : 00000000;
+38fd : 00000000;
+38fe : 00000000;
+38ff : 00000000;
+3900 : 00000000;
+3901 : 00000000;
+3902 : 00000000;
+3903 : 00000000;
+3904 : 00000000;
+3905 : 00000000;
+3906 : 00000000;
+3907 : 00000000;
+3908 : 00000000;
+3909 : 00000000;
+390a : 00000000;
+390b : 00000000;
+390c : 00000000;
+390d : 00000000;
+390e : 00000000;
+390f : 00000000;
+3910 : 00000000;
+3911 : 00000000;
+3912 : 00000000;
+3913 : 00000000;
+3914 : 00000000;
+3915 : 00000000;
+3916 : 00000000;
+3917 : 00000000;
+3918 : 00000000;
+3919 : 00000000;
+391a : 00000000;
+391b : 00000000;
+391c : 00000000;
+391d : 00000000;
+391e : 00000000;
+391f : 00000000;
+3920 : 00000000;
+3921 : 00000000;
+3922 : 00000000;
+3923 : 00000000;
+3924 : 00000000;
+3925 : 00000000;
+3926 : 00000000;
+3927 : 00000000;
+3928 : 00000000;
+3929 : 00000000;
+392a : 00000000;
+392b : 00000000;
+392c : 00000000;
+392d : 00000000;
+392e : 00000000;
+392f : 00000000;
+3930 : 00000000;
+3931 : 00000000;
+3932 : 00000000;
+3933 : 00000000;
+3934 : 00000000;
+3935 : 00000000;
+3936 : 00000000;
+3937 : 00000000;
+3938 : 00000000;
+3939 : 00000000;
+393a : 00000000;
+393b : 00000000;
+393c : 00000000;
+393d : 00000000;
+393e : 00000000;
+393f : 00000000;
+3940 : 00000000;
+3941 : 00000000;
+3942 : 00000000;
+3943 : 00000000;
+3944 : 00000000;
+3945 : 00000000;
+3946 : 00000000;
+3947 : 00000000;
+3948 : 00000000;
+3949 : 00000000;
+394a : 00000000;
+394b : 00000000;
+394c : 00000000;
+394d : 00000000;
+394e : 00000000;
+394f : 00000000;
+3950 : 00000000;
+3951 : 00000000;
+3952 : 00000000;
+3953 : 00000000;
+3954 : 00000000;
+3955 : 00000000;
+3956 : 00000000;
+3957 : 00000000;
+3958 : 00000000;
+3959 : 00000000;
+395a : 00000000;
+395b : 00000000;
+395c : 00000000;
+395d : 00000000;
+395e : 00000000;
+395f : 00000000;
+3960 : 00000000;
+3961 : 00000000;
+3962 : 00000000;
+3963 : 00000000;
+3964 : 00000000;
+3965 : 00000000;
+3966 : 00000000;
+3967 : 00000000;
+3968 : 00000000;
+3969 : 00000000;
+396a : 00000000;
+396b : 00000000;
+396c : 00000000;
+396d : 00000000;
+396e : 00000000;
+396f : 00000000;
+3970 : 00000000;
+3971 : 00000000;
+3972 : 00000000;
+3973 : 00000000;
+3974 : 00000000;
+3975 : 00000000;
+3976 : 00000000;
+3977 : 00000000;
+3978 : 00000000;
+3979 : 00000000;
+397a : 00000000;
+397b : 00000000;
+397c : 00000000;
+397d : 00000000;
+397e : 00000000;
+397f : 00000000;
+3980 : 00000000;
+3981 : 00000000;
+3982 : 00000000;
+3983 : 00000000;
+3984 : 00000000;
+3985 : 00000000;
+3986 : 00000000;
+3987 : 00000000;
+3988 : 00000000;
+3989 : 00000000;
+398a : 00000000;
+398b : 00000000;
+398c : 00000000;
+398d : 00000000;
+398e : 00000000;
+398f : 00000000;
+3990 : 00000000;
+3991 : 00000000;
+3992 : 00000000;
+3993 : 00000000;
+3994 : 00000000;
+3995 : 00000000;
+3996 : 00000000;
+3997 : 00000000;
+3998 : 00000000;
+3999 : 00000000;
+399a : 00000000;
+399b : 00000000;
+399c : 00000000;
+399d : 00000000;
+399e : 00000000;
+399f : 00000000;
+39a0 : 00000000;
+39a1 : 00000000;
+39a2 : 00000000;
+39a3 : 00000000;
+39a4 : 00000000;
+39a5 : 00000000;
+39a6 : 00000000;
+39a7 : 00000000;
+39a8 : 00000000;
+39a9 : 00000000;
+39aa : 00000000;
+39ab : 00000000;
+39ac : 00000000;
+39ad : 00000000;
+39ae : 00000000;
+39af : 00000000;
+39b0 : 00000000;
+39b1 : 00000000;
+39b2 : 00000000;
+39b3 : 00000000;
+39b4 : 00000000;
+39b5 : 00000000;
+39b6 : 00000000;
+39b7 : 00000000;
+39b8 : 00000000;
+39b9 : 00000000;
+39ba : 00000000;
+39bb : 00000000;
+39bc : 00000000;
+39bd : 00000000;
+39be : 00000000;
+39bf : 00000000;
+39c0 : 00000000;
+39c1 : 00000000;
+39c2 : 00000000;
+39c3 : 00000000;
+39c4 : 00000000;
+39c5 : 00000000;
+39c6 : 00000000;
+39c7 : 00000000;
+39c8 : 00000000;
+39c9 : 00000000;
+39ca : 00000000;
+39cb : 00000000;
+39cc : 00000000;
+39cd : 00000000;
+39ce : 00000000;
+39cf : 00000000;
+39d0 : 00000000;
+39d1 : 00000000;
+39d2 : 00000000;
+39d3 : 00000000;
+39d4 : 00000000;
+39d5 : 00000000;
+39d6 : 00000000;
+39d7 : 00000000;
+39d8 : 00000000;
+39d9 : 00000000;
+39da : 00000000;
+39db : 00000000;
+39dc : 00000000;
+39dd : 00000000;
+39de : 00000000;
+39df : 00000000;
+39e0 : 00000000;
+39e1 : 00000000;
+39e2 : 00000000;
+39e3 : 00000000;
+39e4 : 00000000;
+39e5 : 00000000;
+39e6 : 00000000;
+39e7 : 00000000;
+39e8 : 00000000;
+39e9 : 00000000;
+39ea : 00000000;
+39eb : 00000000;
+39ec : 00000000;
+39ed : 00000000;
+39ee : 00000000;
+39ef : 00000000;
+39f0 : 00000000;
+39f1 : 00000000;
+39f2 : 00000000;
+39f3 : 00000000;
+39f4 : 00000000;
+39f5 : 00000000;
+39f6 : 00000000;
+39f7 : 00000000;
+39f8 : 00000000;
+39f9 : 00000000;
+39fa : 00000000;
+39fb : 00000000;
+39fc : 00000000;
+39fd : 00000000;
+39fe : 00000000;
+39ff : 00000000;
+3a00 : 00000000;
+3a01 : 00000000;
+3a02 : 00000000;
+3a03 : 00000000;
+3a04 : 00000000;
+3a05 : 00000000;
+3a06 : 00000000;
+3a07 : 00000000;
+3a08 : 00000000;
+3a09 : 00000000;
+3a0a : 00000000;
+3a0b : 00000000;
+3a0c : 00000000;
+3a0d : 00000000;
+3a0e : 00000000;
+3a0f : 00000000;
+3a10 : 00000000;
+3a11 : 00000000;
+3a12 : 00000000;
+3a13 : 00000000;
+3a14 : 00000000;
+3a15 : 00000000;
+3a16 : 00000000;
+3a17 : 00000000;
+3a18 : 00000000;
+3a19 : 00000000;
+3a1a : 00000000;
+3a1b : 00000000;
+3a1c : 00000000;
+3a1d : 00000000;
+3a1e : 00000000;
+3a1f : 00000000;
+3a20 : 00000000;
+3a21 : 00000000;
+3a22 : 00000000;
+3a23 : 00000000;
+3a24 : 00000000;
+3a25 : 00000000;
+3a26 : 00000000;
+3a27 : 00000000;
+3a28 : 00000000;
+3a29 : 00000000;
+3a2a : 00000000;
+3a2b : 00000000;
+3a2c : 00000000;
+3a2d : 00000000;
+3a2e : 00000000;
+3a2f : 00000000;
+3a30 : 00000000;
+3a31 : 00000000;
+3a32 : 00000000;
+3a33 : 00000000;
+3a34 : 00000000;
+3a35 : 00000000;
+3a36 : 00000000;
+3a37 : 00000000;
+3a38 : 00000000;
+3a39 : 00000000;
+3a3a : 00000000;
+3a3b : 00000000;
+3a3c : 00000000;
+3a3d : 00000000;
+3a3e : 00000000;
+3a3f : 00000000;
+3a40 : 00000000;
+3a41 : 00000000;
+3a42 : 00000000;
+3a43 : 00000000;
+3a44 : 00000000;
+3a45 : 00000000;
+3a46 : 00000000;
+3a47 : 00000000;
+3a48 : 00000000;
+3a49 : 00000000;
+3a4a : 00000000;
+3a4b : 00000000;
+3a4c : 00000000;
+3a4d : 00000000;
+3a4e : 00000000;
+3a4f : 00000000;
+3a50 : 00000000;
+3a51 : 00000000;
+3a52 : 00000000;
+3a53 : 00000000;
+3a54 : 00000000;
+3a55 : 00000000;
+3a56 : 00000000;
+3a57 : 00000000;
+3a58 : 00000000;
+3a59 : 00000000;
+3a5a : 00000000;
+3a5b : 00000000;
+3a5c : 00000000;
+3a5d : 00000000;
+3a5e : 00000000;
+3a5f : 00000000;
+3a60 : 00000000;
+3a61 : 00000000;
+3a62 : 00000000;
+3a63 : 00000000;
+3a64 : 00000000;
+3a65 : 00000000;
+3a66 : 00000000;
+3a67 : 00000000;
+3a68 : 00000000;
+3a69 : 00000000;
+3a6a : 00000000;
+3a6b : 00000000;
+3a6c : 00000000;
+3a6d : 00000000;
+3a6e : 00000000;
+3a6f : 00000000;
+3a70 : 00000000;
+3a71 : 00000000;
+3a72 : 00000000;
+3a73 : 00000000;
+3a74 : 00000000;
+3a75 : 00000000;
+3a76 : 00000000;
+3a77 : 00000000;
+3a78 : 00000000;
+3a79 : 00000000;
+3a7a : 00000000;
+3a7b : 00000000;
+3a7c : 00000000;
+3a7d : 00000000;
+3a7e : 00000000;
+3a7f : 00000000;
+3a80 : 00000000;
+3a81 : 00000000;
+3a82 : 00000000;
+3a83 : 00000000;
+3a84 : 00000000;
+3a85 : 00000000;
+3a86 : 00000000;
+3a87 : 00000000;
+3a88 : 00000000;
+3a89 : 00000000;
+3a8a : 00000000;
+3a8b : 00000000;
+3a8c : 00000000;
+3a8d : 00000000;
+3a8e : 00000000;
+3a8f : 00000000;
+3a90 : 00000000;
+3a91 : 00000000;
+3a92 : 00000000;
+3a93 : 00000000;
+3a94 : 00000000;
+3a95 : 00000000;
+3a96 : 00000000;
+3a97 : 00000000;
+3a98 : 00000000;
+3a99 : 00000000;
+3a9a : 00000000;
+3a9b : 00000000;
+3a9c : 00000000;
+3a9d : 00000000;
+3a9e : 00000000;
+3a9f : 00000000;
+3aa0 : 00000000;
+3aa1 : 00000000;
+3aa2 : 00000000;
+3aa3 : 00000000;
+3aa4 : 00000000;
+3aa5 : 00000000;
+3aa6 : 00000000;
+3aa7 : 00000000;
+3aa8 : 00000000;
+3aa9 : 00000000;
+3aaa : 00000000;
+3aab : 00000000;
+3aac : 00000000;
+3aad : 00000000;
+3aae : 00000000;
+3aaf : 00000000;
+3ab0 : 00000000;
+3ab1 : 00000000;
+3ab2 : 00000000;
+3ab3 : 00000000;
+3ab4 : 00000000;
+3ab5 : 00000000;
+3ab6 : 00000000;
+3ab7 : 00000000;
+3ab8 : 00000000;
+3ab9 : 00000000;
+3aba : 00000000;
+3abb : 00000000;
+3abc : 00000000;
+3abd : 00000000;
+3abe : 00000000;
+3abf : 00000000;
+3ac0 : 00000000;
+3ac1 : 00000000;
+3ac2 : 00000000;
+3ac3 : 00000000;
+3ac4 : 00000000;
+3ac5 : 00000000;
+3ac6 : 00000000;
+3ac7 : 00000000;
+3ac8 : 00000000;
+3ac9 : 00000000;
+3aca : 00000000;
+3acb : 00000000;
+3acc : 00000000;
+3acd : 00000000;
+3ace : 00000000;
+3acf : 00000000;
+3ad0 : 00000000;
+3ad1 : 00000000;
+3ad2 : 00000000;
+3ad3 : 00000000;
+3ad4 : 00000000;
+3ad5 : 00000000;
+3ad6 : 00000000;
+3ad7 : 00000000;
+3ad8 : 00000000;
+3ad9 : 00000000;
+3ada : 00000000;
+3adb : 00000000;
+3adc : 00000000;
+3add : 00000000;
+3ade : 00000000;
+3adf : 00000000;
+3ae0 : 00000000;
+3ae1 : 00000000;
+3ae2 : 00000000;
+3ae3 : 00000000;
+3ae4 : 00000000;
+3ae5 : 00000000;
+3ae6 : 00000000;
+3ae7 : 00000000;
+3ae8 : 00000000;
+3ae9 : 00000000;
+3aea : 00000000;
+3aeb : 00000000;
+3aec : 00000000;
+3aed : 00000000;
+3aee : 00000000;
+3aef : 00000000;
+3af0 : 00000000;
+3af1 : 00000000;
+3af2 : 00000000;
+3af3 : 00000000;
+3af4 : 00000000;
+3af5 : 00000000;
+3af6 : 00000000;
+3af7 : 00000000;
+3af8 : 00000000;
+3af9 : 00000000;
+3afa : 00000000;
+3afb : 00000000;
+3afc : 00000000;
+3afd : 00000000;
+3afe : 00000000;
+3aff : 00000000;
+3b00 : 00000000;
+3b01 : 00000000;
+3b02 : 00000000;
+3b03 : 00000000;
+3b04 : 00000000;
+3b05 : 00000000;
+3b06 : 00000000;
+3b07 : 00000000;
+3b08 : 00000000;
+3b09 : 00000000;
+3b0a : 00000000;
+3b0b : 00000000;
+3b0c : 00000000;
+3b0d : 00000000;
+3b0e : 00000000;
+3b0f : 00000000;
+3b10 : 00000000;
+3b11 : 00000000;
+3b12 : 00000000;
+3b13 : 00000000;
+3b14 : 00000000;
+3b15 : 00000000;
+3b16 : 00000000;
+3b17 : 00000000;
+3b18 : 00000000;
+3b19 : 00000000;
+3b1a : 00000000;
+3b1b : 00000000;
+3b1c : 00000000;
+3b1d : 00000000;
+3b1e : 00000000;
+3b1f : 00000000;
+3b20 : 00000000;
+3b21 : 00000000;
+3b22 : 00000000;
+3b23 : 00000000;
+3b24 : 00000000;
+3b25 : 00000000;
+3b26 : 00000000;
+3b27 : 00000000;
+3b28 : 00000000;
+3b29 : 00000000;
+3b2a : 00000000;
+3b2b : 00000000;
+3b2c : 00000000;
+3b2d : 00000000;
+3b2e : 00000000;
+3b2f : 00000000;
+3b30 : 00000000;
+3b31 : 00000000;
+3b32 : 00000000;
+3b33 : 00000000;
+3b34 : 00000000;
+3b35 : 00000000;
+3b36 : 00000000;
+3b37 : 00000000;
+3b38 : 00000000;
+3b39 : 00000000;
+3b3a : 00000000;
+3b3b : 00000000;
+3b3c : 00000000;
+3b3d : 00000000;
+3b3e : 00000000;
+3b3f : 00000000;
+3b40 : 00000000;
+3b41 : 00000000;
+3b42 : 00000000;
+3b43 : 00000000;
+3b44 : 00000000;
+3b45 : 00000000;
+3b46 : 00000000;
+3b47 : 00000000;
+3b48 : 00000000;
+3b49 : 00000000;
+3b4a : 00000000;
+3b4b : 00000000;
+3b4c : 00000000;
+3b4d : 00000000;
+3b4e : 00000000;
+3b4f : 00000000;
+3b50 : 00000000;
+3b51 : 00000000;
+3b52 : 00000000;
+3b53 : 00000000;
+3b54 : 00000000;
+3b55 : 00000000;
+3b56 : 00000000;
+3b57 : 00000000;
+3b58 : 00000000;
+3b59 : 00000000;
+3b5a : 00000000;
+3b5b : 00000000;
+3b5c : 00000000;
+3b5d : 00000000;
+3b5e : 00000000;
+3b5f : 00000000;
+3b60 : 00000000;
+3b61 : 00000000;
+3b62 : 00000000;
+3b63 : 00000000;
+3b64 : 00000000;
+3b65 : 00000000;
+3b66 : 00000000;
+3b67 : 00000000;
+3b68 : 00000000;
+3b69 : 00000000;
+3b6a : 00000000;
+3b6b : 00000000;
+3b6c : 00000000;
+3b6d : 00000000;
+3b6e : 00000000;
+3b6f : 00000000;
+3b70 : 00000000;
+3b71 : 00000000;
+3b72 : 00000000;
+3b73 : 00000000;
+3b74 : 00000000;
+3b75 : 00000000;
+3b76 : 00000000;
+3b77 : 00000000;
+3b78 : 00000000;
+3b79 : 00000000;
+3b7a : 00000000;
+3b7b : 00000000;
+3b7c : 00000000;
+3b7d : 00000000;
+3b7e : 00000000;
+3b7f : 00000000;
+3b80 : 00000000;
+3b81 : 00000000;
+3b82 : 00000000;
+3b83 : 00000000;
+3b84 : 00000000;
+3b85 : 00000000;
+3b86 : 00000000;
+3b87 : 00000000;
+3b88 : 00000000;
+3b89 : 00000000;
+3b8a : 00000000;
+3b8b : 00000000;
+3b8c : 00000000;
+3b8d : 00000000;
+3b8e : 00000000;
+3b8f : 00000000;
+3b90 : 00000000;
+3b91 : 00000000;
+3b92 : 00000000;
+3b93 : 00000000;
+3b94 : 00000000;
+3b95 : 00000000;
+3b96 : 00000000;
+3b97 : 00000000;
+3b98 : 00000000;
+3b99 : 00000000;
+3b9a : 00000000;
+3b9b : 00000000;
+3b9c : 00000000;
+3b9d : 00000000;
+3b9e : 00000000;
+3b9f : 00000000;
+3ba0 : 00000000;
+3ba1 : 00000000;
+3ba2 : 00000000;
+3ba3 : 00000000;
+3ba4 : 00000000;
+3ba5 : 00000000;
+3ba6 : 00000000;
+3ba7 : 00000000;
+3ba8 : 00000000;
+3ba9 : 00000000;
+3baa : 00000000;
+3bab : 00000000;
+3bac : 00000000;
+3bad : 00000000;
+3bae : 00000000;
+3baf : 00000000;
+3bb0 : 00000000;
+3bb1 : 00000000;
+3bb2 : 00000000;
+3bb3 : 00000000;
+3bb4 : 00000000;
+3bb5 : 00000000;
+3bb6 : 00000000;
+3bb7 : 00000000;
+3bb8 : 00000000;
+3bb9 : 00000000;
+3bba : 00000000;
+3bbb : 00000000;
+3bbc : 00000000;
+3bbd : 00000000;
+3bbe : 00000000;
+3bbf : 00000000;
+3bc0 : 00000000;
+3bc1 : 00000000;
+3bc2 : 00000000;
+3bc3 : 00000000;
+3bc4 : 00000000;
+3bc5 : 00000000;
+3bc6 : 00000000;
+3bc7 : 00000000;
+3bc8 : 00000000;
+3bc9 : 00000000;
+3bca : 00000000;
+3bcb : 00000000;
+3bcc : 00000000;
+3bcd : 00000000;
+3bce : 00000000;
+3bcf : 00000000;
+3bd0 : 00000000;
+3bd1 : 00000000;
+3bd2 : 00000000;
+3bd3 : 00000000;
+3bd4 : 00000000;
+3bd5 : 00000000;
+3bd6 : 00000000;
+3bd7 : 00000000;
+3bd8 : 00000000;
+3bd9 : 00000000;
+3bda : 00000000;
+3bdb : 00000000;
+3bdc : 00000000;
+3bdd : 00000000;
+3bde : 00000000;
+3bdf : 00000000;
+3be0 : 00000000;
+3be1 : 00000000;
+3be2 : 00000000;
+3be3 : 00000000;
+3be4 : 00000000;
+3be5 : 00000000;
+3be6 : 00000000;
+3be7 : 00000000;
+3be8 : 00000000;
+3be9 : 00000000;
+3bea : 00000000;
+3beb : 00000000;
+3bec : 00000000;
+3bed : 00000000;
+3bee : 00000000;
+3bef : 00000000;
+3bf0 : 00000000;
+3bf1 : 00000000;
+3bf2 : 00000000;
+3bf3 : 00000000;
+3bf4 : 00000000;
+3bf5 : 00000000;
+3bf6 : 00000000;
+3bf7 : 00000000;
+3bf8 : 00000000;
+3bf9 : 00000000;
+3bfa : 00000000;
+3bfb : 00000000;
+3bfc : 00000000;
+3bfd : 00000000;
+3bfe : 00000000;
+3bff : 00000000;
+3c00 : 00000000;
+3c01 : 00000000;
+3c02 : 00000000;
+3c03 : 00000000;
+3c04 : 00000000;
+3c05 : 00000000;
+3c06 : 00000000;
+3c07 : 00000000;
+3c08 : 00000000;
+3c09 : 00000000;
+3c0a : 00000000;
+3c0b : 00000000;
+3c0c : 00000000;
+3c0d : 00000000;
+3c0e : 00000000;
+3c0f : 00000000;
+3c10 : 00000000;
+3c11 : 00000000;
+3c12 : 00000000;
+3c13 : 00000000;
+3c14 : 00000000;
+3c15 : 00000000;
+3c16 : 00000000;
+3c17 : 00000000;
+3c18 : 00000000;
+3c19 : 00000000;
+3c1a : 00000000;
+3c1b : 00000000;
+3c1c : 00000000;
+3c1d : 00000000;
+3c1e : 00000000;
+3c1f : 00000000;
+3c20 : 00000000;
+3c21 : 00000000;
+3c22 : 00000000;
+3c23 : 00000000;
+3c24 : 00000000;
+3c25 : 00000000;
+3c26 : 00000000;
+3c27 : 00000000;
+3c28 : 00000000;
+3c29 : 00000000;
+3c2a : 00000000;
+3c2b : 00000000;
+3c2c : 00000000;
+3c2d : 00000000;
+3c2e : 00000000;
+3c2f : 00000000;
+3c30 : 00000000;
+3c31 : 00000000;
+3c32 : 00000000;
+3c33 : 00000000;
+3c34 : 00000000;
+3c35 : 00000000;
+3c36 : 00000000;
+3c37 : 00000000;
+3c38 : 00000000;
+3c39 : 00000000;
+3c3a : 00000000;
+3c3b : 00000000;
+3c3c : 00000000;
+3c3d : 00000000;
+3c3e : 00000000;
+3c3f : 00000000;
+3c40 : 00000000;
+3c41 : 00000000;
+3c42 : 00000000;
+3c43 : 00000000;
+3c44 : 00000000;
+3c45 : 00000000;
+3c46 : 00000000;
+3c47 : 00000000;
+3c48 : 00000000;
+3c49 : 00000000;
+3c4a : 00000000;
+3c4b : 00000000;
+3c4c : 00000000;
+3c4d : 00000000;
+3c4e : 00000000;
+3c4f : 00000000;
+3c50 : 00000000;
+3c51 : 00000000;
+3c52 : 00000000;
+3c53 : 00000000;
+3c54 : 00000000;
+3c55 : 00000000;
+3c56 : 00000000;
+3c57 : 00000000;
+3c58 : 00000000;
+3c59 : 00000000;
+3c5a : 00000000;
+3c5b : 00000000;
+3c5c : 00000000;
+3c5d : 00000000;
+3c5e : 00000000;
+3c5f : 00000000;
+3c60 : 00000000;
+3c61 : 00000000;
+3c62 : 00000000;
+3c63 : 00000000;
+3c64 : 00000000;
+3c65 : 00000000;
+3c66 : 00000000;
+3c67 : 00000000;
+3c68 : 00000000;
+3c69 : 00000000;
+3c6a : 00000000;
+3c6b : 00000000;
+3c6c : 00000000;
+3c6d : 00000000;
+3c6e : 00000000;
+3c6f : 00000000;
+3c70 : 00000000;
+3c71 : 00000000;
+3c72 : 00000000;
+3c73 : 00000000;
+3c74 : 00000000;
+3c75 : 00000000;
+3c76 : 00000000;
+3c77 : 00000000;
+3c78 : 00000000;
+3c79 : 00000000;
+3c7a : 00000000;
+3c7b : 00000000;
+3c7c : 00000000;
+3c7d : 00000000;
+3c7e : 00000000;
+3c7f : 00000000;
+3c80 : 00000000;
+3c81 : 00000000;
+3c82 : 00000000;
+3c83 : 00000000;
+3c84 : 00000000;
+3c85 : 00000000;
+3c86 : 00000000;
+3c87 : 00000000;
+3c88 : 00000000;
+3c89 : 00000000;
+3c8a : 00000000;
+3c8b : 00000000;
+3c8c : 00000000;
+3c8d : 00000000;
+3c8e : 00000000;
+3c8f : 00000000;
+3c90 : 00000000;
+3c91 : 00000000;
+3c92 : 00000000;
+3c93 : 00000000;
+3c94 : 00000000;
+3c95 : 00000000;
+3c96 : 00000000;
+3c97 : 00000000;
+3c98 : 00000000;
+3c99 : 00000000;
+3c9a : 00000000;
+3c9b : 00000000;
+3c9c : 00000000;
+3c9d : 00000000;
+3c9e : 00000000;
+3c9f : 00000000;
+3ca0 : 00000000;
+3ca1 : 00000000;
+3ca2 : 00000000;
+3ca3 : 00000000;
+3ca4 : 00000000;
+3ca5 : 00000000;
+3ca6 : 00000000;
+3ca7 : 00000000;
+3ca8 : 00000000;
+3ca9 : 00000000;
+3caa : 00000000;
+3cab : 00000000;
+3cac : 00000000;
+3cad : 00000000;
+3cae : 00000000;
+3caf : 00000000;
+3cb0 : 00000000;
+3cb1 : 00000000;
+3cb2 : 00000000;
+3cb3 : 00000000;
+3cb4 : 00000000;
+3cb5 : 00000000;
+3cb6 : 00000000;
+3cb7 : 00000000;
+3cb8 : 00000000;
+3cb9 : 00000000;
+3cba : 00000000;
+3cbb : 00000000;
+3cbc : 00000000;
+3cbd : 00000000;
+3cbe : 00000000;
+3cbf : 00000000;
+3cc0 : 00000000;
+3cc1 : 00000000;
+3cc2 : 00000000;
+3cc3 : 00000000;
+3cc4 : 00000000;
+3cc5 : 00000000;
+3cc6 : 00000000;
+3cc7 : 00000000;
+3cc8 : 00000000;
+3cc9 : 00000000;
+3cca : 00000000;
+3ccb : 00000000;
+3ccc : 00000000;
+3ccd : 00000000;
+3cce : 00000000;
+3ccf : 00000000;
+3cd0 : 00000000;
+3cd1 : 00000000;
+3cd2 : 00000000;
+3cd3 : 00000000;
+3cd4 : 00000000;
+3cd5 : 00000000;
+3cd6 : 00000000;
+3cd7 : 00000000;
+3cd8 : 00000000;
+3cd9 : 00000000;
+3cda : 00000000;
+3cdb : 00000000;
+3cdc : 00000000;
+3cdd : 00000000;
+3cde : 00000000;
+3cdf : 00000000;
+3ce0 : 00000000;
+3ce1 : 00000000;
+3ce2 : 00000000;
+3ce3 : 00000000;
+3ce4 : 00000000;
+3ce5 : 00000000;
+3ce6 : 00000000;
+3ce7 : 00000000;
+3ce8 : 00000000;
+3ce9 : 00000000;
+3cea : 00000000;
+3ceb : 00000000;
+3cec : 00000000;
+3ced : 00000000;
+3cee : 00000000;
+3cef : 00000000;
+3cf0 : 00000000;
+3cf1 : 00000000;
+3cf2 : 00000000;
+3cf3 : 00000000;
+3cf4 : 00000000;
+3cf5 : 00000000;
+3cf6 : 00000000;
+3cf7 : 00000000;
+3cf8 : 00000000;
+3cf9 : 00000000;
+3cfa : 00000000;
+3cfb : 00000000;
+3cfc : 00000000;
+3cfd : 00000000;
+3cfe : 00000000;
+3cff : 00000000;
+3d00 : 00000000;
+3d01 : 00000000;
+3d02 : 00000000;
+3d03 : 00000000;
+3d04 : 00000000;
+3d05 : 00000000;
+3d06 : 00000000;
+3d07 : 00000000;
+3d08 : 00000000;
+3d09 : 00000000;
+3d0a : 00000000;
+3d0b : 00000000;
+3d0c : 00000000;
+3d0d : 00000000;
+3d0e : 00000000;
+3d0f : 00000000;
+3d10 : 00000000;
+3d11 : 00000000;
+3d12 : 00000000;
+3d13 : 00000000;
+3d14 : 00000000;
+3d15 : 00000000;
+3d16 : 00000000;
+3d17 : 00000000;
+3d18 : 00000000;
+3d19 : 00000000;
+3d1a : 00000000;
+3d1b : 00000000;
+3d1c : 00000000;
+3d1d : 00000000;
+3d1e : 00000000;
+3d1f : 00000000;
+3d20 : 00000000;
+3d21 : 00000000;
+3d22 : 00000000;
+3d23 : 00000000;
+3d24 : 00000000;
+3d25 : 00000000;
+3d26 : 00000000;
+3d27 : 00000000;
+3d28 : 00000000;
+3d29 : 00000000;
+3d2a : 00000000;
+3d2b : 00000000;
+3d2c : 00000000;
+3d2d : 00000000;
+3d2e : 00000000;
+3d2f : 00000000;
+3d30 : 00000000;
+3d31 : 00000000;
+3d32 : 00000000;
+3d33 : 00000000;
+3d34 : 00000000;
+3d35 : 00000000;
+3d36 : 00000000;
+3d37 : 00000000;
+3d38 : 00000000;
+3d39 : 00000000;
+3d3a : 00000000;
+3d3b : 00000000;
+3d3c : 00000000;
+3d3d : 00000000;
+3d3e : 00000000;
+3d3f : 00000000;
+3d40 : 00000000;
+3d41 : 00000000;
+3d42 : 00000000;
+3d43 : 00000000;
+3d44 : 00000000;
+3d45 : 00000000;
+3d46 : 00000000;
+3d47 : 00000000;
+3d48 : 00000000;
+3d49 : 00000000;
+3d4a : 00000000;
+3d4b : 00000000;
+3d4c : 00000000;
+3d4d : 00000000;
+3d4e : 00000000;
+3d4f : 00000000;
+3d50 : 00000000;
+3d51 : 00000000;
+3d52 : 00000000;
+3d53 : 00000000;
+3d54 : 00000000;
+3d55 : 00000000;
+3d56 : 00000000;
+3d57 : 00000000;
+3d58 : 00000000;
+3d59 : 00000000;
+3d5a : 00000000;
+3d5b : 00000000;
+3d5c : 00000000;
+3d5d : 00000000;
+3d5e : 00000000;
+3d5f : 00000000;
+3d60 : 00000000;
+3d61 : 00000000;
+3d62 : 00000000;
+3d63 : 00000000;
+3d64 : 00000000;
+3d65 : 00000000;
+3d66 : 00000000;
+3d67 : 00000000;
+3d68 : 00000000;
+3d69 : 00000000;
+3d6a : 00000000;
+3d6b : 00000000;
+3d6c : 00000000;
+3d6d : 00000000;
+3d6e : 00000000;
+3d6f : 00000000;
+3d70 : 00000000;
+3d71 : 00000000;
+3d72 : 00000000;
+3d73 : 00000000;
+3d74 : 00000000;
+3d75 : 00000000;
+3d76 : 00000000;
+3d77 : 00000000;
+3d78 : 00000000;
+3d79 : 00000000;
+3d7a : 00000000;
+3d7b : 00000000;
+3d7c : 00000000;
+3d7d : 00000000;
+3d7e : 00000000;
+3d7f : 00000000;
+3d80 : 00000000;
+3d81 : 00000000;
+3d82 : 00000000;
+3d83 : 00000000;
+3d84 : 00000000;
+3d85 : 00000000;
+3d86 : 00000000;
+3d87 : 00000000;
+3d88 : 00000000;
+3d89 : 00000000;
+3d8a : 00000000;
+3d8b : 00000000;
+3d8c : 00000000;
+3d8d : 00000000;
+3d8e : 00000000;
+3d8f : 00000000;
+3d90 : 00000000;
+3d91 : 00000000;
+3d92 : 00000000;
+3d93 : 00000000;
+3d94 : 00000000;
+3d95 : 00000000;
+3d96 : 00000000;
+3d97 : 00000000;
+3d98 : 00000000;
+3d99 : 00000000;
+3d9a : 00000000;
+3d9b : 00000000;
+3d9c : 00000000;
+3d9d : 00000000;
+3d9e : 00000000;
+3d9f : 00000000;
+3da0 : 00000000;
+3da1 : 00000000;
+3da2 : 00000000;
+3da3 : 00000000;
+3da4 : 00000000;
+3da5 : 00000000;
+3da6 : 00000000;
+3da7 : 00000000;
+3da8 : 00000000;
+3da9 : 00000000;
+3daa : 00000000;
+3dab : 00000000;
+3dac : 00000000;
+3dad : 00000000;
+3dae : 00000000;
+3daf : 00000000;
+3db0 : 00000000;
+3db1 : 00000000;
+3db2 : 00000000;
+3db3 : 00000000;
+3db4 : 00000000;
+3db5 : 00000000;
+3db6 : 00000000;
+3db7 : 00000000;
+3db8 : 00000000;
+3db9 : 00000000;
+3dba : 00000000;
+3dbb : 00000000;
+3dbc : 00000000;
+3dbd : 00000000;
+3dbe : 00000000;
+3dbf : 00000000;
+3dc0 : 00000000;
+3dc1 : 00000000;
+3dc2 : 00000000;
+3dc3 : 00000000;
+3dc4 : 00000000;
+3dc5 : 00000000;
+3dc6 : 00000000;
+3dc7 : 00000000;
+3dc8 : 00000000;
+3dc9 : 00000000;
+3dca : 00000000;
+3dcb : 00000000;
+3dcc : 00000000;
+3dcd : 00000000;
+3dce : 00000000;
+3dcf : 00000000;
+3dd0 : 00000000;
+3dd1 : 00000000;
+3dd2 : 00000000;
+3dd3 : 00000000;
+3dd4 : 00000000;
+3dd5 : 00000000;
+3dd6 : 00000000;
+3dd7 : 00000000;
+3dd8 : 00000000;
+3dd9 : 00000000;
+3dda : 00000000;
+3ddb : 00000000;
+3ddc : 00000000;
+3ddd : 00000000;
+3dde : 00000000;
+3ddf : 00000000;
+3de0 : 00000000;
+3de1 : 00000000;
+3de2 : 00000000;
+3de3 : 00000000;
+3de4 : 00000000;
+3de5 : 00000000;
+3de6 : 00000000;
+3de7 : 00000000;
+3de8 : 00000000;
+3de9 : 00000000;
+3dea : 00000000;
+3deb : 00000000;
+3dec : 00000000;
+3ded : 00000000;
+3dee : 00000000;
+3def : 00000000;
+3df0 : 00000000;
+3df1 : 00000000;
+3df2 : 00000000;
+3df3 : 00000000;
+3df4 : 00000000;
+3df5 : 00000000;
+3df6 : 00000000;
+3df7 : 00000000;
+3df8 : 00000000;
+3df9 : 00000000;
+3dfa : 00000000;
+3dfb : 00000000;
+3dfc : 00000000;
+3dfd : 00000000;
+3dfe : 00000000;
+3dff : 00000000;
+3e00 : 00000000;
+3e01 : 00000000;
+3e02 : 00000000;
+3e03 : 00000000;
+3e04 : 00000000;
+3e05 : 00000000;
+3e06 : 00000000;
+3e07 : 00000000;
+3e08 : 00000000;
+3e09 : 00000000;
+3e0a : 00000000;
+3e0b : 00000000;
+3e0c : 00000000;
+3e0d : 00000000;
+3e0e : 00000000;
+3e0f : 00000000;
+3e10 : 00000000;
+3e11 : 00000000;
+3e12 : 00000000;
+3e13 : 00000000;
+3e14 : 00000000;
+3e15 : 00000000;
+3e16 : 00000000;
+3e17 : 00000000;
+3e18 : 00000000;
+3e19 : 00000000;
+3e1a : 00000000;
+3e1b : 00000000;
+3e1c : 00000000;
+3e1d : 00000000;
+3e1e : 00000000;
+3e1f : 00000000;
+3e20 : 00000000;
+3e21 : 00000000;
+3e22 : 00000000;
+3e23 : 00000000;
+3e24 : 00000000;
+3e25 : 00000000;
+3e26 : 00000000;
+3e27 : 00000000;
+3e28 : 00000000;
+3e29 : 00000000;
+3e2a : 00000000;
+3e2b : 00000000;
+3e2c : 00000000;
+3e2d : 00000000;
+3e2e : 00000000;
+3e2f : 00000000;
+3e30 : 00000000;
+3e31 : 00000000;
+3e32 : 00000000;
+3e33 : 00000000;
+3e34 : 00000000;
+3e35 : 00000000;
+3e36 : 00000000;
+3e37 : 00000000;
+3e38 : 00000000;
+3e39 : 00000000;
+3e3a : 00000000;
+3e3b : 00000000;
+3e3c : 00000000;
+3e3d : 00000000;
+3e3e : 00000000;
+3e3f : 00000000;
+3e40 : 00000000;
+3e41 : 00000000;
+3e42 : 00000000;
+3e43 : 00000000;
+3e44 : 00000000;
+3e45 : 00000000;
+3e46 : 00000000;
+3e47 : 00000000;
+3e48 : 00000000;
+3e49 : 00000000;
+3e4a : 00000000;
+3e4b : 00000000;
+3e4c : 00000000;
+3e4d : 00000000;
+3e4e : 00000000;
+3e4f : 00000000;
+3e50 : 00000000;
+3e51 : 00000000;
+3e52 : 00000000;
+3e53 : 00000000;
+3e54 : 00000000;
+3e55 : 00000000;
+3e56 : 00000000;
+3e57 : 00000000;
+3e58 : 00000000;
+3e59 : 00000000;
+3e5a : 00000000;
+3e5b : 00000000;
+3e5c : 00000000;
+3e5d : 00000000;
+3e5e : 00000000;
+3e5f : 00000000;
+3e60 : 00000000;
+3e61 : 00000000;
+3e62 : 00000000;
+3e63 : 00000000;
+3e64 : 00000000;
+3e65 : 00000000;
+3e66 : 00000000;
+3e67 : 00000000;
+3e68 : 00000000;
+3e69 : 00000000;
+3e6a : 00000000;
+3e6b : 00000000;
+3e6c : 00000000;
+3e6d : 00000000;
+3e6e : 00000000;
+3e6f : 00000000;
+3e70 : 00000000;
+3e71 : 00000000;
+3e72 : 00000000;
+3e73 : 00000000;
+3e74 : 00000000;
+3e75 : 00000000;
+3e76 : 00000000;
+3e77 : 00000000;
+3e78 : 00000000;
+3e79 : 00000000;
+3e7a : 00000000;
+3e7b : 00000000;
+3e7c : 00000000;
+3e7d : 00000000;
+3e7e : 00000000;
+3e7f : 00000000;
+3e80 : 00000000;
+3e81 : 00000000;
+3e82 : 00000000;
+3e83 : 00000000;
+3e84 : 00000000;
+3e85 : 00000000;
+3e86 : 00000000;
+3e87 : 00000000;
+3e88 : 00000000;
+3e89 : 00000000;
+3e8a : 00000000;
+3e8b : 00000000;
+3e8c : 00000000;
+3e8d : 00000000;
+3e8e : 00000000;
+3e8f : 00000000;
+3e90 : 00000000;
+3e91 : 00000000;
+3e92 : 00000000;
+3e93 : 00000000;
+3e94 : 00000000;
+3e95 : 00000000;
+3e96 : 00000000;
+3e97 : 00000000;
+3e98 : 00000000;
+3e99 : 00000000;
+3e9a : 00000000;
+3e9b : 00000000;
+3e9c : 00000000;
+3e9d : 00000000;
+3e9e : 00000000;
+3e9f : 00000000;
+3ea0 : 00000000;
+3ea1 : 00000000;
+3ea2 : 00000000;
+3ea3 : 00000000;
+3ea4 : 00000000;
+3ea5 : 00000000;
+3ea6 : 00000000;
+3ea7 : 00000000;
+3ea8 : 00000000;
+3ea9 : 00000000;
+3eaa : 00000000;
+3eab : 00000000;
+3eac : 00000000;
+3ead : 00000000;
+3eae : 00000000;
+3eaf : 00000000;
+3eb0 : 00000000;
+3eb1 : 00000000;
+3eb2 : 00000000;
+3eb3 : 00000000;
+3eb4 : 00000000;
+3eb5 : 00000000;
+3eb6 : 00000000;
+3eb7 : 00000000;
+3eb8 : 00000000;
+3eb9 : 00000000;
+3eba : 00000000;
+3ebb : 00000000;
+3ebc : 00000000;
+3ebd : 00000000;
+3ebe : 00000000;
+3ebf : 00000000;
+3ec0 : 00000000;
+3ec1 : 00000000;
+3ec2 : 00000000;
+3ec3 : 00000000;
+3ec4 : 00000000;
+3ec5 : 00000000;
+3ec6 : 00000000;
+3ec7 : 00000000;
+3ec8 : 00000000;
+3ec9 : 00000000;
+3eca : 00000000;
+3ecb : 00000000;
+3ecc : 00000000;
+3ecd : 00000000;
+3ece : 00000000;
+3ecf : 00000000;
+3ed0 : 00000000;
+3ed1 : 00000000;
+3ed2 : 00000000;
+3ed3 : 00000000;
+3ed4 : 00000000;
+3ed5 : 00000000;
+3ed6 : 00000000;
+3ed7 : 00000000;
+3ed8 : 00000000;
+3ed9 : 00000000;
+3eda : 00000000;
+3edb : 00000000;
+3edc : 00000000;
+3edd : 00000000;
+3ede : 00000000;
+3edf : 00000000;
+3ee0 : 00000000;
+3ee1 : 00000000;
+3ee2 : 00000000;
+3ee3 : 00000000;
+3ee4 : 00000000;
+3ee5 : 00000000;
+3ee6 : 00000000;
+3ee7 : 00000000;
+3ee8 : 00000000;
+3ee9 : 00000000;
+3eea : 00000000;
+3eeb : 00000000;
+3eec : 00000000;
+3eed : 00000000;
+3eee : 00000000;
+3eef : 00000000;
+3ef0 : 00000000;
+3ef1 : 00000000;
+3ef2 : 00000000;
+3ef3 : 00000000;
+3ef4 : 00000000;
+3ef5 : 00000000;
+3ef6 : 00000000;
+3ef7 : 00000000;
+3ef8 : 00000000;
+3ef9 : 00000000;
+3efa : 00000000;
+3efb : 00000000;
+3efc : 00000000;
+3efd : 00000000;
+3efe : 00000000;
+3eff : 00000000;
+3f00 : 00000000;
+3f01 : 00000000;
+3f02 : 00000000;
+3f03 : 00000000;
+3f04 : 00000000;
+3f05 : 00000000;
+3f06 : 00000000;
+3f07 : 00000000;
+3f08 : 00000000;
+3f09 : 00000000;
+3f0a : 00000000;
+3f0b : 00000000;
+3f0c : 00000000;
+3f0d : 00000000;
+3f0e : 00000000;
+3f0f : 00000000;
+3f10 : 00000000;
+3f11 : 00000000;
+3f12 : 00000000;
+3f13 : 00000000;
+3f14 : 00000000;
+3f15 : 00000000;
+3f16 : 00000000;
+3f17 : 00000000;
+3f18 : 00000000;
+3f19 : 00000000;
+3f1a : 00000000;
+3f1b : 00000000;
+3f1c : 00000000;
+3f1d : 00000000;
+3f1e : 00000000;
+3f1f : 00000000;
+3f20 : 00000000;
+3f21 : 00000000;
+3f22 : 00000000;
+3f23 : 00000000;
+3f24 : 00000000;
+3f25 : 00000000;
+3f26 : 00000000;
+3f27 : 00000000;
+3f28 : 00000000;
+3f29 : 00000000;
+3f2a : 00000000;
+3f2b : 00000000;
+3f2c : 00000000;
+3f2d : 00000000;
+3f2e : 00000000;
+3f2f : 00000000;
+3f30 : 00000000;
+3f31 : 00000000;
+3f32 : 00000000;
+3f33 : 00000000;
+3f34 : 00000000;
+3f35 : 00000000;
+3f36 : 00000000;
+3f37 : 00000000;
+3f38 : 00000000;
+3f39 : 00000000;
+3f3a : 00000000;
+3f3b : 00000000;
+3f3c : 00000000;
+3f3d : 00000000;
+3f3e : 00000000;
+3f3f : 00000000;
+3f40 : 00000000;
+3f41 : 00000000;
+3f42 : 00000000;
+3f43 : 00000000;
+3f44 : 00000000;
+3f45 : 00000000;
+3f46 : 00000000;
+3f47 : 00000000;
+3f48 : 00000000;
+3f49 : 00000000;
+3f4a : 00000000;
+3f4b : 00000000;
+3f4c : 00000000;
+3f4d : 00000000;
+3f4e : 00000000;
+3f4f : 00000000;
+3f50 : 00000000;
+3f51 : 00000000;
+3f52 : 00000000;
+3f53 : 00000000;
+3f54 : 00000000;
+3f55 : 00000000;
+3f56 : 00000000;
+3f57 : 00000000;
+3f58 : 00000000;
+3f59 : 00000000;
+3f5a : 00000000;
+3f5b : 00000000;
+3f5c : 00000000;
+3f5d : 00000000;
+3f5e : 00000000;
+3f5f : 00000000;
+3f60 : 00000000;
+3f61 : 00000000;
+3f62 : 00000000;
+3f63 : 00000000;
+3f64 : 00000000;
+3f65 : 00000000;
+3f66 : 00000000;
+3f67 : 00000000;
+3f68 : 00000000;
+3f69 : 00000000;
+3f6a : 00000000;
+3f6b : 00000000;
+3f6c : 00000000;
+3f6d : 00000000;
+3f6e : 00000000;
+3f6f : 00000000;
+3f70 : 00000000;
+3f71 : 00000000;
+3f72 : 00000000;
+3f73 : 00000000;
+3f74 : 00000000;
+3f75 : 00000000;
+3f76 : 00000000;
+3f77 : 00000000;
+3f78 : 00000000;
+3f79 : 00000000;
+3f7a : 00000000;
+3f7b : 00000000;
+3f7c : 00000000;
+3f7d : 00000000;
+3f7e : 00000000;
+3f7f : 00000000;
+3f80 : 00000000;
+3f81 : 00000000;
+3f82 : 00000000;
+3f83 : 00000000;
+3f84 : 00000000;
+3f85 : 00000000;
+3f86 : 00000000;
+3f87 : 00000000;
+3f88 : 00000000;
+3f89 : 00000000;
+3f8a : 00000000;
+3f8b : 00000000;
+3f8c : 00000000;
+3f8d : 00000000;
+3f8e : 00000000;
+3f8f : 00000000;
+3f90 : 00000000;
+3f91 : 00000000;
+3f92 : 00000000;
+3f93 : 00000000;
+3f94 : 00000000;
+3f95 : 00000000;
+3f96 : 00000000;
+3f97 : 00000000;
+3f98 : 00000000;
+3f99 : 00000000;
+3f9a : 00000000;
+3f9b : 00000000;
+3f9c : 00000000;
+3f9d : 00000000;
+3f9e : 00000000;
+3f9f : 00000000;
+3fa0 : 00000000;
+3fa1 : 00000000;
+3fa2 : 00000000;
+3fa3 : 00000000;
+3fa4 : 00000000;
+3fa5 : 00000000;
+3fa6 : 00000000;
+3fa7 : 00000000;
+3fa8 : 00000000;
+3fa9 : 00000000;
+3faa : 00000000;
+3fab : 00000000;
+3fac : 00000000;
+3fad : 00000000;
+3fae : 00000000;
+3faf : 00000000;
+3fb0 : 00000000;
+3fb1 : 00000000;
+3fb2 : 00000000;
+3fb3 : 00000000;
+3fb4 : 00000000;
+3fb5 : 00000000;
+3fb6 : 00000000;
+3fb7 : 00000000;
+3fb8 : 00000000;
+3fb9 : 00000000;
+3fba : 00000000;
+3fbb : 00000000;
+3fbc : 00000000;
+3fbd : 00000000;
+3fbe : 00000000;
+3fbf : 00000000;
+3fc0 : 00000000;
+3fc1 : 00000000;
+3fc2 : 00000000;
+3fc3 : 00000000;
+3fc4 : 00000000;
+3fc5 : 00000000;
+3fc6 : 00000000;
+3fc7 : 00000000;
+3fc8 : 00000000;
+3fc9 : 00000000;
+3fca : 00000000;
+3fcb : 00000000;
+3fcc : 00000000;
+3fcd : 00000000;
+3fce : 00000000;
+3fcf : 00000000;
+3fd0 : 00000000;
+3fd1 : 00000000;
+3fd2 : 00000000;
+3fd3 : 00000000;
+3fd4 : 00000000;
+3fd5 : 00000000;
+3fd6 : 00000000;
+3fd7 : 00000000;
+3fd8 : 00000000;
+3fd9 : 00000000;
+3fda : 00000000;
+3fdb : 00000000;
+3fdc : 00000000;
+3fdd : 00000000;
+3fde : 00000000;
+3fdf : 00000000;
+3fe0 : 00000000;
+3fe1 : 00000000;
+3fe2 : 00000000;
+3fe3 : 00000000;
+3fe4 : 00000000;
+3fe5 : 00000000;
+3fe6 : 00000000;
+3fe7 : 00000000;
+3fe8 : 00000000;
+3fe9 : 00000000;
+3fea : 00000000;
+3feb : 00000000;
+3fec : 00000000;
+3fed : 00000000;
+3fee : 00000000;
+3fef : 00000000;
+3ff0 : 00000000;
+3ff1 : 00000000;
+3ff2 : 00000000;
+3ff3 : 00000000;
+3ff4 : 00000000;
+3ff5 : 00000000;
+3ff6 : 00000000;
+3ff7 : 00000000;
+3ff8 : 00000000;
+3ff9 : 00000000;
+3ffa : 00000000;
+3ffb : 00000000;
+3ffc : 00000000;
+3ffd : 00000000;
+3ffe : 00000000;
+3fff : 00000000;
+4000 : 00000000;
+4001 : 00000000;
+4002 : 00000000;
+4003 : 00000000;
+4004 : 00000000;
+4005 : 00000000;
+4006 : 00000000;
+4007 : 00000000;
+4008 : 00000000;
+4009 : 00000000;
+400a : 00000000;
+400b : 00000000;
+400c : 00000000;
+400d : 00000000;
+400e : 00000000;
+400f : 00000000;
+4010 : 00000000;
+4011 : 00000000;
+4012 : 00000000;
+4013 : 00000000;
+4014 : 00000000;
+4015 : 00000000;
+4016 : 00000000;
+4017 : 00000000;
+4018 : 00000000;
+4019 : 00000000;
+401a : 00000000;
+401b : 00000000;
+401c : 00000000;
+401d : 00000000;
+401e : 00000000;
+401f : 00000000;
+4020 : 00000000;
+4021 : 00000000;
+4022 : 00000000;
+4023 : 00000000;
+4024 : 00000000;
+4025 : 00000000;
+4026 : 00000000;
+4027 : 00000000;
+4028 : 00000000;
+4029 : 00000000;
+402a : 00000000;
+402b : 00000000;
+402c : 00000000;
+402d : 00000000;
+402e : 00000000;
+402f : 00000000;
+4030 : 00000000;
+4031 : 00000000;
+4032 : 00000000;
+4033 : 00000000;
+4034 : 00000000;
+4035 : 00000000;
+4036 : 00000000;
+4037 : 00000000;
+4038 : 00000000;
+4039 : 00000000;
+403a : 00000000;
+403b : 00000000;
+403c : 00000000;
+403d : 00000000;
+403e : 00000000;
+403f : 00000000;
+4040 : 00000000;
+4041 : 00000000;
+4042 : 00000000;
+4043 : 00000000;
+4044 : 00000000;
+4045 : 00000000;
+4046 : 00000000;
+4047 : 00000000;
+4048 : 00000000;
+4049 : 00000000;
+404a : 00000000;
+404b : 00000000;
+404c : 00000000;
+404d : 00000000;
+404e : 00000000;
+404f : 00000000;
+4050 : 00000000;
+4051 : 00000000;
+4052 : 00000000;
+4053 : 00000000;
+4054 : 00000000;
+4055 : 00000000;
+4056 : 00000000;
+4057 : 00000000;
+4058 : 00000000;
+4059 : 00000000;
+405a : 00000000;
+405b : 00000000;
+405c : 00000000;
+405d : 00000000;
+405e : 00000000;
+405f : 00000000;
+4060 : 00000000;
+4061 : 00000000;
+4062 : 00000000;
+4063 : 00000000;
+4064 : 00000000;
+4065 : 00000000;
+4066 : 00000000;
+4067 : 00000000;
+4068 : 00000000;
+4069 : 00000000;
+406a : 00000000;
+406b : 00000000;
+406c : 00000000;
+406d : 00000000;
+406e : 00000000;
+406f : 00000000;
+4070 : 00000000;
+4071 : 00000000;
+4072 : 00000000;
+4073 : 00000000;
+4074 : 00000000;
+4075 : 00000000;
+4076 : 00000000;
+4077 : 00000000;
+4078 : 00000000;
+4079 : 00000000;
+407a : 00000000;
+407b : 00000000;
+407c : 00000000;
+407d : 00000000;
+407e : 00000000;
+407f : 00000000;
+4080 : 00000000;
+4081 : 00000000;
+4082 : 00000000;
+4083 : 00000000;
+4084 : 00000000;
+4085 : 00000000;
+4086 : 00000000;
+4087 : 00000000;
+4088 : 00000000;
+4089 : 00000000;
+408a : 00000000;
+408b : 00000000;
+408c : 00000000;
+408d : 00000000;
+408e : 00000000;
+408f : 00000000;
+4090 : 00000000;
+4091 : 00000000;
+4092 : 00000000;
+4093 : 00000000;
+4094 : 00000000;
+4095 : 00000000;
+4096 : 00000000;
+4097 : 00000000;
+4098 : 00000000;
+4099 : 00000000;
+409a : 00000000;
+409b : 00000000;
+409c : 00000000;
+409d : 00000000;
+409e : 00000000;
+409f : 00000000;
+40a0 : 00000000;
+40a1 : 00000000;
+40a2 : 00000000;
+40a3 : 00000000;
+40a4 : 00000000;
+40a5 : 00000000;
+40a6 : 00000000;
+40a7 : 00000000;
+40a8 : 00000000;
+40a9 : 00000000;
+40aa : 00000000;
+40ab : 00000000;
+40ac : 00000000;
+40ad : 00000000;
+40ae : 00000000;
+40af : 00000000;
+40b0 : 00000000;
+40b1 : 00000000;
+40b2 : 00000000;
+40b3 : 00000000;
+40b4 : 00000000;
+40b5 : 00000000;
+40b6 : 00000000;
+40b7 : 00000000;
+40b8 : 00000000;
+40b9 : 00000000;
+40ba : 00000000;
+40bb : 00000000;
+40bc : 00000000;
+40bd : 00000000;
+40be : 00000000;
+40bf : 00000000;
+40c0 : 00000000;
+40c1 : 00000000;
+40c2 : 00000000;
+40c3 : 00000000;
+40c4 : 00000000;
+40c5 : 00000000;
+40c6 : 00000000;
+40c7 : 00000000;
+40c8 : 00000000;
+40c9 : 00000000;
+40ca : 00000000;
+40cb : 00000000;
+40cc : 00000000;
+40cd : 00000000;
+40ce : 00000000;
+40cf : 00000000;
+40d0 : 00000000;
+40d1 : 00000000;
+40d2 : 00000000;
+40d3 : 00000000;
+40d4 : 00000000;
+40d5 : 00000000;
+40d6 : 00000000;
+40d7 : 00000000;
+40d8 : 00000000;
+40d9 : 00000000;
+40da : 00000000;
+40db : 00000000;
+40dc : 00000000;
+40dd : 00000000;
+40de : 00000000;
+40df : 00000000;
+40e0 : 00000000;
+40e1 : 00000000;
+40e2 : 00000000;
+40e3 : 00000000;
+40e4 : 00000000;
+40e5 : 00000000;
+40e6 : 00000000;
+40e7 : 00000000;
+40e8 : 00000000;
+40e9 : 00000000;
+40ea : 00000000;
+40eb : 00000000;
+40ec : 00000000;
+40ed : 00000000;
+40ee : 00000000;
+40ef : 00000000;
+40f0 : 00000000;
+40f1 : 00000000;
+40f2 : 00000000;
+40f3 : 00000000;
+40f4 : 00000000;
+40f5 : 00000000;
+40f6 : 00000000;
+40f7 : 00000000;
+40f8 : 00000000;
+40f9 : 00000000;
+40fa : 00000000;
+40fb : 00000000;
+40fc : 00000000;
+40fd : 00000000;
+40fe : 00000000;
+40ff : 00000000;
+4100 : 00000000;
+4101 : 00000000;
+4102 : 00000000;
+4103 : 00000000;
+4104 : 00000000;
+4105 : 00000000;
+4106 : 00000000;
+4107 : 00000000;
+4108 : 00000000;
+4109 : 00000000;
+410a : 00000000;
+410b : 00000000;
+410c : 00000000;
+410d : 00000000;
+410e : 00000000;
+410f : 00000000;
+4110 : 00000000;
+4111 : 00000000;
+4112 : 00000000;
+4113 : 00000000;
+4114 : 00000000;
+4115 : 00000000;
+4116 : 00000000;
+4117 : 00000000;
+4118 : 00000000;
+4119 : 00000000;
+411a : 00000000;
+411b : 00000000;
+411c : 00000000;
+411d : 00000000;
+411e : 00000000;
+411f : 00000000;
+4120 : 00000000;
+4121 : 00000000;
+4122 : 00000000;
+4123 : 00000000;
+4124 : 00000000;
+4125 : 00000000;
+4126 : 00000000;
+4127 : 00000000;
+4128 : 00000000;
+4129 : 00000000;
+412a : 00000000;
+412b : 00000000;
+412c : 00000000;
+412d : 00000000;
+412e : 00000000;
+412f : 00000000;
+4130 : 00000000;
+4131 : 00000000;
+4132 : 00000000;
+4133 : 00000000;
+4134 : 00000000;
+4135 : 00000000;
+4136 : 00000000;
+4137 : 00000000;
+4138 : 00000000;
+4139 : 00000000;
+413a : 00000000;
+413b : 00000000;
+413c : 00000000;
+413d : 00000000;
+413e : 00000000;
+413f : 00000000;
+4140 : 00000000;
+4141 : 00000000;
+4142 : 00000000;
+4143 : 00000000;
+4144 : 00000000;
+4145 : 00000000;
+4146 : 00000000;
+4147 : 00000000;
+4148 : 00000000;
+4149 : 00000000;
+414a : 00000000;
+414b : 00000000;
+414c : 00000000;
+414d : 00000000;
+414e : 00000000;
+414f : 00000000;
+4150 : 00000000;
+4151 : 00000000;
+4152 : 00000000;
+4153 : 00000000;
+4154 : 00000000;
+4155 : 00000000;
+4156 : 00000000;
+4157 : 00000000;
+4158 : 00000000;
+4159 : 00000000;
+415a : 00000000;
+415b : 00000000;
+415c : 00000000;
+415d : 00000000;
+415e : 00000000;
+415f : 00000000;
+4160 : 00000000;
+4161 : 00000000;
+4162 : 00000000;
+4163 : 00000000;
+4164 : 00000000;
+4165 : 00000000;
+4166 : 00000000;
+4167 : 00000000;
+4168 : 00000000;
+4169 : 00000000;
+416a : 00000000;
+416b : 00000000;
+416c : 00000000;
+416d : 00000000;
+416e : 00000000;
+416f : 00000000;
+4170 : 00000000;
+4171 : 00000000;
+4172 : 00000000;
+4173 : 00000000;
+4174 : 00000000;
+4175 : 00000000;
+4176 : 00000000;
+4177 : 00000000;
+4178 : 00000000;
+4179 : 00000000;
+417a : 00000000;
+417b : 00000000;
+417c : 00000000;
+417d : 00000000;
+417e : 00000000;
+417f : 00000000;
+4180 : 00000000;
+4181 : 00000000;
+4182 : 00000000;
+4183 : 00000000;
+4184 : 00000000;
+4185 : 00000000;
+4186 : 00000000;
+4187 : 00000000;
+4188 : 00000000;
+4189 : 00000000;
+418a : 00000000;
+418b : 00000000;
+418c : 00000000;
+418d : 00000000;
+418e : 00000000;
+418f : 00000000;
+4190 : 00000000;
+4191 : 00000000;
+4192 : 00000000;
+4193 : 00000000;
+4194 : 00000000;
+4195 : 00000000;
+4196 : 00000000;
+4197 : 00000000;
+4198 : 00000000;
+4199 : 00000000;
+419a : 00000000;
+419b : 00000000;
+419c : 00000000;
+419d : 00000000;
+419e : 00000000;
+419f : 00000000;
+41a0 : 00000000;
+41a1 : 00000000;
+41a2 : 00000000;
+41a3 : 00000000;
+41a4 : 00000000;
+41a5 : 00000000;
+41a6 : 00000000;
+41a7 : 00000000;
+41a8 : 00000000;
+41a9 : 00000000;
+41aa : 00000000;
+41ab : 00000000;
+41ac : 00000000;
+41ad : 00000000;
+41ae : 00000000;
+41af : 00000000;
+41b0 : 00000000;
+41b1 : 00000000;
+41b2 : 00000000;
+41b3 : 00000000;
+41b4 : 00000000;
+41b5 : 00000000;
+41b6 : 00000000;
+41b7 : 00000000;
+41b8 : 00000000;
+41b9 : 00000000;
+41ba : 00000000;
+41bb : 00000000;
+41bc : 00000000;
+41bd : 00000000;
+41be : 00000000;
+41bf : 00000000;
+41c0 : 00000000;
+41c1 : 00000000;
+41c2 : 00000000;
+41c3 : 00000000;
+41c4 : 00000000;
+41c5 : 00000000;
+41c6 : 00000000;
+41c7 : 00000000;
+41c8 : 00000000;
+41c9 : 00000000;
+41ca : 00000000;
+41cb : 00000000;
+41cc : 00000000;
+41cd : 00000000;
+41ce : 00000000;
+41cf : 00000000;
+41d0 : 00000000;
+41d1 : 00000000;
+41d2 : 00000000;
+41d3 : 00000000;
+41d4 : 00000000;
+41d5 : 00000000;
+41d6 : 00000000;
+41d7 : 00000000;
+41d8 : 00000000;
+41d9 : 00000000;
+41da : 00000000;
+41db : 00000000;
+41dc : 00000000;
+41dd : 00000000;
+41de : 00000000;
+41df : 00000000;
+41e0 : 00000000;
+41e1 : 00000000;
+41e2 : 00000000;
+41e3 : 00000000;
+41e4 : 00000000;
+41e5 : 00000000;
+41e6 : 00000000;
+41e7 : 00000000;
+41e8 : 00000000;
+41e9 : 00000000;
+41ea : 00000000;
+41eb : 00000000;
+41ec : 00000000;
+41ed : 00000000;
+41ee : 00000000;
+41ef : 00000000;
+41f0 : 00000000;
+41f1 : 00000000;
+41f2 : 00000000;
+41f3 : 00000000;
+41f4 : 00000000;
+41f5 : 00000000;
+41f6 : 00000000;
+41f7 : 00000000;
+41f8 : 00000000;
+41f9 : 00000000;
+41fa : 00000000;
+41fb : 00000000;
+41fc : 00000000;
+41fd : 00000000;
+41fe : 00000000;
+41ff : 00000000;
+4200 : 00000000;
+4201 : 00000000;
+4202 : 00000000;
+4203 : 00000000;
+4204 : 00000000;
+4205 : 00000000;
+4206 : 00000000;
+4207 : 00000000;
+4208 : 00000000;
+4209 : 00000000;
+420a : 00000000;
+420b : 00000000;
+420c : 00000000;
+420d : 00000000;
+420e : 00000000;
+420f : 00000000;
+4210 : 00000000;
+4211 : 00000000;
+4212 : 00000000;
+4213 : 00000000;
+4214 : 00000000;
+4215 : 00000000;
+4216 : 00000000;
+4217 : 00000000;
+4218 : 00000000;
+4219 : 00000000;
+421a : 00000000;
+421b : 00000000;
+421c : 00000000;
+421d : 00000000;
+421e : 00000000;
+421f : 00000000;
+4220 : 00000000;
+4221 : 00000000;
+4222 : 00000000;
+4223 : 00000000;
+4224 : 00000000;
+4225 : 00000000;
+4226 : 00000000;
+4227 : 00000000;
+4228 : 00000000;
+4229 : 00000000;
+422a : 00000000;
+422b : 00000000;
+422c : 00000000;
+422d : 00000000;
+422e : 00000000;
+422f : 00000000;
+4230 : 00000000;
+4231 : 00000000;
+4232 : 00000000;
+4233 : 00000000;
+4234 : 00000000;
+4235 : 00000000;
+4236 : 00000000;
+4237 : 00000000;
+4238 : 00000000;
+4239 : 00000000;
+423a : 00000000;
+423b : 00000000;
+423c : 00000000;
+423d : 00000000;
+423e : 00000000;
+423f : 00000000;
+4240 : 00000000;
+4241 : 00000000;
+4242 : 00000000;
+4243 : 00000000;
+4244 : 00000000;
+4245 : 00000000;
+4246 : 00000000;
+4247 : 00000000;
+4248 : 00000000;
+4249 : 00000000;
+424a : 00000000;
+424b : 00000000;
+424c : 00000000;
+424d : 00000000;
+424e : 00000000;
+424f : 00000000;
+4250 : 00000000;
+4251 : 00000000;
+4252 : 00000000;
+4253 : 00000000;
+4254 : 00000000;
+4255 : 00000000;
+4256 : 00000000;
+4257 : 00000000;
+4258 : 00000000;
+4259 : 00000000;
+425a : 00000000;
+425b : 00000000;
+425c : 00000000;
+425d : 00000000;
+425e : 00000000;
+425f : 00000000;
+4260 : 00000000;
+4261 : 00000000;
+4262 : 00000000;
+4263 : 00000000;
+4264 : 00000000;
+4265 : 00000000;
+4266 : 00000000;
+4267 : 00000000;
+4268 : 00000000;
+4269 : 00000000;
+426a : 00000000;
+426b : 00000000;
+426c : 00000000;
+426d : 00000000;
+426e : 00000000;
+426f : 00000000;
+4270 : 00000000;
+4271 : 00000000;
+4272 : 00000000;
+4273 : 00000000;
+4274 : 00000000;
+4275 : 00000000;
+4276 : 00000000;
+4277 : 00000000;
+4278 : 00000000;
+4279 : 00000000;
+427a : 00000000;
+427b : 00000000;
+427c : 00000000;
+427d : 00000000;
+427e : 00000000;
+427f : 00000000;
+4280 : 00000000;
+4281 : 00000000;
+4282 : 00000000;
+4283 : 00000000;
+4284 : 00000000;
+4285 : 00000000;
+4286 : 00000000;
+4287 : 00000000;
+4288 : 00000000;
+4289 : 00000000;
+428a : 00000000;
+428b : 00000000;
+428c : 00000000;
+428d : 00000000;
+428e : 00000000;
+428f : 00000000;
+4290 : 00000000;
+4291 : 00000000;
+4292 : 00000000;
+4293 : 00000000;
+4294 : 00000000;
+4295 : 00000000;
+4296 : 00000000;
+4297 : 00000000;
+4298 : 00000000;
+4299 : 00000000;
+429a : 00000000;
+429b : 00000000;
+429c : 00000000;
+429d : 00000000;
+429e : 00000000;
+429f : 00000000;
+42a0 : 00000000;
+42a1 : 00000000;
+42a2 : 00000000;
+42a3 : 00000000;
+42a4 : 00000000;
+42a5 : 00000000;
+42a6 : 00000000;
+42a7 : 00000000;
+42a8 : 00000000;
+42a9 : 00000000;
+42aa : 00000000;
+42ab : 00000000;
+42ac : 00000000;
+42ad : 00000000;
+42ae : 00000000;
+42af : 00000000;
+42b0 : 00000000;
+42b1 : 00000000;
+42b2 : 00000000;
+42b3 : 00000000;
+42b4 : 00000000;
+42b5 : 00000000;
+42b6 : 00000000;
+42b7 : 00000000;
+42b8 : 00000000;
+42b9 : 00000000;
+42ba : 00000000;
+42bb : 00000000;
+42bc : 00000000;
+42bd : 00000000;
+42be : 00000000;
+42bf : 00000000;
+42c0 : 00000000;
+42c1 : 00000000;
+42c2 : 00000000;
+42c3 : 00000000;
+42c4 : 00000000;
+42c5 : 00000000;
+42c6 : 00000000;
+42c7 : 00000000;
+42c8 : 00000000;
+42c9 : 00000000;
+42ca : 00000000;
+42cb : 00000000;
+42cc : 00000000;
+42cd : 00000000;
+42ce : 00000000;
+42cf : 00000000;
+42d0 : 00000000;
+42d1 : 00000000;
+42d2 : 00000000;
+42d3 : 00000000;
+42d4 : 00000000;
+42d5 : 00000000;
+42d6 : 00000000;
+42d7 : 00000000;
+42d8 : 00000000;
+42d9 : 00000000;
+42da : 00000000;
+42db : 00000000;
+42dc : 00000000;
+42dd : 00000000;
+42de : 00000000;
+42df : 00000000;
+42e0 : 00000000;
+42e1 : 00000000;
+42e2 : 00000000;
+42e3 : 00000000;
+42e4 : 00000000;
+42e5 : 00000000;
+42e6 : 00000000;
+42e7 : 00000000;
+42e8 : 00000000;
+42e9 : 00000000;
+42ea : 00000000;
+42eb : 00000000;
+42ec : 00000000;
+42ed : 00000000;
+42ee : 00000000;
+42ef : 00000000;
+42f0 : 00000000;
+42f1 : 00000000;
+42f2 : 00000000;
+42f3 : 00000000;
+42f4 : 00000000;
+42f5 : 00000000;
+42f6 : 00000000;
+42f7 : 00000000;
+42f8 : 00000000;
+42f9 : 00000000;
+42fa : 00000000;
+42fb : 00000000;
+42fc : 00000000;
+42fd : 00000000;
+42fe : 00000000;
+42ff : 00000000;
+4300 : 00000000;
+4301 : 00000000;
+4302 : 00000000;
+4303 : 00000000;
+4304 : 00000000;
+4305 : 00000000;
+4306 : 00000000;
+4307 : 00000000;
+4308 : 00000000;
+4309 : 00000000;
+430a : 00000000;
+430b : 00000000;
+430c : 00000000;
+430d : 00000000;
+430e : 00000000;
+430f : 00000000;
+4310 : 00000000;
+4311 : 00000000;
+4312 : 00000000;
+4313 : 00000000;
+4314 : 00000000;
+4315 : 00000000;
+4316 : 00000000;
+4317 : 00000000;
+4318 : 00000000;
+4319 : 00000000;
+431a : 00000000;
+431b : 00000000;
+431c : 00000000;
+431d : 00000000;
+431e : 00000000;
+431f : 00000000;
+4320 : 00000000;
+4321 : 00000000;
+4322 : 00000000;
+4323 : 00000000;
+4324 : 00000000;
+4325 : 00000000;
+4326 : 00000000;
+4327 : 00000000;
+4328 : 00000000;
+4329 : 00000000;
+432a : 00000000;
+432b : 00000000;
+432c : 00000000;
+432d : 00000000;
+432e : 00000000;
+432f : 00000000;
+4330 : 00000000;
+4331 : 00000000;
+4332 : 00000000;
+4333 : 00000000;
+4334 : 00000000;
+4335 : 00000000;
+4336 : 00000000;
+4337 : 00000000;
+4338 : 00000000;
+4339 : 00000000;
+433a : 00000000;
+433b : 00000000;
+433c : 00000000;
+433d : 00000000;
+433e : 00000000;
+433f : 00000000;
+4340 : 00000000;
+4341 : 00000000;
+4342 : 00000000;
+4343 : 00000000;
+4344 : 00000000;
+4345 : 00000000;
+4346 : 00000000;
+4347 : 00000000;
+4348 : 00000000;
+4349 : 00000000;
+434a : 00000000;
+434b : 00000000;
+434c : 00000000;
+434d : 00000000;
+434e : 00000000;
+434f : 00000000;
+4350 : 00000000;
+4351 : 00000000;
+4352 : 00000000;
+4353 : 00000000;
+4354 : 00000000;
+4355 : 00000000;
+4356 : 00000000;
+4357 : 00000000;
+4358 : 00000000;
+4359 : 00000000;
+435a : 00000000;
+435b : 00000000;
+435c : 00000000;
+435d : 00000000;
+435e : 00000000;
+435f : 00000000;
+4360 : 00000000;
+4361 : 00000000;
+4362 : 00000000;
+4363 : 00000000;
+4364 : 00000000;
+4365 : 00000000;
+4366 : 00000000;
+4367 : 00000000;
+4368 : 00000000;
+4369 : 00000000;
+436a : 00000000;
+436b : 00000000;
+436c : 00000000;
+436d : 00000000;
+436e : 00000000;
+436f : 00000000;
+4370 : 00000000;
+4371 : 00000000;
+4372 : 00000000;
+4373 : 00000000;
+4374 : 00000000;
+4375 : 00000000;
+4376 : 00000000;
+4377 : 00000000;
+4378 : 00000000;
+4379 : 00000000;
+437a : 00000000;
+437b : 00000000;
+437c : 00000000;
+437d : 00000000;
+437e : 00000000;
+437f : 00000000;
+4380 : 00000000;
+4381 : 00000000;
+4382 : 00000000;
+4383 : 00000000;
+4384 : 00000000;
+4385 : 00000000;
+4386 : 00000000;
+4387 : 00000000;
+4388 : 00000000;
+4389 : 00000000;
+438a : 00000000;
+438b : 00000000;
+438c : 00000000;
+438d : 00000000;
+438e : 00000000;
+438f : 00000000;
+4390 : 00000000;
+4391 : 00000000;
+4392 : 00000000;
+4393 : 00000000;
+4394 : 00000000;
+4395 : 00000000;
+4396 : 00000000;
+4397 : 00000000;
+4398 : 00000000;
+4399 : 00000000;
+439a : 00000000;
+439b : 00000000;
+439c : 00000000;
+439d : 00000000;
+439e : 00000000;
+439f : 00000000;
+43a0 : 00000000;
+43a1 : 00000000;
+43a2 : 00000000;
+43a3 : 00000000;
+43a4 : 00000000;
+43a5 : 00000000;
+43a6 : 00000000;
+43a7 : 00000000;
+43a8 : 00000000;
+43a9 : 00000000;
+43aa : 00000000;
+43ab : 00000000;
+43ac : 00000000;
+43ad : 00000000;
+43ae : 00000000;
+43af : 00000000;
+43b0 : 00000000;
+43b1 : 00000000;
+43b2 : 00000000;
+43b3 : 00000000;
+43b4 : 00000000;
+43b5 : 00000000;
+43b6 : 00000000;
+43b7 : 00000000;
+43b8 : 00000000;
+43b9 : 00000000;
+43ba : 00000000;
+43bb : 00000000;
+43bc : 00000000;
+43bd : 00000000;
+43be : 00000000;
+43bf : 00000000;
+43c0 : 00000000;
+43c1 : 00000000;
+43c2 : 00000000;
+43c3 : 00000000;
+43c4 : 00000000;
+43c5 : 00000000;
+43c6 : 00000000;
+43c7 : 00000000;
+43c8 : 00000000;
+43c9 : 00000000;
+43ca : 00000000;
+43cb : 00000000;
+43cc : 00000000;
+43cd : 00000000;
+43ce : 00000000;
+43cf : 00000000;
+43d0 : 00000000;
+43d1 : 00000000;
+43d2 : 00000000;
+43d3 : 00000000;
+43d4 : 00000000;
+43d5 : 00000000;
+43d6 : 00000000;
+43d7 : 00000000;
+43d8 : 00000000;
+43d9 : 00000000;
+43da : 00000000;
+43db : 00000000;
+43dc : 00000000;
+43dd : 00000000;
+43de : 00000000;
+43df : 00000000;
+43e0 : 00000000;
+43e1 : 00000000;
+43e2 : 00000000;
+43e3 : 00000000;
+43e4 : 00000000;
+43e5 : 00000000;
+43e6 : 00000000;
+43e7 : 00000000;
+43e8 : 00000000;
+43e9 : 00000000;
+43ea : 00000000;
+43eb : 00000000;
+43ec : 00000000;
+43ed : 00000000;
+43ee : 00000000;
+43ef : 00000000;
+43f0 : 00000000;
+43f1 : 00000000;
+43f2 : 00000000;
+43f3 : 00000000;
+43f4 : 00000000;
+43f5 : 00000000;
+43f6 : 00000000;
+43f7 : 00000000;
+43f8 : 00000000;
+43f9 : 00000000;
+43fa : 00000000;
+43fb : 00000000;
+43fc : 00000000;
+43fd : 00000000;
+43fe : 00000000;
+43ff : 00000000;
+4400 : 00000000;
+4401 : 00000000;
+4402 : 00000000;
+4403 : 00000000;
+4404 : 00000000;
+4405 : 00000000;
+4406 : 00000000;
+4407 : 00000000;
+4408 : 00000000;
+4409 : 00000000;
+440a : 00000000;
+440b : 00000000;
+440c : 00000000;
+440d : 00000000;
+440e : 00000000;
+440f : 00000000;
+4410 : 00000000;
+4411 : 00000000;
+4412 : 00000000;
+4413 : 00000000;
+4414 : 00000000;
+4415 : 00000000;
+4416 : 00000000;
+4417 : 00000000;
+4418 : 00000000;
+4419 : 00000000;
+441a : 00000000;
+441b : 00000000;
+441c : 00000000;
+441d : 00000000;
+441e : 00000000;
+441f : 00000000;
+4420 : 00000000;
+4421 : 00000000;
+4422 : 00000000;
+4423 : 00000000;
+4424 : 00000000;
+4425 : 00000000;
+4426 : 00000000;
+4427 : 00000000;
+4428 : 00000000;
+4429 : 00000000;
+442a : 00000000;
+442b : 00000000;
+442c : 00000000;
+442d : 00000000;
+442e : 00000000;
+442f : 00000000;
+4430 : 00000000;
+4431 : 00000000;
+4432 : 00000000;
+4433 : 00000000;
+4434 : 00000000;
+4435 : 00000000;
+4436 : 00000000;
+4437 : 00000000;
+4438 : 00000000;
+4439 : 00000000;
+443a : 00000000;
+443b : 00000000;
+443c : 00000000;
+443d : 00000000;
+443e : 00000000;
+443f : 00000000;
+4440 : 00000000;
+4441 : 00000000;
+4442 : 00000000;
+4443 : 00000000;
+4444 : 00000000;
+4445 : 00000000;
+4446 : 00000000;
+4447 : 00000000;
+4448 : 00000000;
+4449 : 00000000;
+444a : 00000000;
+444b : 00000000;
+444c : 00000000;
+444d : 00000000;
+444e : 00000000;
+444f : 00000000;
+4450 : 00000000;
+4451 : 00000000;
+4452 : 00000000;
+4453 : 00000000;
+4454 : 00000000;
+4455 : 00000000;
+4456 : 00000000;
+4457 : 00000000;
+4458 : 00000000;
+4459 : 00000000;
+445a : 00000000;
+445b : 00000000;
+445c : 00000000;
+445d : 00000000;
+445e : 00000000;
+445f : 00000000;
+4460 : 00000000;
+4461 : 00000000;
+4462 : 00000000;
+4463 : 00000000;
+4464 : 00000000;
+4465 : 00000000;
+4466 : 00000000;
+4467 : 00000000;
+4468 : 00000000;
+4469 : 00000000;
+446a : 00000000;
+446b : 00000000;
+446c : 00000000;
+446d : 00000000;
+446e : 00000000;
+446f : 00000000;
+4470 : 00000000;
+4471 : 00000000;
+4472 : 00000000;
+4473 : 00000000;
+4474 : 00000000;
+4475 : 00000000;
+4476 : 00000000;
+4477 : 00000000;
+4478 : 00000000;
+4479 : 00000000;
+447a : 00000000;
+447b : 00000000;
+447c : 00000000;
+447d : 00000000;
+447e : 00000000;
+447f : 00000000;
+4480 : 00000000;
+4481 : 00000000;
+4482 : 00000000;
+4483 : 00000000;
+4484 : 00000000;
+4485 : 00000000;
+4486 : 00000000;
+4487 : 00000000;
+4488 : 00000000;
+4489 : 00000000;
+448a : 00000000;
+448b : 00000000;
+448c : 00000000;
+448d : 00000000;
+448e : 00000000;
+448f : 00000000;
+4490 : 00000000;
+4491 : 00000000;
+4492 : 00000000;
+4493 : 00000000;
+4494 : 00000000;
+4495 : 00000000;
+4496 : 00000000;
+4497 : 00000000;
+4498 : 00000000;
+4499 : 00000000;
+449a : 00000000;
+449b : 00000000;
+449c : 00000000;
+449d : 00000000;
+449e : 00000000;
+449f : 00000000;
+44a0 : 00000000;
+44a1 : 00000000;
+44a2 : 00000000;
+44a3 : 00000000;
+44a4 : 00000000;
+44a5 : 00000000;
+44a6 : 00000000;
+44a7 : 00000000;
+44a8 : 00000000;
+44a9 : 00000000;
+44aa : 00000000;
+44ab : 00000000;
+44ac : 00000000;
+44ad : 00000000;
+44ae : 00000000;
+44af : 00000000;
+44b0 : 00000000;
+44b1 : 00000000;
+44b2 : 00000000;
+44b3 : 00000000;
+44b4 : 00000000;
+44b5 : 00000000;
+44b6 : 00000000;
+44b7 : 00000000;
+44b8 : 00000000;
+44b9 : 00000000;
+44ba : 00000000;
+44bb : 00000000;
+44bc : 00000000;
+44bd : 00000000;
+44be : 00000000;
+44bf : 00000000;
+44c0 : 00000000;
+44c1 : 00000000;
+44c2 : 00000000;
+44c3 : 00000000;
+44c4 : 00000000;
+44c5 : 00000000;
+44c6 : 00000000;
+44c7 : 00000000;
+44c8 : 00000000;
+44c9 : 00000000;
+44ca : 00000000;
+44cb : 00000000;
+44cc : 00000000;
+44cd : 00000000;
+44ce : 00000000;
+44cf : 00000000;
+44d0 : 00000000;
+44d1 : 00000000;
+44d2 : 00000000;
+44d3 : 00000000;
+44d4 : 00000000;
+44d5 : 00000000;
+44d6 : 00000000;
+44d7 : 00000000;
+44d8 : 00000000;
+44d9 : 00000000;
+44da : 00000000;
+44db : 00000000;
+44dc : 00000000;
+44dd : 00000000;
+44de : 00000000;
+44df : 00000000;
+44e0 : 00000000;
+44e1 : 00000000;
+44e2 : 00000000;
+44e3 : 00000000;
+44e4 : 00000000;
+44e5 : 00000000;
+44e6 : 00000000;
+44e7 : 00000000;
+44e8 : 00000000;
+44e9 : 00000000;
+44ea : 00000000;
+44eb : 00000000;
+44ec : 00000000;
+44ed : 00000000;
+44ee : 00000000;
+44ef : 00000000;
+44f0 : 00000000;
+44f1 : 00000000;
+44f2 : 00000000;
+44f3 : 00000000;
+44f4 : 00000000;
+44f5 : 00000000;
+44f6 : 00000000;
+44f7 : 00000000;
+44f8 : 00000000;
+44f9 : 00000000;
+44fa : 00000000;
+44fb : 00000000;
+44fc : 00000000;
+44fd : 00000000;
+44fe : 00000000;
+44ff : 00000000;
+4500 : 00000000;
+4501 : 00000000;
+4502 : 00000000;
+4503 : 00000000;
+4504 : 00000000;
+4505 : 00000000;
+4506 : 00000000;
+4507 : 00000000;
+4508 : 00000000;
+4509 : 00000000;
+450a : 00000000;
+450b : 00000000;
+450c : 00000000;
+450d : 00000000;
+450e : 00000000;
+450f : 00000000;
+4510 : 00000000;
+4511 : 00000000;
+4512 : 00000000;
+4513 : 00000000;
+4514 : 00000000;
+4515 : 00000000;
+4516 : 00000000;
+4517 : 00000000;
+4518 : 00000000;
+4519 : 00000000;
+451a : 00000000;
+451b : 00000000;
+451c : 00000000;
+451d : 00000000;
+451e : 00000000;
+451f : 00000000;
+4520 : 00000000;
+4521 : 00000000;
+4522 : 00000000;
+4523 : 00000000;
+4524 : 00000000;
+4525 : 00000000;
+4526 : 00000000;
+4527 : 00000000;
+4528 : 00000000;
+4529 : 00000000;
+452a : 00000000;
+452b : 00000000;
+452c : 00000000;
+452d : 00000000;
+452e : 00000000;
+452f : 00000000;
+4530 : 00000000;
+4531 : 00000000;
+4532 : 00000000;
+4533 : 00000000;
+4534 : 00000000;
+4535 : 00000000;
+4536 : 00000000;
+4537 : 00000000;
+4538 : 00000000;
+4539 : 00000000;
+453a : 00000000;
+453b : 00000000;
+453c : 00000000;
+453d : 00000000;
+453e : 00000000;
+453f : 00000000;
+4540 : 00000000;
+4541 : 00000000;
+4542 : 00000000;
+4543 : 00000000;
+4544 : 00000000;
+4545 : 00000000;
+4546 : 00000000;
+4547 : 00000000;
+4548 : 00000000;
+4549 : 00000000;
+454a : 00000000;
+454b : 00000000;
+454c : 00000000;
+454d : 00000000;
+454e : 00000000;
+454f : 00000000;
+4550 : 00000000;
+4551 : 00000000;
+4552 : 00000000;
+4553 : 00000000;
+4554 : 00000000;
+4555 : 00000000;
+4556 : 00000000;
+4557 : 00000000;
+4558 : 00000000;
+4559 : 00000000;
+455a : 00000000;
+455b : 00000000;
+455c : 00000000;
+455d : 00000000;
+455e : 00000000;
+455f : 00000000;
+4560 : 00000000;
+4561 : 00000000;
+4562 : 00000000;
+4563 : 00000000;
+4564 : 00000000;
+4565 : 00000000;
+4566 : 00000000;
+4567 : 00000000;
+4568 : 00000000;
+4569 : 00000000;
+456a : 00000000;
+456b : 00000000;
+456c : 00000000;
+456d : 00000000;
+456e : 00000000;
+456f : 00000000;
+4570 : 00000000;
+4571 : 00000000;
+4572 : 00000000;
+4573 : 00000000;
+4574 : 00000000;
+4575 : 00000000;
+4576 : 00000000;
+4577 : 00000000;
+4578 : 00000000;
+4579 : 00000000;
+457a : 00000000;
+457b : 00000000;
+457c : 00000000;
+457d : 00000000;
+457e : 00000000;
+457f : 00000000;
+4580 : 00000000;
+4581 : 00000000;
+4582 : 00000000;
+4583 : 00000000;
+4584 : 00000000;
+4585 : 00000000;
+4586 : 00000000;
+4587 : 00000000;
+4588 : 00000000;
+4589 : 00000000;
+458a : 00000000;
+458b : 00000000;
+458c : 00000000;
+458d : 00000000;
+458e : 00000000;
+458f : 00000000;
+4590 : 00000000;
+4591 : 00000000;
+4592 : 00000000;
+4593 : 00000000;
+4594 : 00000000;
+4595 : 00000000;
+4596 : 00000000;
+4597 : 00000000;
+4598 : 00000000;
+4599 : 00000000;
+459a : 00000000;
+459b : 00000000;
+459c : 00000000;
+459d : 00000000;
+459e : 00000000;
+459f : 00000000;
+45a0 : 00000000;
+45a1 : 00000000;
+45a2 : 00000000;
+45a3 : 00000000;
+45a4 : 00000000;
+45a5 : 00000000;
+45a6 : 00000000;
+45a7 : 00000000;
+45a8 : 00000000;
+45a9 : 00000000;
+45aa : 00000000;
+45ab : 00000000;
+45ac : 00000000;
+45ad : 00000000;
+45ae : 00000000;
+45af : 00000000;
+45b0 : 00000000;
+45b1 : 00000000;
+45b2 : 00000000;
+45b3 : 00000000;
+45b4 : 00000000;
+45b5 : 00000000;
+45b6 : 00000000;
+45b7 : 00000000;
+45b8 : 00000000;
+45b9 : 00000000;
+45ba : 00000000;
+45bb : 00000000;
+45bc : 00000000;
+45bd : 00000000;
+45be : 00000000;
+45bf : 00000000;
+45c0 : 00000000;
+45c1 : 00000000;
+45c2 : 00000000;
+45c3 : 00000000;
+45c4 : 00000000;
+45c5 : 00000000;
+45c6 : 00000000;
+45c7 : 00000000;
+45c8 : 00000000;
+45c9 : 00000000;
+45ca : 00000000;
+45cb : 00000000;
+45cc : 00000000;
+45cd : 00000000;
+45ce : 00000000;
+45cf : 00000000;
+45d0 : 00000000;
+45d1 : 00000000;
+45d2 : 00000000;
+45d3 : 00000000;
+45d4 : 00000000;
+45d5 : 00000000;
+45d6 : 00000000;
+45d7 : 00000000;
+45d8 : 00000000;
+45d9 : 00000000;
+45da : 00000000;
+45db : 00000000;
+45dc : 00000000;
+45dd : 00000000;
+45de : 00000000;
+45df : 00000000;
+45e0 : 00000000;
+45e1 : 00000000;
+45e2 : 00000000;
+45e3 : 00000000;
+45e4 : 00000000;
+45e5 : 00000000;
+45e6 : 00000000;
+45e7 : 00000000;
+45e8 : 00000000;
+45e9 : 00000000;
+45ea : 00000000;
+45eb : 00000000;
+45ec : 00000000;
+45ed : 00000000;
+45ee : 00000000;
+45ef : 00000000;
+45f0 : 00000000;
+45f1 : 00000000;
+45f2 : 00000000;
+45f3 : 00000000;
+45f4 : 00000000;
+45f5 : 00000000;
+45f6 : 00000000;
+45f7 : 00000000;
+45f8 : 00000000;
+45f9 : 00000000;
+45fa : 00000000;
+45fb : 00000000;
+45fc : 00000000;
+45fd : 00000000;
+45fe : 00000000;
+45ff : 00000000;
+4600 : 00000000;
+4601 : 00000000;
+4602 : 00000000;
+4603 : 00000000;
+4604 : 00000000;
+4605 : 00000000;
+4606 : 00000000;
+4607 : 00000000;
+4608 : 00000000;
+4609 : 00000000;
+460a : 00000000;
+460b : 00000000;
+460c : 00000000;
+460d : 00000000;
+460e : 00000000;
+460f : 00000000;
+4610 : 00000000;
+4611 : 00000000;
+4612 : 00000000;
+4613 : 00000000;
+4614 : 00000000;
+4615 : 00000000;
+4616 : 00000000;
+4617 : 00000000;
+4618 : 00000000;
+4619 : 00000000;
+461a : 00000000;
+461b : 00000000;
+461c : 00000000;
+461d : 00000000;
+461e : 00000000;
+461f : 00000000;
+4620 : 00000000;
+4621 : 00000000;
+4622 : 00000000;
+4623 : 00000000;
+4624 : 00000000;
+4625 : 00000000;
+4626 : 00000000;
+4627 : 00000000;
+4628 : 00000000;
+4629 : 00000000;
+462a : 00000000;
+462b : 00000000;
+462c : 00000000;
+462d : 00000000;
+462e : 00000000;
+462f : 00000000;
+4630 : 00000000;
+4631 : 00000000;
+4632 : 00000000;
+4633 : 00000000;
+4634 : 00000000;
+4635 : 00000000;
+4636 : 00000000;
+4637 : 00000000;
+4638 : 00000000;
+4639 : 00000000;
+463a : 00000000;
+463b : 00000000;
+463c : 00000000;
+463d : 00000000;
+463e : 00000000;
+463f : 00000000;
+4640 : 00000000;
+4641 : 00000000;
+4642 : 00000000;
+4643 : 00000000;
+4644 : 00000000;
+4645 : 00000000;
+4646 : 00000000;
+4647 : 00000000;
+4648 : 00000000;
+4649 : 00000000;
+464a : 00000000;
+464b : 00000000;
+464c : 00000000;
+464d : 00000000;
+464e : 00000000;
+464f : 00000000;
+4650 : 00000000;
+4651 : 00000000;
+4652 : 00000000;
+4653 : 00000000;
+4654 : 00000000;
+4655 : 00000000;
+4656 : 00000000;
+4657 : 00000000;
+4658 : 00000000;
+4659 : 00000000;
+465a : 00000000;
+465b : 00000000;
+465c : 00000000;
+465d : 00000000;
+465e : 00000000;
+465f : 00000000;
+4660 : 00000000;
+4661 : 00000000;
+4662 : 00000000;
+4663 : 00000000;
+4664 : 00000000;
+4665 : 00000000;
+4666 : 00000000;
+4667 : 00000000;
+4668 : 00000000;
+4669 : 00000000;
+466a : 00000000;
+466b : 00000000;
+466c : 00000000;
+466d : 00000000;
+466e : 00000000;
+466f : 00000000;
+4670 : 00000000;
+4671 : 00000000;
+4672 : 00000000;
+4673 : 00000000;
+4674 : 00000000;
+4675 : 00000000;
+4676 : 00000000;
+4677 : 00000000;
+4678 : 00000000;
+4679 : 00000000;
+467a : 00000000;
+467b : 00000000;
+467c : 00000000;
+467d : 00000000;
+467e : 00000000;
+467f : 00000000;
+4680 : 00000000;
+4681 : 00000000;
+4682 : 00000000;
+4683 : 00000000;
+4684 : 00000000;
+4685 : 00000000;
+4686 : 00000000;
+4687 : 00000000;
+4688 : 00000000;
+4689 : 00000000;
+468a : 00000000;
+468b : 00000000;
+468c : 00000000;
+468d : 00000000;
+468e : 00000000;
+468f : 00000000;
+4690 : 00000000;
+4691 : 00000000;
+4692 : 00000000;
+4693 : 00000000;
+4694 : 00000000;
+4695 : 00000000;
+4696 : 00000000;
+4697 : 00000000;
+4698 : 00000000;
+4699 : 00000000;
+469a : 00000000;
+469b : 00000000;
+469c : 00000000;
+469d : 00000000;
+469e : 00000000;
+469f : 00000000;
+46a0 : 00000000;
+46a1 : 00000000;
+46a2 : 00000000;
+46a3 : 00000000;
+46a4 : 00000000;
+46a5 : 00000000;
+46a6 : 00000000;
+46a7 : 00000000;
+46a8 : 00000000;
+46a9 : 00000000;
+46aa : 00000000;
+46ab : 00000000;
+46ac : 00000000;
+46ad : 00000000;
+46ae : 00000000;
+46af : 00000000;
+46b0 : 00000000;
+46b1 : 00000000;
+46b2 : 00000000;
+46b3 : 00000000;
+46b4 : 00000000;
+46b5 : 00000000;
+46b6 : 00000000;
+46b7 : 00000000;
+46b8 : 00000000;
+46b9 : 00000000;
+46ba : 00000000;
+46bb : 00000000;
+46bc : 00000000;
+46bd : 00000000;
+46be : 00000000;
+46bf : 00000000;
+46c0 : 00000000;
+46c1 : 00000000;
+46c2 : 00000000;
+46c3 : 00000000;
+46c4 : 00000000;
+46c5 : 00000000;
+46c6 : 00000000;
+46c7 : 00000000;
+46c8 : 00000000;
+46c9 : 00000000;
+46ca : 00000000;
+46cb : 00000000;
+46cc : 00000000;
+46cd : 00000000;
+46ce : 00000000;
+46cf : 00000000;
+46d0 : 00000000;
+46d1 : 00000000;
+46d2 : 00000000;
+46d3 : 00000000;
+46d4 : 00000000;
+46d5 : 00000000;
+46d6 : 00000000;
+46d7 : 00000000;
+46d8 : 00000000;
+46d9 : 00000000;
+46da : 00000000;
+46db : 00000000;
+46dc : 00000000;
+46dd : 00000000;
+46de : 00000000;
+46df : 00000000;
+46e0 : 00000000;
+46e1 : 00000000;
+46e2 : 00000000;
+46e3 : 00000000;
+46e4 : 00000000;
+46e5 : 00000000;
+46e6 : 00000000;
+46e7 : 00000000;
+46e8 : 00000000;
+46e9 : 00000000;
+46ea : 00000000;
+46eb : 00000000;
+46ec : 00000000;
+46ed : 00000000;
+46ee : 00000000;
+46ef : 00000000;
+46f0 : 00000000;
+46f1 : 00000000;
+46f2 : 00000000;
+46f3 : 00000000;
+46f4 : 00000000;
+46f5 : 00000000;
+46f6 : 00000000;
+46f7 : 00000000;
+46f8 : 00000000;
+46f9 : 00000000;
+46fa : 00000000;
+46fb : 00000000;
+46fc : 00000000;
+46fd : 00000000;
+46fe : 00000000;
+46ff : 00000000;
+4700 : 00000000;
+4701 : 00000000;
+4702 : 00000000;
+4703 : 00000000;
+4704 : 00000000;
+4705 : 00000000;
+4706 : 00000000;
+4707 : 00000000;
+4708 : 00000000;
+4709 : 00000000;
+470a : 00000000;
+470b : 00000000;
+470c : 00000000;
+470d : 00000000;
+470e : 00000000;
+470f : 00000000;
+4710 : 00000000;
+4711 : 00000000;
+4712 : 00000000;
+4713 : 00000000;
+4714 : 00000000;
+4715 : 00000000;
+4716 : 00000000;
+4717 : 00000000;
+4718 : 00000000;
+4719 : 00000000;
+471a : 00000000;
+471b : 00000000;
+471c : 00000000;
+471d : 00000000;
+471e : 00000000;
+471f : 00000000;
+4720 : 00000000;
+4721 : 00000000;
+4722 : 00000000;
+4723 : 00000000;
+4724 : 00000000;
+4725 : 00000000;
+4726 : 00000000;
+4727 : 00000000;
+4728 : 00000000;
+4729 : 00000000;
+472a : 00000000;
+472b : 00000000;
+472c : 00000000;
+472d : 00000000;
+472e : 00000000;
+472f : 00000000;
+4730 : 00000000;
+4731 : 00000000;
+4732 : 00000000;
+4733 : 00000000;
+4734 : 00000000;
+4735 : 00000000;
+4736 : 00000000;
+4737 : 00000000;
+4738 : 00000000;
+4739 : 00000000;
+473a : 00000000;
+473b : 00000000;
+473c : 00000000;
+473d : 00000000;
+473e : 00000000;
+473f : 00000000;
+4740 : 00000000;
+4741 : 00000000;
+4742 : 00000000;
+4743 : 00000000;
+4744 : 00000000;
+4745 : 00000000;
+4746 : 00000000;
+4747 : 00000000;
+4748 : 00000000;
+4749 : 00000000;
+474a : 00000000;
+474b : 00000000;
+474c : 00000000;
+474d : 00000000;
+474e : 00000000;
+474f : 00000000;
+4750 : 00000000;
+4751 : 00000000;
+4752 : 00000000;
+4753 : 00000000;
+4754 : 00000000;
+4755 : 00000000;
+4756 : 00000000;
+4757 : 00000000;
+4758 : 00000000;
+4759 : 00000000;
+475a : 00000000;
+475b : 00000000;
+475c : 00000000;
+475d : 00000000;
+475e : 00000000;
+475f : 00000000;
+4760 : 00000000;
+4761 : 00000000;
+4762 : 00000000;
+4763 : 00000000;
+4764 : 00000000;
+4765 : 00000000;
+4766 : 00000000;
+4767 : 00000000;
+4768 : 00000000;
+4769 : 00000000;
+476a : 00000000;
+476b : 00000000;
+476c : 00000000;
+476d : 00000000;
+476e : 00000000;
+476f : 00000000;
+4770 : 00000000;
+4771 : 00000000;
+4772 : 00000000;
+4773 : 00000000;
+4774 : 00000000;
+4775 : 00000000;
+4776 : 00000000;
+4777 : 00000000;
+4778 : 00000000;
+4779 : 00000000;
+477a : 00000000;
+477b : 00000000;
+477c : 00000000;
+477d : 00000000;
+477e : 00000000;
+477f : 00000000;
+4780 : 00000000;
+4781 : 00000000;
+4782 : 00000000;
+4783 : 00000000;
+4784 : 00000000;
+4785 : 00000000;
+4786 : 00000000;
+4787 : 00000000;
+4788 : 00000000;
+4789 : 00000000;
+478a : 00000000;
+478b : 00000000;
+478c : 00000000;
+478d : 00000000;
+478e : 00000000;
+478f : 00000000;
+4790 : 00000000;
+4791 : 00000000;
+4792 : 00000000;
+4793 : 00000000;
+4794 : 00000000;
+4795 : 00000000;
+4796 : 00000000;
+4797 : 00000000;
+4798 : 00000000;
+4799 : 00000000;
+479a : 00000000;
+479b : 00000000;
+479c : 00000000;
+479d : 00000000;
+479e : 00000000;
+479f : 00000000;
+47a0 : 00000000;
+47a1 : 00000000;
+47a2 : 00000000;
+47a3 : 00000000;
+47a4 : 00000000;
+47a5 : 00000000;
+47a6 : 00000000;
+47a7 : 00000000;
+47a8 : 00000000;
+47a9 : 00000000;
+47aa : 00000000;
+47ab : 00000000;
+47ac : 00000000;
+47ad : 00000000;
+47ae : 00000000;
+47af : 00000000;
+47b0 : 00000000;
+47b1 : 00000000;
+47b2 : 00000000;
+47b3 : 00000000;
+47b4 : 00000000;
+47b5 : 00000000;
+47b6 : 00000000;
+47b7 : 00000000;
+47b8 : 00000000;
+47b9 : 00000000;
+47ba : 00000000;
+47bb : 00000000;
+47bc : 00000000;
+47bd : 00000000;
+47be : 00000000;
+47bf : 00000000;
+47c0 : 00000000;
+47c1 : 00000000;
+47c2 : 00000000;
+47c3 : 00000000;
+47c4 : 00000000;
+47c5 : 00000000;
+47c6 : 00000000;
+47c7 : 00000000;
+47c8 : 00000000;
+47c9 : 00000000;
+47ca : 00000000;
+47cb : 00000000;
+47cc : 00000000;
+47cd : 00000000;
+47ce : 00000000;
+47cf : 00000000;
+47d0 : 00000000;
+47d1 : 00000000;
+47d2 : 00000000;
+47d3 : 00000000;
+47d4 : 00000000;
+47d5 : 00000000;
+47d6 : 00000000;
+47d7 : 00000000;
+47d8 : 00000000;
+47d9 : 00000000;
+47da : 00000000;
+47db : 00000000;
+47dc : 00000000;
+47dd : 00000000;
+47de : 00000000;
+47df : 00000000;
+47e0 : 00000000;
+47e1 : 00000000;
+47e2 : 00000000;
+47e3 : 00000000;
+47e4 : 00000000;
+47e5 : 00000000;
+47e6 : 00000000;
+47e7 : 00000000;
+47e8 : 00000000;
+47e9 : 00000000;
+47ea : 00000000;
+47eb : 00000000;
+47ec : 00000000;
+47ed : 00000000;
+47ee : 00000000;
+47ef : 00000000;
+47f0 : 00000000;
+47f1 : 00000000;
+47f2 : 00000000;
+47f3 : 00000000;
+47f4 : 00000000;
+47f5 : 00000000;
+47f6 : 00000000;
+47f7 : 00000000;
+47f8 : 00000000;
+47f9 : 00000000;
+47fa : 00000000;
+47fb : 00000000;
+47fc : 00000000;
+47fd : 00000000;
+47fe : 00000000;
+47ff : 00000000;
+4800 : 00000000;
+4801 : 00000000;
+4802 : 00000000;
+4803 : 00000000;
+4804 : 00000000;
+4805 : 00000000;
+4806 : 00000000;
+4807 : 00000000;
+4808 : 00000000;
+4809 : 00000000;
+480a : 00000000;
+480b : 00000000;
+480c : 00000000;
+480d : 00000000;
+480e : 00000000;
+480f : 00000000;
+4810 : 00000000;
+4811 : 00000000;
+4812 : 00000000;
+4813 : 00000000;
+4814 : 00000000;
+4815 : 00000000;
+4816 : 00000000;
+4817 : 00000000;
+4818 : 00000000;
+4819 : 00000000;
+481a : 00000000;
+481b : 00000000;
+481c : 00000000;
+481d : 00000000;
+481e : 00000000;
+481f : 00000000;
+4820 : 00000000;
+4821 : 00000000;
+4822 : 00000000;
+4823 : 00000000;
+4824 : 00000000;
+4825 : 00000000;
+4826 : 00000000;
+4827 : 00000000;
+4828 : 00000000;
+4829 : 00000000;
+482a : 00000000;
+482b : 00000000;
+482c : 00000000;
+482d : 00000000;
+482e : 00000000;
+482f : 00000000;
+4830 : 00000000;
+4831 : 00000000;
+4832 : 00000000;
+4833 : 00000000;
+4834 : 00000000;
+4835 : 00000000;
+4836 : 00000000;
+4837 : 00000000;
+4838 : 00000000;
+4839 : 00000000;
+483a : 00000000;
+483b : 00000000;
+483c : 00000000;
+483d : 00000000;
+483e : 00000000;
+483f : 00000000;
+4840 : 00000000;
+4841 : 00000000;
+4842 : 00000000;
+4843 : 00000000;
+4844 : 00000000;
+4845 : 00000000;
+4846 : 00000000;
+4847 : 00000000;
+4848 : 00000000;
+4849 : 00000000;
+484a : 00000000;
+484b : 00000000;
+484c : 00000000;
+484d : 00000000;
+484e : 00000000;
+484f : 00000000;
+4850 : 00000000;
+4851 : 00000000;
+4852 : 00000000;
+4853 : 00000000;
+4854 : 00000000;
+4855 : 00000000;
+4856 : 00000000;
+4857 : 00000000;
+4858 : 00000000;
+4859 : 00000000;
+485a : 00000000;
+485b : 00000000;
+485c : 00000000;
+485d : 00000000;
+485e : 00000000;
+485f : 00000000;
+4860 : 00000000;
+4861 : 00000000;
+4862 : 00000000;
+4863 : 00000000;
+4864 : 00000000;
+4865 : 00000000;
+4866 : 00000000;
+4867 : 00000000;
+4868 : 00000000;
+4869 : 00000000;
+486a : 00000000;
+486b : 00000000;
+486c : 00000000;
+486d : 00000000;
+486e : 00000000;
+486f : 00000000;
+4870 : 00000000;
+4871 : 00000000;
+4872 : 00000000;
+4873 : 00000000;
+4874 : 00000000;
+4875 : 00000000;
+4876 : 00000000;
+4877 : 00000000;
+4878 : 00000000;
+4879 : 00000000;
+487a : 00000000;
+487b : 00000000;
+487c : 00000000;
+487d : 00000000;
+487e : 00000000;
+487f : 00000000;
+4880 : 00000000;
+4881 : 00000000;
+4882 : 00000000;
+4883 : 00000000;
+4884 : 00000000;
+4885 : 00000000;
+4886 : 00000000;
+4887 : 00000000;
+4888 : 00000000;
+4889 : 00000000;
+488a : 00000000;
+488b : 00000000;
+488c : 00000000;
+488d : 00000000;
+488e : 00000000;
+488f : 00000000;
+4890 : 00000000;
+4891 : 00000000;
+4892 : 00000000;
+4893 : 00000000;
+4894 : 00000000;
+4895 : 00000000;
+4896 : 00000000;
+4897 : 00000000;
+4898 : 00000000;
+4899 : 00000000;
+489a : 00000000;
+489b : 00000000;
+489c : 00000000;
+489d : 00000000;
+489e : 00000000;
+489f : 00000000;
+48a0 : 00000000;
+48a1 : 00000000;
+48a2 : 00000000;
+48a3 : 00000000;
+48a4 : 00000000;
+48a5 : 00000000;
+48a6 : 00000000;
+48a7 : 00000000;
+48a8 : 00000000;
+48a9 : 00000000;
+48aa : 00000000;
+48ab : 00000000;
+48ac : 00000000;
+48ad : 00000000;
+48ae : 00000000;
+48af : 00000000;
+48b0 : 00000000;
+48b1 : 00000000;
+48b2 : 00000000;
+48b3 : 00000000;
+48b4 : 00000000;
+48b5 : 00000000;
+48b6 : 00000000;
+48b7 : 00000000;
+48b8 : 00000000;
+48b9 : 00000000;
+48ba : 00000000;
+48bb : 00000000;
+48bc : 00000000;
+48bd : 00000000;
+48be : 00000000;
+48bf : 00000000;
+48c0 : 00000000;
+48c1 : 00000000;
+48c2 : 00000000;
+48c3 : 00000000;
+48c4 : 00000000;
+48c5 : 00000000;
+48c6 : 00000000;
+48c7 : 00000000;
+48c8 : 00000000;
+48c9 : 00000000;
+48ca : 00000000;
+48cb : 00000000;
+48cc : 00000000;
+48cd : 00000000;
+48ce : 00000000;
+48cf : 00000000;
+48d0 : 00000000;
+48d1 : 00000000;
+48d2 : 00000000;
+48d3 : 00000000;
+48d4 : 00000000;
+48d5 : 00000000;
+48d6 : 00000000;
+48d7 : 00000000;
+48d8 : 00000000;
+48d9 : 00000000;
+48da : 00000000;
+48db : 00000000;
+48dc : 00000000;
+48dd : 00000000;
+48de : 00000000;
+48df : 00000000;
+48e0 : 00000000;
+48e1 : 00000000;
+48e2 : 00000000;
+48e3 : 00000000;
+48e4 : 00000000;
+48e5 : 00000000;
+48e6 : 00000000;
+48e7 : 00000000;
+48e8 : 00000000;
+48e9 : 00000000;
+48ea : 00000000;
+48eb : 00000000;
+48ec : 00000000;
+48ed : 00000000;
+48ee : 00000000;
+48ef : 00000000;
+48f0 : 00000000;
+48f1 : 00000000;
+48f2 : 00000000;
+48f3 : 00000000;
+48f4 : 00000000;
+48f5 : 00000000;
+48f6 : 00000000;
+48f7 : 00000000;
+48f8 : 00000000;
+48f9 : 00000000;
+48fa : 00000000;
+48fb : 00000000;
+48fc : 00000000;
+48fd : 00000000;
+48fe : 00000000;
+48ff : 00000000;
+4900 : 00000000;
+4901 : 00000000;
+4902 : 00000000;
+4903 : 00000000;
+4904 : 00000000;
+4905 : 00000000;
+4906 : 00000000;
+4907 : 00000000;
+4908 : 00000000;
+4909 : 00000000;
+490a : 00000000;
+490b : 00000000;
+490c : 00000000;
+490d : 00000000;
+490e : 00000000;
+490f : 00000000;
+4910 : 00000000;
+4911 : 00000000;
+4912 : 00000000;
+4913 : 00000000;
+4914 : 00000000;
+4915 : 00000000;
+4916 : 00000000;
+4917 : 00000000;
+4918 : 00000000;
+4919 : 00000000;
+491a : 00000000;
+491b : 00000000;
+491c : 00000000;
+491d : 00000000;
+491e : 00000000;
+491f : 00000000;
+4920 : 00000000;
+4921 : 00000000;
+4922 : 00000000;
+4923 : 00000000;
+4924 : 00000000;
+4925 : 00000000;
+4926 : 00000000;
+4927 : 00000000;
+4928 : 00000000;
+4929 : 00000000;
+492a : 00000000;
+492b : 00000000;
+492c : 00000000;
+492d : 00000000;
+492e : 00000000;
+492f : 00000000;
+4930 : 00000000;
+4931 : 00000000;
+4932 : 00000000;
+4933 : 00000000;
+4934 : 00000000;
+4935 : 00000000;
+4936 : 00000000;
+4937 : 00000000;
+4938 : 00000000;
+4939 : 00000000;
+493a : 00000000;
+493b : 00000000;
+493c : 00000000;
+493d : 00000000;
+493e : 00000000;
+493f : 00000000;
+4940 : 00000000;
+4941 : 00000000;
+4942 : 00000000;
+4943 : 00000000;
+4944 : 00000000;
+4945 : 00000000;
+4946 : 00000000;
+4947 : 00000000;
+4948 : 00000000;
+4949 : 00000000;
+494a : 00000000;
+494b : 00000000;
+494c : 00000000;
+494d : 00000000;
+494e : 00000000;
+494f : 00000000;
+4950 : 00000000;
+4951 : 00000000;
+4952 : 00000000;
+4953 : 00000000;
+4954 : 00000000;
+4955 : 00000000;
+4956 : 00000000;
+4957 : 00000000;
+4958 : 00000000;
+4959 : 00000000;
+495a : 00000000;
+495b : 00000000;
+495c : 00000000;
+495d : 00000000;
+495e : 00000000;
+495f : 00000000;
+4960 : 00000000;
+4961 : 00000000;
+4962 : 00000000;
+4963 : 00000000;
+4964 : 00000000;
+4965 : 00000000;
+4966 : 00000000;
+4967 : 00000000;
+4968 : 00000000;
+4969 : 00000000;
+496a : 00000000;
+496b : 00000000;
+496c : 00000000;
+496d : 00000000;
+496e : 00000000;
+496f : 00000000;
+4970 : 00000000;
+4971 : 00000000;
+4972 : 00000000;
+4973 : 00000000;
+4974 : 00000000;
+4975 : 00000000;
+4976 : 00000000;
+4977 : 00000000;
+4978 : 00000000;
+4979 : 00000000;
+497a : 00000000;
+497b : 00000000;
+497c : 00000000;
+497d : 00000000;
+497e : 00000000;
+497f : 00000000;
+4980 : 00000000;
+4981 : 00000000;
+4982 : 00000000;
+4983 : 00000000;
+4984 : 00000000;
+4985 : 00000000;
+4986 : 00000000;
+4987 : 00000000;
+4988 : 00000000;
+4989 : 00000000;
+498a : 00000000;
+498b : 00000000;
+498c : 00000000;
+498d : 00000000;
+498e : 00000000;
+498f : 00000000;
+4990 : 00000000;
+4991 : 00000000;
+4992 : 00000000;
+4993 : 00000000;
+4994 : 00000000;
+4995 : 00000000;
+4996 : 00000000;
+4997 : 00000000;
+4998 : 00000000;
+4999 : 00000000;
+499a : 00000000;
+499b : 00000000;
+499c : 00000000;
+499d : 00000000;
+499e : 00000000;
+499f : 00000000;
+49a0 : 00000000;
+49a1 : 00000000;
+49a2 : 00000000;
+49a3 : 00000000;
+49a4 : 00000000;
+49a5 : 00000000;
+49a6 : 00000000;
+49a7 : 00000000;
+49a8 : 00000000;
+49a9 : 00000000;
+49aa : 00000000;
+49ab : 00000000;
+49ac : 00000000;
+49ad : 00000000;
+49ae : 00000000;
+49af : 00000000;
+49b0 : 00000000;
+49b1 : 00000000;
+49b2 : 00000000;
+49b3 : 00000000;
+49b4 : 00000000;
+49b5 : 00000000;
+49b6 : 00000000;
+49b7 : 00000000;
+49b8 : 00000000;
+49b9 : 00000000;
+49ba : 00000000;
+49bb : 00000000;
+49bc : 00000000;
+49bd : 00000000;
+49be : 00000000;
+49bf : 00000000;
+49c0 : 00000000;
+49c1 : 00000000;
+49c2 : 00000000;
+49c3 : 00000000;
+49c4 : 00000000;
+49c5 : 00000000;
+49c6 : 00000000;
+49c7 : 00000000;
+49c8 : 00000000;
+49c9 : 00000000;
+49ca : 00000000;
+49cb : 00000000;
+49cc : 00000000;
+49cd : 00000000;
+49ce : 00000000;
+49cf : 00000000;
+49d0 : 00000000;
+49d1 : 00000000;
+49d2 : 00000000;
+49d3 : 00000000;
+49d4 : 00000000;
+49d5 : 00000000;
+49d6 : 00000000;
+49d7 : 00000000;
+49d8 : 00000000;
+49d9 : 00000000;
+49da : 00000000;
+49db : 00000000;
+49dc : 00000000;
+49dd : 00000000;
+49de : 00000000;
+49df : 00000000;
+49e0 : 00000000;
+49e1 : 00000000;
+49e2 : 00000000;
+49e3 : 00000000;
+49e4 : 00000000;
+49e5 : 00000000;
+49e6 : 00000000;
+49e7 : 00000000;
+49e8 : 00000000;
+49e9 : 00000000;
+49ea : 00000000;
+49eb : 00000000;
+49ec : 00000000;
+49ed : 00000000;
+49ee : 00000000;
+49ef : 00000000;
+49f0 : 00000000;
+49f1 : 00000000;
+49f2 : 00000000;
+49f3 : 00000000;
+49f4 : 00000000;
+49f5 : 00000000;
+49f6 : 00000000;
+49f7 : 00000000;
+49f8 : 00000000;
+49f9 : 00000000;
+49fa : 00000000;
+49fb : 00000000;
+49fc : 00000000;
+49fd : 00000000;
+49fe : 00000000;
+49ff : 00000000;
+4a00 : 00000000;
+4a01 : 00000000;
+4a02 : 00000000;
+4a03 : 00000000;
+4a04 : 00000000;
+4a05 : 00000000;
+4a06 : 00000000;
+4a07 : 00000000;
+4a08 : 00000000;
+4a09 : 00000000;
+4a0a : 00000000;
+4a0b : 00000000;
+4a0c : 00000000;
+4a0d : 00000000;
+4a0e : 00000000;
+4a0f : 00000000;
+4a10 : 00000000;
+4a11 : 00000000;
+4a12 : 00000000;
+4a13 : 00000000;
+4a14 : 00000000;
+4a15 : 00000000;
+4a16 : 00000000;
+4a17 : 00000000;
+4a18 : 00000000;
+4a19 : 00000000;
+4a1a : 00000000;
+4a1b : 00000000;
+4a1c : 00000000;
+4a1d : 00000000;
+4a1e : 00000000;
+4a1f : 00000000;
+4a20 : 00000000;
+4a21 : 00000000;
+4a22 : 00000000;
+4a23 : 00000000;
+4a24 : 00000000;
+4a25 : 00000000;
+4a26 : 00000000;
+4a27 : 00000000;
+4a28 : 00000000;
+4a29 : 00000000;
+4a2a : 00000000;
+4a2b : 00000000;
+4a2c : 00000000;
+4a2d : 00000000;
+4a2e : 00000000;
+4a2f : 00000000;
+4a30 : 00000000;
+4a31 : 00000000;
+4a32 : 00000000;
+4a33 : 00000000;
+4a34 : 00000000;
+4a35 : 00000000;
+4a36 : 00000000;
+4a37 : 00000000;
+4a38 : 00000000;
+4a39 : 00000000;
+4a3a : 00000000;
+4a3b : 00000000;
+4a3c : 00000000;
+4a3d : 00000000;
+4a3e : 00000000;
+4a3f : 00000000;
+4a40 : 00000000;
+4a41 : 00000000;
+4a42 : 00000000;
+4a43 : 00000000;
+4a44 : 00000000;
+4a45 : 00000000;
+4a46 : 00000000;
+4a47 : 00000000;
+4a48 : 00000000;
+4a49 : 00000000;
+4a4a : 00000000;
+4a4b : 00000000;
+4a4c : 00000000;
+4a4d : 00000000;
+4a4e : 00000000;
+4a4f : 00000000;
+4a50 : 00000000;
+4a51 : 00000000;
+4a52 : 00000000;
+4a53 : 00000000;
+4a54 : 00000000;
+4a55 : 00000000;
+4a56 : 00000000;
+4a57 : 00000000;
+4a58 : 00000000;
+4a59 : 00000000;
+4a5a : 00000000;
+4a5b : 00000000;
+4a5c : 00000000;
+4a5d : 00000000;
+4a5e : 00000000;
+4a5f : 00000000;
+4a60 : 00000000;
+4a61 : 00000000;
+4a62 : 00000000;
+4a63 : 00000000;
+4a64 : 00000000;
+4a65 : 00000000;
+4a66 : 00000000;
+4a67 : 00000000;
+4a68 : 00000000;
+4a69 : 00000000;
+4a6a : 00000000;
+4a6b : 00000000;
+4a6c : 00000000;
+4a6d : 00000000;
+4a6e : 00000000;
+4a6f : 00000000;
+4a70 : 00000000;
+4a71 : 00000000;
+4a72 : 00000000;
+4a73 : 00000000;
+4a74 : 00000000;
+4a75 : 00000000;
+4a76 : 00000000;
+4a77 : 00000000;
+4a78 : 00000000;
+4a79 : 00000000;
+4a7a : 00000000;
+4a7b : 00000000;
+4a7c : 00000000;
+4a7d : 00000000;
+4a7e : 00000000;
+4a7f : 00000000;
+4a80 : 00000000;
+4a81 : 00000000;
+4a82 : 00000000;
+4a83 : 00000000;
+4a84 : 00000000;
+4a85 : 00000000;
+4a86 : 00000000;
+4a87 : 00000000;
+4a88 : 00000000;
+4a89 : 00000000;
+4a8a : 00000000;
+4a8b : 00000000;
+4a8c : 00000000;
+4a8d : 00000000;
+4a8e : 00000000;
+4a8f : 00000000;
+4a90 : 00000000;
+4a91 : 00000000;
+4a92 : 00000000;
+4a93 : 00000000;
+4a94 : 00000000;
+4a95 : 00000000;
+4a96 : 00000000;
+4a97 : 00000000;
+4a98 : 00000000;
+4a99 : 00000000;
+4a9a : 00000000;
+4a9b : 00000000;
+4a9c : 00000000;
+4a9d : 00000000;
+4a9e : 00000000;
+4a9f : 00000000;
+4aa0 : 00000000;
+4aa1 : 00000000;
+4aa2 : 00000000;
+4aa3 : 00000000;
+4aa4 : 00000000;
+4aa5 : 00000000;
+4aa6 : 00000000;
+4aa7 : 00000000;
+4aa8 : 00000000;
+4aa9 : 00000000;
+4aaa : 00000000;
+4aab : 00000000;
+4aac : 00000000;
+4aad : 00000000;
+4aae : 00000000;
+4aaf : 00000000;
+4ab0 : 00000000;
+4ab1 : 00000000;
+4ab2 : 00000000;
+4ab3 : 00000000;
+4ab4 : 00000000;
+4ab5 : 00000000;
+4ab6 : 00000000;
+4ab7 : 00000000;
+4ab8 : 00000000;
+4ab9 : 00000000;
+4aba : 00000000;
+4abb : 00000000;
+4abc : 00000000;
+4abd : 00000000;
+4abe : 00000000;
+4abf : 00000000;
+4ac0 : 00000000;
+4ac1 : 00000000;
+4ac2 : 00000000;
+4ac3 : 00000000;
+4ac4 : 00000000;
+4ac5 : 00000000;
+4ac6 : 00000000;
+4ac7 : 00000000;
+4ac8 : 00000000;
+4ac9 : 00000000;
+4aca : 00000000;
+4acb : 00000000;
+4acc : 00000000;
+4acd : 00000000;
+4ace : 00000000;
+4acf : 00000000;
+4ad0 : 00000000;
+4ad1 : 00000000;
+4ad2 : 00000000;
+4ad3 : 00000000;
+4ad4 : 00000000;
+4ad5 : 00000000;
+4ad6 : 00000000;
+4ad7 : 00000000;
+4ad8 : 00000000;
+4ad9 : 00000000;
+4ada : 00000000;
+4adb : 00000000;
+4adc : 00000000;
+4add : 00000000;
+4ade : 00000000;
+4adf : 00000000;
+4ae0 : 00000000;
+4ae1 : 00000000;
+4ae2 : 00000000;
+4ae3 : 00000000;
+4ae4 : 00000000;
+4ae5 : 00000000;
+4ae6 : 00000000;
+4ae7 : 00000000;
+4ae8 : 00000000;
+4ae9 : 00000000;
+4aea : 00000000;
+4aeb : 00000000;
+4aec : 00000000;
+4aed : 00000000;
+4aee : 00000000;
+4aef : 00000000;
+4af0 : 00000000;
+4af1 : 00000000;
+4af2 : 00000000;
+4af3 : 00000000;
+4af4 : 00000000;
+4af5 : 00000000;
+4af6 : 00000000;
+4af7 : 00000000;
+4af8 : 00000000;
+4af9 : 00000000;
+4afa : 00000000;
+4afb : 00000000;
+4afc : 00000000;
+4afd : 00000000;
+4afe : 00000000;
+4aff : 00000000;
+4b00 : 00000000;
+4b01 : 00000000;
+4b02 : 00000000;
+4b03 : 00000000;
+4b04 : 00000000;
+4b05 : 00000000;
+4b06 : 00000000;
+4b07 : 00000000;
+4b08 : 00000000;
+4b09 : 00000000;
+4b0a : 00000000;
+4b0b : 00000000;
+4b0c : 00000000;
+4b0d : 00000000;
+4b0e : 00000000;
+4b0f : 00000000;
+4b10 : 00000000;
+4b11 : 00000000;
+4b12 : 00000000;
+4b13 : 00000000;
+4b14 : 00000000;
+4b15 : 00000000;
+4b16 : 00000000;
+4b17 : 00000000;
+4b18 : 00000000;
+4b19 : 00000000;
+4b1a : 00000000;
+4b1b : 00000000;
+4b1c : 00000000;
+4b1d : 00000000;
+4b1e : 00000000;
+4b1f : 00000000;
+4b20 : 00000000;
+4b21 : 00000000;
+4b22 : 00000000;
+4b23 : 00000000;
+4b24 : 00000000;
+4b25 : 00000000;
+4b26 : 00000000;
+4b27 : 00000000;
+4b28 : 00000000;
+4b29 : 00000000;
+4b2a : 00000000;
+4b2b : 00000000;
+4b2c : 00000000;
+4b2d : 00000000;
+4b2e : 00000000;
+4b2f : 00000000;
+4b30 : 00000000;
+4b31 : 00000000;
+4b32 : 00000000;
+4b33 : 00000000;
+4b34 : 00000000;
+4b35 : 00000000;
+4b36 : 00000000;
+4b37 : 00000000;
+4b38 : 00000000;
+4b39 : 00000000;
+4b3a : 00000000;
+4b3b : 00000000;
+4b3c : 00000000;
+4b3d : 00000000;
+4b3e : 00000000;
+4b3f : 00000000;
+4b40 : 00000000;
+4b41 : 00000000;
+4b42 : 00000000;
+4b43 : 00000000;
+4b44 : 00000000;
+4b45 : 00000000;
+4b46 : 00000000;
+4b47 : 00000000;
+4b48 : 00000000;
+4b49 : 00000000;
+4b4a : 00000000;
+4b4b : 00000000;
+4b4c : 00000000;
+4b4d : 00000000;
+4b4e : 00000000;
+4b4f : 00000000;
+4b50 : 00000000;
+4b51 : 00000000;
+4b52 : 00000000;
+4b53 : 00000000;
+4b54 : 00000000;
+4b55 : 00000000;
+4b56 : 00000000;
+4b57 : 00000000;
+4b58 : 00000000;
+4b59 : 00000000;
+4b5a : 00000000;
+4b5b : 00000000;
+4b5c : 00000000;
+4b5d : 00000000;
+4b5e : 00000000;
+4b5f : 00000000;
+4b60 : 00000000;
+4b61 : 00000000;
+4b62 : 00000000;
+4b63 : 00000000;
+4b64 : 00000000;
+4b65 : 00000000;
+4b66 : 00000000;
+4b67 : 00000000;
+4b68 : 00000000;
+4b69 : 00000000;
+4b6a : 00000000;
+4b6b : 00000000;
+4b6c : 00000000;
+4b6d : 00000000;
+4b6e : 00000000;
+4b6f : 00000000;
+4b70 : 00000000;
+4b71 : 00000000;
+4b72 : 00000000;
+4b73 : 00000000;
+4b74 : 00000000;
+4b75 : 00000000;
+4b76 : 00000000;
+4b77 : 00000000;
+4b78 : 00000000;
+4b79 : 00000000;
+4b7a : 00000000;
+4b7b : 00000000;
+4b7c : 00000000;
+4b7d : 00000000;
+4b7e : 00000000;
+4b7f : 00000000;
+4b80 : 00000000;
+4b81 : 00000000;
+4b82 : 00000000;
+4b83 : 00000000;
+4b84 : 00000000;
+4b85 : 00000000;
+4b86 : 00000000;
+4b87 : 00000000;
+4b88 : 00000000;
+4b89 : 00000000;
+4b8a : 00000000;
+4b8b : 00000000;
+4b8c : 00000000;
+4b8d : 00000000;
+4b8e : 00000000;
+4b8f : 00000000;
+4b90 : 00000000;
+4b91 : 00000000;
+4b92 : 00000000;
+4b93 : 00000000;
+4b94 : 00000000;
+4b95 : 00000000;
+4b96 : 00000000;
+4b97 : 00000000;
+4b98 : 00000000;
+4b99 : 00000000;
+4b9a : 00000000;
+4b9b : 00000000;
+4b9c : 00000000;
+4b9d : 00000000;
+4b9e : 00000000;
+4b9f : 00000000;
+4ba0 : 00000000;
+4ba1 : 00000000;
+4ba2 : 00000000;
+4ba3 : 00000000;
+4ba4 : 00000000;
+4ba5 : 00000000;
+4ba6 : 00000000;
+4ba7 : 00000000;
+4ba8 : 00000000;
+4ba9 : 00000000;
+4baa : 00000000;
+4bab : 00000000;
+4bac : 00000000;
+4bad : 00000000;
+4bae : 00000000;
+4baf : 00000000;
+4bb0 : 00000000;
+4bb1 : 00000000;
+4bb2 : 00000000;
+4bb3 : 00000000;
+4bb4 : 00000000;
+4bb5 : 00000000;
+4bb6 : 00000000;
+4bb7 : 00000000;
+4bb8 : 00000000;
+4bb9 : 00000000;
+4bba : 00000000;
+4bbb : 00000000;
+4bbc : 00000000;
+4bbd : 00000000;
+4bbe : 00000000;
+4bbf : 00000000;
+4bc0 : 00000000;
+4bc1 : 00000000;
+4bc2 : 00000000;
+4bc3 : 00000000;
+4bc4 : 00000000;
+4bc5 : 00000000;
+4bc6 : 00000000;
+4bc7 : 00000000;
+4bc8 : 00000000;
+4bc9 : 00000000;
+4bca : 00000000;
+4bcb : 00000000;
+4bcc : 00000000;
+4bcd : 00000000;
+4bce : 00000000;
+4bcf : 00000000;
+4bd0 : 00000000;
+4bd1 : 00000000;
+4bd2 : 00000000;
+4bd3 : 00000000;
+4bd4 : 00000000;
+4bd5 : 00000000;
+4bd6 : 00000000;
+4bd7 : 00000000;
+4bd8 : 00000000;
+4bd9 : 00000000;
+4bda : 00000000;
+4bdb : 00000000;
+4bdc : 00000000;
+4bdd : 00000000;
+4bde : 00000000;
+4bdf : 00000000;
+4be0 : 00000000;
+4be1 : 00000000;
+4be2 : 00000000;
+4be3 : 00000000;
+4be4 : 00000000;
+4be5 : 00000000;
+4be6 : 00000000;
+4be7 : 00000000;
+4be8 : 00000000;
+4be9 : 00000000;
+4bea : 00000000;
+4beb : 00000000;
+4bec : 00000000;
+4bed : 00000000;
+4bee : 00000000;
+4bef : 00000000;
+4bf0 : 00000000;
+4bf1 : 00000000;
+4bf2 : 00000000;
+4bf3 : 00000000;
+4bf4 : 00000000;
+4bf5 : 00000000;
+4bf6 : 00000000;
+4bf7 : 00000000;
+4bf8 : 00000000;
+4bf9 : 00000000;
+4bfa : 00000000;
+4bfb : 00000000;
+4bfc : 00000000;
+4bfd : 00000000;
+4bfe : 00000000;
+4bff : 00000000;
+4c00 : 00000000;
+4c01 : 00000000;
+4c02 : 00000000;
+4c03 : 00000000;
+4c04 : 00000000;
+4c05 : 00000000;
+4c06 : 00000000;
+4c07 : 00000000;
+4c08 : 00000000;
+4c09 : 00000000;
+4c0a : 00000000;
+4c0b : 00000000;
+4c0c : 00000000;
+4c0d : 00000000;
+4c0e : 00000000;
+4c0f : 00000000;
+4c10 : 00000000;
+4c11 : 00000000;
+4c12 : 00000000;
+4c13 : 00000000;
+4c14 : 00000000;
+4c15 : 00000000;
+4c16 : 00000000;
+4c17 : 00000000;
+4c18 : 00000000;
+4c19 : 00000000;
+4c1a : 00000000;
+4c1b : 00000000;
+4c1c : 00000000;
+4c1d : 00000000;
+4c1e : 00000000;
+4c1f : 00000000;
+4c20 : 00000000;
+4c21 : 00000000;
+4c22 : 00000000;
+4c23 : 00000000;
+4c24 : 00000000;
+4c25 : 00000000;
+4c26 : 00000000;
+4c27 : 00000000;
+4c28 : 00000000;
+4c29 : 00000000;
+4c2a : 00000000;
+4c2b : 00000000;
+4c2c : 00000000;
+4c2d : 00000000;
+4c2e : 00000000;
+4c2f : 00000000;
+4c30 : 00000000;
+4c31 : 00000000;
+4c32 : 00000000;
+4c33 : 00000000;
+4c34 : 00000000;
+4c35 : 00000000;
+4c36 : 00000000;
+4c37 : 00000000;
+4c38 : 00000000;
+4c39 : 00000000;
+4c3a : 00000000;
+4c3b : 00000000;
+4c3c : 00000000;
+4c3d : 00000000;
+4c3e : 00000000;
+4c3f : 00000000;
+4c40 : 00000000;
+4c41 : 00000000;
+4c42 : 00000000;
+4c43 : 00000000;
+4c44 : 00000000;
+4c45 : 00000000;
+4c46 : 00000000;
+4c47 : 00000000;
+4c48 : 00000000;
+4c49 : 00000000;
+4c4a : 00000000;
+4c4b : 00000000;
+4c4c : 00000000;
+4c4d : 00000000;
+4c4e : 00000000;
+4c4f : 00000000;
+4c50 : 00000000;
+4c51 : 00000000;
+4c52 : 00000000;
+4c53 : 00000000;
+4c54 : 00000000;
+4c55 : 00000000;
+4c56 : 00000000;
+4c57 : 00000000;
+4c58 : 00000000;
+4c59 : 00000000;
+4c5a : 00000000;
+4c5b : 00000000;
+4c5c : 00000000;
+4c5d : 00000000;
+4c5e : 00000000;
+4c5f : 00000000;
+4c60 : 00000000;
+4c61 : 00000000;
+4c62 : 00000000;
+4c63 : 00000000;
+4c64 : 00000000;
+4c65 : 00000000;
+4c66 : 00000000;
+4c67 : 00000000;
+4c68 : 00000000;
+4c69 : 00000000;
+4c6a : 00000000;
+4c6b : 00000000;
+4c6c : 00000000;
+4c6d : 00000000;
+4c6e : 00000000;
+4c6f : 00000000;
+4c70 : 00000000;
+4c71 : 00000000;
+4c72 : 00000000;
+4c73 : 00000000;
+4c74 : 00000000;
+4c75 : 00000000;
+4c76 : 00000000;
+4c77 : 00000000;
+4c78 : 00000000;
+4c79 : 00000000;
+4c7a : 00000000;
+4c7b : 00000000;
+4c7c : 00000000;
+4c7d : 00000000;
+4c7e : 00000000;
+4c7f : 00000000;
+4c80 : 00000000;
+4c81 : 00000000;
+4c82 : 00000000;
+4c83 : 00000000;
+4c84 : 00000000;
+4c85 : 00000000;
+4c86 : 00000000;
+4c87 : 00000000;
+4c88 : 00000000;
+4c89 : 00000000;
+4c8a : 00000000;
+4c8b : 00000000;
+4c8c : 00000000;
+4c8d : 00000000;
+4c8e : 00000000;
+4c8f : 00000000;
+4c90 : 00000000;
+4c91 : 00000000;
+4c92 : 00000000;
+4c93 : 00000000;
+4c94 : 00000000;
+4c95 : 00000000;
+4c96 : 00000000;
+4c97 : 00000000;
+4c98 : 00000000;
+4c99 : 00000000;
+4c9a : 00000000;
+4c9b : 00000000;
+4c9c : 00000000;
+4c9d : 00000000;
+4c9e : 00000000;
+4c9f : 00000000;
+4ca0 : 00000000;
+4ca1 : 00000000;
+4ca2 : 00000000;
+4ca3 : 00000000;
+4ca4 : 00000000;
+4ca5 : 00000000;
+4ca6 : 00000000;
+4ca7 : 00000000;
+4ca8 : 00000000;
+4ca9 : 00000000;
+4caa : 00000000;
+4cab : 00000000;
+4cac : 00000000;
+4cad : 00000000;
+4cae : 00000000;
+4caf : 00000000;
+4cb0 : 00000000;
+4cb1 : 00000000;
+4cb2 : 00000000;
+4cb3 : 00000000;
+4cb4 : 00000000;
+4cb5 : 00000000;
+4cb6 : 00000000;
+4cb7 : 00000000;
+4cb8 : 00000000;
+4cb9 : 00000000;
+4cba : 00000000;
+4cbb : 00000000;
+4cbc : 00000000;
+4cbd : 00000000;
+4cbe : 00000000;
+4cbf : 00000000;
+4cc0 : 00000000;
+4cc1 : 00000000;
+4cc2 : 00000000;
+4cc3 : 00000000;
+4cc4 : 00000000;
+4cc5 : 00000000;
+4cc6 : 00000000;
+4cc7 : 00000000;
+4cc8 : 00000000;
+4cc9 : 00000000;
+4cca : 00000000;
+4ccb : 00000000;
+4ccc : 00000000;
+4ccd : 00000000;
+4cce : 00000000;
+4ccf : 00000000;
+4cd0 : 00000000;
+4cd1 : 00000000;
+4cd2 : 00000000;
+4cd3 : 00000000;
+4cd4 : 00000000;
+4cd5 : 00000000;
+4cd6 : 00000000;
+4cd7 : 00000000;
+4cd8 : 00000000;
+4cd9 : 00000000;
+4cda : 00000000;
+4cdb : 00000000;
+4cdc : 00000000;
+4cdd : 00000000;
+4cde : 00000000;
+4cdf : 00000000;
+4ce0 : 00000000;
+4ce1 : 00000000;
+4ce2 : 00000000;
+4ce3 : 00000000;
+4ce4 : 00000000;
+4ce5 : 00000000;
+4ce6 : 00000000;
+4ce7 : 00000000;
+4ce8 : 00000000;
+4ce9 : 00000000;
+4cea : 00000000;
+4ceb : 00000000;
+4cec : 00000000;
+4ced : 00000000;
+4cee : 00000000;
+4cef : 00000000;
+4cf0 : 00000000;
+4cf1 : 00000000;
+4cf2 : 00000000;
+4cf3 : 00000000;
+4cf4 : 00000000;
+4cf5 : 00000000;
+4cf6 : 00000000;
+4cf7 : 00000000;
+4cf8 : 00000000;
+4cf9 : 00000000;
+4cfa : 00000000;
+4cfb : 00000000;
+4cfc : 00000000;
+4cfd : 00000000;
+4cfe : 00000000;
+4cff : 00000000;
+4d00 : 00000000;
+4d01 : 00000000;
+4d02 : 00000000;
+4d03 : 00000000;
+4d04 : 00000000;
+4d05 : 00000000;
+4d06 : 00000000;
+4d07 : 00000000;
+4d08 : 00000000;
+4d09 : 00000000;
+4d0a : 00000000;
+4d0b : 00000000;
+4d0c : 00000000;
+4d0d : 00000000;
+4d0e : 00000000;
+4d0f : 00000000;
+4d10 : 00000000;
+4d11 : 00000000;
+4d12 : 00000000;
+4d13 : 00000000;
+4d14 : 00000000;
+4d15 : 00000000;
+4d16 : 00000000;
+4d17 : 00000000;
+4d18 : 00000000;
+4d19 : 00000000;
+4d1a : 00000000;
+4d1b : 00000000;
+4d1c : 00000000;
+4d1d : 00000000;
+4d1e : 00000000;
+4d1f : 00000000;
+4d20 : 00000000;
+4d21 : 00000000;
+4d22 : 00000000;
+4d23 : 00000000;
+4d24 : 00000000;
+4d25 : 00000000;
+4d26 : 00000000;
+4d27 : 00000000;
+4d28 : 00000000;
+4d29 : 00000000;
+4d2a : 00000000;
+4d2b : 00000000;
+4d2c : 00000000;
+4d2d : 00000000;
+4d2e : 00000000;
+4d2f : 00000000;
+4d30 : 00000000;
+4d31 : 00000000;
+4d32 : 00000000;
+4d33 : 00000000;
+4d34 : 00000000;
+4d35 : 00000000;
+4d36 : 00000000;
+4d37 : 00000000;
+4d38 : 00000000;
+4d39 : 00000000;
+4d3a : 00000000;
+4d3b : 00000000;
+4d3c : 00000000;
+4d3d : 00000000;
+4d3e : 00000000;
+4d3f : 00000000;
+4d40 : 00000000;
+4d41 : 00000000;
+4d42 : 00000000;
+4d43 : 00000000;
+4d44 : 00000000;
+4d45 : 00000000;
+4d46 : 00000000;
+4d47 : 00000000;
+4d48 : 00000000;
+4d49 : 00000000;
+4d4a : 00000000;
+4d4b : 00000000;
+4d4c : 00000000;
+4d4d : 00000000;
+4d4e : 00000000;
+4d4f : 00000000;
+4d50 : 00000000;
+4d51 : 00000000;
+4d52 : 00000000;
+4d53 : 00000000;
+4d54 : 00000000;
+4d55 : 00000000;
+4d56 : 00000000;
+4d57 : 00000000;
+4d58 : 00000000;
+4d59 : 00000000;
+4d5a : 00000000;
+4d5b : 00000000;
+4d5c : 00000000;
+4d5d : 00000000;
+4d5e : 00000000;
+4d5f : 00000000;
+4d60 : 00000000;
+4d61 : 00000000;
+4d62 : 00000000;
+4d63 : 00000000;
+4d64 : 00000000;
+4d65 : 00000000;
+4d66 : 00000000;
+4d67 : 00000000;
+4d68 : 00000000;
+4d69 : 00000000;
+4d6a : 00000000;
+4d6b : 00000000;
+4d6c : 00000000;
+4d6d : 00000000;
+4d6e : 00000000;
+4d6f : 00000000;
+4d70 : 00000000;
+4d71 : 00000000;
+4d72 : 00000000;
+4d73 : 00000000;
+4d74 : 00000000;
+4d75 : 00000000;
+4d76 : 00000000;
+4d77 : 00000000;
+4d78 : 00000000;
+4d79 : 00000000;
+4d7a : 00000000;
+4d7b : 00000000;
+4d7c : 00000000;
+4d7d : 00000000;
+4d7e : 00000000;
+4d7f : 00000000;
+4d80 : 00000000;
+4d81 : 00000000;
+4d82 : 00000000;
+4d83 : 00000000;
+4d84 : 00000000;
+4d85 : 00000000;
+4d86 : 00000000;
+4d87 : 00000000;
+4d88 : 00000000;
+4d89 : 00000000;
+4d8a : 00000000;
+4d8b : 00000000;
+4d8c : 00000000;
+4d8d : 00000000;
+4d8e : 00000000;
+4d8f : 00000000;
+4d90 : 00000000;
+4d91 : 00000000;
+4d92 : 00000000;
+4d93 : 00000000;
+4d94 : 00000000;
+4d95 : 00000000;
+4d96 : 00000000;
+4d97 : 00000000;
+4d98 : 00000000;
+4d99 : 00000000;
+4d9a : 00000000;
+4d9b : 00000000;
+4d9c : 00000000;
+4d9d : 00000000;
+4d9e : 00000000;
+4d9f : 00000000;
+4da0 : 00000000;
+4da1 : 00000000;
+4da2 : 00000000;
+4da3 : 00000000;
+4da4 : 00000000;
+4da5 : 00000000;
+4da6 : 00000000;
+4da7 : 00000000;
+4da8 : 00000000;
+4da9 : 00000000;
+4daa : 00000000;
+4dab : 00000000;
+4dac : 00000000;
+4dad : 00000000;
+4dae : 00000000;
+4daf : 00000000;
+4db0 : 00000000;
+4db1 : 00000000;
+4db2 : 00000000;
+4db3 : 00000000;
+4db4 : 00000000;
+4db5 : 00000000;
+4db6 : 00000000;
+4db7 : 00000000;
+4db8 : 00000000;
+4db9 : 00000000;
+4dba : 00000000;
+4dbb : 00000000;
+4dbc : 00000000;
+4dbd : 00000000;
+4dbe : 00000000;
+4dbf : 00000000;
+4dc0 : 00000000;
+4dc1 : 00000000;
+4dc2 : 00000000;
+4dc3 : 00000000;
+4dc4 : 00000000;
+4dc5 : 00000000;
+4dc6 : 00000000;
+4dc7 : 00000000;
+4dc8 : 00000000;
+4dc9 : 00000000;
+4dca : 00000000;
+4dcb : 00000000;
+4dcc : 00000000;
+4dcd : 00000000;
+4dce : 00000000;
+4dcf : 00000000;
+4dd0 : 00000000;
+4dd1 : 00000000;
+4dd2 : 00000000;
+4dd3 : 00000000;
+4dd4 : 00000000;
+4dd5 : 00000000;
+4dd6 : 00000000;
+4dd7 : 00000000;
+4dd8 : 00000000;
+4dd9 : 00000000;
+4dda : 00000000;
+4ddb : 00000000;
+4ddc : 00000000;
+4ddd : 00000000;
+4dde : 00000000;
+4ddf : 00000000;
+4de0 : 00000000;
+4de1 : 00000000;
+4de2 : 00000000;
+4de3 : 00000000;
+4de4 : 00000000;
+4de5 : 00000000;
+4de6 : 00000000;
+4de7 : 00000000;
+4de8 : 00000000;
+4de9 : 00000000;
+4dea : 00000000;
+4deb : 00000000;
+4dec : 00000000;
+4ded : 00000000;
+4dee : 00000000;
+4def : 00000000;
+4df0 : 00000000;
+4df1 : 00000000;
+4df2 : 00000000;
+4df3 : 00000000;
+4df4 : 00000000;
+4df5 : 00000000;
+4df6 : 00000000;
+4df7 : 00000000;
+4df8 : 00000000;
+4df9 : 00000000;
+4dfa : 00000000;
+4dfb : 00000000;
+4dfc : 00000000;
+4dfd : 00000000;
+4dfe : 00000000;
+4dff : 00000000;
+4e00 : 00000000;
+4e01 : 00000000;
+4e02 : 00000000;
+4e03 : 00000000;
+4e04 : 00000000;
+4e05 : 00000000;
+4e06 : 00000000;
+4e07 : 00000000;
+4e08 : 00000000;
+4e09 : 00000000;
+4e0a : 00000000;
+4e0b : 00000000;
+4e0c : 00000000;
+4e0d : 00000000;
+4e0e : 00000000;
+4e0f : 00000000;
+4e10 : 00000000;
+4e11 : 00000000;
+4e12 : 00000000;
+4e13 : 00000000;
+4e14 : 00000000;
+4e15 : 00000000;
+4e16 : 00000000;
+4e17 : 00000000;
+4e18 : 00000000;
+4e19 : 00000000;
+4e1a : 00000000;
+4e1b : 00000000;
+4e1c : 00000000;
+4e1d : 00000000;
+4e1e : 00000000;
+4e1f : 00000000;
+4e20 : 00000000;
+4e21 : 00000000;
+4e22 : 00000000;
+4e23 : 00000000;
+4e24 : 00000000;
+4e25 : 00000000;
+4e26 : 00000000;
+4e27 : 00000000;
+4e28 : 00000000;
+4e29 : 00000000;
+4e2a : 00000000;
+4e2b : 00000000;
+4e2c : 00000000;
+4e2d : 00000000;
+4e2e : 00000000;
+4e2f : 00000000;
+4e30 : 00000000;
+4e31 : 00000000;
+4e32 : 00000000;
+4e33 : 00000000;
+4e34 : 00000000;
+4e35 : 00000000;
+4e36 : 00000000;
+4e37 : 00000000;
+4e38 : 00000000;
+4e39 : 00000000;
+4e3a : 00000000;
+4e3b : 00000000;
+4e3c : 00000000;
+4e3d : 00000000;
+4e3e : 00000000;
+4e3f : 00000000;
+4e40 : 00000000;
+4e41 : 00000000;
+4e42 : 00000000;
+4e43 : 00000000;
+4e44 : 00000000;
+4e45 : 00000000;
+4e46 : 00000000;
+4e47 : 00000000;
+4e48 : 00000000;
+4e49 : 00000000;
+4e4a : 00000000;
+4e4b : 00000000;
+4e4c : 00000000;
+4e4d : 00000000;
+4e4e : 00000000;
+4e4f : 00000000;
+4e50 : 00000000;
+4e51 : 00000000;
+4e52 : 00000000;
+4e53 : 00000000;
+4e54 : 00000000;
+4e55 : 00000000;
+4e56 : 00000000;
+4e57 : 00000000;
+4e58 : 00000000;
+4e59 : 00000000;
+4e5a : 00000000;
+4e5b : 00000000;
+4e5c : 00000000;
+4e5d : 00000000;
+4e5e : 00000000;
+4e5f : 00000000;
+4e60 : 00000000;
+4e61 : 00000000;
+4e62 : 00000000;
+4e63 : 00000000;
+4e64 : 00000000;
+4e65 : 00000000;
+4e66 : 00000000;
+4e67 : 00000000;
+4e68 : 00000000;
+4e69 : 00000000;
+4e6a : 00000000;
+4e6b : 00000000;
+4e6c : 00000000;
+4e6d : 00000000;
+4e6e : 00000000;
+4e6f : 00000000;
+4e70 : 00000000;
+4e71 : 00000000;
+4e72 : 00000000;
+4e73 : 00000000;
+4e74 : 00000000;
+4e75 : 00000000;
+4e76 : 00000000;
+4e77 : 00000000;
+4e78 : 00000000;
+4e79 : 00000000;
+4e7a : 00000000;
+4e7b : 00000000;
+4e7c : 00000000;
+4e7d : 00000000;
+4e7e : 00000000;
+4e7f : 00000000;
+4e80 : 00000000;
+4e81 : 00000000;
+4e82 : 00000000;
+4e83 : 00000000;
+4e84 : 00000000;
+4e85 : 00000000;
+4e86 : 00000000;
+4e87 : 00000000;
+4e88 : 00000000;
+4e89 : 00000000;
+4e8a : 00000000;
+4e8b : 00000000;
+4e8c : 00000000;
+4e8d : 00000000;
+4e8e : 00000000;
+4e8f : 00000000;
+4e90 : 00000000;
+4e91 : 00000000;
+4e92 : 00000000;
+4e93 : 00000000;
+4e94 : 00000000;
+4e95 : 00000000;
+4e96 : 00000000;
+4e97 : 00000000;
+4e98 : 00000000;
+4e99 : 00000000;
+4e9a : 00000000;
+4e9b : 00000000;
+4e9c : 00000000;
+4e9d : 00000000;
+4e9e : 00000000;
+4e9f : 00000000;
+4ea0 : 00000000;
+4ea1 : 00000000;
+4ea2 : 00000000;
+4ea3 : 00000000;
+4ea4 : 00000000;
+4ea5 : 00000000;
+4ea6 : 00000000;
+4ea7 : 00000000;
+4ea8 : 00000000;
+4ea9 : 00000000;
+4eaa : 00000000;
+4eab : 00000000;
+4eac : 00000000;
+4ead : 00000000;
+4eae : 00000000;
+4eaf : 00000000;
+4eb0 : 00000000;
+4eb1 : 00000000;
+4eb2 : 00000000;
+4eb3 : 00000000;
+4eb4 : 00000000;
+4eb5 : 00000000;
+4eb6 : 00000000;
+4eb7 : 00000000;
+4eb8 : 00000000;
+4eb9 : 00000000;
+4eba : 00000000;
+4ebb : 00000000;
+4ebc : 00000000;
+4ebd : 00000000;
+4ebe : 00000000;
+4ebf : 00000000;
+4ec0 : 00000000;
+4ec1 : 00000000;
+4ec2 : 00000000;
+4ec3 : 00000000;
+4ec4 : 00000000;
+4ec5 : 00000000;
+4ec6 : 00000000;
+4ec7 : 00000000;
+4ec8 : 00000000;
+4ec9 : 00000000;
+4eca : 00000000;
+4ecb : 00000000;
+4ecc : 00000000;
+4ecd : 00000000;
+4ece : 00000000;
+4ecf : 00000000;
+4ed0 : 00000000;
+4ed1 : 00000000;
+4ed2 : 00000000;
+4ed3 : 00000000;
+4ed4 : 00000000;
+4ed5 : 00000000;
+4ed6 : 00000000;
+4ed7 : 00000000;
+4ed8 : 00000000;
+4ed9 : 00000000;
+4eda : 00000000;
+4edb : 00000000;
+4edc : 00000000;
+4edd : 00000000;
+4ede : 00000000;
+4edf : 00000000;
+4ee0 : 00000000;
+4ee1 : 00000000;
+4ee2 : 00000000;
+4ee3 : 00000000;
+4ee4 : 00000000;
+4ee5 : 00000000;
+4ee6 : 00000000;
+4ee7 : 00000000;
+4ee8 : 00000000;
+4ee9 : 00000000;
+4eea : 00000000;
+4eeb : 00000000;
+4eec : 00000000;
+4eed : 00000000;
+4eee : 00000000;
+4eef : 00000000;
+4ef0 : 00000000;
+4ef1 : 00000000;
+4ef2 : 00000000;
+4ef3 : 00000000;
+4ef4 : 00000000;
+4ef5 : 00000000;
+4ef6 : 00000000;
+4ef7 : 00000000;
+4ef8 : 00000000;
+4ef9 : 00000000;
+4efa : 00000000;
+4efb : 00000000;
+4efc : 00000000;
+4efd : 00000000;
+4efe : 00000000;
+4eff : 00000000;
+4f00 : 00000000;
+4f01 : 00000000;
+4f02 : 00000000;
+4f03 : 00000000;
+4f04 : 00000000;
+4f05 : 00000000;
+4f06 : 00000000;
+4f07 : 00000000;
+4f08 : 00000000;
+4f09 : 00000000;
+4f0a : 00000000;
+4f0b : 00000000;
+4f0c : 00000000;
+4f0d : 00000000;
+4f0e : 00000000;
+4f0f : 00000000;
+4f10 : 00000000;
+4f11 : 00000000;
+4f12 : 00000000;
+4f13 : 00000000;
+4f14 : 00000000;
+4f15 : 00000000;
+4f16 : 00000000;
+4f17 : 00000000;
+4f18 : 00000000;
+4f19 : 00000000;
+4f1a : 00000000;
+4f1b : 00000000;
+4f1c : 00000000;
+4f1d : 00000000;
+4f1e : 00000000;
+4f1f : 00000000;
+4f20 : 00000000;
+4f21 : 00000000;
+4f22 : 00000000;
+4f23 : 00000000;
+4f24 : 00000000;
+4f25 : 00000000;
+4f26 : 00000000;
+4f27 : 00000000;
+4f28 : 00000000;
+4f29 : 00000000;
+4f2a : 00000000;
+4f2b : 00000000;
+4f2c : 00000000;
+4f2d : 00000000;
+4f2e : 00000000;
+4f2f : 00000000;
+4f30 : 00000000;
+4f31 : 00000000;
+4f32 : 00000000;
+4f33 : 00000000;
+4f34 : 00000000;
+4f35 : 00000000;
+4f36 : 00000000;
+4f37 : 00000000;
+4f38 : 00000000;
+4f39 : 00000000;
+4f3a : 00000000;
+4f3b : 00000000;
+4f3c : 00000000;
+4f3d : 00000000;
+4f3e : 00000000;
+4f3f : 00000000;
+4f40 : 00000000;
+4f41 : 00000000;
+4f42 : 00000000;
+4f43 : 00000000;
+4f44 : 00000000;
+4f45 : 00000000;
+4f46 : 00000000;
+4f47 : 00000000;
+4f48 : 00000000;
+4f49 : 00000000;
+4f4a : 00000000;
+4f4b : 00000000;
+4f4c : 00000000;
+4f4d : 00000000;
+4f4e : 00000000;
+4f4f : 00000000;
+4f50 : 00000000;
+4f51 : 00000000;
+4f52 : 00000000;
+4f53 : 00000000;
+4f54 : 00000000;
+4f55 : 00000000;
+4f56 : 00000000;
+4f57 : 00000000;
+4f58 : 00000000;
+4f59 : 00000000;
+4f5a : 00000000;
+4f5b : 00000000;
+4f5c : 00000000;
+4f5d : 00000000;
+4f5e : 00000000;
+4f5f : 00000000;
+4f60 : 00000000;
+4f61 : 00000000;
+4f62 : 00000000;
+4f63 : 00000000;
+4f64 : 00000000;
+4f65 : 00000000;
+4f66 : 00000000;
+4f67 : 00000000;
+4f68 : 00000000;
+4f69 : 00000000;
+4f6a : 00000000;
+4f6b : 00000000;
+4f6c : 00000000;
+4f6d : 00000000;
+4f6e : 00000000;
+4f6f : 00000000;
+4f70 : 00000000;
+4f71 : 00000000;
+4f72 : 00000000;
+4f73 : 00000000;
+4f74 : 00000000;
+4f75 : 00000000;
+4f76 : 00000000;
+4f77 : 00000000;
+4f78 : 00000000;
+4f79 : 00000000;
+4f7a : 00000000;
+4f7b : 00000000;
+4f7c : 00000000;
+4f7d : 00000000;
+4f7e : 00000000;
+4f7f : 00000000;
+4f80 : 00000000;
+4f81 : 00000000;
+4f82 : 00000000;
+4f83 : 00000000;
+4f84 : 00000000;
+4f85 : 00000000;
+4f86 : 00000000;
+4f87 : 00000000;
+4f88 : 00000000;
+4f89 : 00000000;
+4f8a : 00000000;
+4f8b : 00000000;
+4f8c : 00000000;
+4f8d : 00000000;
+4f8e : 00000000;
+4f8f : 00000000;
+4f90 : 00000000;
+4f91 : 00000000;
+4f92 : 00000000;
+4f93 : 00000000;
+4f94 : 00000000;
+4f95 : 00000000;
+4f96 : 00000000;
+4f97 : 00000000;
+4f98 : 00000000;
+4f99 : 00000000;
+4f9a : 00000000;
+4f9b : 00000000;
+4f9c : 00000000;
+4f9d : 00000000;
+4f9e : 00000000;
+4f9f : 00000000;
+4fa0 : 00000000;
+4fa1 : 00000000;
+4fa2 : 00000000;
+4fa3 : 00000000;
+4fa4 : 00000000;
+4fa5 : 00000000;
+4fa6 : 00000000;
+4fa7 : 00000000;
+4fa8 : 00000000;
+4fa9 : 00000000;
+4faa : 00000000;
+4fab : 00000000;
+4fac : 00000000;
+4fad : 00000000;
+4fae : 00000000;
+4faf : 00000000;
+4fb0 : 00000000;
+4fb1 : 00000000;
+4fb2 : 00000000;
+4fb3 : 00000000;
+4fb4 : 00000000;
+4fb5 : 00000000;
+4fb6 : 00000000;
+4fb7 : 00000000;
+4fb8 : 00000000;
+4fb9 : 00000000;
+4fba : 00000000;
+4fbb : 00000000;
+4fbc : 00000000;
+4fbd : 00000000;
+4fbe : 00000000;
+4fbf : 00000000;
+4fc0 : 00000000;
+4fc1 : 00000000;
+4fc2 : 00000000;
+4fc3 : 00000000;
+4fc4 : 00000000;
+4fc5 : 00000000;
+4fc6 : 00000000;
+4fc7 : 00000000;
+4fc8 : 00000000;
+4fc9 : 00000000;
+4fca : 00000000;
+4fcb : 00000000;
+4fcc : 00000000;
+4fcd : 00000000;
+4fce : 00000000;
+4fcf : 00000000;
+4fd0 : 00000000;
+4fd1 : 00000000;
+4fd2 : 00000000;
+4fd3 : 00000000;
+4fd4 : 00000000;
+4fd5 : 00000000;
+4fd6 : 00000000;
+4fd7 : 00000000;
+4fd8 : 00000000;
+4fd9 : 00000000;
+4fda : 00000000;
+4fdb : 00000000;
+4fdc : 00000000;
+4fdd : 00000000;
+4fde : 00000000;
+4fdf : 00000000;
+4fe0 : 00000000;
+4fe1 : 00000000;
+4fe2 : 00000000;
+4fe3 : 00000000;
+4fe4 : 00000000;
+4fe5 : 00000000;
+4fe6 : 00000000;
+4fe7 : 00000000;
+4fe8 : 00000000;
+4fe9 : 00000000;
+4fea : 00000000;
+4feb : 00000000;
+4fec : 00000000;
+4fed : 00000000;
+4fee : 00000000;
+4fef : 00000000;
+4ff0 : 00000000;
+4ff1 : 00000000;
+4ff2 : 00000000;
+4ff3 : 00000000;
+4ff4 : 00000000;
+4ff5 : 00000000;
+4ff6 : 00000000;
+4ff7 : 00000000;
+4ff8 : 00000000;
+4ff9 : 00000000;
+4ffa : 00000000;
+4ffb : 00000000;
+4ffc : 00000000;
+4ffd : 00000000;
+4ffe : 00000000;
+4fff : 00000000;
+5000 : 00000000;
+5001 : 00000000;
+5002 : 00000000;
+5003 : 00000000;
+5004 : 00000000;
+5005 : 00000000;
+5006 : 00000000;
+5007 : 00000000;
+5008 : 00000000;
+5009 : 00000000;
+500a : 00000000;
+500b : 00000000;
+500c : 00000000;
+500d : 00000000;
+500e : 00000000;
+500f : 00000000;
+5010 : 00000000;
+5011 : 00000000;
+5012 : 00000000;
+5013 : 00000000;
+5014 : 00000000;
+5015 : 00000000;
+5016 : 00000000;
+5017 : 00000000;
+5018 : 00000000;
+5019 : 00000000;
+501a : 00000000;
+501b : 00000000;
+501c : 00000000;
+501d : 00000000;
+501e : 00000000;
+501f : 00000000;
+5020 : 00000000;
+5021 : 00000000;
+5022 : 00000000;
+5023 : 00000000;
+5024 : 00000000;
+5025 : 00000000;
+5026 : 00000000;
+5027 : 00000000;
+5028 : 00000000;
+5029 : 00000000;
+502a : 00000000;
+502b : 00000000;
+502c : 00000000;
+502d : 00000000;
+502e : 00000000;
+502f : 00000000;
+5030 : 00000000;
+5031 : 00000000;
+5032 : 00000000;
+5033 : 00000000;
+5034 : 00000000;
+5035 : 00000000;
+5036 : 00000000;
+5037 : 00000000;
+5038 : 00000000;
+5039 : 00000000;
+503a : 00000000;
+503b : 00000000;
+503c : 00000000;
+503d : 00000000;
+503e : 00000000;
+503f : 00000000;
+5040 : 00000000;
+5041 : 00000000;
+5042 : 00000000;
+5043 : 00000000;
+5044 : 00000000;
+5045 : 00000000;
+5046 : 00000000;
+5047 : 00000000;
+5048 : 00000000;
+5049 : 00000000;
+504a : 00000000;
+504b : 00000000;
+504c : 00000000;
+504d : 00000000;
+504e : 00000000;
+504f : 00000000;
+5050 : 00000000;
+5051 : 00000000;
+5052 : 00000000;
+5053 : 00000000;
+5054 : 00000000;
+5055 : 00000000;
+5056 : 00000000;
+5057 : 00000000;
+5058 : 00000000;
+5059 : 00000000;
+505a : 00000000;
+505b : 00000000;
+505c : 00000000;
+505d : 00000000;
+505e : 00000000;
+505f : 00000000;
+5060 : 00000000;
+5061 : 00000000;
+5062 : 00000000;
+5063 : 00000000;
+5064 : 00000000;
+5065 : 00000000;
+5066 : 00000000;
+5067 : 00000000;
+5068 : 00000000;
+5069 : 00000000;
+506a : 00000000;
+506b : 00000000;
+506c : 00000000;
+506d : 00000000;
+506e : 00000000;
+506f : 00000000;
+5070 : 00000000;
+5071 : 00000000;
+5072 : 00000000;
+5073 : 00000000;
+5074 : 00000000;
+5075 : 00000000;
+5076 : 00000000;
+5077 : 00000000;
+5078 : 00000000;
+5079 : 00000000;
+507a : 00000000;
+507b : 00000000;
+507c : 00000000;
+507d : 00000000;
+507e : 00000000;
+507f : 00000000;
+5080 : 00000000;
+5081 : 00000000;
+5082 : 00000000;
+5083 : 00000000;
+5084 : 00000000;
+5085 : 00000000;
+5086 : 00000000;
+5087 : 00000000;
+5088 : 00000000;
+5089 : 00000000;
+508a : 00000000;
+508b : 00000000;
+508c : 00000000;
+508d : 00000000;
+508e : 00000000;
+508f : 00000000;
+5090 : 00000000;
+5091 : 00000000;
+5092 : 00000000;
+5093 : 00000000;
+5094 : 00000000;
+5095 : 00000000;
+5096 : 00000000;
+5097 : 00000000;
+5098 : 00000000;
+5099 : 00000000;
+509a : 00000000;
+509b : 00000000;
+509c : 00000000;
+509d : 00000000;
+509e : 00000000;
+509f : 00000000;
+50a0 : 00000000;
+50a1 : 00000000;
+50a2 : 00000000;
+50a3 : 00000000;
+50a4 : 00000000;
+50a5 : 00000000;
+50a6 : 00000000;
+50a7 : 00000000;
+50a8 : 00000000;
+50a9 : 00000000;
+50aa : 00000000;
+50ab : 00000000;
+50ac : 00000000;
+50ad : 00000000;
+50ae : 00000000;
+50af : 00000000;
+50b0 : 00000000;
+50b1 : 00000000;
+50b2 : 00000000;
+50b3 : 00000000;
+50b4 : 00000000;
+50b5 : 00000000;
+50b6 : 00000000;
+50b7 : 00000000;
+50b8 : 00000000;
+50b9 : 00000000;
+50ba : 00000000;
+50bb : 00000000;
+50bc : 00000000;
+50bd : 00000000;
+50be : 00000000;
+50bf : 00000000;
+50c0 : 00000000;
+50c1 : 00000000;
+50c2 : 00000000;
+50c3 : 00000000;
+50c4 : 00000000;
+50c5 : 00000000;
+50c6 : 00000000;
+50c7 : 00000000;
+50c8 : 00000000;
+50c9 : 00000000;
+50ca : 00000000;
+50cb : 00000000;
+50cc : 00000000;
+50cd : 00000000;
+50ce : 00000000;
+50cf : 00000000;
+50d0 : 00000000;
+50d1 : 00000000;
+50d2 : 00000000;
+50d3 : 00000000;
+50d4 : 00000000;
+50d5 : 00000000;
+50d6 : 00000000;
+50d7 : 00000000;
+50d8 : 00000000;
+50d9 : 00000000;
+50da : 00000000;
+50db : 00000000;
+50dc : 00000000;
+50dd : 00000000;
+50de : 00000000;
+50df : 00000000;
+50e0 : 00000000;
+50e1 : 00000000;
+50e2 : 00000000;
+50e3 : 00000000;
+50e4 : 00000000;
+50e5 : 00000000;
+50e6 : 00000000;
+50e7 : 00000000;
+50e8 : 00000000;
+50e9 : 00000000;
+50ea : 00000000;
+50eb : 00000000;
+50ec : 00000000;
+50ed : 00000000;
+50ee : 00000000;
+50ef : 00000000;
+50f0 : 00000000;
+50f1 : 00000000;
+50f2 : 00000000;
+50f3 : 00000000;
+50f4 : 00000000;
+50f5 : 00000000;
+50f6 : 00000000;
+50f7 : 00000000;
+50f8 : 00000000;
+50f9 : 00000000;
+50fa : 00000000;
+50fb : 00000000;
+50fc : 00000000;
+50fd : 00000000;
+50fe : 00000000;
+50ff : 00000000;
+5100 : 00000000;
+5101 : 00000000;
+5102 : 00000000;
+5103 : 00000000;
+5104 : 00000000;
+5105 : 00000000;
+5106 : 00000000;
+5107 : 00000000;
+5108 : 00000000;
+5109 : 00000000;
+510a : 00000000;
+510b : 00000000;
+510c : 00000000;
+510d : 00000000;
+510e : 00000000;
+510f : 00000000;
+5110 : 00000000;
+5111 : 00000000;
+5112 : 00000000;
+5113 : 00000000;
+5114 : 00000000;
+5115 : 00000000;
+5116 : 00000000;
+5117 : 00000000;
+5118 : 00000000;
+5119 : 00000000;
+511a : 00000000;
+511b : 00000000;
+511c : 00000000;
+511d : 00000000;
+511e : 00000000;
+511f : 00000000;
+5120 : 00000000;
+5121 : 00000000;
+5122 : 00000000;
+5123 : 00000000;
+5124 : 00000000;
+5125 : 00000000;
+5126 : 00000000;
+5127 : 00000000;
+5128 : 00000000;
+5129 : 00000000;
+512a : 00000000;
+512b : 00000000;
+512c : 00000000;
+512d : 00000000;
+512e : 00000000;
+512f : 00000000;
+5130 : 00000000;
+5131 : 00000000;
+5132 : 00000000;
+5133 : 00000000;
+5134 : 00000000;
+5135 : 00000000;
+5136 : 00000000;
+5137 : 00000000;
+5138 : 00000000;
+5139 : 00000000;
+513a : 00000000;
+513b : 00000000;
+513c : 00000000;
+513d : 00000000;
+513e : 00000000;
+513f : 00000000;
+5140 : 00000000;
+5141 : 00000000;
+5142 : 00000000;
+5143 : 00000000;
+5144 : 00000000;
+5145 : 00000000;
+5146 : 00000000;
+5147 : 00000000;
+5148 : 00000000;
+5149 : 00000000;
+514a : 00000000;
+514b : 00000000;
+514c : 00000000;
+514d : 00000000;
+514e : 00000000;
+514f : 00000000;
+5150 : 00000000;
+5151 : 00000000;
+5152 : 00000000;
+5153 : 00000000;
+5154 : 00000000;
+5155 : 00000000;
+5156 : 00000000;
+5157 : 00000000;
+5158 : 00000000;
+5159 : 00000000;
+515a : 00000000;
+515b : 00000000;
+515c : 00000000;
+515d : 00000000;
+515e : 00000000;
+515f : 00000000;
+5160 : 00000000;
+5161 : 00000000;
+5162 : 00000000;
+5163 : 00000000;
+5164 : 00000000;
+5165 : 00000000;
+5166 : 00000000;
+5167 : 00000000;
+5168 : 00000000;
+5169 : 00000000;
+516a : 00000000;
+516b : 00000000;
+516c : 00000000;
+516d : 00000000;
+516e : 00000000;
+516f : 00000000;
+5170 : 00000000;
+5171 : 00000000;
+5172 : 00000000;
+5173 : 00000000;
+5174 : 00000000;
+5175 : 00000000;
+5176 : 00000000;
+5177 : 00000000;
+5178 : 00000000;
+5179 : 00000000;
+517a : 00000000;
+517b : 00000000;
+517c : 00000000;
+517d : 00000000;
+517e : 00000000;
+517f : 00000000;
+5180 : 00000000;
+5181 : 00000000;
+5182 : 00000000;
+5183 : 00000000;
+5184 : 00000000;
+5185 : 00000000;
+5186 : 00000000;
+5187 : 00000000;
+5188 : 00000000;
+5189 : 00000000;
+518a : 00000000;
+518b : 00000000;
+518c : 00000000;
+518d : 00000000;
+518e : 00000000;
+518f : 00000000;
+5190 : 00000000;
+5191 : 00000000;
+5192 : 00000000;
+5193 : 00000000;
+5194 : 00000000;
+5195 : 00000000;
+5196 : 00000000;
+5197 : 00000000;
+5198 : 00000000;
+5199 : 00000000;
+519a : 00000000;
+519b : 00000000;
+519c : 00000000;
+519d : 00000000;
+519e : 00000000;
+519f : 00000000;
+51a0 : 00000000;
+51a1 : 00000000;
+51a2 : 00000000;
+51a3 : 00000000;
+51a4 : 00000000;
+51a5 : 00000000;
+51a6 : 00000000;
+51a7 : 00000000;
+51a8 : 00000000;
+51a9 : 00000000;
+51aa : 00000000;
+51ab : 00000000;
+51ac : 00000000;
+51ad : 00000000;
+51ae : 00000000;
+51af : 00000000;
+51b0 : 00000000;
+51b1 : 00000000;
+51b2 : 00000000;
+51b3 : 00000000;
+51b4 : 00000000;
+51b5 : 00000000;
+51b6 : 00000000;
+51b7 : 00000000;
+51b8 : 00000000;
+51b9 : 00000000;
+51ba : 00000000;
+51bb : 00000000;
+51bc : 00000000;
+51bd : 00000000;
+51be : 00000000;
+51bf : 00000000;
+51c0 : 00000000;
+51c1 : 00000000;
+51c2 : 00000000;
+51c3 : 00000000;
+51c4 : 00000000;
+51c5 : 00000000;
+51c6 : 00000000;
+51c7 : 00000000;
+51c8 : 00000000;
+51c9 : 00000000;
+51ca : 00000000;
+51cb : 00000000;
+51cc : 00000000;
+51cd : 00000000;
+51ce : 00000000;
+51cf : 00000000;
+51d0 : 00000000;
+51d1 : 00000000;
+51d2 : 00000000;
+51d3 : 00000000;
+51d4 : 00000000;
+51d5 : 00000000;
+51d6 : 00000000;
+51d7 : 00000000;
+51d8 : 00000000;
+51d9 : 00000000;
+51da : 00000000;
+51db : 00000000;
+51dc : 00000000;
+51dd : 00000000;
+51de : 00000000;
+51df : 00000000;
+51e0 : 00000000;
+51e1 : 00000000;
+51e2 : 00000000;
+51e3 : 00000000;
+51e4 : 00000000;
+51e5 : 00000000;
+51e6 : 00000000;
+51e7 : 00000000;
+51e8 : 00000000;
+51e9 : 00000000;
+51ea : 00000000;
+51eb : 00000000;
+51ec : 00000000;
+51ed : 00000000;
+51ee : 00000000;
+51ef : 00000000;
+51f0 : 00000000;
+51f1 : 00000000;
+51f2 : 00000000;
+51f3 : 00000000;
+51f4 : 00000000;
+51f5 : 00000000;
+51f6 : 00000000;
+51f7 : 00000000;
+51f8 : 00000000;
+51f9 : 00000000;
+51fa : 00000000;
+51fb : 00000000;
+51fc : 00000000;
+51fd : 00000000;
+51fe : 00000000;
+51ff : 00000000;
+5200 : 00000000;
+5201 : 00000000;
+5202 : 00000000;
+5203 : 00000000;
+5204 : 00000000;
+5205 : 00000000;
+5206 : 00000000;
+5207 : 00000000;
+5208 : 00000000;
+5209 : 00000000;
+520a : 00000000;
+520b : 00000000;
+520c : 00000000;
+520d : 00000000;
+520e : 00000000;
+520f : 00000000;
+5210 : 00000000;
+5211 : 00000000;
+5212 : 00000000;
+5213 : 00000000;
+5214 : 00000000;
+5215 : 00000000;
+5216 : 00000000;
+5217 : 00000000;
+5218 : 00000000;
+5219 : 00000000;
+521a : 00000000;
+521b : 00000000;
+521c : 00000000;
+521d : 00000000;
+521e : 00000000;
+521f : 00000000;
+5220 : 00000000;
+5221 : 00000000;
+5222 : 00000000;
+5223 : 00000000;
+5224 : 00000000;
+5225 : 00000000;
+5226 : 00000000;
+5227 : 00000000;
+5228 : 00000000;
+5229 : 00000000;
+522a : 00000000;
+522b : 00000000;
+522c : 00000000;
+522d : 00000000;
+522e : 00000000;
+522f : 00000000;
+5230 : 00000000;
+5231 : 00000000;
+5232 : 00000000;
+5233 : 00000000;
+5234 : 00000000;
+5235 : 00000000;
+5236 : 00000000;
+5237 : 00000000;
+5238 : 00000000;
+5239 : 00000000;
+523a : 00000000;
+523b : 00000000;
+523c : 00000000;
+523d : 00000000;
+523e : 00000000;
+523f : 00000000;
+5240 : 00000000;
+5241 : 00000000;
+5242 : 00000000;
+5243 : 00000000;
+5244 : 00000000;
+5245 : 00000000;
+5246 : 00000000;
+5247 : 00000000;
+5248 : 00000000;
+5249 : 00000000;
+524a : 00000000;
+524b : 00000000;
+524c : 00000000;
+524d : 00000000;
+524e : 00000000;
+524f : 00000000;
+5250 : 00000000;
+5251 : 00000000;
+5252 : 00000000;
+5253 : 00000000;
+5254 : 00000000;
+5255 : 00000000;
+5256 : 00000000;
+5257 : 00000000;
+5258 : 00000000;
+5259 : 00000000;
+525a : 00000000;
+525b : 00000000;
+525c : 00000000;
+525d : 00000000;
+525e : 00000000;
+525f : 00000000;
+5260 : 00000000;
+5261 : 00000000;
+5262 : 00000000;
+5263 : 00000000;
+5264 : 00000000;
+5265 : 00000000;
+5266 : 00000000;
+5267 : 00000000;
+5268 : 00000000;
+5269 : 00000000;
+526a : 00000000;
+526b : 00000000;
+526c : 00000000;
+526d : 00000000;
+526e : 00000000;
+526f : 00000000;
+5270 : 00000000;
+5271 : 00000000;
+5272 : 00000000;
+5273 : 00000000;
+5274 : 00000000;
+5275 : 00000000;
+5276 : 00000000;
+5277 : 00000000;
+5278 : 00000000;
+5279 : 00000000;
+527a : 00000000;
+527b : 00000000;
+527c : 00000000;
+527d : 00000000;
+527e : 00000000;
+527f : 00000000;
+5280 : 00000000;
+5281 : 00000000;
+5282 : 00000000;
+5283 : 00000000;
+5284 : 00000000;
+5285 : 00000000;
+5286 : 00000000;
+5287 : 00000000;
+5288 : 00000000;
+5289 : 00000000;
+528a : 00000000;
+528b : 00000000;
+528c : 00000000;
+528d : 00000000;
+528e : 00000000;
+528f : 00000000;
+5290 : 00000000;
+5291 : 00000000;
+5292 : 00000000;
+5293 : 00000000;
+5294 : 00000000;
+5295 : 00000000;
+5296 : 00000000;
+5297 : 00000000;
+5298 : 00000000;
+5299 : 00000000;
+529a : 00000000;
+529b : 00000000;
+529c : 00000000;
+529d : 00000000;
+529e : 00000000;
+529f : 00000000;
+52a0 : 00000000;
+52a1 : 00000000;
+52a2 : 00000000;
+52a3 : 00000000;
+52a4 : 00000000;
+52a5 : 00000000;
+52a6 : 00000000;
+52a7 : 00000000;
+52a8 : 00000000;
+52a9 : 00000000;
+52aa : 00000000;
+52ab : 00000000;
+52ac : 00000000;
+52ad : 00000000;
+52ae : 00000000;
+52af : 00000000;
+52b0 : 00000000;
+52b1 : 00000000;
+52b2 : 00000000;
+52b3 : 00000000;
+52b4 : 00000000;
+52b5 : 00000000;
+52b6 : 00000000;
+52b7 : 00000000;
+52b8 : 00000000;
+52b9 : 00000000;
+52ba : 00000000;
+52bb : 00000000;
+52bc : 00000000;
+52bd : 00000000;
+52be : 00000000;
+52bf : 00000000;
+52c0 : 00000000;
+52c1 : 00000000;
+52c2 : 00000000;
+52c3 : 00000000;
+52c4 : 00000000;
+52c5 : 00000000;
+52c6 : 00000000;
+52c7 : 00000000;
+52c8 : 00000000;
+52c9 : 00000000;
+52ca : 00000000;
+52cb : 00000000;
+52cc : 00000000;
+52cd : 00000000;
+52ce : 00000000;
+52cf : 00000000;
+52d0 : 00000000;
+52d1 : 00000000;
+52d2 : 00000000;
+52d3 : 00000000;
+52d4 : 00000000;
+52d5 : 00000000;
+52d6 : 00000000;
+52d7 : 00000000;
+52d8 : 00000000;
+52d9 : 00000000;
+52da : 00000000;
+52db : 00000000;
+52dc : 00000000;
+52dd : 00000000;
+52de : 00000000;
+52df : 00000000;
+52e0 : 00000000;
+52e1 : 00000000;
+52e2 : 00000000;
+52e3 : 00000000;
+52e4 : 00000000;
+52e5 : 00000000;
+52e6 : 00000000;
+52e7 : 00000000;
+52e8 : 00000000;
+52e9 : 00000000;
+52ea : 00000000;
+52eb : 00000000;
+52ec : 00000000;
+52ed : 00000000;
+52ee : 00000000;
+52ef : 00000000;
+52f0 : 00000000;
+52f1 : 00000000;
+52f2 : 00000000;
+52f3 : 00000000;
+52f4 : 00000000;
+52f5 : 00000000;
+52f6 : 00000000;
+52f7 : 00000000;
+52f8 : 00000000;
+52f9 : 00000000;
+52fa : 00000000;
+52fb : 00000000;
+52fc : 00000000;
+52fd : 00000000;
+52fe : 00000000;
+52ff : 00000000;
+5300 : 00000000;
+5301 : 00000000;
+5302 : 00000000;
+5303 : 00000000;
+5304 : 00000000;
+5305 : 00000000;
+5306 : 00000000;
+5307 : 00000000;
+5308 : 00000000;
+5309 : 00000000;
+530a : 00000000;
+530b : 00000000;
+530c : 00000000;
+530d : 00000000;
+530e : 00000000;
+530f : 00000000;
+5310 : 00000000;
+5311 : 00000000;
+5312 : 00000000;
+5313 : 00000000;
+5314 : 00000000;
+5315 : 00000000;
+5316 : 00000000;
+5317 : 00000000;
+5318 : 00000000;
+5319 : 00000000;
+531a : 00000000;
+531b : 00000000;
+531c : 00000000;
+531d : 00000000;
+531e : 00000000;
+531f : 00000000;
+5320 : 00000000;
+5321 : 00000000;
+5322 : 00000000;
+5323 : 00000000;
+5324 : 00000000;
+5325 : 00000000;
+5326 : 00000000;
+5327 : 00000000;
+5328 : 00000000;
+5329 : 00000000;
+532a : 00000000;
+532b : 00000000;
+532c : 00000000;
+532d : 00000000;
+532e : 00000000;
+532f : 00000000;
+5330 : 00000000;
+5331 : 00000000;
+5332 : 00000000;
+5333 : 00000000;
+5334 : 00000000;
+5335 : 00000000;
+5336 : 00000000;
+5337 : 00000000;
+5338 : 00000000;
+5339 : 00000000;
+533a : 00000000;
+533b : 00000000;
+533c : 00000000;
+533d : 00000000;
+533e : 00000000;
+533f : 00000000;
+5340 : 00000000;
+5341 : 00000000;
+5342 : 00000000;
+5343 : 00000000;
+5344 : 00000000;
+5345 : 00000000;
+5346 : 00000000;
+5347 : 00000000;
+5348 : 00000000;
+5349 : 00000000;
+534a : 00000000;
+534b : 00000000;
+534c : 00000000;
+534d : 00000000;
+534e : 00000000;
+534f : 00000000;
+5350 : 00000000;
+5351 : 00000000;
+5352 : 00000000;
+5353 : 00000000;
+5354 : 00000000;
+5355 : 00000000;
+5356 : 00000000;
+5357 : 00000000;
+5358 : 00000000;
+5359 : 00000000;
+535a : 00000000;
+535b : 00000000;
+535c : 00000000;
+535d : 00000000;
+535e : 00000000;
+535f : 00000000;
+5360 : 00000000;
+5361 : 00000000;
+5362 : 00000000;
+5363 : 00000000;
+5364 : 00000000;
+5365 : 00000000;
+5366 : 00000000;
+5367 : 00000000;
+5368 : 00000000;
+5369 : 00000000;
+536a : 00000000;
+536b : 00000000;
+536c : 00000000;
+536d : 00000000;
+536e : 00000000;
+536f : 00000000;
+5370 : 00000000;
+5371 : 00000000;
+5372 : 00000000;
+5373 : 00000000;
+5374 : 00000000;
+5375 : 00000000;
+5376 : 00000000;
+5377 : 00000000;
+5378 : 00000000;
+5379 : 00000000;
+537a : 00000000;
+537b : 00000000;
+537c : 00000000;
+537d : 00000000;
+537e : 00000000;
+537f : 00000000;
+5380 : 00000000;
+5381 : 00000000;
+5382 : 00000000;
+5383 : 00000000;
+5384 : 00000000;
+5385 : 00000000;
+5386 : 00000000;
+5387 : 00000000;
+5388 : 00000000;
+5389 : 00000000;
+538a : 00000000;
+538b : 00000000;
+538c : 00000000;
+538d : 00000000;
+538e : 00000000;
+538f : 00000000;
+5390 : 00000000;
+5391 : 00000000;
+5392 : 00000000;
+5393 : 00000000;
+5394 : 00000000;
+5395 : 00000000;
+5396 : 00000000;
+5397 : 00000000;
+5398 : 00000000;
+5399 : 00000000;
+539a : 00000000;
+539b : 00000000;
+539c : 00000000;
+539d : 00000000;
+539e : 00000000;
+539f : 00000000;
+53a0 : 00000000;
+53a1 : 00000000;
+53a2 : 00000000;
+53a3 : 00000000;
+53a4 : 00000000;
+53a5 : 00000000;
+53a6 : 00000000;
+53a7 : 00000000;
+53a8 : 00000000;
+53a9 : 00000000;
+53aa : 00000000;
+53ab : 00000000;
+53ac : 00000000;
+53ad : 00000000;
+53ae : 00000000;
+53af : 00000000;
+53b0 : 00000000;
+53b1 : 00000000;
+53b2 : 00000000;
+53b3 : 00000000;
+53b4 : 00000000;
+53b5 : 00000000;
+53b6 : 00000000;
+53b7 : 00000000;
+53b8 : 00000000;
+53b9 : 00000000;
+53ba : 00000000;
+53bb : 00000000;
+53bc : 00000000;
+53bd : 00000000;
+53be : 00000000;
+53bf : 00000000;
+53c0 : 00000000;
+53c1 : 00000000;
+53c2 : 00000000;
+53c3 : 00000000;
+53c4 : 00000000;
+53c5 : 00000000;
+53c6 : 00000000;
+53c7 : 00000000;
+53c8 : 00000000;
+53c9 : 00000000;
+53ca : 00000000;
+53cb : 00000000;
+53cc : 00000000;
+53cd : 00000000;
+53ce : 00000000;
+53cf : 00000000;
+53d0 : 00000000;
+53d1 : 00000000;
+53d2 : 00000000;
+53d3 : 00000000;
+53d4 : 00000000;
+53d5 : 00000000;
+53d6 : 00000000;
+53d7 : 00000000;
+53d8 : 00000000;
+53d9 : 00000000;
+53da : 00000000;
+53db : 00000000;
+53dc : 00000000;
+53dd : 00000000;
+53de : 00000000;
+53df : 00000000;
+53e0 : 00000000;
+53e1 : 00000000;
+53e2 : 00000000;
+53e3 : 00000000;
+53e4 : 00000000;
+53e5 : 00000000;
+53e6 : 00000000;
+53e7 : 00000000;
+53e8 : 00000000;
+53e9 : 00000000;
+53ea : 00000000;
+53eb : 00000000;
+53ec : 00000000;
+53ed : 00000000;
+53ee : 00000000;
+53ef : 00000000;
+53f0 : 00000000;
+53f1 : 00000000;
+53f2 : 00000000;
+53f3 : 00000000;
+53f4 : 00000000;
+53f5 : 00000000;
+53f6 : 00000000;
+53f7 : 00000000;
+53f8 : 00000000;
+53f9 : 00000000;
+53fa : 00000000;
+53fb : 00000000;
+53fc : 00000000;
+53fd : 00000000;
+53fe : 00000000;
+53ff : 00000000;
+5400 : 00000000;
+5401 : 00000000;
+5402 : 00000000;
+5403 : 00000000;
+5404 : 00000000;
+5405 : 00000000;
+5406 : 00000000;
+5407 : 00000000;
+5408 : 00000000;
+5409 : 00000000;
+540a : 00000000;
+540b : 00000000;
+540c : 00000000;
+540d : 00000000;
+540e : 00000000;
+540f : 00000000;
+5410 : 00000000;
+5411 : 00000000;
+5412 : 00000000;
+5413 : 00000000;
+5414 : 00000000;
+5415 : 00000000;
+5416 : 00000000;
+5417 : 00000000;
+5418 : 00000000;
+5419 : 00000000;
+541a : 00000000;
+541b : 00000000;
+541c : 00000000;
+541d : 00000000;
+541e : 00000000;
+541f : 00000000;
+5420 : 00000000;
+5421 : 00000000;
+5422 : 00000000;
+5423 : 00000000;
+5424 : 00000000;
+5425 : 00000000;
+5426 : 00000000;
+5427 : 00000000;
+5428 : 00000000;
+5429 : 00000000;
+542a : 00000000;
+542b : 00000000;
+542c : 00000000;
+542d : 00000000;
+542e : 00000000;
+542f : 00000000;
+5430 : 00000000;
+5431 : 00000000;
+5432 : 00000000;
+5433 : 00000000;
+5434 : 00000000;
+5435 : 00000000;
+5436 : 00000000;
+5437 : 00000000;
+5438 : 00000000;
+5439 : 00000000;
+543a : 00000000;
+543b : 00000000;
+543c : 00000000;
+543d : 00000000;
+543e : 00000000;
+543f : 00000000;
+5440 : 00000000;
+5441 : 00000000;
+5442 : 00000000;
+5443 : 00000000;
+5444 : 00000000;
+5445 : 00000000;
+5446 : 00000000;
+5447 : 00000000;
+5448 : 00000000;
+5449 : 00000000;
+544a : 00000000;
+544b : 00000000;
+544c : 00000000;
+544d : 00000000;
+544e : 00000000;
+544f : 00000000;
+5450 : 00000000;
+5451 : 00000000;
+5452 : 00000000;
+5453 : 00000000;
+5454 : 00000000;
+5455 : 00000000;
+5456 : 00000000;
+5457 : 00000000;
+5458 : 00000000;
+5459 : 00000000;
+545a : 00000000;
+545b : 00000000;
+545c : 00000000;
+545d : 00000000;
+545e : 00000000;
+545f : 00000000;
+5460 : 00000000;
+5461 : 00000000;
+5462 : 00000000;
+5463 : 00000000;
+5464 : 00000000;
+5465 : 00000000;
+5466 : 00000000;
+5467 : 00000000;
+5468 : 00000000;
+5469 : 00000000;
+546a : 00000000;
+546b : 00000000;
+546c : 00000000;
+546d : 00000000;
+546e : 00000000;
+546f : 00000000;
+5470 : 00000000;
+5471 : 00000000;
+5472 : 00000000;
+5473 : 00000000;
+5474 : 00000000;
+5475 : 00000000;
+5476 : 00000000;
+5477 : 00000000;
+5478 : 00000000;
+5479 : 00000000;
+547a : 00000000;
+547b : 00000000;
+547c : 00000000;
+547d : 00000000;
+547e : 00000000;
+547f : 00000000;
+5480 : 00000000;
+5481 : 00000000;
+5482 : 00000000;
+5483 : 00000000;
+5484 : 00000000;
+5485 : 00000000;
+5486 : 00000000;
+5487 : 00000000;
+5488 : 00000000;
+5489 : 00000000;
+548a : 00000000;
+548b : 00000000;
+548c : 00000000;
+548d : 00000000;
+548e : 00000000;
+548f : 00000000;
+5490 : 00000000;
+5491 : 00000000;
+5492 : 00000000;
+5493 : 00000000;
+5494 : 00000000;
+5495 : 00000000;
+5496 : 00000000;
+5497 : 00000000;
+5498 : 00000000;
+5499 : 00000000;
+549a : 00000000;
+549b : 00000000;
+549c : 00000000;
+549d : 00000000;
+549e : 00000000;
+549f : 00000000;
+54a0 : 00000000;
+54a1 : 00000000;
+54a2 : 00000000;
+54a3 : 00000000;
+54a4 : 00000000;
+54a5 : 00000000;
+54a6 : 00000000;
+54a7 : 00000000;
+54a8 : 00000000;
+54a9 : 00000000;
+54aa : 00000000;
+54ab : 00000000;
+54ac : 00000000;
+54ad : 00000000;
+54ae : 00000000;
+54af : 00000000;
+54b0 : 00000000;
+54b1 : 00000000;
+54b2 : 00000000;
+54b3 : 00000000;
+54b4 : 00000000;
+54b5 : 00000000;
+54b6 : 00000000;
+54b7 : 00000000;
+54b8 : 00000000;
+54b9 : 00000000;
+54ba : 00000000;
+54bb : 00000000;
+54bc : 00000000;
+54bd : 00000000;
+54be : 00000000;
+54bf : 00000000;
+54c0 : 00000000;
+54c1 : 00000000;
+54c2 : 00000000;
+54c3 : 00000000;
+54c4 : 00000000;
+54c5 : 00000000;
+54c6 : 00000000;
+54c7 : 00000000;
+54c8 : 00000000;
+54c9 : 00000000;
+54ca : 00000000;
+54cb : 00000000;
+54cc : 00000000;
+54cd : 00000000;
+54ce : 00000000;
+54cf : 00000000;
+54d0 : 00000000;
+54d1 : 00000000;
+54d2 : 00000000;
+54d3 : 00000000;
+54d4 : 00000000;
+54d5 : 00000000;
+54d6 : 00000000;
+54d7 : 00000000;
+54d8 : 00000000;
+54d9 : 00000000;
+54da : 00000000;
+54db : 00000000;
+54dc : 00000000;
+54dd : 00000000;
+54de : 00000000;
+54df : 00000000;
+54e0 : 00000000;
+54e1 : 00000000;
+54e2 : 00000000;
+54e3 : 00000000;
+54e4 : 00000000;
+54e5 : 00000000;
+54e6 : 00000000;
+54e7 : 00000000;
+54e8 : 00000000;
+54e9 : 00000000;
+54ea : 00000000;
+54eb : 00000000;
+54ec : 00000000;
+54ed : 00000000;
+54ee : 00000000;
+54ef : 00000000;
+54f0 : 00000000;
+54f1 : 00000000;
+54f2 : 00000000;
+54f3 : 00000000;
+54f4 : 00000000;
+54f5 : 00000000;
+54f6 : 00000000;
+54f7 : 00000000;
+54f8 : 00000000;
+54f9 : 00000000;
+54fa : 00000000;
+54fb : 00000000;
+54fc : 00000000;
+54fd : 00000000;
+54fe : 00000000;
+54ff : 00000000;
+5500 : 00000000;
+5501 : 00000000;
+5502 : 00000000;
+5503 : 00000000;
+5504 : 00000000;
+5505 : 00000000;
+5506 : 00000000;
+5507 : 00000000;
+5508 : 00000000;
+5509 : 00000000;
+550a : 00000000;
+550b : 00000000;
+550c : 00000000;
+550d : 00000000;
+550e : 00000000;
+550f : 00000000;
+5510 : 00000000;
+5511 : 00000000;
+5512 : 00000000;
+5513 : 00000000;
+5514 : 00000000;
+5515 : 00000000;
+5516 : 00000000;
+5517 : 00000000;
+5518 : 00000000;
+5519 : 00000000;
+551a : 00000000;
+551b : 00000000;
+551c : 00000000;
+551d : 00000000;
+551e : 00000000;
+551f : 00000000;
+5520 : 00000000;
+5521 : 00000000;
+5522 : 00000000;
+5523 : 00000000;
+5524 : 00000000;
+5525 : 00000000;
+5526 : 00000000;
+5527 : 00000000;
+5528 : 00000000;
+5529 : 00000000;
+552a : 00000000;
+552b : 00000000;
+552c : 00000000;
+552d : 00000000;
+552e : 00000000;
+552f : 00000000;
+5530 : 00000000;
+5531 : 00000000;
+5532 : 00000000;
+5533 : 00000000;
+5534 : 00000000;
+5535 : 00000000;
+5536 : 00000000;
+5537 : 00000000;
+5538 : 00000000;
+5539 : 00000000;
+553a : 00000000;
+553b : 00000000;
+553c : 00000000;
+553d : 00000000;
+553e : 00000000;
+553f : 00000000;
+5540 : 00000000;
+5541 : 00000000;
+5542 : 00000000;
+5543 : 00000000;
+5544 : 00000000;
+5545 : 00000000;
+5546 : 00000000;
+5547 : 00000000;
+5548 : 00000000;
+5549 : 00000000;
+554a : 00000000;
+554b : 00000000;
+554c : 00000000;
+554d : 00000000;
+554e : 00000000;
+554f : 00000000;
+5550 : 00000000;
+5551 : 00000000;
+5552 : 00000000;
+5553 : 00000000;
+5554 : 00000000;
+5555 : 00000000;
+5556 : 00000000;
+5557 : 00000000;
+5558 : 00000000;
+5559 : 00000000;
+555a : 00000000;
+555b : 00000000;
+555c : 00000000;
+555d : 00000000;
+555e : 00000000;
+555f : 00000000;
+5560 : 00000000;
+5561 : 00000000;
+5562 : 00000000;
+5563 : 00000000;
+5564 : 00000000;
+5565 : 00000000;
+5566 : 00000000;
+5567 : 00000000;
+5568 : 00000000;
+5569 : 00000000;
+556a : 00000000;
+556b : 00000000;
+556c : 00000000;
+556d : 00000000;
+556e : 00000000;
+556f : 00000000;
+5570 : 00000000;
+5571 : 00000000;
+5572 : 00000000;
+5573 : 00000000;
+5574 : 00000000;
+5575 : 00000000;
+5576 : 00000000;
+5577 : 00000000;
+5578 : 00000000;
+5579 : 00000000;
+557a : 00000000;
+557b : 00000000;
+557c : 00000000;
+557d : 00000000;
+557e : 00000000;
+557f : 00000000;
+5580 : 00000000;
+5581 : 00000000;
+5582 : 00000000;
+5583 : 00000000;
+5584 : 00000000;
+5585 : 00000000;
+5586 : 00000000;
+5587 : 00000000;
+5588 : 00000000;
+5589 : 00000000;
+558a : 00000000;
+558b : 00000000;
+558c : 00000000;
+558d : 00000000;
+558e : 00000000;
+558f : 00000000;
+5590 : 00000000;
+5591 : 00000000;
+5592 : 00000000;
+5593 : 00000000;
+5594 : 00000000;
+5595 : 00000000;
+5596 : 00000000;
+5597 : 00000000;
+5598 : 00000000;
+5599 : 00000000;
+559a : 00000000;
+559b : 00000000;
+559c : 00000000;
+559d : 00000000;
+559e : 00000000;
+559f : 00000000;
+55a0 : 00000000;
+55a1 : 00000000;
+55a2 : 00000000;
+55a3 : 00000000;
+55a4 : 00000000;
+55a5 : 00000000;
+55a6 : 00000000;
+55a7 : 00000000;
+55a8 : 00000000;
+55a9 : 00000000;
+55aa : 00000000;
+55ab : 00000000;
+55ac : 00000000;
+55ad : 00000000;
+55ae : 00000000;
+55af : 00000000;
+55b0 : 00000000;
+55b1 : 00000000;
+55b2 : 00000000;
+55b3 : 00000000;
+55b4 : 00000000;
+55b5 : 00000000;
+55b6 : 00000000;
+55b7 : 00000000;
+55b8 : 00000000;
+55b9 : 00000000;
+55ba : 00000000;
+55bb : 00000000;
+55bc : 00000000;
+55bd : 00000000;
+55be : 00000000;
+55bf : 00000000;
+55c0 : 00000000;
+55c1 : 00000000;
+55c2 : 00000000;
+55c3 : 00000000;
+55c4 : 00000000;
+55c5 : 00000000;
+55c6 : 00000000;
+55c7 : 00000000;
+55c8 : 00000000;
+55c9 : 00000000;
+55ca : 00000000;
+55cb : 00000000;
+55cc : 00000000;
+55cd : 00000000;
+55ce : 00000000;
+55cf : 00000000;
+55d0 : 00000000;
+55d1 : 00000000;
+55d2 : 00000000;
+55d3 : 00000000;
+55d4 : 00000000;
+55d5 : 00000000;
+55d6 : 00000000;
+55d7 : 00000000;
+55d8 : 00000000;
+55d9 : 00000000;
+55da : 00000000;
+55db : 00000000;
+55dc : 00000000;
+55dd : 00000000;
+55de : 00000000;
+55df : 00000000;
+55e0 : 00000000;
+55e1 : 00000000;
+55e2 : 00000000;
+55e3 : 00000000;
+55e4 : 00000000;
+55e5 : 00000000;
+55e6 : 00000000;
+55e7 : 00000000;
+55e8 : 00000000;
+55e9 : 00000000;
+55ea : 00000000;
+55eb : 00000000;
+55ec : 00000000;
+55ed : 00000000;
+55ee : 00000000;
+55ef : 00000000;
+55f0 : 00000000;
+55f1 : 00000000;
+55f2 : 00000000;
+55f3 : 00000000;
+55f4 : 00000000;
+55f5 : 00000000;
+55f6 : 00000000;
+55f7 : 00000000;
+55f8 : 00000000;
+55f9 : 00000000;
+55fa : 00000000;
+55fb : 00000000;
+55fc : 00000000;
+55fd : 00000000;
+55fe : 00000000;
+55ff : 00000000;
+5600 : 00000000;
+5601 : 00000000;
+5602 : 00000000;
+5603 : 00000000;
+5604 : 00000000;
+5605 : 00000000;
+5606 : 00000000;
+5607 : 00000000;
+5608 : 00000000;
+5609 : 00000000;
+560a : 00000000;
+560b : 00000000;
+560c : 00000000;
+560d : 00000000;
+560e : 00000000;
+560f : 00000000;
+5610 : 00000000;
+5611 : 00000000;
+5612 : 00000000;
+5613 : 00000000;
+5614 : 00000000;
+5615 : 00000000;
+5616 : 00000000;
+5617 : 00000000;
+5618 : 00000000;
+5619 : 00000000;
+561a : 00000000;
+561b : 00000000;
+561c : 00000000;
+561d : 00000000;
+561e : 00000000;
+561f : 00000000;
+5620 : 00000000;
+5621 : 00000000;
+5622 : 00000000;
+5623 : 00000000;
+5624 : 00000000;
+5625 : 00000000;
+5626 : 00000000;
+5627 : 00000000;
+5628 : 00000000;
+5629 : 00000000;
+562a : 00000000;
+562b : 00000000;
+562c : 00000000;
+562d : 00000000;
+562e : 00000000;
+562f : 00000000;
+5630 : 00000000;
+5631 : 00000000;
+5632 : 00000000;
+5633 : 00000000;
+5634 : 00000000;
+5635 : 00000000;
+5636 : 00000000;
+5637 : 00000000;
+5638 : 00000000;
+5639 : 00000000;
+563a : 00000000;
+563b : 00000000;
+563c : 00000000;
+563d : 00000000;
+563e : 00000000;
+563f : 00000000;
+5640 : 00000000;
+5641 : 00000000;
+5642 : 00000000;
+5643 : 00000000;
+5644 : 00000000;
+5645 : 00000000;
+5646 : 00000000;
+5647 : 00000000;
+5648 : 00000000;
+5649 : 00000000;
+564a : 00000000;
+564b : 00000000;
+564c : 00000000;
+564d : 00000000;
+564e : 00000000;
+564f : 00000000;
+5650 : 00000000;
+5651 : 00000000;
+5652 : 00000000;
+5653 : 00000000;
+5654 : 00000000;
+5655 : 00000000;
+5656 : 00000000;
+5657 : 00000000;
+5658 : 00000000;
+5659 : 00000000;
+565a : 00000000;
+565b : 00000000;
+565c : 00000000;
+565d : 00000000;
+565e : 00000000;
+565f : 00000000;
+5660 : 00000000;
+5661 : 00000000;
+5662 : 00000000;
+5663 : 00000000;
+5664 : 00000000;
+5665 : 00000000;
+5666 : 00000000;
+5667 : 00000000;
+5668 : 00000000;
+5669 : 00000000;
+566a : 00000000;
+566b : 00000000;
+566c : 00000000;
+566d : 00000000;
+566e : 00000000;
+566f : 00000000;
+5670 : 00000000;
+5671 : 00000000;
+5672 : 00000000;
+5673 : 00000000;
+5674 : 00000000;
+5675 : 00000000;
+5676 : 00000000;
+5677 : 00000000;
+5678 : 00000000;
+5679 : 00000000;
+567a : 00000000;
+567b : 00000000;
+567c : 00000000;
+567d : 00000000;
+567e : 00000000;
+567f : 00000000;
+5680 : 00000000;
+5681 : 00000000;
+5682 : 00000000;
+5683 : 00000000;
+5684 : 00000000;
+5685 : 00000000;
+5686 : 00000000;
+5687 : 00000000;
+5688 : 00000000;
+5689 : 00000000;
+568a : 00000000;
+568b : 00000000;
+568c : 00000000;
+568d : 00000000;
+568e : 00000000;
+568f : 00000000;
+5690 : 00000000;
+5691 : 00000000;
+5692 : 00000000;
+5693 : 00000000;
+5694 : 00000000;
+5695 : 00000000;
+5696 : 00000000;
+5697 : 00000000;
+5698 : 00000000;
+5699 : 00000000;
+569a : 00000000;
+569b : 00000000;
+569c : 00000000;
+569d : 00000000;
+569e : 00000000;
+569f : 00000000;
+56a0 : 00000000;
+56a1 : 00000000;
+56a2 : 00000000;
+56a3 : 00000000;
+56a4 : 00000000;
+56a5 : 00000000;
+56a6 : 00000000;
+56a7 : 00000000;
+56a8 : 00000000;
+56a9 : 00000000;
+56aa : 00000000;
+56ab : 00000000;
+56ac : 00000000;
+56ad : 00000000;
+56ae : 00000000;
+56af : 00000000;
+56b0 : 00000000;
+56b1 : 00000000;
+56b2 : 00000000;
+56b3 : 00000000;
+56b4 : 00000000;
+56b5 : 00000000;
+56b6 : 00000000;
+56b7 : 00000000;
+56b8 : 00000000;
+56b9 : 00000000;
+56ba : 00000000;
+56bb : 00000000;
+56bc : 00000000;
+56bd : 00000000;
+56be : 00000000;
+56bf : 00000000;
+56c0 : 00000000;
+56c1 : 00000000;
+56c2 : 00000000;
+56c3 : 00000000;
+56c4 : 00000000;
+56c5 : 00000000;
+56c6 : 00000000;
+56c7 : 00000000;
+56c8 : 00000000;
+56c9 : 00000000;
+56ca : 00000000;
+56cb : 00000000;
+56cc : 00000000;
+56cd : 00000000;
+56ce : 00000000;
+56cf : 00000000;
+56d0 : 00000000;
+56d1 : 00000000;
+56d2 : 00000000;
+56d3 : 00000000;
+56d4 : 00000000;
+56d5 : 00000000;
+56d6 : 00000000;
+56d7 : 00000000;
+56d8 : 00000000;
+56d9 : 00000000;
+56da : 00000000;
+56db : 00000000;
+56dc : 00000000;
+56dd : 00000000;
+56de : 00000000;
+56df : 00000000;
+56e0 : 00000000;
+56e1 : 00000000;
+56e2 : 00000000;
+56e3 : 00000000;
+56e4 : 00000000;
+56e5 : 00000000;
+56e6 : 00000000;
+56e7 : 00000000;
+56e8 : 00000000;
+56e9 : 00000000;
+56ea : 00000000;
+56eb : 00000000;
+56ec : 00000000;
+56ed : 00000000;
+56ee : 00000000;
+56ef : 00000000;
+56f0 : 00000000;
+56f1 : 00000000;
+56f2 : 00000000;
+56f3 : 00000000;
+56f4 : 00000000;
+56f5 : 00000000;
+56f6 : 00000000;
+56f7 : 00000000;
+56f8 : 00000000;
+56f9 : 00000000;
+56fa : 00000000;
+56fb : 00000000;
+56fc : 00000000;
+56fd : 00000000;
+56fe : 00000000;
+56ff : 00000000;
+5700 : 00000000;
+5701 : 00000000;
+5702 : 00000000;
+5703 : 00000000;
+5704 : 00000000;
+5705 : 00000000;
+5706 : 00000000;
+5707 : 00000000;
+5708 : 00000000;
+5709 : 00000000;
+570a : 00000000;
+570b : 00000000;
+570c : 00000000;
+570d : 00000000;
+570e : 00000000;
+570f : 00000000;
+5710 : 00000000;
+5711 : 00000000;
+5712 : 00000000;
+5713 : 00000000;
+5714 : 00000000;
+5715 : 00000000;
+5716 : 00000000;
+5717 : 00000000;
+5718 : 00000000;
+5719 : 00000000;
+571a : 00000000;
+571b : 00000000;
+571c : 00000000;
+571d : 00000000;
+571e : 00000000;
+571f : 00000000;
+5720 : 00000000;
+5721 : 00000000;
+5722 : 00000000;
+5723 : 00000000;
+5724 : 00000000;
+5725 : 00000000;
+5726 : 00000000;
+5727 : 00000000;
+5728 : 00000000;
+5729 : 00000000;
+572a : 00000000;
+572b : 00000000;
+572c : 00000000;
+572d : 00000000;
+572e : 00000000;
+572f : 00000000;
+5730 : 00000000;
+5731 : 00000000;
+5732 : 00000000;
+5733 : 00000000;
+5734 : 00000000;
+5735 : 00000000;
+5736 : 00000000;
+5737 : 00000000;
+5738 : 00000000;
+5739 : 00000000;
+573a : 00000000;
+573b : 00000000;
+573c : 00000000;
+573d : 00000000;
+573e : 00000000;
+573f : 00000000;
+5740 : 00000000;
+5741 : 00000000;
+5742 : 00000000;
+5743 : 00000000;
+5744 : 00000000;
+5745 : 00000000;
+5746 : 00000000;
+5747 : 00000000;
+5748 : 00000000;
+5749 : 00000000;
+574a : 00000000;
+574b : 00000000;
+574c : 00000000;
+574d : 00000000;
+574e : 00000000;
+574f : 00000000;
+5750 : 00000000;
+5751 : 00000000;
+5752 : 00000000;
+5753 : 00000000;
+5754 : 00000000;
+5755 : 00000000;
+5756 : 00000000;
+5757 : 00000000;
+5758 : 00000000;
+5759 : 00000000;
+575a : 00000000;
+575b : 00000000;
+575c : 00000000;
+575d : 00000000;
+575e : 00000000;
+575f : 00000000;
+5760 : 00000000;
+5761 : 00000000;
+5762 : 00000000;
+5763 : 00000000;
+5764 : 00000000;
+5765 : 00000000;
+5766 : 00000000;
+5767 : 00000000;
+5768 : 00000000;
+5769 : 00000000;
+576a : 00000000;
+576b : 00000000;
+576c : 00000000;
+576d : 00000000;
+576e : 00000000;
+576f : 00000000;
+5770 : 00000000;
+5771 : 00000000;
+5772 : 00000000;
+5773 : 00000000;
+5774 : 00000000;
+5775 : 00000000;
+5776 : 00000000;
+5777 : 00000000;
+5778 : 00000000;
+5779 : 00000000;
+577a : 00000000;
+577b : 00000000;
+577c : 00000000;
+577d : 00000000;
+577e : 00000000;
+577f : 00000000;
+5780 : 00000000;
+5781 : 00000000;
+5782 : 00000000;
+5783 : 00000000;
+5784 : 00000000;
+5785 : 00000000;
+5786 : 00000000;
+5787 : 00000000;
+5788 : 00000000;
+5789 : 00000000;
+578a : 00000000;
+578b : 00000000;
+578c : 00000000;
+578d : 00000000;
+578e : 00000000;
+578f : 00000000;
+5790 : 00000000;
+5791 : 00000000;
+5792 : 00000000;
+5793 : 00000000;
+5794 : 00000000;
+5795 : 00000000;
+5796 : 00000000;
+5797 : 00000000;
+5798 : 00000000;
+5799 : 00000000;
+579a : 00000000;
+579b : 00000000;
+579c : 00000000;
+579d : 00000000;
+579e : 00000000;
+579f : 00000000;
+57a0 : 00000000;
+57a1 : 00000000;
+57a2 : 00000000;
+57a3 : 00000000;
+57a4 : 00000000;
+57a5 : 00000000;
+57a6 : 00000000;
+57a7 : 00000000;
+57a8 : 00000000;
+57a9 : 00000000;
+57aa : 00000000;
+57ab : 00000000;
+57ac : 00000000;
+57ad : 00000000;
+57ae : 00000000;
+57af : 00000000;
+57b0 : 00000000;
+57b1 : 00000000;
+57b2 : 00000000;
+57b3 : 00000000;
+57b4 : 00000000;
+57b5 : 00000000;
+57b6 : 00000000;
+57b7 : 00000000;
+57b8 : 00000000;
+57b9 : 00000000;
+57ba : 00000000;
+57bb : 00000000;
+57bc : 00000000;
+57bd : 00000000;
+57be : 00000000;
+57bf : 00000000;
+57c0 : 00000000;
+57c1 : 00000000;
+57c2 : 00000000;
+57c3 : 00000000;
+57c4 : 00000000;
+57c5 : 00000000;
+57c6 : 00000000;
+57c7 : 00000000;
+57c8 : 00000000;
+57c9 : 00000000;
+57ca : 00000000;
+57cb : 00000000;
+57cc : 00000000;
+57cd : 00000000;
+57ce : 00000000;
+57cf : 00000000;
+57d0 : 00000000;
+57d1 : 00000000;
+57d2 : 00000000;
+57d3 : 00000000;
+57d4 : 00000000;
+57d5 : 00000000;
+57d6 : 00000000;
+57d7 : 00000000;
+57d8 : 00000000;
+57d9 : 00000000;
+57da : 00000000;
+57db : 00000000;
+57dc : 00000000;
+57dd : 00000000;
+57de : 00000000;
+57df : 00000000;
+57e0 : 00000000;
+57e1 : 00000000;
+57e2 : 00000000;
+57e3 : 00000000;
+57e4 : 00000000;
+57e5 : 00000000;
+57e6 : 00000000;
+57e7 : 00000000;
+57e8 : 00000000;
+57e9 : 00000000;
+57ea : 00000000;
+57eb : 00000000;
+57ec : 00000000;
+57ed : 00000000;
+57ee : 00000000;
+57ef : 00000000;
+57f0 : 00000000;
+57f1 : 00000000;
+57f2 : 00000000;
+57f3 : 00000000;
+57f4 : 00000000;
+57f5 : 00000000;
+57f6 : 00000000;
+57f7 : 00000000;
+57f8 : 00000000;
+57f9 : 00000000;
+57fa : 00000000;
+57fb : 00000000;
+57fc : 00000000;
+57fd : 00000000;
+57fe : 00000000;
+57ff : 00000000;
+5800 : 00000000;
+5801 : 00000000;
+5802 : 00000000;
+5803 : 00000000;
+5804 : 00000000;
+5805 : 00000000;
+5806 : 00000000;
+5807 : 00000000;
+5808 : 00000000;
+5809 : 00000000;
+580a : 00000000;
+580b : 00000000;
+580c : 00000000;
+580d : 00000000;
+580e : 00000000;
+580f : 00000000;
+5810 : 00000000;
+5811 : 00000000;
+5812 : 00000000;
+5813 : 00000000;
+5814 : 00000000;
+5815 : 00000000;
+5816 : 00000000;
+5817 : 00000000;
+5818 : 00000000;
+5819 : 00000000;
+581a : 00000000;
+581b : 00000000;
+581c : 00000000;
+581d : 00000000;
+581e : 00000000;
+581f : 00000000;
+5820 : 00000000;
+5821 : 00000000;
+5822 : 00000000;
+5823 : 00000000;
+5824 : 00000000;
+5825 : 00000000;
+5826 : 00000000;
+5827 : 00000000;
+5828 : 00000000;
+5829 : 00000000;
+582a : 00000000;
+582b : 00000000;
+582c : 00000000;
+582d : 00000000;
+582e : 00000000;
+582f : 00000000;
+5830 : 00000000;
+5831 : 00000000;
+5832 : 00000000;
+5833 : 00000000;
+5834 : 00000000;
+5835 : 00000000;
+5836 : 00000000;
+5837 : 00000000;
+5838 : 00000000;
+5839 : 00000000;
+583a : 00000000;
+583b : 00000000;
+583c : 00000000;
+583d : 00000000;
+583e : 00000000;
+583f : 00000000;
+5840 : 00000000;
+5841 : 00000000;
+5842 : 00000000;
+5843 : 00000000;
+5844 : 00000000;
+5845 : 00000000;
+5846 : 00000000;
+5847 : 00000000;
+5848 : 00000000;
+5849 : 00000000;
+584a : 00000000;
+584b : 00000000;
+584c : 00000000;
+584d : 00000000;
+584e : 00000000;
+584f : 00000000;
+5850 : 00000000;
+5851 : 00000000;
+5852 : 00000000;
+5853 : 00000000;
+5854 : 00000000;
+5855 : 00000000;
+5856 : 00000000;
+5857 : 00000000;
+5858 : 00000000;
+5859 : 00000000;
+585a : 00000000;
+585b : 00000000;
+585c : 00000000;
+585d : 00000000;
+585e : 00000000;
+585f : 00000000;
+5860 : 00000000;
+5861 : 00000000;
+5862 : 00000000;
+5863 : 00000000;
+5864 : 00000000;
+5865 : 00000000;
+5866 : 00000000;
+5867 : 00000000;
+5868 : 00000000;
+5869 : 00000000;
+586a : 00000000;
+586b : 00000000;
+586c : 00000000;
+586d : 00000000;
+586e : 00000000;
+586f : 00000000;
+5870 : 00000000;
+5871 : 00000000;
+5872 : 00000000;
+5873 : 00000000;
+5874 : 00000000;
+5875 : 00000000;
+5876 : 00000000;
+5877 : 00000000;
+5878 : 00000000;
+5879 : 00000000;
+587a : 00000000;
+587b : 00000000;
+587c : 00000000;
+587d : 00000000;
+587e : 00000000;
+587f : 00000000;
+5880 : 00000000;
+5881 : 00000000;
+5882 : 00000000;
+5883 : 00000000;
+5884 : 00000000;
+5885 : 00000000;
+5886 : 00000000;
+5887 : 00000000;
+5888 : 00000000;
+5889 : 00000000;
+588a : 00000000;
+588b : 00000000;
+588c : 00000000;
+588d : 00000000;
+588e : 00000000;
+588f : 00000000;
+5890 : 00000000;
+5891 : 00000000;
+5892 : 00000000;
+5893 : 00000000;
+5894 : 00000000;
+5895 : 00000000;
+5896 : 00000000;
+5897 : 00000000;
+5898 : 00000000;
+5899 : 00000000;
+589a : 00000000;
+589b : 00000000;
+589c : 00000000;
+589d : 00000000;
+589e : 00000000;
+589f : 00000000;
+58a0 : 00000000;
+58a1 : 00000000;
+58a2 : 00000000;
+58a3 : 00000000;
+58a4 : 00000000;
+58a5 : 00000000;
+58a6 : 00000000;
+58a7 : 00000000;
+58a8 : 00000000;
+58a9 : 00000000;
+58aa : 00000000;
+58ab : 00000000;
+58ac : 00000000;
+58ad : 00000000;
+58ae : 00000000;
+58af : 00000000;
+58b0 : 00000000;
+58b1 : 00000000;
+58b2 : 00000000;
+58b3 : 00000000;
+58b4 : 00000000;
+58b5 : 00000000;
+58b6 : 00000000;
+58b7 : 00000000;
+58b8 : 00000000;
+58b9 : 00000000;
+58ba : 00000000;
+58bb : 00000000;
+58bc : 00000000;
+58bd : 00000000;
+58be : 00000000;
+58bf : 00000000;
+58c0 : 00000000;
+58c1 : 00000000;
+58c2 : 00000000;
+58c3 : 00000000;
+58c4 : 00000000;
+58c5 : 00000000;
+58c6 : 00000000;
+58c7 : 00000000;
+58c8 : 00000000;
+58c9 : 00000000;
+58ca : 00000000;
+58cb : 00000000;
+58cc : 00000000;
+58cd : 00000000;
+58ce : 00000000;
+58cf : 00000000;
+58d0 : 00000000;
+58d1 : 00000000;
+58d2 : 00000000;
+58d3 : 00000000;
+58d4 : 00000000;
+58d5 : 00000000;
+58d6 : 00000000;
+58d7 : 00000000;
+58d8 : 00000000;
+58d9 : 00000000;
+58da : 00000000;
+58db : 00000000;
+58dc : 00000000;
+58dd : 00000000;
+58de : 00000000;
+58df : 00000000;
+58e0 : 00000000;
+58e1 : 00000000;
+58e2 : 00000000;
+58e3 : 00000000;
+58e4 : 00000000;
+58e5 : 00000000;
+58e6 : 00000000;
+58e7 : 00000000;
+58e8 : 00000000;
+58e9 : 00000000;
+58ea : 00000000;
+58eb : 00000000;
+58ec : 00000000;
+58ed : 00000000;
+58ee : 00000000;
+58ef : 00000000;
+58f0 : 00000000;
+58f1 : 00000000;
+58f2 : 00000000;
+58f3 : 00000000;
+58f4 : 00000000;
+58f5 : 00000000;
+58f6 : 00000000;
+58f7 : 00000000;
+58f8 : 00000000;
+58f9 : 00000000;
+58fa : 00000000;
+58fb : 00000000;
+58fc : 00000000;
+58fd : 00000000;
+58fe : 00000000;
+58ff : 00000000;
+5900 : 00000000;
+5901 : 00000000;
+5902 : 00000000;
+5903 : 00000000;
+5904 : 00000000;
+5905 : 00000000;
+5906 : 00000000;
+5907 : 00000000;
+5908 : 00000000;
+5909 : 00000000;
+590a : 00000000;
+590b : 00000000;
+590c : 00000000;
+590d : 00000000;
+590e : 00000000;
+590f : 00000000;
+5910 : 00000000;
+5911 : 00000000;
+5912 : 00000000;
+5913 : 00000000;
+5914 : 00000000;
+5915 : 00000000;
+5916 : 00000000;
+5917 : 00000000;
+5918 : 00000000;
+5919 : 00000000;
+591a : 00000000;
+591b : 00000000;
+591c : 00000000;
+591d : 00000000;
+591e : 00000000;
+591f : 00000000;
+5920 : 00000000;
+5921 : 00000000;
+5922 : 00000000;
+5923 : 00000000;
+5924 : 00000000;
+5925 : 00000000;
+5926 : 00000000;
+5927 : 00000000;
+5928 : 00000000;
+5929 : 00000000;
+592a : 00000000;
+592b : 00000000;
+592c : 00000000;
+592d : 00000000;
+592e : 00000000;
+592f : 00000000;
+5930 : 00000000;
+5931 : 00000000;
+5932 : 00000000;
+5933 : 00000000;
+5934 : 00000000;
+5935 : 00000000;
+5936 : 00000000;
+5937 : 00000000;
+5938 : 00000000;
+5939 : 00000000;
+593a : 00000000;
+593b : 00000000;
+593c : 00000000;
+593d : 00000000;
+593e : 00000000;
+593f : 00000000;
+5940 : 00000000;
+5941 : 00000000;
+5942 : 00000000;
+5943 : 00000000;
+5944 : 00000000;
+5945 : 00000000;
+5946 : 00000000;
+5947 : 00000000;
+5948 : 00000000;
+5949 : 00000000;
+594a : 00000000;
+594b : 00000000;
+594c : 00000000;
+594d : 00000000;
+594e : 00000000;
+594f : 00000000;
+5950 : 00000000;
+5951 : 00000000;
+5952 : 00000000;
+5953 : 00000000;
+5954 : 00000000;
+5955 : 00000000;
+5956 : 00000000;
+5957 : 00000000;
+5958 : 00000000;
+5959 : 00000000;
+595a : 00000000;
+595b : 00000000;
+595c : 00000000;
+595d : 00000000;
+595e : 00000000;
+595f : 00000000;
+5960 : 00000000;
+5961 : 00000000;
+5962 : 00000000;
+5963 : 00000000;
+5964 : 00000000;
+5965 : 00000000;
+5966 : 00000000;
+5967 : 00000000;
+5968 : 00000000;
+5969 : 00000000;
+596a : 00000000;
+596b : 00000000;
+596c : 00000000;
+596d : 00000000;
+596e : 00000000;
+596f : 00000000;
+5970 : 00000000;
+5971 : 00000000;
+5972 : 00000000;
+5973 : 00000000;
+5974 : 00000000;
+5975 : 00000000;
+5976 : 00000000;
+5977 : 00000000;
+5978 : 00000000;
+5979 : 00000000;
+597a : 00000000;
+597b : 00000000;
+597c : 00000000;
+597d : 00000000;
+597e : 00000000;
+597f : 00000000;
+5980 : 00000000;
+5981 : 00000000;
+5982 : 00000000;
+5983 : 00000000;
+5984 : 00000000;
+5985 : 00000000;
+5986 : 00000000;
+5987 : 00000000;
+5988 : 00000000;
+5989 : 00000000;
+598a : 00000000;
+598b : 00000000;
+598c : 00000000;
+598d : 00000000;
+598e : 00000000;
+598f : 00000000;
+5990 : 00000000;
+5991 : 00000000;
+5992 : 00000000;
+5993 : 00000000;
+5994 : 00000000;
+5995 : 00000000;
+5996 : 00000000;
+5997 : 00000000;
+5998 : 00000000;
+5999 : 00000000;
+599a : 00000000;
+599b : 00000000;
+599c : 00000000;
+599d : 00000000;
+599e : 00000000;
+599f : 00000000;
+59a0 : 00000000;
+59a1 : 00000000;
+59a2 : 00000000;
+59a3 : 00000000;
+59a4 : 00000000;
+59a5 : 00000000;
+59a6 : 00000000;
+59a7 : 00000000;
+59a8 : 00000000;
+59a9 : 00000000;
+59aa : 00000000;
+59ab : 00000000;
+59ac : 00000000;
+59ad : 00000000;
+59ae : 00000000;
+59af : 00000000;
+59b0 : 00000000;
+59b1 : 00000000;
+59b2 : 00000000;
+59b3 : 00000000;
+59b4 : 00000000;
+59b5 : 00000000;
+59b6 : 00000000;
+59b7 : 00000000;
+59b8 : 00000000;
+59b9 : 00000000;
+59ba : 00000000;
+59bb : 00000000;
+59bc : 00000000;
+59bd : 00000000;
+59be : 00000000;
+59bf : 00000000;
+59c0 : 00000000;
+59c1 : 00000000;
+59c2 : 00000000;
+59c3 : 00000000;
+59c4 : 00000000;
+59c5 : 00000000;
+59c6 : 00000000;
+59c7 : 00000000;
+59c8 : 00000000;
+59c9 : 00000000;
+59ca : 00000000;
+59cb : 00000000;
+59cc : 00000000;
+59cd : 00000000;
+59ce : 00000000;
+59cf : 00000000;
+59d0 : 00000000;
+59d1 : 00000000;
+59d2 : 00000000;
+59d3 : 00000000;
+59d4 : 00000000;
+59d5 : 00000000;
+59d6 : 00000000;
+59d7 : 00000000;
+59d8 : 00000000;
+59d9 : 00000000;
+59da : 00000000;
+59db : 00000000;
+59dc : 00000000;
+59dd : 00000000;
+59de : 00000000;
+59df : 00000000;
+59e0 : 00000000;
+59e1 : 00000000;
+59e2 : 00000000;
+59e3 : 00000000;
+59e4 : 00000000;
+59e5 : 00000000;
+59e6 : 00000000;
+59e7 : 00000000;
+59e8 : 00000000;
+59e9 : 00000000;
+59ea : 00000000;
+59eb : 00000000;
+59ec : 00000000;
+59ed : 00000000;
+59ee : 00000000;
+59ef : 00000000;
+59f0 : 00000000;
+59f1 : 00000000;
+59f2 : 00000000;
+59f3 : 00000000;
+59f4 : 00000000;
+59f5 : 00000000;
+59f6 : 00000000;
+59f7 : 00000000;
+59f8 : 00000000;
+59f9 : 00000000;
+59fa : 00000000;
+59fb : 00000000;
+59fc : 00000000;
+59fd : 00000000;
+59fe : 00000000;
+59ff : 00000000;
+5a00 : 00000000;
+5a01 : 00000000;
+5a02 : 00000000;
+5a03 : 00000000;
+5a04 : 00000000;
+5a05 : 00000000;
+5a06 : 00000000;
+5a07 : 00000000;
+5a08 : 00000000;
+5a09 : 00000000;
+5a0a : 00000000;
+5a0b : 00000000;
+5a0c : 00000000;
+5a0d : 00000000;
+5a0e : 00000000;
+5a0f : 00000000;
+5a10 : 00000000;
+5a11 : 00000000;
+5a12 : 00000000;
+5a13 : 00000000;
+5a14 : 00000000;
+5a15 : 00000000;
+5a16 : 00000000;
+5a17 : 00000000;
+5a18 : 00000000;
+5a19 : 00000000;
+5a1a : 00000000;
+5a1b : 00000000;
+5a1c : 00000000;
+5a1d : 00000000;
+5a1e : 00000000;
+5a1f : 00000000;
+5a20 : 00000000;
+5a21 : 00000000;
+5a22 : 00000000;
+5a23 : 00000000;
+5a24 : 00000000;
+5a25 : 00000000;
+5a26 : 00000000;
+5a27 : 00000000;
+5a28 : 00000000;
+5a29 : 00000000;
+5a2a : 00000000;
+5a2b : 00000000;
+5a2c : 00000000;
+5a2d : 00000000;
+5a2e : 00000000;
+5a2f : 00000000;
+5a30 : 00000000;
+5a31 : 00000000;
+5a32 : 00000000;
+5a33 : 00000000;
+5a34 : 00000000;
+5a35 : 00000000;
+5a36 : 00000000;
+5a37 : 00000000;
+5a38 : 00000000;
+5a39 : 00000000;
+5a3a : 00000000;
+5a3b : 00000000;
+5a3c : 00000000;
+5a3d : 00000000;
+5a3e : 00000000;
+5a3f : 00000000;
+5a40 : 00000000;
+5a41 : 00000000;
+5a42 : 00000000;
+5a43 : 00000000;
+5a44 : 00000000;
+5a45 : 00000000;
+5a46 : 00000000;
+5a47 : 00000000;
+5a48 : 00000000;
+5a49 : 00000000;
+5a4a : 00000000;
+5a4b : 00000000;
+5a4c : 00000000;
+5a4d : 00000000;
+5a4e : 00000000;
+5a4f : 00000000;
+5a50 : 00000000;
+5a51 : 00000000;
+5a52 : 00000000;
+5a53 : 00000000;
+5a54 : 00000000;
+5a55 : 00000000;
+5a56 : 00000000;
+5a57 : 00000000;
+5a58 : 00000000;
+5a59 : 00000000;
+5a5a : 00000000;
+5a5b : 00000000;
+5a5c : 00000000;
+5a5d : 00000000;
+5a5e : 00000000;
+5a5f : 00000000;
+5a60 : 00000000;
+5a61 : 00000000;
+5a62 : 00000000;
+5a63 : 00000000;
+5a64 : 00000000;
+5a65 : 00000000;
+5a66 : 00000000;
+5a67 : 00000000;
+5a68 : 00000000;
+5a69 : 00000000;
+5a6a : 00000000;
+5a6b : 00000000;
+5a6c : 00000000;
+5a6d : 00000000;
+5a6e : 00000000;
+5a6f : 00000000;
+5a70 : 00000000;
+5a71 : 00000000;
+5a72 : 00000000;
+5a73 : 00000000;
+5a74 : 00000000;
+5a75 : 00000000;
+5a76 : 00000000;
+5a77 : 00000000;
+5a78 : 00000000;
+5a79 : 00000000;
+5a7a : 00000000;
+5a7b : 00000000;
+5a7c : 00000000;
+5a7d : 00000000;
+5a7e : 00000000;
+5a7f : 00000000;
+5a80 : 00000000;
+5a81 : 00000000;
+5a82 : 00000000;
+5a83 : 00000000;
+5a84 : 00000000;
+5a85 : 00000000;
+5a86 : 00000000;
+5a87 : 00000000;
+5a88 : 00000000;
+5a89 : 00000000;
+5a8a : 00000000;
+5a8b : 00000000;
+5a8c : 00000000;
+5a8d : 00000000;
+5a8e : 00000000;
+5a8f : 00000000;
+5a90 : 00000000;
+5a91 : 00000000;
+5a92 : 00000000;
+5a93 : 00000000;
+5a94 : 00000000;
+5a95 : 00000000;
+5a96 : 00000000;
+5a97 : 00000000;
+5a98 : 00000000;
+5a99 : 00000000;
+5a9a : 00000000;
+5a9b : 00000000;
+5a9c : 00000000;
+5a9d : 00000000;
+5a9e : 00000000;
+5a9f : 00000000;
+5aa0 : 00000000;
+5aa1 : 00000000;
+5aa2 : 00000000;
+5aa3 : 00000000;
+5aa4 : 00000000;
+5aa5 : 00000000;
+5aa6 : 00000000;
+5aa7 : 00000000;
+5aa8 : 00000000;
+5aa9 : 00000000;
+5aaa : 00000000;
+5aab : 00000000;
+5aac : 00000000;
+5aad : 00000000;
+5aae : 00000000;
+5aaf : 00000000;
+5ab0 : 00000000;
+5ab1 : 00000000;
+5ab2 : 00000000;
+5ab3 : 00000000;
+5ab4 : 00000000;
+5ab5 : 00000000;
+5ab6 : 00000000;
+5ab7 : 00000000;
+5ab8 : 00000000;
+5ab9 : 00000000;
+5aba : 00000000;
+5abb : 00000000;
+5abc : 00000000;
+5abd : 00000000;
+5abe : 00000000;
+5abf : 00000000;
+5ac0 : 00000000;
+5ac1 : 00000000;
+5ac2 : 00000000;
+5ac3 : 00000000;
+5ac4 : 00000000;
+5ac5 : 00000000;
+5ac6 : 00000000;
+5ac7 : 00000000;
+5ac8 : 00000000;
+5ac9 : 00000000;
+5aca : 00000000;
+5acb : 00000000;
+5acc : 00000000;
+5acd : 00000000;
+5ace : 00000000;
+5acf : 00000000;
+5ad0 : 00000000;
+5ad1 : 00000000;
+5ad2 : 00000000;
+5ad3 : 00000000;
+5ad4 : 00000000;
+5ad5 : 00000000;
+5ad6 : 00000000;
+5ad7 : 00000000;
+5ad8 : 00000000;
+5ad9 : 00000000;
+5ada : 00000000;
+5adb : 00000000;
+5adc : 00000000;
+5add : 00000000;
+5ade : 00000000;
+5adf : 00000000;
+5ae0 : 00000000;
+5ae1 : 00000000;
+5ae2 : 00000000;
+5ae3 : 00000000;
+5ae4 : 00000000;
+5ae5 : 00000000;
+5ae6 : 00000000;
+5ae7 : 00000000;
+5ae8 : 00000000;
+5ae9 : 00000000;
+5aea : 00000000;
+5aeb : 00000000;
+5aec : 00000000;
+5aed : 00000000;
+5aee : 00000000;
+5aef : 00000000;
+5af0 : 00000000;
+5af1 : 00000000;
+5af2 : 00000000;
+5af3 : 00000000;
+5af4 : 00000000;
+5af5 : 00000000;
+5af6 : 00000000;
+5af7 : 00000000;
+5af8 : 00000000;
+5af9 : 00000000;
+5afa : 00000000;
+5afb : 00000000;
+5afc : 00000000;
+5afd : 00000000;
+5afe : 00000000;
+5aff : 00000000;
+5b00 : 00000000;
+5b01 : 00000000;
+5b02 : 00000000;
+5b03 : 00000000;
+5b04 : 00000000;
+5b05 : 00000000;
+5b06 : 00000000;
+5b07 : 00000000;
+5b08 : 00000000;
+5b09 : 00000000;
+5b0a : 00000000;
+5b0b : 00000000;
+5b0c : 00000000;
+5b0d : 00000000;
+5b0e : 00000000;
+5b0f : 00000000;
+5b10 : 00000000;
+5b11 : 00000000;
+5b12 : 00000000;
+5b13 : 00000000;
+5b14 : 00000000;
+5b15 : 00000000;
+5b16 : 00000000;
+5b17 : 00000000;
+5b18 : 00000000;
+5b19 : 00000000;
+5b1a : 00000000;
+5b1b : 00000000;
+5b1c : 00000000;
+5b1d : 00000000;
+5b1e : 00000000;
+5b1f : 00000000;
+5b20 : 00000000;
+5b21 : 00000000;
+5b22 : 00000000;
+5b23 : 00000000;
+5b24 : 00000000;
+5b25 : 00000000;
+5b26 : 00000000;
+5b27 : 00000000;
+5b28 : 00000000;
+5b29 : 00000000;
+5b2a : 00000000;
+5b2b : 00000000;
+5b2c : 00000000;
+5b2d : 00000000;
+5b2e : 00000000;
+5b2f : 00000000;
+5b30 : 00000000;
+5b31 : 00000000;
+5b32 : 00000000;
+5b33 : 00000000;
+5b34 : 00000000;
+5b35 : 00000000;
+5b36 : 00000000;
+5b37 : 00000000;
+5b38 : 00000000;
+5b39 : 00000000;
+5b3a : 00000000;
+5b3b : 00000000;
+5b3c : 00000000;
+5b3d : 00000000;
+5b3e : 00000000;
+5b3f : 00000000;
+5b40 : 00000000;
+5b41 : 00000000;
+5b42 : 00000000;
+5b43 : 00000000;
+5b44 : 00000000;
+5b45 : 00000000;
+5b46 : 00000000;
+5b47 : 00000000;
+5b48 : 00000000;
+5b49 : 00000000;
+5b4a : 00000000;
+5b4b : 00000000;
+5b4c : 00000000;
+5b4d : 00000000;
+5b4e : 00000000;
+5b4f : 00000000;
+5b50 : 00000000;
+5b51 : 00000000;
+5b52 : 00000000;
+5b53 : 00000000;
+5b54 : 00000000;
+5b55 : 00000000;
+5b56 : 00000000;
+5b57 : 00000000;
+5b58 : 00000000;
+5b59 : 00000000;
+5b5a : 00000000;
+5b5b : 00000000;
+5b5c : 00000000;
+5b5d : 00000000;
+5b5e : 00000000;
+5b5f : 00000000;
+5b60 : 00000000;
+5b61 : 00000000;
+5b62 : 00000000;
+5b63 : 00000000;
+5b64 : 00000000;
+5b65 : 00000000;
+5b66 : 00000000;
+5b67 : 00000000;
+5b68 : 00000000;
+5b69 : 00000000;
+5b6a : 00000000;
+5b6b : 00000000;
+5b6c : 00000000;
+5b6d : 00000000;
+5b6e : 00000000;
+5b6f : 00000000;
+5b70 : 00000000;
+5b71 : 00000000;
+5b72 : 00000000;
+5b73 : 00000000;
+5b74 : 00000000;
+5b75 : 00000000;
+5b76 : 00000000;
+5b77 : 00000000;
+5b78 : 00000000;
+5b79 : 00000000;
+5b7a : 00000000;
+5b7b : 00000000;
+5b7c : 00000000;
+5b7d : 00000000;
+5b7e : 00000000;
+5b7f : 00000000;
+5b80 : 00000000;
+5b81 : 00000000;
+5b82 : 00000000;
+5b83 : 00000000;
+5b84 : 00000000;
+5b85 : 00000000;
+5b86 : 00000000;
+5b87 : 00000000;
+5b88 : 00000000;
+5b89 : 00000000;
+5b8a : 00000000;
+5b8b : 00000000;
+5b8c : 00000000;
+5b8d : 00000000;
+5b8e : 00000000;
+5b8f : 00000000;
+5b90 : 00000000;
+5b91 : 00000000;
+5b92 : 00000000;
+5b93 : 00000000;
+5b94 : 00000000;
+5b95 : 00000000;
+5b96 : 00000000;
+5b97 : 00000000;
+5b98 : 00000000;
+5b99 : 00000000;
+5b9a : 00000000;
+5b9b : 00000000;
+5b9c : 00000000;
+5b9d : 00000000;
+5b9e : 00000000;
+5b9f : 00000000;
+5ba0 : 00000000;
+5ba1 : 00000000;
+5ba2 : 00000000;
+5ba3 : 00000000;
+5ba4 : 00000000;
+5ba5 : 00000000;
+5ba6 : 00000000;
+5ba7 : 00000000;
+5ba8 : 00000000;
+5ba9 : 00000000;
+5baa : 00000000;
+5bab : 00000000;
+5bac : 00000000;
+5bad : 00000000;
+5bae : 00000000;
+5baf : 00000000;
+5bb0 : 00000000;
+5bb1 : 00000000;
+5bb2 : 00000000;
+5bb3 : 00000000;
+5bb4 : 00000000;
+5bb5 : 00000000;
+5bb6 : 00000000;
+5bb7 : 00000000;
+5bb8 : 00000000;
+5bb9 : 00000000;
+5bba : 00000000;
+5bbb : 00000000;
+5bbc : 00000000;
+5bbd : 00000000;
+5bbe : 00000000;
+5bbf : 00000000;
+5bc0 : 00000000;
+5bc1 : 00000000;
+5bc2 : 00000000;
+5bc3 : 00000000;
+5bc4 : 00000000;
+5bc5 : 00000000;
+5bc6 : 00000000;
+5bc7 : 00000000;
+5bc8 : 00000000;
+5bc9 : 00000000;
+5bca : 00000000;
+5bcb : 00000000;
+5bcc : 00000000;
+5bcd : 00000000;
+5bce : 00000000;
+5bcf : 00000000;
+5bd0 : 00000000;
+5bd1 : 00000000;
+5bd2 : 00000000;
+5bd3 : 00000000;
+5bd4 : 00000000;
+5bd5 : 00000000;
+5bd6 : 00000000;
+5bd7 : 00000000;
+5bd8 : 00000000;
+5bd9 : 00000000;
+5bda : 00000000;
+5bdb : 00000000;
+5bdc : 00000000;
+5bdd : 00000000;
+5bde : 00000000;
+5bdf : 00000000;
+5be0 : 00000000;
+5be1 : 00000000;
+5be2 : 00000000;
+5be3 : 00000000;
+5be4 : 00000000;
+5be5 : 00000000;
+5be6 : 00000000;
+5be7 : 00000000;
+5be8 : 00000000;
+5be9 : 00000000;
+5bea : 00000000;
+5beb : 00000000;
+5bec : 00000000;
+5bed : 00000000;
+5bee : 00000000;
+5bef : 00000000;
+5bf0 : 00000000;
+5bf1 : 00000000;
+5bf2 : 00000000;
+5bf3 : 00000000;
+5bf4 : 00000000;
+5bf5 : 00000000;
+5bf6 : 00000000;
+5bf7 : 00000000;
+5bf8 : 00000000;
+5bf9 : 00000000;
+5bfa : 00000000;
+5bfb : 00000000;
+5bfc : 00000000;
+5bfd : 00000000;
+5bfe : 00000000;
+5bff : 00000000;
+5c00 : 00000000;
+5c01 : 00000000;
+5c02 : 00000000;
+5c03 : 00000000;
+5c04 : 00000000;
+5c05 : 00000000;
+5c06 : 00000000;
+5c07 : 00000000;
+5c08 : 00000000;
+5c09 : 00000000;
+5c0a : 00000000;
+5c0b : 00000000;
+5c0c : 00000000;
+5c0d : 00000000;
+5c0e : 00000000;
+5c0f : 00000000;
+5c10 : 00000000;
+5c11 : 00000000;
+5c12 : 00000000;
+5c13 : 00000000;
+5c14 : 00000000;
+5c15 : 00000000;
+5c16 : 00000000;
+5c17 : 00000000;
+5c18 : 00000000;
+5c19 : 00000000;
+5c1a : 00000000;
+5c1b : 00000000;
+5c1c : 00000000;
+5c1d : 00000000;
+5c1e : 00000000;
+5c1f : 00000000;
+5c20 : 00000000;
+5c21 : 00000000;
+5c22 : 00000000;
+5c23 : 00000000;
+5c24 : 00000000;
+5c25 : 00000000;
+5c26 : 00000000;
+5c27 : 00000000;
+5c28 : 00000000;
+5c29 : 00000000;
+5c2a : 00000000;
+5c2b : 00000000;
+5c2c : 00000000;
+5c2d : 00000000;
+5c2e : 00000000;
+5c2f : 00000000;
+5c30 : 00000000;
+5c31 : 00000000;
+5c32 : 00000000;
+5c33 : 00000000;
+5c34 : 00000000;
+5c35 : 00000000;
+5c36 : 00000000;
+5c37 : 00000000;
+5c38 : 00000000;
+5c39 : 00000000;
+5c3a : 00000000;
+5c3b : 00000000;
+5c3c : 00000000;
+5c3d : 00000000;
+5c3e : 00000000;
+5c3f : 00000000;
+5c40 : 00000000;
+5c41 : 00000000;
+5c42 : 00000000;
+5c43 : 00000000;
+5c44 : 00000000;
+5c45 : 00000000;
+5c46 : 00000000;
+5c47 : 00000000;
+5c48 : 00000000;
+5c49 : 00000000;
+5c4a : 00000000;
+5c4b : 00000000;
+5c4c : 00000000;
+5c4d : 00000000;
+5c4e : 00000000;
+5c4f : 00000000;
+5c50 : 00000000;
+5c51 : 00000000;
+5c52 : 00000000;
+5c53 : 00000000;
+5c54 : 00000000;
+5c55 : 00000000;
+5c56 : 00000000;
+5c57 : 00000000;
+5c58 : 00000000;
+5c59 : 00000000;
+5c5a : 00000000;
+5c5b : 00000000;
+5c5c : 00000000;
+5c5d : 00000000;
+5c5e : 00000000;
+5c5f : 00000000;
+5c60 : 00000000;
+5c61 : 00000000;
+5c62 : 00000000;
+5c63 : 00000000;
+5c64 : 00000000;
+5c65 : 00000000;
+5c66 : 00000000;
+5c67 : 00000000;
+5c68 : 00000000;
+5c69 : 00000000;
+5c6a : 00000000;
+5c6b : 00000000;
+5c6c : 00000000;
+5c6d : 00000000;
+5c6e : 00000000;
+5c6f : 00000000;
+5c70 : 00000000;
+5c71 : 00000000;
+5c72 : 00000000;
+5c73 : 00000000;
+5c74 : 00000000;
+5c75 : 00000000;
+5c76 : 00000000;
+5c77 : 00000000;
+5c78 : 00000000;
+5c79 : 00000000;
+5c7a : 00000000;
+5c7b : 00000000;
+5c7c : 00000000;
+5c7d : 00000000;
+5c7e : 00000000;
+5c7f : 00000000;
+5c80 : 00000000;
+5c81 : 00000000;
+5c82 : 00000000;
+5c83 : 00000000;
+5c84 : 00000000;
+5c85 : 00000000;
+5c86 : 00000000;
+5c87 : 00000000;
+5c88 : 00000000;
+5c89 : 00000000;
+5c8a : 00000000;
+5c8b : 00000000;
+5c8c : 00000000;
+5c8d : 00000000;
+5c8e : 00000000;
+5c8f : 00000000;
+5c90 : 00000000;
+5c91 : 00000000;
+5c92 : 00000000;
+5c93 : 00000000;
+5c94 : 00000000;
+5c95 : 00000000;
+5c96 : 00000000;
+5c97 : 00000000;
+5c98 : 00000000;
+5c99 : 00000000;
+5c9a : 00000000;
+5c9b : 00000000;
+5c9c : 00000000;
+5c9d : 00000000;
+5c9e : 00000000;
+5c9f : 00000000;
+5ca0 : 00000000;
+5ca1 : 00000000;
+5ca2 : 00000000;
+5ca3 : 00000000;
+5ca4 : 00000000;
+5ca5 : 00000000;
+5ca6 : 00000000;
+5ca7 : 00000000;
+5ca8 : 00000000;
+5ca9 : 00000000;
+5caa : 00000000;
+5cab : 00000000;
+5cac : 00000000;
+5cad : 00000000;
+5cae : 00000000;
+5caf : 00000000;
+5cb0 : 00000000;
+5cb1 : 00000000;
+5cb2 : 00000000;
+5cb3 : 00000000;
+5cb4 : 00000000;
+5cb5 : 00000000;
+5cb6 : 00000000;
+5cb7 : 00000000;
+5cb8 : 00000000;
+5cb9 : 00000000;
+5cba : 00000000;
+5cbb : 00000000;
+5cbc : 00000000;
+5cbd : 00000000;
+5cbe : 00000000;
+5cbf : 00000000;
+5cc0 : 00000000;
+5cc1 : 00000000;
+5cc2 : 00000000;
+5cc3 : 00000000;
+5cc4 : 00000000;
+5cc5 : 00000000;
+5cc6 : 00000000;
+5cc7 : 00000000;
+5cc8 : 00000000;
+5cc9 : 00000000;
+5cca : 00000000;
+5ccb : 00000000;
+5ccc : 00000000;
+5ccd : 00000000;
+5cce : 00000000;
+5ccf : 00000000;
+5cd0 : 00000000;
+5cd1 : 00000000;
+5cd2 : 00000000;
+5cd3 : 00000000;
+5cd4 : 00000000;
+5cd5 : 00000000;
+5cd6 : 00000000;
+5cd7 : 00000000;
+5cd8 : 00000000;
+5cd9 : 00000000;
+5cda : 00000000;
+5cdb : 00000000;
+5cdc : 00000000;
+5cdd : 00000000;
+5cde : 00000000;
+5cdf : 00000000;
+5ce0 : 00000000;
+5ce1 : 00000000;
+5ce2 : 00000000;
+5ce3 : 00000000;
+5ce4 : 00000000;
+5ce5 : 00000000;
+5ce6 : 00000000;
+5ce7 : 00000000;
+5ce8 : 00000000;
+5ce9 : 00000000;
+5cea : 00000000;
+5ceb : 00000000;
+5cec : 00000000;
+5ced : 00000000;
+5cee : 00000000;
+5cef : 00000000;
+5cf0 : 00000000;
+5cf1 : 00000000;
+5cf2 : 00000000;
+5cf3 : 00000000;
+5cf4 : 00000000;
+5cf5 : 00000000;
+5cf6 : 00000000;
+5cf7 : 00000000;
+5cf8 : 00000000;
+5cf9 : 00000000;
+5cfa : 00000000;
+5cfb : 00000000;
+5cfc : 00000000;
+5cfd : 00000000;
+5cfe : 00000000;
+5cff : 00000000;
+5d00 : 00000000;
+5d01 : 00000000;
+5d02 : 00000000;
+5d03 : 00000000;
+5d04 : 00000000;
+5d05 : 00000000;
+5d06 : 00000000;
+5d07 : 00000000;
+5d08 : 00000000;
+5d09 : 00000000;
+5d0a : 00000000;
+5d0b : 00000000;
+5d0c : 00000000;
+5d0d : 00000000;
+5d0e : 00000000;
+5d0f : 00000000;
+5d10 : 00000000;
+5d11 : 00000000;
+5d12 : 00000000;
+5d13 : 00000000;
+5d14 : 00000000;
+5d15 : 00000000;
+5d16 : 00000000;
+5d17 : 00000000;
+5d18 : 00000000;
+5d19 : 00000000;
+5d1a : 00000000;
+5d1b : 00000000;
+5d1c : 00000000;
+5d1d : 00000000;
+5d1e : 00000000;
+5d1f : 00000000;
+5d20 : 00000000;
+5d21 : 00000000;
+5d22 : 00000000;
+5d23 : 00000000;
+5d24 : 00000000;
+5d25 : 00000000;
+5d26 : 00000000;
+5d27 : 00000000;
+5d28 : 00000000;
+5d29 : 00000000;
+5d2a : 00000000;
+5d2b : 00000000;
+5d2c : 00000000;
+5d2d : 00000000;
+5d2e : 00000000;
+5d2f : 00000000;
+5d30 : 00000000;
+5d31 : 00000000;
+5d32 : 00000000;
+5d33 : 00000000;
+5d34 : 00000000;
+5d35 : 00000000;
+5d36 : 00000000;
+5d37 : 00000000;
+5d38 : 00000000;
+5d39 : 00000000;
+5d3a : 00000000;
+5d3b : 00000000;
+5d3c : 00000000;
+5d3d : 00000000;
+5d3e : 00000000;
+5d3f : 00000000;
+5d40 : 00000000;
+5d41 : 00000000;
+5d42 : 00000000;
+5d43 : 00000000;
+5d44 : 00000000;
+5d45 : 00000000;
+5d46 : 00000000;
+5d47 : 00000000;
+5d48 : 00000000;
+5d49 : 00000000;
+5d4a : 00000000;
+5d4b : 00000000;
+5d4c : 00000000;
+5d4d : 00000000;
+5d4e : 00000000;
+5d4f : 00000000;
+5d50 : 00000000;
+5d51 : 00000000;
+5d52 : 00000000;
+5d53 : 00000000;
+5d54 : 00000000;
+5d55 : 00000000;
+5d56 : 00000000;
+5d57 : 00000000;
+5d58 : 00000000;
+5d59 : 00000000;
+5d5a : 00000000;
+5d5b : 00000000;
+5d5c : 00000000;
+5d5d : 00000000;
+5d5e : 00000000;
+5d5f : 00000000;
+5d60 : 00000000;
+5d61 : 00000000;
+5d62 : 00000000;
+5d63 : 00000000;
+5d64 : 00000000;
+5d65 : 00000000;
+5d66 : 00000000;
+5d67 : 00000000;
+5d68 : 00000000;
+5d69 : 00000000;
+5d6a : 00000000;
+5d6b : 00000000;
+5d6c : 00000000;
+5d6d : 00000000;
+5d6e : 00000000;
+5d6f : 00000000;
+5d70 : 00000000;
+5d71 : 00000000;
+5d72 : 00000000;
+5d73 : 00000000;
+5d74 : 00000000;
+5d75 : 00000000;
+5d76 : 00000000;
+5d77 : 00000000;
+5d78 : 00000000;
+5d79 : 00000000;
+5d7a : 00000000;
+5d7b : 00000000;
+5d7c : 00000000;
+5d7d : 00000000;
+5d7e : 00000000;
+5d7f : 00000000;
+5d80 : 00000000;
+5d81 : 00000000;
+5d82 : 00000000;
+5d83 : 00000000;
+5d84 : 00000000;
+5d85 : 00000000;
+5d86 : 00000000;
+5d87 : 00000000;
+5d88 : 00000000;
+5d89 : 00000000;
+5d8a : 00000000;
+5d8b : 00000000;
+5d8c : 00000000;
+5d8d : 00000000;
+5d8e : 00000000;
+5d8f : 00000000;
+5d90 : 00000000;
+5d91 : 00000000;
+5d92 : 00000000;
+5d93 : 00000000;
+5d94 : 00000000;
+5d95 : 00000000;
+5d96 : 00000000;
+5d97 : 00000000;
+5d98 : 00000000;
+5d99 : 00000000;
+5d9a : 00000000;
+5d9b : 00000000;
+5d9c : 00000000;
+5d9d : 00000000;
+5d9e : 00000000;
+5d9f : 00000000;
+5da0 : 00000000;
+5da1 : 00000000;
+5da2 : 00000000;
+5da3 : 00000000;
+5da4 : 00000000;
+5da5 : 00000000;
+5da6 : 00000000;
+5da7 : 00000000;
+5da8 : 00000000;
+5da9 : 00000000;
+5daa : 00000000;
+5dab : 00000000;
+5dac : 00000000;
+5dad : 00000000;
+5dae : 00000000;
+5daf : 00000000;
+5db0 : 00000000;
+5db1 : 00000000;
+5db2 : 00000000;
+5db3 : 00000000;
+5db4 : 00000000;
+5db5 : 00000000;
+5db6 : 00000000;
+5db7 : 00000000;
+5db8 : 00000000;
+5db9 : 00000000;
+5dba : 00000000;
+5dbb : 00000000;
+5dbc : 00000000;
+5dbd : 00000000;
+5dbe : 00000000;
+5dbf : 00000000;
+5dc0 : 00000000;
+5dc1 : 00000000;
+5dc2 : 00000000;
+5dc3 : 00000000;
+5dc4 : 00000000;
+5dc5 : 00000000;
+5dc6 : 00000000;
+5dc7 : 00000000;
+5dc8 : 00000000;
+5dc9 : 00000000;
+5dca : 00000000;
+5dcb : 00000000;
+5dcc : 00000000;
+5dcd : 00000000;
+5dce : 00000000;
+5dcf : 00000000;
+5dd0 : 00000000;
+5dd1 : 00000000;
+5dd2 : 00000000;
+5dd3 : 00000000;
+5dd4 : 00000000;
+5dd5 : 00000000;
+5dd6 : 00000000;
+5dd7 : 00000000;
+5dd8 : 00000000;
+5dd9 : 00000000;
+5dda : 00000000;
+5ddb : 00000000;
+5ddc : 00000000;
+5ddd : 00000000;
+5dde : 00000000;
+5ddf : 00000000;
+5de0 : 00000000;
+5de1 : 00000000;
+5de2 : 00000000;
+5de3 : 00000000;
+5de4 : 00000000;
+5de5 : 00000000;
+5de6 : 00000000;
+5de7 : 00000000;
+5de8 : 00000000;
+5de9 : 00000000;
+5dea : 00000000;
+5deb : 00000000;
+5dec : 00000000;
+5ded : 00000000;
+5dee : 00000000;
+5def : 00000000;
+5df0 : 00000000;
+5df1 : 00000000;
+5df2 : 00000000;
+5df3 : 00000000;
+5df4 : 00000000;
+5df5 : 00000000;
+5df6 : 00000000;
+5df7 : 00000000;
+5df8 : 00000000;
+5df9 : 00000000;
+5dfa : 00000000;
+5dfb : 00000000;
+5dfc : 00000000;
+5dfd : 00000000;
+5dfe : 00000000;
+5dff : 00000000;
+5e00 : 00000000;
+5e01 : 00000000;
+5e02 : 00000000;
+5e03 : 00000000;
+5e04 : 00000000;
+5e05 : 00000000;
+5e06 : 00000000;
+5e07 : 00000000;
+5e08 : 00000000;
+5e09 : 00000000;
+5e0a : 00000000;
+5e0b : 00000000;
+5e0c : 00000000;
+5e0d : 00000000;
+5e0e : 00000000;
+5e0f : 00000000;
+5e10 : 00000000;
+5e11 : 00000000;
+5e12 : 00000000;
+5e13 : 00000000;
+5e14 : 00000000;
+5e15 : 00000000;
+5e16 : 00000000;
+5e17 : 00000000;
+5e18 : 00000000;
+5e19 : 00000000;
+5e1a : 00000000;
+5e1b : 00000000;
+5e1c : 00000000;
+5e1d : 00000000;
+5e1e : 00000000;
+5e1f : 00000000;
+5e20 : 00000000;
+5e21 : 00000000;
+5e22 : 00000000;
+5e23 : 00000000;
+5e24 : 00000000;
+5e25 : 00000000;
+5e26 : 00000000;
+5e27 : 00000000;
+5e28 : 00000000;
+5e29 : 00000000;
+5e2a : 00000000;
+5e2b : 00000000;
+5e2c : 00000000;
+5e2d : 00000000;
+5e2e : 00000000;
+5e2f : 00000000;
+5e30 : 00000000;
+5e31 : 00000000;
+5e32 : 00000000;
+5e33 : 00000000;
+5e34 : 00000000;
+5e35 : 00000000;
+5e36 : 00000000;
+5e37 : 00000000;
+5e38 : 00000000;
+5e39 : 00000000;
+5e3a : 00000000;
+5e3b : 00000000;
+5e3c : 00000000;
+5e3d : 00000000;
+5e3e : 00000000;
+5e3f : 00000000;
+5e40 : 00000000;
+5e41 : 00000000;
+5e42 : 00000000;
+5e43 : 00000000;
+5e44 : 00000000;
+5e45 : 00000000;
+5e46 : 00000000;
+5e47 : 00000000;
+5e48 : 00000000;
+5e49 : 00000000;
+5e4a : 00000000;
+5e4b : 00000000;
+5e4c : 00000000;
+5e4d : 00000000;
+5e4e : 00000000;
+5e4f : 00000000;
+5e50 : 00000000;
+5e51 : 00000000;
+5e52 : 00000000;
+5e53 : 00000000;
+5e54 : 00000000;
+5e55 : 00000000;
+5e56 : 00000000;
+5e57 : 00000000;
+5e58 : 00000000;
+5e59 : 00000000;
+5e5a : 00000000;
+5e5b : 00000000;
+5e5c : 00000000;
+5e5d : 00000000;
+5e5e : 00000000;
+5e5f : 00000000;
+5e60 : 00000000;
+5e61 : 00000000;
+5e62 : 00000000;
+5e63 : 00000000;
+5e64 : 00000000;
+5e65 : 00000000;
+5e66 : 00000000;
+5e67 : 00000000;
+5e68 : 00000000;
+5e69 : 00000000;
+5e6a : 00000000;
+5e6b : 00000000;
+5e6c : 00000000;
+5e6d : 00000000;
+5e6e : 00000000;
+5e6f : 00000000;
+5e70 : 00000000;
+5e71 : 00000000;
+5e72 : 00000000;
+5e73 : 00000000;
+5e74 : 00000000;
+5e75 : 00000000;
+5e76 : 00000000;
+5e77 : 00000000;
+5e78 : 00000000;
+5e79 : 00000000;
+5e7a : 00000000;
+5e7b : 00000000;
+5e7c : 00000000;
+5e7d : 00000000;
+5e7e : 00000000;
+5e7f : 00000000;
+5e80 : 00000000;
+5e81 : 00000000;
+5e82 : 00000000;
+5e83 : 00000000;
+5e84 : 00000000;
+5e85 : 00000000;
+5e86 : 00000000;
+5e87 : 00000000;
+5e88 : 00000000;
+5e89 : 00000000;
+5e8a : 00000000;
+5e8b : 00000000;
+5e8c : 00000000;
+5e8d : 00000000;
+5e8e : 00000000;
+5e8f : 00000000;
+5e90 : 00000000;
+5e91 : 00000000;
+5e92 : 00000000;
+5e93 : 00000000;
+5e94 : 00000000;
+5e95 : 00000000;
+5e96 : 00000000;
+5e97 : 00000000;
+5e98 : 00000000;
+5e99 : 00000000;
+5e9a : 00000000;
+5e9b : 00000000;
+5e9c : 00000000;
+5e9d : 00000000;
+5e9e : 00000000;
+5e9f : 00000000;
+5ea0 : 00000000;
+5ea1 : 00000000;
+5ea2 : 00000000;
+5ea3 : 00000000;
+5ea4 : 00000000;
+5ea5 : 00000000;
+5ea6 : 00000000;
+5ea7 : 00000000;
+5ea8 : 00000000;
+5ea9 : 00000000;
+5eaa : 00000000;
+5eab : 00000000;
+5eac : 00000000;
+5ead : 00000000;
+5eae : 00000000;
+5eaf : 00000000;
+5eb0 : 00000000;
+5eb1 : 00000000;
+5eb2 : 00000000;
+5eb3 : 00000000;
+5eb4 : 00000000;
+5eb5 : 00000000;
+5eb6 : 00000000;
+5eb7 : 00000000;
+5eb8 : 00000000;
+5eb9 : 00000000;
+5eba : 00000000;
+5ebb : 00000000;
+5ebc : 00000000;
+5ebd : 00000000;
+5ebe : 00000000;
+5ebf : 00000000;
+5ec0 : 00000000;
+5ec1 : 00000000;
+5ec2 : 00000000;
+5ec3 : 00000000;
+5ec4 : 00000000;
+5ec5 : 00000000;
+5ec6 : 00000000;
+5ec7 : 00000000;
+5ec8 : 00000000;
+5ec9 : 00000000;
+5eca : 00000000;
+5ecb : 00000000;
+5ecc : 00000000;
+5ecd : 00000000;
+5ece : 00000000;
+5ecf : 00000000;
+5ed0 : 00000000;
+5ed1 : 00000000;
+5ed2 : 00000000;
+5ed3 : 00000000;
+5ed4 : 00000000;
+5ed5 : 00000000;
+5ed6 : 00000000;
+5ed7 : 00000000;
+5ed8 : 00000000;
+5ed9 : 00000000;
+5eda : 00000000;
+5edb : 00000000;
+5edc : 00000000;
+5edd : 00000000;
+5ede : 00000000;
+5edf : 00000000;
+5ee0 : 00000000;
+5ee1 : 00000000;
+5ee2 : 00000000;
+5ee3 : 00000000;
+5ee4 : 00000000;
+5ee5 : 00000000;
+5ee6 : 00000000;
+5ee7 : 00000000;
+5ee8 : 00000000;
+5ee9 : 00000000;
+5eea : 00000000;
+5eeb : 00000000;
+5eec : 00000000;
+5eed : 00000000;
+5eee : 00000000;
+5eef : 00000000;
+5ef0 : 00000000;
+5ef1 : 00000000;
+5ef2 : 00000000;
+5ef3 : 00000000;
+5ef4 : 00000000;
+5ef5 : 00000000;
+5ef6 : 00000000;
+5ef7 : 00000000;
+5ef8 : 00000000;
+5ef9 : 00000000;
+5efa : 00000000;
+5efb : 00000000;
+5efc : 00000000;
+5efd : 00000000;
+5efe : 00000000;
+5eff : 00000000;
+5f00 : 00000000;
+5f01 : 00000000;
+5f02 : 00000000;
+5f03 : 00000000;
+5f04 : 00000000;
+5f05 : 00000000;
+5f06 : 00000000;
+5f07 : 00000000;
+5f08 : 00000000;
+5f09 : 00000000;
+5f0a : 00000000;
+5f0b : 00000000;
+5f0c : 00000000;
+5f0d : 00000000;
+5f0e : 00000000;
+5f0f : 00000000;
+5f10 : 00000000;
+5f11 : 00000000;
+5f12 : 00000000;
+5f13 : 00000000;
+5f14 : 00000000;
+5f15 : 00000000;
+5f16 : 00000000;
+5f17 : 00000000;
+5f18 : 00000000;
+5f19 : 00000000;
+5f1a : 00000000;
+5f1b : 00000000;
+5f1c : 00000000;
+5f1d : 00000000;
+5f1e : 00000000;
+5f1f : 00000000;
+5f20 : 00000000;
+5f21 : 00000000;
+5f22 : 00000000;
+5f23 : 00000000;
+5f24 : 00000000;
+5f25 : 00000000;
+5f26 : 00000000;
+5f27 : 00000000;
+5f28 : 00000000;
+5f29 : 00000000;
+5f2a : 00000000;
+5f2b : 00000000;
+5f2c : 00000000;
+5f2d : 00000000;
+5f2e : 00000000;
+5f2f : 00000000;
+5f30 : 00000000;
+5f31 : 00000000;
+5f32 : 00000000;
+5f33 : 00000000;
+5f34 : 00000000;
+5f35 : 00000000;
+5f36 : 00000000;
+5f37 : 00000000;
+5f38 : 00000000;
+5f39 : 00000000;
+5f3a : 00000000;
+5f3b : 00000000;
+5f3c : 00000000;
+5f3d : 00000000;
+5f3e : 00000000;
+5f3f : 00000000;
+5f40 : 00000000;
+5f41 : 00000000;
+5f42 : 00000000;
+5f43 : 00000000;
+5f44 : 00000000;
+5f45 : 00000000;
+5f46 : 00000000;
+5f47 : 00000000;
+5f48 : 00000000;
+5f49 : 00000000;
+5f4a : 00000000;
+5f4b : 00000000;
+5f4c : 00000000;
+5f4d : 00000000;
+5f4e : 00000000;
+5f4f : 00000000;
+5f50 : 00000000;
+5f51 : 00000000;
+5f52 : 00000000;
+5f53 : 00000000;
+5f54 : 00000000;
+5f55 : 00000000;
+5f56 : 00000000;
+5f57 : 00000000;
+5f58 : 00000000;
+5f59 : 00000000;
+5f5a : 00000000;
+5f5b : 00000000;
+5f5c : 00000000;
+5f5d : 00000000;
+5f5e : 00000000;
+5f5f : 00000000;
+5f60 : 00000000;
+5f61 : 00000000;
+5f62 : 00000000;
+5f63 : 00000000;
+5f64 : 00000000;
+5f65 : 00000000;
+5f66 : 00000000;
+5f67 : 00000000;
+5f68 : 00000000;
+5f69 : 00000000;
+5f6a : 00000000;
+5f6b : 00000000;
+5f6c : 00000000;
+5f6d : 00000000;
+5f6e : 00000000;
+5f6f : 00000000;
+5f70 : 00000000;
+5f71 : 00000000;
+5f72 : 00000000;
+5f73 : 00000000;
+5f74 : 00000000;
+5f75 : 00000000;
+5f76 : 00000000;
+5f77 : 00000000;
+5f78 : 00000000;
+5f79 : 00000000;
+5f7a : 00000000;
+5f7b : 00000000;
+5f7c : 00000000;
+5f7d : 00000000;
+5f7e : 00000000;
+5f7f : 00000000;
+5f80 : 00000000;
+5f81 : 00000000;
+5f82 : 00000000;
+5f83 : 00000000;
+5f84 : 00000000;
+5f85 : 00000000;
+5f86 : 00000000;
+5f87 : 00000000;
+5f88 : 00000000;
+5f89 : 00000000;
+5f8a : 00000000;
+5f8b : 00000000;
+5f8c : 00000000;
+5f8d : 00000000;
+5f8e : 00000000;
+5f8f : 00000000;
+5f90 : 00000000;
+5f91 : 00000000;
+5f92 : 00000000;
+5f93 : 00000000;
+5f94 : 00000000;
+5f95 : 00000000;
+5f96 : 00000000;
+5f97 : 00000000;
+5f98 : 00000000;
+5f99 : 00000000;
+5f9a : 00000000;
+5f9b : 00000000;
+5f9c : 00000000;
+5f9d : 00000000;
+5f9e : 00000000;
+5f9f : 00000000;
+5fa0 : 00000000;
+5fa1 : 00000000;
+5fa2 : 00000000;
+5fa3 : 00000000;
+5fa4 : 00000000;
+5fa5 : 00000000;
+5fa6 : 00000000;
+5fa7 : 00000000;
+5fa8 : 00000000;
+5fa9 : 00000000;
+5faa : 00000000;
+5fab : 00000000;
+5fac : 00000000;
+5fad : 00000000;
+5fae : 00000000;
+5faf : 00000000;
+5fb0 : 00000000;
+5fb1 : 00000000;
+5fb2 : 00000000;
+5fb3 : 00000000;
+5fb4 : 00000000;
+5fb5 : 00000000;
+5fb6 : 00000000;
+5fb7 : 00000000;
+5fb8 : 00000000;
+5fb9 : 00000000;
+5fba : 00000000;
+5fbb : 00000000;
+5fbc : 00000000;
+5fbd : 00000000;
+5fbe : 00000000;
+5fbf : 00000000;
+5fc0 : 00000000;
+5fc1 : 00000000;
+5fc2 : 00000000;
+5fc3 : 00000000;
+5fc4 : 00000000;
+5fc5 : 00000000;
+5fc6 : 00000000;
+5fc7 : 00000000;
+5fc8 : 00000000;
+5fc9 : 00000000;
+5fca : 00000000;
+5fcb : 00000000;
+5fcc : 00000000;
+5fcd : 00000000;
+5fce : 00000000;
+5fcf : 00000000;
+5fd0 : 00000000;
+5fd1 : 00000000;
+5fd2 : 00000000;
+5fd3 : 00000000;
+5fd4 : 00000000;
+5fd5 : 00000000;
+5fd6 : 00000000;
+5fd7 : 00000000;
+5fd8 : 00000000;
+5fd9 : 00000000;
+5fda : 00000000;
+5fdb : 00000000;
+5fdc : 00000000;
+5fdd : 00000000;
+5fde : 00000000;
+5fdf : 00000000;
+5fe0 : 00000000;
+5fe1 : 00000000;
+5fe2 : 00000000;
+5fe3 : 00000000;
+5fe4 : 00000000;
+5fe5 : 00000000;
+5fe6 : 00000000;
+5fe7 : 00000000;
+5fe8 : 00000000;
+5fe9 : 00000000;
+5fea : 00000000;
+5feb : 00000000;
+5fec : 00000000;
+5fed : 00000000;
+5fee : 00000000;
+5fef : 00000000;
+5ff0 : 00000000;
+5ff1 : 00000000;
+5ff2 : 00000000;
+5ff3 : 00000000;
+5ff4 : 00000000;
+5ff5 : 00000000;
+5ff6 : 00000000;
+5ff7 : 00000000;
+5ff8 : 00000000;
+5ff9 : 00000000;
+5ffa : 00000000;
+5ffb : 00000000;
+5ffc : 00000000;
+5ffd : 00000000;
+5ffe : 00000000;
+5fff : 00000000;
+6000 : 00000000;
+6001 : 00000000;
+6002 : 00000000;
+6003 : 00000000;
+6004 : 00000000;
+6005 : 00000000;
+6006 : 00000000;
+6007 : 00000000;
+6008 : 00000000;
+6009 : 00000000;
+600a : 00000000;
+600b : 00000000;
+600c : 00000000;
+600d : 00000000;
+600e : 00000000;
+600f : 00000000;
+6010 : 00000000;
+6011 : 00000000;
+6012 : 00000000;
+6013 : 00000000;
+6014 : 00000000;
+6015 : 00000000;
+6016 : 00000000;
+6017 : 00000000;
+6018 : 00000000;
+6019 : 00000000;
+601a : 00000000;
+601b : 00000000;
+601c : 00000000;
+601d : 00000000;
+601e : 00000000;
+601f : 00000000;
+6020 : 00000000;
+6021 : 00000000;
+6022 : 00000000;
+6023 : 00000000;
+6024 : 00000000;
+6025 : 00000000;
+6026 : 00000000;
+6027 : 00000000;
+6028 : 00000000;
+6029 : 00000000;
+602a : 00000000;
+602b : 00000000;
+602c : 00000000;
+602d : 00000000;
+602e : 00000000;
+602f : 00000000;
+6030 : 00000000;
+6031 : 00000000;
+6032 : 00000000;
+6033 : 00000000;
+6034 : 00000000;
+6035 : 00000000;
+6036 : 00000000;
+6037 : 00000000;
+6038 : 00000000;
+6039 : 00000000;
+603a : 00000000;
+603b : 00000000;
+603c : 00000000;
+603d : 00000000;
+603e : 00000000;
+603f : 00000000;
+6040 : 00000000;
+6041 : 00000000;
+6042 : 00000000;
+6043 : 00000000;
+6044 : 00000000;
+6045 : 00000000;
+6046 : 00000000;
+6047 : 00000000;
+6048 : 00000000;
+6049 : 00000000;
+604a : 00000000;
+604b : 00000000;
+604c : 00000000;
+604d : 00000000;
+604e : 00000000;
+604f : 00000000;
+6050 : 00000000;
+6051 : 00000000;
+6052 : 00000000;
+6053 : 00000000;
+6054 : 00000000;
+6055 : 00000000;
+6056 : 00000000;
+6057 : 00000000;
+6058 : 00000000;
+6059 : 00000000;
+605a : 00000000;
+605b : 00000000;
+605c : 00000000;
+605d : 00000000;
+605e : 00000000;
+605f : 00000000;
+6060 : 00000000;
+6061 : 00000000;
+6062 : 00000000;
+6063 : 00000000;
+6064 : 00000000;
+6065 : 00000000;
+6066 : 00000000;
+6067 : 00000000;
+6068 : 00000000;
+6069 : 00000000;
+606a : 00000000;
+606b : 00000000;
+606c : 00000000;
+606d : 00000000;
+606e : 00000000;
+606f : 00000000;
+6070 : 00000000;
+6071 : 00000000;
+6072 : 00000000;
+6073 : 00000000;
+6074 : 00000000;
+6075 : 00000000;
+6076 : 00000000;
+6077 : 00000000;
+6078 : 00000000;
+6079 : 00000000;
+607a : 00000000;
+607b : 00000000;
+607c : 00000000;
+607d : 00000000;
+607e : 00000000;
+607f : 00000000;
+6080 : 00000000;
+6081 : 00000000;
+6082 : 00000000;
+6083 : 00000000;
+6084 : 00000000;
+6085 : 00000000;
+6086 : 00000000;
+6087 : 00000000;
+6088 : 00000000;
+6089 : 00000000;
+608a : 00000000;
+608b : 00000000;
+608c : 00000000;
+608d : 00000000;
+608e : 00000000;
+608f : 00000000;
+6090 : 00000000;
+6091 : 00000000;
+6092 : 00000000;
+6093 : 00000000;
+6094 : 00000000;
+6095 : 00000000;
+6096 : 00000000;
+6097 : 00000000;
+6098 : 00000000;
+6099 : 00000000;
+609a : 00000000;
+609b : 00000000;
+609c : 00000000;
+609d : 00000000;
+609e : 00000000;
+609f : 00000000;
+60a0 : 00000000;
+60a1 : 00000000;
+60a2 : 00000000;
+60a3 : 00000000;
+60a4 : 00000000;
+60a5 : 00000000;
+60a6 : 00000000;
+60a7 : 00000000;
+60a8 : 00000000;
+60a9 : 00000000;
+60aa : 00000000;
+60ab : 00000000;
+60ac : 00000000;
+60ad : 00000000;
+60ae : 00000000;
+60af : 00000000;
+60b0 : 00000000;
+60b1 : 00000000;
+60b2 : 00000000;
+60b3 : 00000000;
+60b4 : 00000000;
+60b5 : 00000000;
+60b6 : 00000000;
+60b7 : 00000000;
+60b8 : 00000000;
+60b9 : 00000000;
+60ba : 00000000;
+60bb : 00000000;
+60bc : 00000000;
+60bd : 00000000;
+60be : 00000000;
+60bf : 00000000;
+60c0 : 00000000;
+60c1 : 00000000;
+60c2 : 00000000;
+60c3 : 00000000;
+60c4 : 00000000;
+60c5 : 00000000;
+60c6 : 00000000;
+60c7 : 00000000;
+60c8 : 00000000;
+60c9 : 00000000;
+60ca : 00000000;
+60cb : 00000000;
+60cc : 00000000;
+60cd : 00000000;
+60ce : 00000000;
+60cf : 00000000;
+60d0 : 00000000;
+60d1 : 00000000;
+60d2 : 00000000;
+60d3 : 00000000;
+60d4 : 00000000;
+60d5 : 00000000;
+60d6 : 00000000;
+60d7 : 00000000;
+60d8 : 00000000;
+60d9 : 00000000;
+60da : 00000000;
+60db : 00000000;
+60dc : 00000000;
+60dd : 00000000;
+60de : 00000000;
+60df : 00000000;
+60e0 : 00000000;
+60e1 : 00000000;
+60e2 : 00000000;
+60e3 : 00000000;
+60e4 : 00000000;
+60e5 : 00000000;
+60e6 : 00000000;
+60e7 : 00000000;
+60e8 : 00000000;
+60e9 : 00000000;
+60ea : 00000000;
+60eb : 00000000;
+60ec : 00000000;
+60ed : 00000000;
+60ee : 00000000;
+60ef : 00000000;
+60f0 : 00000000;
+60f1 : 00000000;
+60f2 : 00000000;
+60f3 : 00000000;
+60f4 : 00000000;
+60f5 : 00000000;
+60f6 : 00000000;
+60f7 : 00000000;
+60f8 : 00000000;
+60f9 : 00000000;
+60fa : 00000000;
+60fb : 00000000;
+60fc : 00000000;
+60fd : 00000000;
+60fe : 00000000;
+60ff : 00000000;
+6100 : 00000000;
+6101 : 00000000;
+6102 : 00000000;
+6103 : 00000000;
+6104 : 00000000;
+6105 : 00000000;
+6106 : 00000000;
+6107 : 00000000;
+6108 : 00000000;
+6109 : 00000000;
+610a : 00000000;
+610b : 00000000;
+610c : 00000000;
+610d : 00000000;
+610e : 00000000;
+610f : 00000000;
+6110 : 00000000;
+6111 : 00000000;
+6112 : 00000000;
+6113 : 00000000;
+6114 : 00000000;
+6115 : 00000000;
+6116 : 00000000;
+6117 : 00000000;
+6118 : 00000000;
+6119 : 00000000;
+611a : 00000000;
+611b : 00000000;
+611c : 00000000;
+611d : 00000000;
+611e : 00000000;
+611f : 00000000;
+6120 : 00000000;
+6121 : 00000000;
+6122 : 00000000;
+6123 : 00000000;
+6124 : 00000000;
+6125 : 00000000;
+6126 : 00000000;
+6127 : 00000000;
+6128 : 00000000;
+6129 : 00000000;
+612a : 00000000;
+612b : 00000000;
+612c : 00000000;
+612d : 00000000;
+612e : 00000000;
+612f : 00000000;
+6130 : 00000000;
+6131 : 00000000;
+6132 : 00000000;
+6133 : 00000000;
+6134 : 00000000;
+6135 : 00000000;
+6136 : 00000000;
+6137 : 00000000;
+6138 : 00000000;
+6139 : 00000000;
+613a : 00000000;
+613b : 00000000;
+613c : 00000000;
+613d : 00000000;
+613e : 00000000;
+613f : 00000000;
+6140 : 00000000;
+6141 : 00000000;
+6142 : 00000000;
+6143 : 00000000;
+6144 : 00000000;
+6145 : 00000000;
+6146 : 00000000;
+6147 : 00000000;
+6148 : 00000000;
+6149 : 00000000;
+614a : 00000000;
+614b : 00000000;
+614c : 00000000;
+614d : 00000000;
+614e : 00000000;
+614f : 00000000;
+6150 : 00000000;
+6151 : 00000000;
+6152 : 00000000;
+6153 : 00000000;
+6154 : 00000000;
+6155 : 00000000;
+6156 : 00000000;
+6157 : 00000000;
+6158 : 00000000;
+6159 : 00000000;
+615a : 00000000;
+615b : 00000000;
+615c : 00000000;
+615d : 00000000;
+615e : 00000000;
+615f : 00000000;
+6160 : 00000000;
+6161 : 00000000;
+6162 : 00000000;
+6163 : 00000000;
+6164 : 00000000;
+6165 : 00000000;
+6166 : 00000000;
+6167 : 00000000;
+6168 : 00000000;
+6169 : 00000000;
+616a : 00000000;
+616b : 00000000;
+616c : 00000000;
+616d : 00000000;
+616e : 00000000;
+616f : 00000000;
+6170 : 00000000;
+6171 : 00000000;
+6172 : 00000000;
+6173 : 00000000;
+6174 : 00000000;
+6175 : 00000000;
+6176 : 00000000;
+6177 : 00000000;
+6178 : 00000000;
+6179 : 00000000;
+617a : 00000000;
+617b : 00000000;
+617c : 00000000;
+617d : 00000000;
+617e : 00000000;
+617f : 00000000;
+6180 : 00000000;
+6181 : 00000000;
+6182 : 00000000;
+6183 : 00000000;
+6184 : 00000000;
+6185 : 00000000;
+6186 : 00000000;
+6187 : 00000000;
+6188 : 00000000;
+6189 : 00000000;
+618a : 00000000;
+618b : 00000000;
+618c : 00000000;
+618d : 00000000;
+618e : 00000000;
+618f : 00000000;
+6190 : 00000000;
+6191 : 00000000;
+6192 : 00000000;
+6193 : 00000000;
+6194 : 00000000;
+6195 : 00000000;
+6196 : 00000000;
+6197 : 00000000;
+6198 : 00000000;
+6199 : 00000000;
+619a : 00000000;
+619b : 00000000;
+619c : 00000000;
+619d : 00000000;
+619e : 00000000;
+619f : 00000000;
+61a0 : 00000000;
+61a1 : 00000000;
+61a2 : 00000000;
+61a3 : 00000000;
+61a4 : 00000000;
+61a5 : 00000000;
+61a6 : 00000000;
+61a7 : 00000000;
+61a8 : 00000000;
+61a9 : 00000000;
+61aa : 00000000;
+61ab : 00000000;
+61ac : 00000000;
+61ad : 00000000;
+61ae : 00000000;
+61af : 00000000;
+61b0 : 00000000;
+61b1 : 00000000;
+61b2 : 00000000;
+61b3 : 00000000;
+61b4 : 00000000;
+61b5 : 00000000;
+61b6 : 00000000;
+61b7 : 00000000;
+61b8 : 00000000;
+61b9 : 00000000;
+61ba : 00000000;
+61bb : 00000000;
+61bc : 00000000;
+61bd : 00000000;
+61be : 00000000;
+61bf : 00000000;
+61c0 : 00000000;
+61c1 : 00000000;
+61c2 : 00000000;
+61c3 : 00000000;
+61c4 : 00000000;
+61c5 : 00000000;
+61c6 : 00000000;
+61c7 : 00000000;
+61c8 : 00000000;
+61c9 : 00000000;
+61ca : 00000000;
+61cb : 00000000;
+61cc : 00000000;
+61cd : 00000000;
+61ce : 00000000;
+61cf : 00000000;
+61d0 : 00000000;
+61d1 : 00000000;
+61d2 : 00000000;
+61d3 : 00000000;
+61d4 : 00000000;
+61d5 : 00000000;
+61d6 : 00000000;
+61d7 : 00000000;
+61d8 : 00000000;
+61d9 : 00000000;
+61da : 00000000;
+61db : 00000000;
+61dc : 00000000;
+61dd : 00000000;
+61de : 00000000;
+61df : 00000000;
+61e0 : 00000000;
+61e1 : 00000000;
+61e2 : 00000000;
+61e3 : 00000000;
+61e4 : 00000000;
+61e5 : 00000000;
+61e6 : 00000000;
+61e7 : 00000000;
+61e8 : 00000000;
+61e9 : 00000000;
+61ea : 00000000;
+61eb : 00000000;
+61ec : 00000000;
+61ed : 00000000;
+61ee : 00000000;
+61ef : 00000000;
+61f0 : 00000000;
+61f1 : 00000000;
+61f2 : 00000000;
+61f3 : 00000000;
+61f4 : 00000000;
+61f5 : 00000000;
+61f6 : 00000000;
+61f7 : 00000000;
+61f8 : 00000000;
+61f9 : 00000000;
+61fa : 00000000;
+61fb : 00000000;
+61fc : 00000000;
+61fd : 00000000;
+61fe : 00000000;
+61ff : 00000000;
+6200 : 00000000;
+6201 : 00000000;
+6202 : 00000000;
+6203 : 00000000;
+6204 : 00000000;
+6205 : 00000000;
+6206 : 00000000;
+6207 : 00000000;
+6208 : 00000000;
+6209 : 00000000;
+620a : 00000000;
+620b : 00000000;
+620c : 00000000;
+620d : 00000000;
+620e : 00000000;
+620f : 00000000;
+6210 : 00000000;
+6211 : 00000000;
+6212 : 00000000;
+6213 : 00000000;
+6214 : 00000000;
+6215 : 00000000;
+6216 : 00000000;
+6217 : 00000000;
+6218 : 00000000;
+6219 : 00000000;
+621a : 00000000;
+621b : 00000000;
+621c : 00000000;
+621d : 00000000;
+621e : 00000000;
+621f : 00000000;
+6220 : 00000000;
+6221 : 00000000;
+6222 : 00000000;
+6223 : 00000000;
+6224 : 00000000;
+6225 : 00000000;
+6226 : 00000000;
+6227 : 00000000;
+6228 : 00000000;
+6229 : 00000000;
+622a : 00000000;
+622b : 00000000;
+622c : 00000000;
+622d : 00000000;
+622e : 00000000;
+622f : 00000000;
+6230 : 00000000;
+6231 : 00000000;
+6232 : 00000000;
+6233 : 00000000;
+6234 : 00000000;
+6235 : 00000000;
+6236 : 00000000;
+6237 : 00000000;
+6238 : 00000000;
+6239 : 00000000;
+623a : 00000000;
+623b : 00000000;
+623c : 00000000;
+623d : 00000000;
+623e : 00000000;
+623f : 00000000;
+6240 : 00000000;
+6241 : 00000000;
+6242 : 00000000;
+6243 : 00000000;
+6244 : 00000000;
+6245 : 00000000;
+6246 : 00000000;
+6247 : 00000000;
+6248 : 00000000;
+6249 : 00000000;
+624a : 00000000;
+624b : 00000000;
+624c : 00000000;
+624d : 00000000;
+624e : 00000000;
+624f : 00000000;
+6250 : 00000000;
+6251 : 00000000;
+6252 : 00000000;
+6253 : 00000000;
+6254 : 00000000;
+6255 : 00000000;
+6256 : 00000000;
+6257 : 00000000;
+6258 : 00000000;
+6259 : 00000000;
+625a : 00000000;
+625b : 00000000;
+625c : 00000000;
+625d : 00000000;
+625e : 00000000;
+625f : 00000000;
+6260 : 00000000;
+6261 : 00000000;
+6262 : 00000000;
+6263 : 00000000;
+6264 : 00000000;
+6265 : 00000000;
+6266 : 00000000;
+6267 : 00000000;
+6268 : 00000000;
+6269 : 00000000;
+626a : 00000000;
+626b : 00000000;
+626c : 00000000;
+626d : 00000000;
+626e : 00000000;
+626f : 00000000;
+6270 : 00000000;
+6271 : 00000000;
+6272 : 00000000;
+6273 : 00000000;
+6274 : 00000000;
+6275 : 00000000;
+6276 : 00000000;
+6277 : 00000000;
+6278 : 00000000;
+6279 : 00000000;
+627a : 00000000;
+627b : 00000000;
+627c : 00000000;
+627d : 00000000;
+627e : 00000000;
+627f : 00000000;
+6280 : 00000000;
+6281 : 00000000;
+6282 : 00000000;
+6283 : 00000000;
+6284 : 00000000;
+6285 : 00000000;
+6286 : 00000000;
+6287 : 00000000;
+6288 : 00000000;
+6289 : 00000000;
+628a : 00000000;
+628b : 00000000;
+628c : 00000000;
+628d : 00000000;
+628e : 00000000;
+628f : 00000000;
+6290 : 00000000;
+6291 : 00000000;
+6292 : 00000000;
+6293 : 00000000;
+6294 : 00000000;
+6295 : 00000000;
+6296 : 00000000;
+6297 : 00000000;
+6298 : 00000000;
+6299 : 00000000;
+629a : 00000000;
+629b : 00000000;
+629c : 00000000;
+629d : 00000000;
+629e : 00000000;
+629f : 00000000;
+62a0 : 00000000;
+62a1 : 00000000;
+62a2 : 00000000;
+62a3 : 00000000;
+62a4 : 00000000;
+62a5 : 00000000;
+62a6 : 00000000;
+62a7 : 00000000;
+62a8 : 00000000;
+62a9 : 00000000;
+62aa : 00000000;
+62ab : 00000000;
+62ac : 00000000;
+62ad : 00000000;
+62ae : 00000000;
+62af : 00000000;
+62b0 : 00000000;
+62b1 : 00000000;
+62b2 : 00000000;
+62b3 : 00000000;
+62b4 : 00000000;
+62b5 : 00000000;
+62b6 : 00000000;
+62b7 : 00000000;
+62b8 : 00000000;
+62b9 : 00000000;
+62ba : 00000000;
+62bb : 00000000;
+62bc : 00000000;
+62bd : 00000000;
+62be : 00000000;
+62bf : 00000000;
+62c0 : 00000000;
+62c1 : 00000000;
+62c2 : 00000000;
+62c3 : 00000000;
+62c4 : 00000000;
+62c5 : 00000000;
+62c6 : 00000000;
+62c7 : 00000000;
+62c8 : 00000000;
+62c9 : 00000000;
+62ca : 00000000;
+62cb : 00000000;
+62cc : 00000000;
+62cd : 00000000;
+62ce : 00000000;
+62cf : 00000000;
+62d0 : 00000000;
+62d1 : 00000000;
+62d2 : 00000000;
+62d3 : 00000000;
+62d4 : 00000000;
+62d5 : 00000000;
+62d6 : 00000000;
+62d7 : 00000000;
+62d8 : 00000000;
+62d9 : 00000000;
+62da : 00000000;
+62db : 00000000;
+62dc : 00000000;
+62dd : 00000000;
+62de : 00000000;
+62df : 00000000;
+62e0 : 00000000;
+62e1 : 00000000;
+62e2 : 00000000;
+62e3 : 00000000;
+62e4 : 00000000;
+62e5 : 00000000;
+62e6 : 00000000;
+62e7 : 00000000;
+62e8 : 00000000;
+62e9 : 00000000;
+62ea : 00000000;
+62eb : 00000000;
+62ec : 00000000;
+62ed : 00000000;
+62ee : 00000000;
+62ef : 00000000;
+62f0 : 00000000;
+62f1 : 00000000;
+62f2 : 00000000;
+62f3 : 00000000;
+62f4 : 00000000;
+62f5 : 00000000;
+62f6 : 00000000;
+62f7 : 00000000;
+62f8 : 00000000;
+62f9 : 00000000;
+62fa : 00000000;
+62fb : 00000000;
+62fc : 00000000;
+62fd : 00000000;
+62fe : 00000000;
+62ff : 00000000;
+6300 : 00000000;
+6301 : 00000000;
+6302 : 00000000;
+6303 : 00000000;
+6304 : 00000000;
+6305 : 00000000;
+6306 : 00000000;
+6307 : 00000000;
+6308 : 00000000;
+6309 : 00000000;
+630a : 00000000;
+630b : 00000000;
+630c : 00000000;
+630d : 00000000;
+630e : 00000000;
+630f : 00000000;
+6310 : 00000000;
+6311 : 00000000;
+6312 : 00000000;
+6313 : 00000000;
+6314 : 00000000;
+6315 : 00000000;
+6316 : 00000000;
+6317 : 00000000;
+6318 : 00000000;
+6319 : 00000000;
+631a : 00000000;
+631b : 00000000;
+631c : 00000000;
+631d : 00000000;
+631e : 00000000;
+631f : 00000000;
+6320 : 00000000;
+6321 : 00000000;
+6322 : 00000000;
+6323 : 00000000;
+6324 : 00000000;
+6325 : 00000000;
+6326 : 00000000;
+6327 : 00000000;
+6328 : 00000000;
+6329 : 00000000;
+632a : 00000000;
+632b : 00000000;
+632c : 00000000;
+632d : 00000000;
+632e : 00000000;
+632f : 00000000;
+6330 : 00000000;
+6331 : 00000000;
+6332 : 00000000;
+6333 : 00000000;
+6334 : 00000000;
+6335 : 00000000;
+6336 : 00000000;
+6337 : 00000000;
+6338 : 00000000;
+6339 : 00000000;
+633a : 00000000;
+633b : 00000000;
+633c : 00000000;
+633d : 00000000;
+633e : 00000000;
+633f : 00000000;
+6340 : 00000000;
+6341 : 00000000;
+6342 : 00000000;
+6343 : 00000000;
+6344 : 00000000;
+6345 : 00000000;
+6346 : 00000000;
+6347 : 00000000;
+6348 : 00000000;
+6349 : 00000000;
+634a : 00000000;
+634b : 00000000;
+634c : 00000000;
+634d : 00000000;
+634e : 00000000;
+634f : 00000000;
+6350 : 00000000;
+6351 : 00000000;
+6352 : 00000000;
+6353 : 00000000;
+6354 : 00000000;
+6355 : 00000000;
+6356 : 00000000;
+6357 : 00000000;
+6358 : 00000000;
+6359 : 00000000;
+635a : 00000000;
+635b : 00000000;
+635c : 00000000;
+635d : 00000000;
+635e : 00000000;
+635f : 00000000;
+6360 : 00000000;
+6361 : 00000000;
+6362 : 00000000;
+6363 : 00000000;
+6364 : 00000000;
+6365 : 00000000;
+6366 : 00000000;
+6367 : 00000000;
+6368 : 00000000;
+6369 : 00000000;
+636a : 00000000;
+636b : 00000000;
+636c : 00000000;
+636d : 00000000;
+636e : 00000000;
+636f : 00000000;
+6370 : 00000000;
+6371 : 00000000;
+6372 : 00000000;
+6373 : 00000000;
+6374 : 00000000;
+6375 : 00000000;
+6376 : 00000000;
+6377 : 00000000;
+6378 : 00000000;
+6379 : 00000000;
+637a : 00000000;
+637b : 00000000;
+637c : 00000000;
+637d : 00000000;
+637e : 00000000;
+637f : 00000000;
+6380 : 00000000;
+6381 : 00000000;
+6382 : 00000000;
+6383 : 00000000;
+6384 : 00000000;
+6385 : 00000000;
+6386 : 00000000;
+6387 : 00000000;
+6388 : 00000000;
+6389 : 00000000;
+638a : 00000000;
+638b : 00000000;
+638c : 00000000;
+638d : 00000000;
+638e : 00000000;
+638f : 00000000;
+6390 : 00000000;
+6391 : 00000000;
+6392 : 00000000;
+6393 : 00000000;
+6394 : 00000000;
+6395 : 00000000;
+6396 : 00000000;
+6397 : 00000000;
+6398 : 00000000;
+6399 : 00000000;
+639a : 00000000;
+639b : 00000000;
+639c : 00000000;
+639d : 00000000;
+639e : 00000000;
+639f : 00000000;
+63a0 : 00000000;
+63a1 : 00000000;
+63a2 : 00000000;
+63a3 : 00000000;
+63a4 : 00000000;
+63a5 : 00000000;
+63a6 : 00000000;
+63a7 : 00000000;
+63a8 : 00000000;
+63a9 : 00000000;
+63aa : 00000000;
+63ab : 00000000;
+63ac : 00000000;
+63ad : 00000000;
+63ae : 00000000;
+63af : 00000000;
+63b0 : 00000000;
+63b1 : 00000000;
+63b2 : 00000000;
+63b3 : 00000000;
+63b4 : 00000000;
+63b5 : 00000000;
+63b6 : 00000000;
+63b7 : 00000000;
+63b8 : 00000000;
+63b9 : 00000000;
+63ba : 00000000;
+63bb : 00000000;
+63bc : 00000000;
+63bd : 00000000;
+63be : 00000000;
+63bf : 00000000;
+63c0 : 00000000;
+63c1 : 00000000;
+63c2 : 00000000;
+63c3 : 00000000;
+63c4 : 00000000;
+63c5 : 00000000;
+63c6 : 00000000;
+63c7 : 00000000;
+63c8 : 00000000;
+63c9 : 00000000;
+63ca : 00000000;
+63cb : 00000000;
+63cc : 00000000;
+63cd : 00000000;
+63ce : 00000000;
+63cf : 00000000;
+63d0 : 00000000;
+63d1 : 00000000;
+63d2 : 00000000;
+63d3 : 00000000;
+63d4 : 00000000;
+63d5 : 00000000;
+63d6 : 00000000;
+63d7 : 00000000;
+63d8 : 00000000;
+63d9 : 00000000;
+63da : 00000000;
+63db : 00000000;
+63dc : 00000000;
+63dd : 00000000;
+63de : 00000000;
+63df : 00000000;
+63e0 : 00000000;
+63e1 : 00000000;
+63e2 : 00000000;
+63e3 : 00000000;
+63e4 : 00000000;
+63e5 : 00000000;
+63e6 : 00000000;
+63e7 : 00000000;
+63e8 : 00000000;
+63e9 : 00000000;
+63ea : 00000000;
+63eb : 00000000;
+63ec : 00000000;
+63ed : 00000000;
+63ee : 00000000;
+63ef : 00000000;
+63f0 : 00000000;
+63f1 : 00000000;
+63f2 : 00000000;
+63f3 : 00000000;
+63f4 : 00000000;
+63f5 : 00000000;
+63f6 : 00000000;
+63f7 : 00000000;
+63f8 : 00000000;
+63f9 : 00000000;
+63fa : 00000000;
+63fb : 00000000;
+63fc : 00000000;
+63fd : 00000000;
+63fe : 00000000;
+63ff : 00000000;
+6400 : 00000000;
+6401 : 00000000;
+6402 : 00000000;
+6403 : 00000000;
+6404 : 00000000;
+6405 : 00000000;
+6406 : 00000000;
+6407 : 00000000;
+6408 : 00000000;
+6409 : 00000000;
+640a : 00000000;
+640b : 00000000;
+640c : 00000000;
+640d : 00000000;
+640e : 00000000;
+640f : 00000000;
+6410 : 00000000;
+6411 : 00000000;
+6412 : 00000000;
+6413 : 00000000;
+6414 : 00000000;
+6415 : 00000000;
+6416 : 00000000;
+6417 : 00000000;
+6418 : 00000000;
+6419 : 00000000;
+641a : 00000000;
+641b : 00000000;
+641c : 00000000;
+641d : 00000000;
+641e : 00000000;
+641f : 00000000;
+6420 : 00000000;
+6421 : 00000000;
+6422 : 00000000;
+6423 : 00000000;
+6424 : 00000000;
+6425 : 00000000;
+6426 : 00000000;
+6427 : 00000000;
+6428 : 00000000;
+6429 : 00000000;
+642a : 00000000;
+642b : 00000000;
+642c : 00000000;
+642d : 00000000;
+642e : 00000000;
+642f : 00000000;
+6430 : 00000000;
+6431 : 00000000;
+6432 : 00000000;
+6433 : 00000000;
+6434 : 00000000;
+6435 : 00000000;
+6436 : 00000000;
+6437 : 00000000;
+6438 : 00000000;
+6439 : 00000000;
+643a : 00000000;
+643b : 00000000;
+643c : 00000000;
+643d : 00000000;
+643e : 00000000;
+643f : 00000000;
+6440 : 00000000;
+6441 : 00000000;
+6442 : 00000000;
+6443 : 00000000;
+6444 : 00000000;
+6445 : 00000000;
+6446 : 00000000;
+6447 : 00000000;
+6448 : 00000000;
+6449 : 00000000;
+644a : 00000000;
+644b : 00000000;
+644c : 00000000;
+644d : 00000000;
+644e : 00000000;
+644f : 00000000;
+6450 : 00000000;
+6451 : 00000000;
+6452 : 00000000;
+6453 : 00000000;
+6454 : 00000000;
+6455 : 00000000;
+6456 : 00000000;
+6457 : 00000000;
+6458 : 00000000;
+6459 : 00000000;
+645a : 00000000;
+645b : 00000000;
+645c : 00000000;
+645d : 00000000;
+645e : 00000000;
+645f : 00000000;
+6460 : 00000000;
+6461 : 00000000;
+6462 : 00000000;
+6463 : 00000000;
+6464 : 00000000;
+6465 : 00000000;
+6466 : 00000000;
+6467 : 00000000;
+6468 : 00000000;
+6469 : 00000000;
+646a : 00000000;
+646b : 00000000;
+646c : 00000000;
+646d : 00000000;
+646e : 00000000;
+646f : 00000000;
+6470 : 00000000;
+6471 : 00000000;
+6472 : 00000000;
+6473 : 00000000;
+6474 : 00000000;
+6475 : 00000000;
+6476 : 00000000;
+6477 : 00000000;
+6478 : 00000000;
+6479 : 00000000;
+647a : 00000000;
+647b : 00000000;
+647c : 00000000;
+647d : 00000000;
+647e : 00000000;
+647f : 00000000;
+6480 : 00000000;
+6481 : 00000000;
+6482 : 00000000;
+6483 : 00000000;
+6484 : 00000000;
+6485 : 00000000;
+6486 : 00000000;
+6487 : 00000000;
+6488 : 00000000;
+6489 : 00000000;
+648a : 00000000;
+648b : 00000000;
+648c : 00000000;
+648d : 00000000;
+648e : 00000000;
+648f : 00000000;
+6490 : 00000000;
+6491 : 00000000;
+6492 : 00000000;
+6493 : 00000000;
+6494 : 00000000;
+6495 : 00000000;
+6496 : 00000000;
+6497 : 00000000;
+6498 : 00000000;
+6499 : 00000000;
+649a : 00000000;
+649b : 00000000;
+649c : 00000000;
+649d : 00000000;
+649e : 00000000;
+649f : 00000000;
+64a0 : 00000000;
+64a1 : 00000000;
+64a2 : 00000000;
+64a3 : 00000000;
+64a4 : 00000000;
+64a5 : 00000000;
+64a6 : 00000000;
+64a7 : 00000000;
+64a8 : 00000000;
+64a9 : 00000000;
+64aa : 00000000;
+64ab : 00000000;
+64ac : 00000000;
+64ad : 00000000;
+64ae : 00000000;
+64af : 00000000;
+64b0 : 00000000;
+64b1 : 00000000;
+64b2 : 00000000;
+64b3 : 00000000;
+64b4 : 00000000;
+64b5 : 00000000;
+64b6 : 00000000;
+64b7 : 00000000;
+64b8 : 00000000;
+64b9 : 00000000;
+64ba : 00000000;
+64bb : 00000000;
+64bc : 00000000;
+64bd : 00000000;
+64be : 00000000;
+64bf : 00000000;
+64c0 : 00000000;
+64c1 : 00000000;
+64c2 : 00000000;
+64c3 : 00000000;
+64c4 : 00000000;
+64c5 : 00000000;
+64c6 : 00000000;
+64c7 : 00000000;
+64c8 : 00000000;
+64c9 : 00000000;
+64ca : 00000000;
+64cb : 00000000;
+64cc : 00000000;
+64cd : 00000000;
+64ce : 00000000;
+64cf : 00000000;
+64d0 : 00000000;
+64d1 : 00000000;
+64d2 : 00000000;
+64d3 : 00000000;
+64d4 : 00000000;
+64d5 : 00000000;
+64d6 : 00000000;
+64d7 : 00000000;
+64d8 : 00000000;
+64d9 : 00000000;
+64da : 00000000;
+64db : 00000000;
+64dc : 00000000;
+64dd : 00000000;
+64de : 00000000;
+64df : 00000000;
+64e0 : 00000000;
+64e1 : 00000000;
+64e2 : 00000000;
+64e3 : 00000000;
+64e4 : 00000000;
+64e5 : 00000000;
+64e6 : 00000000;
+64e7 : 00000000;
+64e8 : 00000000;
+64e9 : 00000000;
+64ea : 00000000;
+64eb : 00000000;
+64ec : 00000000;
+64ed : 00000000;
+64ee : 00000000;
+64ef : 00000000;
+64f0 : 00000000;
+64f1 : 00000000;
+64f2 : 00000000;
+64f3 : 00000000;
+64f4 : 00000000;
+64f5 : 00000000;
+64f6 : 00000000;
+64f7 : 00000000;
+64f8 : 00000000;
+64f9 : 00000000;
+64fa : 00000000;
+64fb : 00000000;
+64fc : 00000000;
+64fd : 00000000;
+64fe : 00000000;
+64ff : 00000000;
+6500 : 00000000;
+6501 : 00000000;
+6502 : 00000000;
+6503 : 00000000;
+6504 : 00000000;
+6505 : 00000000;
+6506 : 00000000;
+6507 : 00000000;
+6508 : 00000000;
+6509 : 00000000;
+650a : 00000000;
+650b : 00000000;
+650c : 00000000;
+650d : 00000000;
+650e : 00000000;
+650f : 00000000;
+6510 : 00000000;
+6511 : 00000000;
+6512 : 00000000;
+6513 : 00000000;
+6514 : 00000000;
+6515 : 00000000;
+6516 : 00000000;
+6517 : 00000000;
+6518 : 00000000;
+6519 : 00000000;
+651a : 00000000;
+651b : 00000000;
+651c : 00000000;
+651d : 00000000;
+651e : 00000000;
+651f : 00000000;
+6520 : 00000000;
+6521 : 00000000;
+6522 : 00000000;
+6523 : 00000000;
+6524 : 00000000;
+6525 : 00000000;
+6526 : 00000000;
+6527 : 00000000;
+6528 : 00000000;
+6529 : 00000000;
+652a : 00000000;
+652b : 00000000;
+652c : 00000000;
+652d : 00000000;
+652e : 00000000;
+652f : 00000000;
+6530 : 00000000;
+6531 : 00000000;
+6532 : 00000000;
+6533 : 00000000;
+6534 : 00000000;
+6535 : 00000000;
+6536 : 00000000;
+6537 : 00000000;
+6538 : 00000000;
+6539 : 00000000;
+653a : 00000000;
+653b : 00000000;
+653c : 00000000;
+653d : 00000000;
+653e : 00000000;
+653f : 00000000;
+6540 : 00000000;
+6541 : 00000000;
+6542 : 00000000;
+6543 : 00000000;
+6544 : 00000000;
+6545 : 00000000;
+6546 : 00000000;
+6547 : 00000000;
+6548 : 00000000;
+6549 : 00000000;
+654a : 00000000;
+654b : 00000000;
+654c : 00000000;
+654d : 00000000;
+654e : 00000000;
+654f : 00000000;
+6550 : 00000000;
+6551 : 00000000;
+6552 : 00000000;
+6553 : 00000000;
+6554 : 00000000;
+6555 : 00000000;
+6556 : 00000000;
+6557 : 00000000;
+6558 : 00000000;
+6559 : 00000000;
+655a : 00000000;
+655b : 00000000;
+655c : 00000000;
+655d : 00000000;
+655e : 00000000;
+655f : 00000000;
+6560 : 00000000;
+6561 : 00000000;
+6562 : 00000000;
+6563 : 00000000;
+6564 : 00000000;
+6565 : 00000000;
+6566 : 00000000;
+6567 : 00000000;
+6568 : 00000000;
+6569 : 00000000;
+656a : 00000000;
+656b : 00000000;
+656c : 00000000;
+656d : 00000000;
+656e : 00000000;
+656f : 00000000;
+6570 : 00000000;
+6571 : 00000000;
+6572 : 00000000;
+6573 : 00000000;
+6574 : 00000000;
+6575 : 00000000;
+6576 : 00000000;
+6577 : 00000000;
+6578 : 00000000;
+6579 : 00000000;
+657a : 00000000;
+657b : 00000000;
+657c : 00000000;
+657d : 00000000;
+657e : 00000000;
+657f : 00000000;
+6580 : 00000000;
+6581 : 00000000;
+6582 : 00000000;
+6583 : 00000000;
+6584 : 00000000;
+6585 : 00000000;
+6586 : 00000000;
+6587 : 00000000;
+6588 : 00000000;
+6589 : 00000000;
+658a : 00000000;
+658b : 00000000;
+658c : 00000000;
+658d : 00000000;
+658e : 00000000;
+658f : 00000000;
+6590 : 00000000;
+6591 : 00000000;
+6592 : 00000000;
+6593 : 00000000;
+6594 : 00000000;
+6595 : 00000000;
+6596 : 00000000;
+6597 : 00000000;
+6598 : 00000000;
+6599 : 00000000;
+659a : 00000000;
+659b : 00000000;
+659c : 00000000;
+659d : 00000000;
+659e : 00000000;
+659f : 00000000;
+65a0 : 00000000;
+65a1 : 00000000;
+65a2 : 00000000;
+65a3 : 00000000;
+65a4 : 00000000;
+65a5 : 00000000;
+65a6 : 00000000;
+65a7 : 00000000;
+65a8 : 00000000;
+65a9 : 00000000;
+65aa : 00000000;
+65ab : 00000000;
+65ac : 00000000;
+65ad : 00000000;
+65ae : 00000000;
+65af : 00000000;
+65b0 : 00000000;
+65b1 : 00000000;
+65b2 : 00000000;
+65b3 : 00000000;
+65b4 : 00000000;
+65b5 : 00000000;
+65b6 : 00000000;
+65b7 : 00000000;
+65b8 : 00000000;
+65b9 : 00000000;
+65ba : 00000000;
+65bb : 00000000;
+65bc : 00000000;
+65bd : 00000000;
+65be : 00000000;
+65bf : 00000000;
+65c0 : 00000000;
+65c1 : 00000000;
+65c2 : 00000000;
+65c3 : 00000000;
+65c4 : 00000000;
+65c5 : 00000000;
+65c6 : 00000000;
+65c7 : 00000000;
+65c8 : 00000000;
+65c9 : 00000000;
+65ca : 00000000;
+65cb : 00000000;
+65cc : 00000000;
+65cd : 00000000;
+65ce : 00000000;
+65cf : 00000000;
+65d0 : 00000000;
+65d1 : 00000000;
+65d2 : 00000000;
+65d3 : 00000000;
+65d4 : 00000000;
+65d5 : 00000000;
+65d6 : 00000000;
+65d7 : 00000000;
+65d8 : 00000000;
+65d9 : 00000000;
+65da : 00000000;
+65db : 00000000;
+65dc : 00000000;
+65dd : 00000000;
+65de : 00000000;
+65df : 00000000;
+65e0 : 00000000;
+65e1 : 00000000;
+65e2 : 00000000;
+65e3 : 00000000;
+65e4 : 00000000;
+65e5 : 00000000;
+65e6 : 00000000;
+65e7 : 00000000;
+65e8 : 00000000;
+65e9 : 00000000;
+65ea : 00000000;
+65eb : 00000000;
+65ec : 00000000;
+65ed : 00000000;
+65ee : 00000000;
+65ef : 00000000;
+65f0 : 00000000;
+65f1 : 00000000;
+65f2 : 00000000;
+65f3 : 00000000;
+65f4 : 00000000;
+65f5 : 00000000;
+65f6 : 00000000;
+65f7 : 00000000;
+65f8 : 00000000;
+65f9 : 00000000;
+65fa : 00000000;
+65fb : 00000000;
+65fc : 00000000;
+65fd : 00000000;
+65fe : 00000000;
+65ff : 00000000;
+6600 : 00000000;
+6601 : 00000000;
+6602 : 00000000;
+6603 : 00000000;
+6604 : 00000000;
+6605 : 00000000;
+6606 : 00000000;
+6607 : 00000000;
+6608 : 00000000;
+6609 : 00000000;
+660a : 00000000;
+660b : 00000000;
+660c : 00000000;
+660d : 00000000;
+660e : 00000000;
+660f : 00000000;
+6610 : 00000000;
+6611 : 00000000;
+6612 : 00000000;
+6613 : 00000000;
+6614 : 00000000;
+6615 : 00000000;
+6616 : 00000000;
+6617 : 00000000;
+6618 : 00000000;
+6619 : 00000000;
+661a : 00000000;
+661b : 00000000;
+661c : 00000000;
+661d : 00000000;
+661e : 00000000;
+661f : 00000000;
+6620 : 00000000;
+6621 : 00000000;
+6622 : 00000000;
+6623 : 00000000;
+6624 : 00000000;
+6625 : 00000000;
+6626 : 00000000;
+6627 : 00000000;
+6628 : 00000000;
+6629 : 00000000;
+662a : 00000000;
+662b : 00000000;
+662c : 00000000;
+662d : 00000000;
+662e : 00000000;
+662f : 00000000;
+6630 : 00000000;
+6631 : 00000000;
+6632 : 00000000;
+6633 : 00000000;
+6634 : 00000000;
+6635 : 00000000;
+6636 : 00000000;
+6637 : 00000000;
+6638 : 00000000;
+6639 : 00000000;
+663a : 00000000;
+663b : 00000000;
+663c : 00000000;
+663d : 00000000;
+663e : 00000000;
+663f : 00000000;
+6640 : 00000000;
+6641 : 00000000;
+6642 : 00000000;
+6643 : 00000000;
+6644 : 00000000;
+6645 : 00000000;
+6646 : 00000000;
+6647 : 00000000;
+6648 : 00000000;
+6649 : 00000000;
+664a : 00000000;
+664b : 00000000;
+664c : 00000000;
+664d : 00000000;
+664e : 00000000;
+664f : 00000000;
+6650 : 00000000;
+6651 : 00000000;
+6652 : 00000000;
+6653 : 00000000;
+6654 : 00000000;
+6655 : 00000000;
+6656 : 00000000;
+6657 : 00000000;
+6658 : 00000000;
+6659 : 00000000;
+665a : 00000000;
+665b : 00000000;
+665c : 00000000;
+665d : 00000000;
+665e : 00000000;
+665f : 00000000;
+6660 : 00000000;
+6661 : 00000000;
+6662 : 00000000;
+6663 : 00000000;
+6664 : 00000000;
+6665 : 00000000;
+6666 : 00000000;
+6667 : 00000000;
+6668 : 00000000;
+6669 : 00000000;
+666a : 00000000;
+666b : 00000000;
+666c : 00000000;
+666d : 00000000;
+666e : 00000000;
+666f : 00000000;
+6670 : 00000000;
+6671 : 00000000;
+6672 : 00000000;
+6673 : 00000000;
+6674 : 00000000;
+6675 : 00000000;
+6676 : 00000000;
+6677 : 00000000;
+6678 : 00000000;
+6679 : 00000000;
+667a : 00000000;
+667b : 00000000;
+667c : 00000000;
+667d : 00000000;
+667e : 00000000;
+667f : 00000000;
+6680 : 00000000;
+6681 : 00000000;
+6682 : 00000000;
+6683 : 00000000;
+6684 : 00000000;
+6685 : 00000000;
+6686 : 00000000;
+6687 : 00000000;
+6688 : 00000000;
+6689 : 00000000;
+668a : 00000000;
+668b : 00000000;
+668c : 00000000;
+668d : 00000000;
+668e : 00000000;
+668f : 00000000;
+6690 : 00000000;
+6691 : 00000000;
+6692 : 00000000;
+6693 : 00000000;
+6694 : 00000000;
+6695 : 00000000;
+6696 : 00000000;
+6697 : 00000000;
+6698 : 00000000;
+6699 : 00000000;
+669a : 00000000;
+669b : 00000000;
+669c : 00000000;
+669d : 00000000;
+669e : 00000000;
+669f : 00000000;
+66a0 : 00000000;
+66a1 : 00000000;
+66a2 : 00000000;
+66a3 : 00000000;
+66a4 : 00000000;
+66a5 : 00000000;
+66a6 : 00000000;
+66a7 : 00000000;
+66a8 : 00000000;
+66a9 : 00000000;
+66aa : 00000000;
+66ab : 00000000;
+66ac : 00000000;
+66ad : 00000000;
+66ae : 00000000;
+66af : 00000000;
+66b0 : 00000000;
+66b1 : 00000000;
+66b2 : 00000000;
+66b3 : 00000000;
+66b4 : 00000000;
+66b5 : 00000000;
+66b6 : 00000000;
+66b7 : 00000000;
+66b8 : 00000000;
+66b9 : 00000000;
+66ba : 00000000;
+66bb : 00000000;
+66bc : 00000000;
+66bd : 00000000;
+66be : 00000000;
+66bf : 00000000;
+66c0 : 00000000;
+66c1 : 00000000;
+66c2 : 00000000;
+66c3 : 00000000;
+66c4 : 00000000;
+66c5 : 00000000;
+66c6 : 00000000;
+66c7 : 00000000;
+66c8 : 00000000;
+66c9 : 00000000;
+66ca : 00000000;
+66cb : 00000000;
+66cc : 00000000;
+66cd : 00000000;
+66ce : 00000000;
+66cf : 00000000;
+66d0 : 00000000;
+66d1 : 00000000;
+66d2 : 00000000;
+66d3 : 00000000;
+66d4 : 00000000;
+66d5 : 00000000;
+66d6 : 00000000;
+66d7 : 00000000;
+66d8 : 00000000;
+66d9 : 00000000;
+66da : 00000000;
+66db : 00000000;
+66dc : 00000000;
+66dd : 00000000;
+66de : 00000000;
+66df : 00000000;
+66e0 : 00000000;
+66e1 : 00000000;
+66e2 : 00000000;
+66e3 : 00000000;
+66e4 : 00000000;
+66e5 : 00000000;
+66e6 : 00000000;
+66e7 : 00000000;
+66e8 : 00000000;
+66e9 : 00000000;
+66ea : 00000000;
+66eb : 00000000;
+66ec : 00000000;
+66ed : 00000000;
+66ee : 00000000;
+66ef : 00000000;
+66f0 : 00000000;
+66f1 : 00000000;
+66f2 : 00000000;
+66f3 : 00000000;
+66f4 : 00000000;
+66f5 : 00000000;
+66f6 : 00000000;
+66f7 : 00000000;
+66f8 : 00000000;
+66f9 : 00000000;
+66fa : 00000000;
+66fb : 00000000;
+66fc : 00000000;
+66fd : 00000000;
+66fe : 00000000;
+66ff : 00000000;
+6700 : 00000000;
+6701 : 00000000;
+6702 : 00000000;
+6703 : 00000000;
+6704 : 00000000;
+6705 : 00000000;
+6706 : 00000000;
+6707 : 00000000;
+6708 : 00000000;
+6709 : 00000000;
+670a : 00000000;
+670b : 00000000;
+670c : 00000000;
+670d : 00000000;
+670e : 00000000;
+670f : 00000000;
+6710 : 00000000;
+6711 : 00000000;
+6712 : 00000000;
+6713 : 00000000;
+6714 : 00000000;
+6715 : 00000000;
+6716 : 00000000;
+6717 : 00000000;
+6718 : 00000000;
+6719 : 00000000;
+671a : 00000000;
+671b : 00000000;
+671c : 00000000;
+671d : 00000000;
+671e : 00000000;
+671f : 00000000;
+6720 : 00000000;
+6721 : 00000000;
+6722 : 00000000;
+6723 : 00000000;
+6724 : 00000000;
+6725 : 00000000;
+6726 : 00000000;
+6727 : 00000000;
+6728 : 00000000;
+6729 : 00000000;
+672a : 00000000;
+672b : 00000000;
+672c : 00000000;
+672d : 00000000;
+672e : 00000000;
+672f : 00000000;
+6730 : 00000000;
+6731 : 00000000;
+6732 : 00000000;
+6733 : 00000000;
+6734 : 00000000;
+6735 : 00000000;
+6736 : 00000000;
+6737 : 00000000;
+6738 : 00000000;
+6739 : 00000000;
+673a : 00000000;
+673b : 00000000;
+673c : 00000000;
+673d : 00000000;
+673e : 00000000;
+673f : 00000000;
+6740 : 00000000;
+6741 : 00000000;
+6742 : 00000000;
+6743 : 00000000;
+6744 : 00000000;
+6745 : 00000000;
+6746 : 00000000;
+6747 : 00000000;
+6748 : 00000000;
+6749 : 00000000;
+674a : 00000000;
+674b : 00000000;
+674c : 00000000;
+674d : 00000000;
+674e : 00000000;
+674f : 00000000;
+6750 : 00000000;
+6751 : 00000000;
+6752 : 00000000;
+6753 : 00000000;
+6754 : 00000000;
+6755 : 00000000;
+6756 : 00000000;
+6757 : 00000000;
+6758 : 00000000;
+6759 : 00000000;
+675a : 00000000;
+675b : 00000000;
+675c : 00000000;
+675d : 00000000;
+675e : 00000000;
+675f : 00000000;
+6760 : 00000000;
+6761 : 00000000;
+6762 : 00000000;
+6763 : 00000000;
+6764 : 00000000;
+6765 : 00000000;
+6766 : 00000000;
+6767 : 00000000;
+6768 : 00000000;
+6769 : 00000000;
+676a : 00000000;
+676b : 00000000;
+676c : 00000000;
+676d : 00000000;
+676e : 00000000;
+676f : 00000000;
+6770 : 00000000;
+6771 : 00000000;
+6772 : 00000000;
+6773 : 00000000;
+6774 : 00000000;
+6775 : 00000000;
+6776 : 00000000;
+6777 : 00000000;
+6778 : 00000000;
+6779 : 00000000;
+677a : 00000000;
+677b : 00000000;
+677c : 00000000;
+677d : 00000000;
+677e : 00000000;
+677f : 00000000;
+6780 : 00000000;
+6781 : 00000000;
+6782 : 00000000;
+6783 : 00000000;
+6784 : 00000000;
+6785 : 00000000;
+6786 : 00000000;
+6787 : 00000000;
+6788 : 00000000;
+6789 : 00000000;
+678a : 00000000;
+678b : 00000000;
+678c : 00000000;
+678d : 00000000;
+678e : 00000000;
+678f : 00000000;
+6790 : 00000000;
+6791 : 00000000;
+6792 : 00000000;
+6793 : 00000000;
+6794 : 00000000;
+6795 : 00000000;
+6796 : 00000000;
+6797 : 00000000;
+6798 : 00000000;
+6799 : 00000000;
+679a : 00000000;
+679b : 00000000;
+679c : 00000000;
+679d : 00000000;
+679e : 00000000;
+679f : 00000000;
+67a0 : 00000000;
+67a1 : 00000000;
+67a2 : 00000000;
+67a3 : 00000000;
+67a4 : 00000000;
+67a5 : 00000000;
+67a6 : 00000000;
+67a7 : 00000000;
+67a8 : 00000000;
+67a9 : 00000000;
+67aa : 00000000;
+67ab : 00000000;
+67ac : 00000000;
+67ad : 00000000;
+67ae : 00000000;
+67af : 00000000;
+67b0 : 00000000;
+67b1 : 00000000;
+67b2 : 00000000;
+67b3 : 00000000;
+67b4 : 00000000;
+67b5 : 00000000;
+67b6 : 00000000;
+67b7 : 00000000;
+67b8 : 00000000;
+67b9 : 00000000;
+67ba : 00000000;
+67bb : 00000000;
+67bc : 00000000;
+67bd : 00000000;
+67be : 00000000;
+67bf : 00000000;
+67c0 : 00000000;
+67c1 : 00000000;
+67c2 : 00000000;
+67c3 : 00000000;
+67c4 : 00000000;
+67c5 : 00000000;
+67c6 : 00000000;
+67c7 : 00000000;
+67c8 : 00000000;
+67c9 : 00000000;
+67ca : 00000000;
+67cb : 00000000;
+67cc : 00000000;
+67cd : 00000000;
+67ce : 00000000;
+67cf : 00000000;
+67d0 : 00000000;
+67d1 : 00000000;
+67d2 : 00000000;
+67d3 : 00000000;
+67d4 : 00000000;
+67d5 : 00000000;
+67d6 : 00000000;
+67d7 : 00000000;
+67d8 : 00000000;
+67d9 : 00000000;
+67da : 00000000;
+67db : 00000000;
+67dc : 00000000;
+67dd : 00000000;
+67de : 00000000;
+67df : 00000000;
+67e0 : 00000000;
+67e1 : 00000000;
+67e2 : 00000000;
+67e3 : 00000000;
+67e4 : 00000000;
+67e5 : 00000000;
+67e6 : 00000000;
+67e7 : 00000000;
+67e8 : 00000000;
+67e9 : 00000000;
+67ea : 00000000;
+67eb : 00000000;
+67ec : 00000000;
+67ed : 00000000;
+67ee : 00000000;
+67ef : 00000000;
+67f0 : 00000000;
+67f1 : 00000000;
+67f2 : 00000000;
+67f3 : 00000000;
+67f4 : 00000000;
+67f5 : 00000000;
+67f6 : 00000000;
+67f7 : 00000000;
+67f8 : 00000000;
+67f9 : 00000000;
+67fa : 00000000;
+67fb : 00000000;
+67fc : 00000000;
+67fd : 00000000;
+67fe : 00000000;
+67ff : 00000000;
+6800 : 00000000;
+6801 : 00000000;
+6802 : 00000000;
+6803 : 00000000;
+6804 : 00000000;
+6805 : 00000000;
+6806 : 00000000;
+6807 : 00000000;
+6808 : 00000000;
+6809 : 00000000;
+680a : 00000000;
+680b : 00000000;
+680c : 00000000;
+680d : 00000000;
+680e : 00000000;
+680f : 00000000;
+6810 : 00000000;
+6811 : 00000000;
+6812 : 00000000;
+6813 : 00000000;
+6814 : 00000000;
+6815 : 00000000;
+6816 : 00000000;
+6817 : 00000000;
+6818 : 00000000;
+6819 : 00000000;
+681a : 00000000;
+681b : 00000000;
+681c : 00000000;
+681d : 00000000;
+681e : 00000000;
+681f : 00000000;
+6820 : 00000000;
+6821 : 00000000;
+6822 : 00000000;
+6823 : 00000000;
+6824 : 00000000;
+6825 : 00000000;
+6826 : 00000000;
+6827 : 00000000;
+6828 : 00000000;
+6829 : 00000000;
+682a : 00000000;
+682b : 00000000;
+682c : 00000000;
+682d : 00000000;
+682e : 00000000;
+682f : 00000000;
+6830 : 00000000;
+6831 : 00000000;
+6832 : 00000000;
+6833 : 00000000;
+6834 : 00000000;
+6835 : 00000000;
+6836 : 00000000;
+6837 : 00000000;
+6838 : 00000000;
+6839 : 00000000;
+683a : 00000000;
+683b : 00000000;
+683c : 00000000;
+683d : 00000000;
+683e : 00000000;
+683f : 00000000;
+6840 : 00000000;
+6841 : 00000000;
+6842 : 00000000;
+6843 : 00000000;
+6844 : 00000000;
+6845 : 00000000;
+6846 : 00000000;
+6847 : 00000000;
+6848 : 00000000;
+6849 : 00000000;
+684a : 00000000;
+684b : 00000000;
+684c : 00000000;
+684d : 00000000;
+684e : 00000000;
+684f : 00000000;
+6850 : 00000000;
+6851 : 00000000;
+6852 : 00000000;
+6853 : 00000000;
+6854 : 00000000;
+6855 : 00000000;
+6856 : 00000000;
+6857 : 00000000;
+6858 : 00000000;
+6859 : 00000000;
+685a : 00000000;
+685b : 00000000;
+685c : 00000000;
+685d : 00000000;
+685e : 00000000;
+685f : 00000000;
+6860 : 00000000;
+6861 : 00000000;
+6862 : 00000000;
+6863 : 00000000;
+6864 : 00000000;
+6865 : 00000000;
+6866 : 00000000;
+6867 : 00000000;
+6868 : 00000000;
+6869 : 00000000;
+686a : 00000000;
+686b : 00000000;
+686c : 00000000;
+686d : 00000000;
+686e : 00000000;
+686f : 00000000;
+6870 : 00000000;
+6871 : 00000000;
+6872 : 00000000;
+6873 : 00000000;
+6874 : 00000000;
+6875 : 00000000;
+6876 : 00000000;
+6877 : 00000000;
+6878 : 00000000;
+6879 : 00000000;
+687a : 00000000;
+687b : 00000000;
+687c : 00000000;
+687d : 00000000;
+687e : 00000000;
+687f : 00000000;
+6880 : 00000000;
+6881 : 00000000;
+6882 : 00000000;
+6883 : 00000000;
+6884 : 00000000;
+6885 : 00000000;
+6886 : 00000000;
+6887 : 00000000;
+6888 : 00000000;
+6889 : 00000000;
+688a : 00000000;
+688b : 00000000;
+688c : 00000000;
+688d : 00000000;
+688e : 00000000;
+688f : 00000000;
+6890 : 00000000;
+6891 : 00000000;
+6892 : 00000000;
+6893 : 00000000;
+6894 : 00000000;
+6895 : 00000000;
+6896 : 00000000;
+6897 : 00000000;
+6898 : 00000000;
+6899 : 00000000;
+689a : 00000000;
+689b : 00000000;
+689c : 00000000;
+689d : 00000000;
+689e : 00000000;
+689f : 00000000;
+68a0 : 00000000;
+68a1 : 00000000;
+68a2 : 00000000;
+68a3 : 00000000;
+68a4 : 00000000;
+68a5 : 00000000;
+68a6 : 00000000;
+68a7 : 00000000;
+68a8 : 00000000;
+68a9 : 00000000;
+68aa : 00000000;
+68ab : 00000000;
+68ac : 00000000;
+68ad : 00000000;
+68ae : 00000000;
+68af : 00000000;
+68b0 : 00000000;
+68b1 : 00000000;
+68b2 : 00000000;
+68b3 : 00000000;
+68b4 : 00000000;
+68b5 : 00000000;
+68b6 : 00000000;
+68b7 : 00000000;
+68b8 : 00000000;
+68b9 : 00000000;
+68ba : 00000000;
+68bb : 00000000;
+68bc : 00000000;
+68bd : 00000000;
+68be : 00000000;
+68bf : 00000000;
+68c0 : 00000000;
+68c1 : 00000000;
+68c2 : 00000000;
+68c3 : 00000000;
+68c4 : 00000000;
+68c5 : 00000000;
+68c6 : 00000000;
+68c7 : 00000000;
+68c8 : 00000000;
+68c9 : 00000000;
+68ca : 00000000;
+68cb : 00000000;
+68cc : 00000000;
+68cd : 00000000;
+68ce : 00000000;
+68cf : 00000000;
+68d0 : 00000000;
+68d1 : 00000000;
+68d2 : 00000000;
+68d3 : 00000000;
+68d4 : 00000000;
+68d5 : 00000000;
+68d6 : 00000000;
+68d7 : 00000000;
+68d8 : 00000000;
+68d9 : 00000000;
+68da : 00000000;
+68db : 00000000;
+68dc : 00000000;
+68dd : 00000000;
+68de : 00000000;
+68df : 00000000;
+68e0 : 00000000;
+68e1 : 00000000;
+68e2 : 00000000;
+68e3 : 00000000;
+68e4 : 00000000;
+68e5 : 00000000;
+68e6 : 00000000;
+68e7 : 00000000;
+68e8 : 00000000;
+68e9 : 00000000;
+68ea : 00000000;
+68eb : 00000000;
+68ec : 00000000;
+68ed : 00000000;
+68ee : 00000000;
+68ef : 00000000;
+68f0 : 00000000;
+68f1 : 00000000;
+68f2 : 00000000;
+68f3 : 00000000;
+68f4 : 00000000;
+68f5 : 00000000;
+68f6 : 00000000;
+68f7 : 00000000;
+68f8 : 00000000;
+68f9 : 00000000;
+68fa : 00000000;
+68fb : 00000000;
+68fc : 00000000;
+68fd : 00000000;
+68fe : 00000000;
+68ff : 00000000;
+6900 : 00000000;
+6901 : 00000000;
+6902 : 00000000;
+6903 : 00000000;
+6904 : 00000000;
+6905 : 00000000;
+6906 : 00000000;
+6907 : 00000000;
+6908 : 00000000;
+6909 : 00000000;
+690a : 00000000;
+690b : 00000000;
+690c : 00000000;
+690d : 00000000;
+690e : 00000000;
+690f : 00000000;
+6910 : 00000000;
+6911 : 00000000;
+6912 : 00000000;
+6913 : 00000000;
+6914 : 00000000;
+6915 : 00000000;
+6916 : 00000000;
+6917 : 00000000;
+6918 : 00000000;
+6919 : 00000000;
+691a : 00000000;
+691b : 00000000;
+691c : 00000000;
+691d : 00000000;
+691e : 00000000;
+691f : 00000000;
+6920 : 00000000;
+6921 : 00000000;
+6922 : 00000000;
+6923 : 00000000;
+6924 : 00000000;
+6925 : 00000000;
+6926 : 00000000;
+6927 : 00000000;
+6928 : 00000000;
+6929 : 00000000;
+692a : 00000000;
+692b : 00000000;
+692c : 00000000;
+692d : 00000000;
+692e : 00000000;
+692f : 00000000;
+6930 : 00000000;
+6931 : 00000000;
+6932 : 00000000;
+6933 : 00000000;
+6934 : 00000000;
+6935 : 00000000;
+6936 : 00000000;
+6937 : 00000000;
+6938 : 00000000;
+6939 : 00000000;
+693a : 00000000;
+693b : 00000000;
+693c : 00000000;
+693d : 00000000;
+693e : 00000000;
+693f : 00000000;
+6940 : 00000000;
+6941 : 00000000;
+6942 : 00000000;
+6943 : 00000000;
+6944 : 00000000;
+6945 : 00000000;
+6946 : 00000000;
+6947 : 00000000;
+6948 : 00000000;
+6949 : 00000000;
+694a : 00000000;
+694b : 00000000;
+694c : 00000000;
+694d : 00000000;
+694e : 00000000;
+694f : 00000000;
+6950 : 00000000;
+6951 : 00000000;
+6952 : 00000000;
+6953 : 00000000;
+6954 : 00000000;
+6955 : 00000000;
+6956 : 00000000;
+6957 : 00000000;
+6958 : 00000000;
+6959 : 00000000;
+695a : 00000000;
+695b : 00000000;
+695c : 00000000;
+695d : 00000000;
+695e : 00000000;
+695f : 00000000;
+6960 : 00000000;
+6961 : 00000000;
+6962 : 00000000;
+6963 : 00000000;
+6964 : 00000000;
+6965 : 00000000;
+6966 : 00000000;
+6967 : 00000000;
+6968 : 00000000;
+6969 : 00000000;
+696a : 00000000;
+696b : 00000000;
+696c : 00000000;
+696d : 00000000;
+696e : 00000000;
+696f : 00000000;
+6970 : 00000000;
+6971 : 00000000;
+6972 : 00000000;
+6973 : 00000000;
+6974 : 00000000;
+6975 : 00000000;
+6976 : 00000000;
+6977 : 00000000;
+6978 : 00000000;
+6979 : 00000000;
+697a : 00000000;
+697b : 00000000;
+697c : 00000000;
+697d : 00000000;
+697e : 00000000;
+697f : 00000000;
+6980 : 00000000;
+6981 : 00000000;
+6982 : 00000000;
+6983 : 00000000;
+6984 : 00000000;
+6985 : 00000000;
+6986 : 00000000;
+6987 : 00000000;
+6988 : 00000000;
+6989 : 00000000;
+698a : 00000000;
+698b : 00000000;
+698c : 00000000;
+698d : 00000000;
+698e : 00000000;
+698f : 00000000;
+6990 : 00000000;
+6991 : 00000000;
+6992 : 00000000;
+6993 : 00000000;
+6994 : 00000000;
+6995 : 00000000;
+6996 : 00000000;
+6997 : 00000000;
+6998 : 00000000;
+6999 : 00000000;
+699a : 00000000;
+699b : 00000000;
+699c : 00000000;
+699d : 00000000;
+699e : 00000000;
+699f : 00000000;
+69a0 : 00000000;
+69a1 : 00000000;
+69a2 : 00000000;
+69a3 : 00000000;
+69a4 : 00000000;
+69a5 : 00000000;
+69a6 : 00000000;
+69a7 : 00000000;
+69a8 : 00000000;
+69a9 : 00000000;
+69aa : 00000000;
+69ab : 00000000;
+69ac : 00000000;
+69ad : 00000000;
+69ae : 00000000;
+69af : 00000000;
+69b0 : 00000000;
+69b1 : 00000000;
+69b2 : 00000000;
+69b3 : 00000000;
+69b4 : 00000000;
+69b5 : 00000000;
+69b6 : 00000000;
+69b7 : 00000000;
+69b8 : 00000000;
+69b9 : 00000000;
+69ba : 00000000;
+69bb : 00000000;
+69bc : 00000000;
+69bd : 00000000;
+69be : 00000000;
+69bf : 00000000;
+69c0 : 00000000;
+69c1 : 00000000;
+69c2 : 00000000;
+69c3 : 00000000;
+69c4 : 00000000;
+69c5 : 00000000;
+69c6 : 00000000;
+69c7 : 00000000;
+69c8 : 00000000;
+69c9 : 00000000;
+69ca : 00000000;
+69cb : 00000000;
+69cc : 00000000;
+69cd : 00000000;
+69ce : 00000000;
+69cf : 00000000;
+69d0 : 00000000;
+69d1 : 00000000;
+69d2 : 00000000;
+69d3 : 00000000;
+69d4 : 00000000;
+69d5 : 00000000;
+69d6 : 00000000;
+69d7 : 00000000;
+69d8 : 00000000;
+69d9 : 00000000;
+69da : 00000000;
+69db : 00000000;
+69dc : 00000000;
+69dd : 00000000;
+69de : 00000000;
+69df : 00000000;
+69e0 : 00000000;
+69e1 : 00000000;
+69e2 : 00000000;
+69e3 : 00000000;
+69e4 : 00000000;
+69e5 : 00000000;
+69e6 : 00000000;
+69e7 : 00000000;
+69e8 : 00000000;
+69e9 : 00000000;
+69ea : 00000000;
+69eb : 00000000;
+69ec : 00000000;
+69ed : 00000000;
+69ee : 00000000;
+69ef : 00000000;
+69f0 : 00000000;
+69f1 : 00000000;
+69f2 : 00000000;
+69f3 : 00000000;
+69f4 : 00000000;
+69f5 : 00000000;
+69f6 : 00000000;
+69f7 : 00000000;
+69f8 : 00000000;
+69f9 : 00000000;
+69fa : 00000000;
+69fb : 00000000;
+69fc : 00000000;
+69fd : 00000000;
+69fe : 00000000;
+69ff : 00000000;
+6a00 : 00000000;
+6a01 : 00000000;
+6a02 : 00000000;
+6a03 : 00000000;
+6a04 : 00000000;
+6a05 : 00000000;
+6a06 : 00000000;
+6a07 : 00000000;
+6a08 : 00000000;
+6a09 : 00000000;
+6a0a : 00000000;
+6a0b : 00000000;
+6a0c : 00000000;
+6a0d : 00000000;
+6a0e : 00000000;
+6a0f : 00000000;
+6a10 : 00000000;
+6a11 : 00000000;
+6a12 : 00000000;
+6a13 : 00000000;
+6a14 : 00000000;
+6a15 : 00000000;
+6a16 : 00000000;
+6a17 : 00000000;
+6a18 : 00000000;
+6a19 : 00000000;
+6a1a : 00000000;
+6a1b : 00000000;
+6a1c : 00000000;
+6a1d : 00000000;
+6a1e : 00000000;
+6a1f : 00000000;
+6a20 : 00000000;
+6a21 : 00000000;
+6a22 : 00000000;
+6a23 : 00000000;
+6a24 : 00000000;
+6a25 : 00000000;
+6a26 : 00000000;
+6a27 : 00000000;
+6a28 : 00000000;
+6a29 : 00000000;
+6a2a : 00000000;
+6a2b : 00000000;
+6a2c : 00000000;
+6a2d : 00000000;
+6a2e : 00000000;
+6a2f : 00000000;
+6a30 : 00000000;
+6a31 : 00000000;
+6a32 : 00000000;
+6a33 : 00000000;
+6a34 : 00000000;
+6a35 : 00000000;
+6a36 : 00000000;
+6a37 : 00000000;
+6a38 : 00000000;
+6a39 : 00000000;
+6a3a : 00000000;
+6a3b : 00000000;
+6a3c : 00000000;
+6a3d : 00000000;
+6a3e : 00000000;
+6a3f : 00000000;
+6a40 : 00000000;
+6a41 : 00000000;
+6a42 : 00000000;
+6a43 : 00000000;
+6a44 : 00000000;
+6a45 : 00000000;
+6a46 : 00000000;
+6a47 : 00000000;
+6a48 : 00000000;
+6a49 : 00000000;
+6a4a : 00000000;
+6a4b : 00000000;
+6a4c : 00000000;
+6a4d : 00000000;
+6a4e : 00000000;
+6a4f : 00000000;
+6a50 : 00000000;
+6a51 : 00000000;
+6a52 : 00000000;
+6a53 : 00000000;
+6a54 : 00000000;
+6a55 : 00000000;
+6a56 : 00000000;
+6a57 : 00000000;
+6a58 : 00000000;
+6a59 : 00000000;
+6a5a : 00000000;
+6a5b : 00000000;
+6a5c : 00000000;
+6a5d : 00000000;
+6a5e : 00000000;
+6a5f : 00000000;
+6a60 : 00000000;
+6a61 : 00000000;
+6a62 : 00000000;
+6a63 : 00000000;
+6a64 : 00000000;
+6a65 : 00000000;
+6a66 : 00000000;
+6a67 : 00000000;
+6a68 : 00000000;
+6a69 : 00000000;
+6a6a : 00000000;
+6a6b : 00000000;
+6a6c : 00000000;
+6a6d : 00000000;
+6a6e : 00000000;
+6a6f : 00000000;
+6a70 : 00000000;
+6a71 : 00000000;
+6a72 : 00000000;
+6a73 : 00000000;
+6a74 : 00000000;
+6a75 : 00000000;
+6a76 : 00000000;
+6a77 : 00000000;
+6a78 : 00000000;
+6a79 : 00000000;
+6a7a : 00000000;
+6a7b : 00000000;
+6a7c : 00000000;
+6a7d : 00000000;
+6a7e : 00000000;
+6a7f : 00000000;
+6a80 : 00000000;
+6a81 : 00000000;
+6a82 : 00000000;
+6a83 : 00000000;
+6a84 : 00000000;
+6a85 : 00000000;
+6a86 : 00000000;
+6a87 : 00000000;
+6a88 : 00000000;
+6a89 : 00000000;
+6a8a : 00000000;
+6a8b : 00000000;
+6a8c : 00000000;
+6a8d : 00000000;
+6a8e : 00000000;
+6a8f : 00000000;
+6a90 : 00000000;
+6a91 : 00000000;
+6a92 : 00000000;
+6a93 : 00000000;
+6a94 : 00000000;
+6a95 : 00000000;
+6a96 : 00000000;
+6a97 : 00000000;
+6a98 : 00000000;
+6a99 : 00000000;
+6a9a : 00000000;
+6a9b : 00000000;
+6a9c : 00000000;
+6a9d : 00000000;
+6a9e : 00000000;
+6a9f : 00000000;
+6aa0 : 00000000;
+6aa1 : 00000000;
+6aa2 : 00000000;
+6aa3 : 00000000;
+6aa4 : 00000000;
+6aa5 : 00000000;
+6aa6 : 00000000;
+6aa7 : 00000000;
+6aa8 : 00000000;
+6aa9 : 00000000;
+6aaa : 00000000;
+6aab : 00000000;
+6aac : 00000000;
+6aad : 00000000;
+6aae : 00000000;
+6aaf : 00000000;
+6ab0 : 00000000;
+6ab1 : 00000000;
+6ab2 : 00000000;
+6ab3 : 00000000;
+6ab4 : 00000000;
+6ab5 : 00000000;
+6ab6 : 00000000;
+6ab7 : 00000000;
+6ab8 : 00000000;
+6ab9 : 00000000;
+6aba : 00000000;
+6abb : 00000000;
+6abc : 00000000;
+6abd : 00000000;
+6abe : 00000000;
+6abf : 00000000;
+6ac0 : 00000000;
+6ac1 : 00000000;
+6ac2 : 00000000;
+6ac3 : 00000000;
+6ac4 : 00000000;
+6ac5 : 00000000;
+6ac6 : 00000000;
+6ac7 : 00000000;
+6ac8 : 00000000;
+6ac9 : 00000000;
+6aca : 00000000;
+6acb : 00000000;
+6acc : 00000000;
+6acd : 00000000;
+6ace : 00000000;
+6acf : 00000000;
+6ad0 : 00000000;
+6ad1 : 00000000;
+6ad2 : 00000000;
+6ad3 : 00000000;
+6ad4 : 00000000;
+6ad5 : 00000000;
+6ad6 : 00000000;
+6ad7 : 00000000;
+6ad8 : 00000000;
+6ad9 : 00000000;
+6ada : 00000000;
+6adb : 00000000;
+6adc : 00000000;
+6add : 00000000;
+6ade : 00000000;
+6adf : 00000000;
+6ae0 : 00000000;
+6ae1 : 00000000;
+6ae2 : 00000000;
+6ae3 : 00000000;
+6ae4 : 00000000;
+6ae5 : 00000000;
+6ae6 : 00000000;
+6ae7 : 00000000;
+6ae8 : 00000000;
+6ae9 : 00000000;
+6aea : 00000000;
+6aeb : 00000000;
+6aec : 00000000;
+6aed : 00000000;
+6aee : 00000000;
+6aef : 00000000;
+6af0 : 00000000;
+6af1 : 00000000;
+6af2 : 00000000;
+6af3 : 00000000;
+6af4 : 00000000;
+6af5 : 00000000;
+6af6 : 00000000;
+6af7 : 00000000;
+6af8 : 00000000;
+6af9 : 00000000;
+6afa : 00000000;
+6afb : 00000000;
+6afc : 00000000;
+6afd : 00000000;
+6afe : 00000000;
+6aff : 00000000;
+6b00 : 00000000;
+6b01 : 00000000;
+6b02 : 00000000;
+6b03 : 00000000;
+6b04 : 00000000;
+6b05 : 00000000;
+6b06 : 00000000;
+6b07 : 00000000;
+6b08 : 00000000;
+6b09 : 00000000;
+6b0a : 00000000;
+6b0b : 00000000;
+6b0c : 00000000;
+6b0d : 00000000;
+6b0e : 00000000;
+6b0f : 00000000;
+6b10 : 00000000;
+6b11 : 00000000;
+6b12 : 00000000;
+6b13 : 00000000;
+6b14 : 00000000;
+6b15 : 00000000;
+6b16 : 00000000;
+6b17 : 00000000;
+6b18 : 00000000;
+6b19 : 00000000;
+6b1a : 00000000;
+6b1b : 00000000;
+6b1c : 00000000;
+6b1d : 00000000;
+6b1e : 00000000;
+6b1f : 00000000;
+6b20 : 00000000;
+6b21 : 00000000;
+6b22 : 00000000;
+6b23 : 00000000;
+6b24 : 00000000;
+6b25 : 00000000;
+6b26 : 00000000;
+6b27 : 00000000;
+6b28 : 00000000;
+6b29 : 00000000;
+6b2a : 00000000;
+6b2b : 00000000;
+6b2c : 00000000;
+6b2d : 00000000;
+6b2e : 00000000;
+6b2f : 00000000;
+6b30 : 00000000;
+6b31 : 00000000;
+6b32 : 00000000;
+6b33 : 00000000;
+6b34 : 00000000;
+6b35 : 00000000;
+6b36 : 00000000;
+6b37 : 00000000;
+6b38 : 00000000;
+6b39 : 00000000;
+6b3a : 00000000;
+6b3b : 00000000;
+6b3c : 00000000;
+6b3d : 00000000;
+6b3e : 00000000;
+6b3f : 00000000;
+6b40 : 00000000;
+6b41 : 00000000;
+6b42 : 00000000;
+6b43 : 00000000;
+6b44 : 00000000;
+6b45 : 00000000;
+6b46 : 00000000;
+6b47 : 00000000;
+6b48 : 00000000;
+6b49 : 00000000;
+6b4a : 00000000;
+6b4b : 00000000;
+6b4c : 00000000;
+6b4d : 00000000;
+6b4e : 00000000;
+6b4f : 00000000;
+6b50 : 00000000;
+6b51 : 00000000;
+6b52 : 00000000;
+6b53 : 00000000;
+6b54 : 00000000;
+6b55 : 00000000;
+6b56 : 00000000;
+6b57 : 00000000;
+6b58 : 00000000;
+6b59 : 00000000;
+6b5a : 00000000;
+6b5b : 00000000;
+6b5c : 00000000;
+6b5d : 00000000;
+6b5e : 00000000;
+6b5f : 00000000;
+6b60 : 00000000;
+6b61 : 00000000;
+6b62 : 00000000;
+6b63 : 00000000;
+6b64 : 00000000;
+6b65 : 00000000;
+6b66 : 00000000;
+6b67 : 00000000;
+6b68 : 00000000;
+6b69 : 00000000;
+6b6a : 00000000;
+6b6b : 00000000;
+6b6c : 00000000;
+6b6d : 00000000;
+6b6e : 00000000;
+6b6f : 00000000;
+6b70 : 00000000;
+6b71 : 00000000;
+6b72 : 00000000;
+6b73 : 00000000;
+6b74 : 00000000;
+6b75 : 00000000;
+6b76 : 00000000;
+6b77 : 00000000;
+6b78 : 00000000;
+6b79 : 00000000;
+6b7a : 00000000;
+6b7b : 00000000;
+6b7c : 00000000;
+6b7d : 00000000;
+6b7e : 00000000;
+6b7f : 00000000;
+6b80 : 00000000;
+6b81 : 00000000;
+6b82 : 00000000;
+6b83 : 00000000;
+6b84 : 00000000;
+6b85 : 00000000;
+6b86 : 00000000;
+6b87 : 00000000;
+6b88 : 00000000;
+6b89 : 00000000;
+6b8a : 00000000;
+6b8b : 00000000;
+6b8c : 00000000;
+6b8d : 00000000;
+6b8e : 00000000;
+6b8f : 00000000;
+6b90 : 00000000;
+6b91 : 00000000;
+6b92 : 00000000;
+6b93 : 00000000;
+6b94 : 00000000;
+6b95 : 00000000;
+6b96 : 00000000;
+6b97 : 00000000;
+6b98 : 00000000;
+6b99 : 00000000;
+6b9a : 00000000;
+6b9b : 00000000;
+6b9c : 00000000;
+6b9d : 00000000;
+6b9e : 00000000;
+6b9f : 00000000;
+6ba0 : 00000000;
+6ba1 : 00000000;
+6ba2 : 00000000;
+6ba3 : 00000000;
+6ba4 : 00000000;
+6ba5 : 00000000;
+6ba6 : 00000000;
+6ba7 : 00000000;
+6ba8 : 00000000;
+6ba9 : 00000000;
+6baa : 00000000;
+6bab : 00000000;
+6bac : 00000000;
+6bad : 00000000;
+6bae : 00000000;
+6baf : 00000000;
+6bb0 : 00000000;
+6bb1 : 00000000;
+6bb2 : 00000000;
+6bb3 : 00000000;
+6bb4 : 00000000;
+6bb5 : 00000000;
+6bb6 : 00000000;
+6bb7 : 00000000;
+6bb8 : 00000000;
+6bb9 : 00000000;
+6bba : 00000000;
+6bbb : 00000000;
+6bbc : 00000000;
+6bbd : 00000000;
+6bbe : 00000000;
+6bbf : 00000000;
+6bc0 : 00000000;
+6bc1 : 00000000;
+6bc2 : 00000000;
+6bc3 : 00000000;
+6bc4 : 00000000;
+6bc5 : 00000000;
+6bc6 : 00000000;
+6bc7 : 00000000;
+6bc8 : 00000000;
+6bc9 : 00000000;
+6bca : 00000000;
+6bcb : 00000000;
+6bcc : 00000000;
+6bcd : 00000000;
+6bce : 00000000;
+6bcf : 00000000;
+6bd0 : 00000000;
+6bd1 : 00000000;
+6bd2 : 00000000;
+6bd3 : 00000000;
+6bd4 : 00000000;
+6bd5 : 00000000;
+6bd6 : 00000000;
+6bd7 : 00000000;
+6bd8 : 00000000;
+6bd9 : 00000000;
+6bda : 00000000;
+6bdb : 00000000;
+6bdc : 00000000;
+6bdd : 00000000;
+6bde : 00000000;
+6bdf : 00000000;
+6be0 : 00000000;
+6be1 : 00000000;
+6be2 : 00000000;
+6be3 : 00000000;
+6be4 : 00000000;
+6be5 : 00000000;
+6be6 : 00000000;
+6be7 : 00000000;
+6be8 : 00000000;
+6be9 : 00000000;
+6bea : 00000000;
+6beb : 00000000;
+6bec : 00000000;
+6bed : 00000000;
+6bee : 00000000;
+6bef : 00000000;
+6bf0 : 00000000;
+6bf1 : 00000000;
+6bf2 : 00000000;
+6bf3 : 00000000;
+6bf4 : 00000000;
+6bf5 : 00000000;
+6bf6 : 00000000;
+6bf7 : 00000000;
+6bf8 : 00000000;
+6bf9 : 00000000;
+6bfa : 00000000;
+6bfb : 00000000;
+6bfc : 00000000;
+6bfd : 00000000;
+6bfe : 00000000;
+6bff : 00000000;
+6c00 : 00000000;
+6c01 : 00000000;
+6c02 : 00000000;
+6c03 : 00000000;
+6c04 : 00000000;
+6c05 : 00000000;
+6c06 : 00000000;
+6c07 : 00000000;
+6c08 : 00000000;
+6c09 : 00000000;
+6c0a : 00000000;
+6c0b : 00000000;
+6c0c : 00000000;
+6c0d : 00000000;
+6c0e : 00000000;
+6c0f : 00000000;
+6c10 : 00000000;
+6c11 : 00000000;
+6c12 : 00000000;
+6c13 : 00000000;
+6c14 : 00000000;
+6c15 : 00000000;
+6c16 : 00000000;
+6c17 : 00000000;
+6c18 : 00000000;
+6c19 : 00000000;
+6c1a : 00000000;
+6c1b : 00000000;
+6c1c : 00000000;
+6c1d : 00000000;
+6c1e : 00000000;
+6c1f : 00000000;
+6c20 : 00000000;
+6c21 : 00000000;
+6c22 : 00000000;
+6c23 : 00000000;
+6c24 : 00000000;
+6c25 : 00000000;
+6c26 : 00000000;
+6c27 : 00000000;
+6c28 : 00000000;
+6c29 : 00000000;
+6c2a : 00000000;
+6c2b : 00000000;
+6c2c : 00000000;
+6c2d : 00000000;
+6c2e : 00000000;
+6c2f : 00000000;
+6c30 : 00000000;
+6c31 : 00000000;
+6c32 : 00000000;
+6c33 : 00000000;
+6c34 : 00000000;
+6c35 : 00000000;
+6c36 : 00000000;
+6c37 : 00000000;
+6c38 : 00000000;
+6c39 : 00000000;
+6c3a : 00000000;
+6c3b : 00000000;
+6c3c : 00000000;
+6c3d : 00000000;
+6c3e : 00000000;
+6c3f : 00000000;
+6c40 : 00000000;
+6c41 : 00000000;
+6c42 : 00000000;
+6c43 : 00000000;
+6c44 : 00000000;
+6c45 : 00000000;
+6c46 : 00000000;
+6c47 : 00000000;
+6c48 : 00000000;
+6c49 : 00000000;
+6c4a : 00000000;
+6c4b : 00000000;
+6c4c : 00000000;
+6c4d : 00000000;
+6c4e : 00000000;
+6c4f : 00000000;
+6c50 : 00000000;
+6c51 : 00000000;
+6c52 : 00000000;
+6c53 : 00000000;
+6c54 : 00000000;
+6c55 : 00000000;
+6c56 : 00000000;
+6c57 : 00000000;
+6c58 : 00000000;
+6c59 : 00000000;
+6c5a : 00000000;
+6c5b : 00000000;
+6c5c : 00000000;
+6c5d : 00000000;
+6c5e : 00000000;
+6c5f : 00000000;
+6c60 : 00000000;
+6c61 : 00000000;
+6c62 : 00000000;
+6c63 : 00000000;
+6c64 : 00000000;
+6c65 : 00000000;
+6c66 : 00000000;
+6c67 : 00000000;
+6c68 : 00000000;
+6c69 : 00000000;
+6c6a : 00000000;
+6c6b : 00000000;
+6c6c : 00000000;
+6c6d : 00000000;
+6c6e : 00000000;
+6c6f : 00000000;
+6c70 : 00000000;
+6c71 : 00000000;
+6c72 : 00000000;
+6c73 : 00000000;
+6c74 : 00000000;
+6c75 : 00000000;
+6c76 : 00000000;
+6c77 : 00000000;
+6c78 : 00000000;
+6c79 : 00000000;
+6c7a : 00000000;
+6c7b : 00000000;
+6c7c : 00000000;
+6c7d : 00000000;
+6c7e : 00000000;
+6c7f : 00000000;
+6c80 : 00000000;
+6c81 : 00000000;
+6c82 : 00000000;
+6c83 : 00000000;
+6c84 : 00000000;
+6c85 : 00000000;
+6c86 : 00000000;
+6c87 : 00000000;
+6c88 : 00000000;
+6c89 : 00000000;
+6c8a : 00000000;
+6c8b : 00000000;
+6c8c : 00000000;
+6c8d : 00000000;
+6c8e : 00000000;
+6c8f : 00000000;
+6c90 : 00000000;
+6c91 : 00000000;
+6c92 : 00000000;
+6c93 : 00000000;
+6c94 : 00000000;
+6c95 : 00000000;
+6c96 : 00000000;
+6c97 : 00000000;
+6c98 : 00000000;
+6c99 : 00000000;
+6c9a : 00000000;
+6c9b : 00000000;
+6c9c : 00000000;
+6c9d : 00000000;
+6c9e : 00000000;
+6c9f : 00000000;
+6ca0 : 00000000;
+6ca1 : 00000000;
+6ca2 : 00000000;
+6ca3 : 00000000;
+6ca4 : 00000000;
+6ca5 : 00000000;
+6ca6 : 00000000;
+6ca7 : 00000000;
+6ca8 : 00000000;
+6ca9 : 00000000;
+6caa : 00000000;
+6cab : 00000000;
+6cac : 00000000;
+6cad : 00000000;
+6cae : 00000000;
+6caf : 00000000;
+6cb0 : 00000000;
+6cb1 : 00000000;
+6cb2 : 00000000;
+6cb3 : 00000000;
+6cb4 : 00000000;
+6cb5 : 00000000;
+6cb6 : 00000000;
+6cb7 : 00000000;
+6cb8 : 00000000;
+6cb9 : 00000000;
+6cba : 00000000;
+6cbb : 00000000;
+6cbc : 00000000;
+6cbd : 00000000;
+6cbe : 00000000;
+6cbf : 00000000;
+6cc0 : 00000000;
+6cc1 : 00000000;
+6cc2 : 00000000;
+6cc3 : 00000000;
+6cc4 : 00000000;
+6cc5 : 00000000;
+6cc6 : 00000000;
+6cc7 : 00000000;
+6cc8 : 00000000;
+6cc9 : 00000000;
+6cca : 00000000;
+6ccb : 00000000;
+6ccc : 00000000;
+6ccd : 00000000;
+6cce : 00000000;
+6ccf : 00000000;
+6cd0 : 00000000;
+6cd1 : 00000000;
+6cd2 : 00000000;
+6cd3 : 00000000;
+6cd4 : 00000000;
+6cd5 : 00000000;
+6cd6 : 00000000;
+6cd7 : 00000000;
+6cd8 : 00000000;
+6cd9 : 00000000;
+6cda : 00000000;
+6cdb : 00000000;
+6cdc : 00000000;
+6cdd : 00000000;
+6cde : 00000000;
+6cdf : 00000000;
+6ce0 : 00000000;
+6ce1 : 00000000;
+6ce2 : 00000000;
+6ce3 : 00000000;
+6ce4 : 00000000;
+6ce5 : 00000000;
+6ce6 : 00000000;
+6ce7 : 00000000;
+6ce8 : 00000000;
+6ce9 : 00000000;
+6cea : 00000000;
+6ceb : 00000000;
+6cec : 00000000;
+6ced : 00000000;
+6cee : 00000000;
+6cef : 00000000;
+6cf0 : 00000000;
+6cf1 : 00000000;
+6cf2 : 00000000;
+6cf3 : 00000000;
+6cf4 : 00000000;
+6cf5 : 00000000;
+6cf6 : 00000000;
+6cf7 : 00000000;
+6cf8 : 00000000;
+6cf9 : 00000000;
+6cfa : 00000000;
+6cfb : 00000000;
+6cfc : 00000000;
+6cfd : 00000000;
+6cfe : 00000000;
+6cff : 00000000;
+6d00 : 00000000;
+6d01 : 00000000;
+6d02 : 00000000;
+6d03 : 00000000;
+6d04 : 00000000;
+6d05 : 00000000;
+6d06 : 00000000;
+6d07 : 00000000;
+6d08 : 00000000;
+6d09 : 00000000;
+6d0a : 00000000;
+6d0b : 00000000;
+6d0c : 00000000;
+6d0d : 00000000;
+6d0e : 00000000;
+6d0f : 00000000;
+6d10 : 00000000;
+6d11 : 00000000;
+6d12 : 00000000;
+6d13 : 00000000;
+6d14 : 00000000;
+6d15 : 00000000;
+6d16 : 00000000;
+6d17 : 00000000;
+6d18 : 00000000;
+6d19 : 00000000;
+6d1a : 00000000;
+6d1b : 00000000;
+6d1c : 00000000;
+6d1d : 00000000;
+6d1e : 00000000;
+6d1f : 00000000;
+6d20 : 00000000;
+6d21 : 00000000;
+6d22 : 00000000;
+6d23 : 00000000;
+6d24 : 00000000;
+6d25 : 00000000;
+6d26 : 00000000;
+6d27 : 00000000;
+6d28 : 00000000;
+6d29 : 00000000;
+6d2a : 00000000;
+6d2b : 00000000;
+6d2c : 00000000;
+6d2d : 00000000;
+6d2e : 00000000;
+6d2f : 00000000;
+6d30 : 00000000;
+6d31 : 00000000;
+6d32 : 00000000;
+6d33 : 00000000;
+6d34 : 00000000;
+6d35 : 00000000;
+6d36 : 00000000;
+6d37 : 00000000;
+6d38 : 00000000;
+6d39 : 00000000;
+6d3a : 00000000;
+6d3b : 00000000;
+6d3c : 00000000;
+6d3d : 00000000;
+6d3e : 00000000;
+6d3f : 00000000;
+6d40 : 00000000;
+6d41 : 00000000;
+6d42 : 00000000;
+6d43 : 00000000;
+6d44 : 00000000;
+6d45 : 00000000;
+6d46 : 00000000;
+6d47 : 00000000;
+6d48 : 00000000;
+6d49 : 00000000;
+6d4a : 00000000;
+6d4b : 00000000;
+6d4c : 00000000;
+6d4d : 00000000;
+6d4e : 00000000;
+6d4f : 00000000;
+6d50 : 00000000;
+6d51 : 00000000;
+6d52 : 00000000;
+6d53 : 00000000;
+6d54 : 00000000;
+6d55 : 00000000;
+6d56 : 00000000;
+6d57 : 00000000;
+6d58 : 00000000;
+6d59 : 00000000;
+6d5a : 00000000;
+6d5b : 00000000;
+6d5c : 00000000;
+6d5d : 00000000;
+6d5e : 00000000;
+6d5f : 00000000;
+6d60 : 00000000;
+6d61 : 00000000;
+6d62 : 00000000;
+6d63 : 00000000;
+6d64 : 00000000;
+6d65 : 00000000;
+6d66 : 00000000;
+6d67 : 00000000;
+6d68 : 00000000;
+6d69 : 00000000;
+6d6a : 00000000;
+6d6b : 00000000;
+6d6c : 00000000;
+6d6d : 00000000;
+6d6e : 00000000;
+6d6f : 00000000;
+6d70 : 00000000;
+6d71 : 00000000;
+6d72 : 00000000;
+6d73 : 00000000;
+6d74 : 00000000;
+6d75 : 00000000;
+6d76 : 00000000;
+6d77 : 00000000;
+6d78 : 00000000;
+6d79 : 00000000;
+6d7a : 00000000;
+6d7b : 00000000;
+6d7c : 00000000;
+6d7d : 00000000;
+6d7e : 00000000;
+6d7f : 00000000;
+6d80 : 00000000;
+6d81 : 00000000;
+6d82 : 00000000;
+6d83 : 00000000;
+6d84 : 00000000;
+6d85 : 00000000;
+6d86 : 00000000;
+6d87 : 00000000;
+6d88 : 00000000;
+6d89 : 00000000;
+6d8a : 00000000;
+6d8b : 00000000;
+6d8c : 00000000;
+6d8d : 00000000;
+6d8e : 00000000;
+6d8f : 00000000;
+6d90 : 00000000;
+6d91 : 00000000;
+6d92 : 00000000;
+6d93 : 00000000;
+6d94 : 00000000;
+6d95 : 00000000;
+6d96 : 00000000;
+6d97 : 00000000;
+6d98 : 00000000;
+6d99 : 00000000;
+6d9a : 00000000;
+6d9b : 00000000;
+6d9c : 00000000;
+6d9d : 00000000;
+6d9e : 00000000;
+6d9f : 00000000;
+6da0 : 00000000;
+6da1 : 00000000;
+6da2 : 00000000;
+6da3 : 00000000;
+6da4 : 00000000;
+6da5 : 00000000;
+6da6 : 00000000;
+6da7 : 00000000;
+6da8 : 00000000;
+6da9 : 00000000;
+6daa : 00000000;
+6dab : 00000000;
+6dac : 00000000;
+6dad : 00000000;
+6dae : 00000000;
+6daf : 00000000;
+6db0 : 00000000;
+6db1 : 00000000;
+6db2 : 00000000;
+6db3 : 00000000;
+6db4 : 00000000;
+6db5 : 00000000;
+6db6 : 00000000;
+6db7 : 00000000;
+6db8 : 00000000;
+6db9 : 00000000;
+6dba : 00000000;
+6dbb : 00000000;
+6dbc : 00000000;
+6dbd : 00000000;
+6dbe : 00000000;
+6dbf : 00000000;
+6dc0 : 00000000;
+6dc1 : 00000000;
+6dc2 : 00000000;
+6dc3 : 00000000;
+6dc4 : 00000000;
+6dc5 : 00000000;
+6dc6 : 00000000;
+6dc7 : 00000000;
+6dc8 : 00000000;
+6dc9 : 00000000;
+6dca : 00000000;
+6dcb : 00000000;
+6dcc : 00000000;
+6dcd : 00000000;
+6dce : 00000000;
+6dcf : 00000000;
+6dd0 : 00000000;
+6dd1 : 00000000;
+6dd2 : 00000000;
+6dd3 : 00000000;
+6dd4 : 00000000;
+6dd5 : 00000000;
+6dd6 : 00000000;
+6dd7 : 00000000;
+6dd8 : 00000000;
+6dd9 : 00000000;
+6dda : 00000000;
+6ddb : 00000000;
+6ddc : 00000000;
+6ddd : 00000000;
+6dde : 00000000;
+6ddf : 00000000;
+6de0 : 00000000;
+6de1 : 00000000;
+6de2 : 00000000;
+6de3 : 00000000;
+6de4 : 00000000;
+6de5 : 00000000;
+6de6 : 00000000;
+6de7 : 00000000;
+6de8 : 00000000;
+6de9 : 00000000;
+6dea : 00000000;
+6deb : 00000000;
+6dec : 00000000;
+6ded : 00000000;
+6dee : 00000000;
+6def : 00000000;
+6df0 : 00000000;
+6df1 : 00000000;
+6df2 : 00000000;
+6df3 : 00000000;
+6df4 : 00000000;
+6df5 : 00000000;
+6df6 : 00000000;
+6df7 : 00000000;
+6df8 : 00000000;
+6df9 : 00000000;
+6dfa : 00000000;
+6dfb : 00000000;
+6dfc : 00000000;
+6dfd : 00000000;
+6dfe : 00000000;
+6dff : 00000000;
+6e00 : 00000000;
+6e01 : 00000000;
+6e02 : 00000000;
+6e03 : 00000000;
+6e04 : 00000000;
+6e05 : 00000000;
+6e06 : 00000000;
+6e07 : 00000000;
+6e08 : 00000000;
+6e09 : 00000000;
+6e0a : 00000000;
+6e0b : 00000000;
+6e0c : 00000000;
+6e0d : 00000000;
+6e0e : 00000000;
+6e0f : 00000000;
+6e10 : 00000000;
+6e11 : 00000000;
+6e12 : 00000000;
+6e13 : 00000000;
+6e14 : 00000000;
+6e15 : 00000000;
+6e16 : 00000000;
+6e17 : 00000000;
+6e18 : 00000000;
+6e19 : 00000000;
+6e1a : 00000000;
+6e1b : 00000000;
+6e1c : 00000000;
+6e1d : 00000000;
+6e1e : 00000000;
+6e1f : 00000000;
+6e20 : 00000000;
+6e21 : 00000000;
+6e22 : 00000000;
+6e23 : 00000000;
+6e24 : 00000000;
+6e25 : 00000000;
+6e26 : 00000000;
+6e27 : 00000000;
+6e28 : 00000000;
+6e29 : 00000000;
+6e2a : 00000000;
+6e2b : 00000000;
+6e2c : 00000000;
+6e2d : 00000000;
+6e2e : 00000000;
+6e2f : 00000000;
+6e30 : 00000000;
+6e31 : 00000000;
+6e32 : 00000000;
+6e33 : 00000000;
+6e34 : 00000000;
+6e35 : 00000000;
+6e36 : 00000000;
+6e37 : 00000000;
+6e38 : 00000000;
+6e39 : 00000000;
+6e3a : 00000000;
+6e3b : 00000000;
+6e3c : 00000000;
+6e3d : 00000000;
+6e3e : 00000000;
+6e3f : 00000000;
+6e40 : 00000000;
+6e41 : 00000000;
+6e42 : 00000000;
+6e43 : 00000000;
+6e44 : 00000000;
+6e45 : 00000000;
+6e46 : 00000000;
+6e47 : 00000000;
+6e48 : 00000000;
+6e49 : 00000000;
+6e4a : 00000000;
+6e4b : 00000000;
+6e4c : 00000000;
+6e4d : 00000000;
+6e4e : 00000000;
+6e4f : 00000000;
+6e50 : 00000000;
+6e51 : 00000000;
+6e52 : 00000000;
+6e53 : 00000000;
+6e54 : 00000000;
+6e55 : 00000000;
+6e56 : 00000000;
+6e57 : 00000000;
+6e58 : 00000000;
+6e59 : 00000000;
+6e5a : 00000000;
+6e5b : 00000000;
+6e5c : 00000000;
+6e5d : 00000000;
+6e5e : 00000000;
+6e5f : 00000000;
+6e60 : 00000000;
+6e61 : 00000000;
+6e62 : 00000000;
+6e63 : 00000000;
+6e64 : 00000000;
+6e65 : 00000000;
+6e66 : 00000000;
+6e67 : 00000000;
+6e68 : 00000000;
+6e69 : 00000000;
+6e6a : 00000000;
+6e6b : 00000000;
+6e6c : 00000000;
+6e6d : 00000000;
+6e6e : 00000000;
+6e6f : 00000000;
+6e70 : 00000000;
+6e71 : 00000000;
+6e72 : 00000000;
+6e73 : 00000000;
+6e74 : 00000000;
+6e75 : 00000000;
+6e76 : 00000000;
+6e77 : 00000000;
+6e78 : 00000000;
+6e79 : 00000000;
+6e7a : 00000000;
+6e7b : 00000000;
+6e7c : 00000000;
+6e7d : 00000000;
+6e7e : 00000000;
+6e7f : 00000000;
+6e80 : 00000000;
+6e81 : 00000000;
+6e82 : 00000000;
+6e83 : 00000000;
+6e84 : 00000000;
+6e85 : 00000000;
+6e86 : 00000000;
+6e87 : 00000000;
+6e88 : 00000000;
+6e89 : 00000000;
+6e8a : 00000000;
+6e8b : 00000000;
+6e8c : 00000000;
+6e8d : 00000000;
+6e8e : 00000000;
+6e8f : 00000000;
+6e90 : 00000000;
+6e91 : 00000000;
+6e92 : 00000000;
+6e93 : 00000000;
+6e94 : 00000000;
+6e95 : 00000000;
+6e96 : 00000000;
+6e97 : 00000000;
+6e98 : 00000000;
+6e99 : 00000000;
+6e9a : 00000000;
+6e9b : 00000000;
+6e9c : 00000000;
+6e9d : 00000000;
+6e9e : 00000000;
+6e9f : 00000000;
+6ea0 : 00000000;
+6ea1 : 00000000;
+6ea2 : 00000000;
+6ea3 : 00000000;
+6ea4 : 00000000;
+6ea5 : 00000000;
+6ea6 : 00000000;
+6ea7 : 00000000;
+6ea8 : 00000000;
+6ea9 : 00000000;
+6eaa : 00000000;
+6eab : 00000000;
+6eac : 00000000;
+6ead : 00000000;
+6eae : 00000000;
+6eaf : 00000000;
+6eb0 : 00000000;
+6eb1 : 00000000;
+6eb2 : 00000000;
+6eb3 : 00000000;
+6eb4 : 00000000;
+6eb5 : 00000000;
+6eb6 : 00000000;
+6eb7 : 00000000;
+6eb8 : 00000000;
+6eb9 : 00000000;
+6eba : 00000000;
+6ebb : 00000000;
+6ebc : 00000000;
+6ebd : 00000000;
+6ebe : 00000000;
+6ebf : 00000000;
+6ec0 : 00000000;
+6ec1 : 00000000;
+6ec2 : 00000000;
+6ec3 : 00000000;
+6ec4 : 00000000;
+6ec5 : 00000000;
+6ec6 : 00000000;
+6ec7 : 00000000;
+6ec8 : 00000000;
+6ec9 : 00000000;
+6eca : 00000000;
+6ecb : 00000000;
+6ecc : 00000000;
+6ecd : 00000000;
+6ece : 00000000;
+6ecf : 00000000;
+6ed0 : 00000000;
+6ed1 : 00000000;
+6ed2 : 00000000;
+6ed3 : 00000000;
+6ed4 : 00000000;
+6ed5 : 00000000;
+6ed6 : 00000000;
+6ed7 : 00000000;
+6ed8 : 00000000;
+6ed9 : 00000000;
+6eda : 00000000;
+6edb : 00000000;
+6edc : 00000000;
+6edd : 00000000;
+6ede : 00000000;
+6edf : 00000000;
+6ee0 : 00000000;
+6ee1 : 00000000;
+6ee2 : 00000000;
+6ee3 : 00000000;
+6ee4 : 00000000;
+6ee5 : 00000000;
+6ee6 : 00000000;
+6ee7 : 00000000;
+6ee8 : 00000000;
+6ee9 : 00000000;
+6eea : 00000000;
+6eeb : 00000000;
+6eec : 00000000;
+6eed : 00000000;
+6eee : 00000000;
+6eef : 00000000;
+6ef0 : 00000000;
+6ef1 : 00000000;
+6ef2 : 00000000;
+6ef3 : 00000000;
+6ef4 : 00000000;
+6ef5 : 00000000;
+6ef6 : 00000000;
+6ef7 : 00000000;
+6ef8 : 00000000;
+6ef9 : 00000000;
+6efa : 00000000;
+6efb : 00000000;
+6efc : 00000000;
+6efd : 00000000;
+6efe : 00000000;
+6eff : 00000000;
+6f00 : 00000000;
+6f01 : 00000000;
+6f02 : 00000000;
+6f03 : 00000000;
+6f04 : 00000000;
+6f05 : 00000000;
+6f06 : 00000000;
+6f07 : 00000000;
+6f08 : 00000000;
+6f09 : 00000000;
+6f0a : 00000000;
+6f0b : 00000000;
+6f0c : 00000000;
+6f0d : 00000000;
+6f0e : 00000000;
+6f0f : 00000000;
+6f10 : 00000000;
+6f11 : 00000000;
+6f12 : 00000000;
+6f13 : 00000000;
+6f14 : 00000000;
+6f15 : 00000000;
+6f16 : 00000000;
+6f17 : 00000000;
+6f18 : 00000000;
+6f19 : 00000000;
+6f1a : 00000000;
+6f1b : 00000000;
+6f1c : 00000000;
+6f1d : 00000000;
+6f1e : 00000000;
+6f1f : 00000000;
+6f20 : 00000000;
+6f21 : 00000000;
+6f22 : 00000000;
+6f23 : 00000000;
+6f24 : 00000000;
+6f25 : 00000000;
+6f26 : 00000000;
+6f27 : 00000000;
+6f28 : 00000000;
+6f29 : 00000000;
+6f2a : 00000000;
+6f2b : 00000000;
+6f2c : 00000000;
+6f2d : 00000000;
+6f2e : 00000000;
+6f2f : 00000000;
+6f30 : 00000000;
+6f31 : 00000000;
+6f32 : 00000000;
+6f33 : 00000000;
+6f34 : 00000000;
+6f35 : 00000000;
+6f36 : 00000000;
+6f37 : 00000000;
+6f38 : 00000000;
+6f39 : 00000000;
+6f3a : 00000000;
+6f3b : 00000000;
+6f3c : 00000000;
+6f3d : 00000000;
+6f3e : 00000000;
+6f3f : 00000000;
+6f40 : 00000000;
+6f41 : 00000000;
+6f42 : 00000000;
+6f43 : 00000000;
+6f44 : 00000000;
+6f45 : 00000000;
+6f46 : 00000000;
+6f47 : 00000000;
+6f48 : 00000000;
+6f49 : 00000000;
+6f4a : 00000000;
+6f4b : 00000000;
+6f4c : 00000000;
+6f4d : 00000000;
+6f4e : 00000000;
+6f4f : 00000000;
+6f50 : 00000000;
+6f51 : 00000000;
+6f52 : 00000000;
+6f53 : 00000000;
+6f54 : 00000000;
+6f55 : 00000000;
+6f56 : 00000000;
+6f57 : 00000000;
+6f58 : 00000000;
+6f59 : 00000000;
+6f5a : 00000000;
+6f5b : 00000000;
+6f5c : 00000000;
+6f5d : 00000000;
+6f5e : 00000000;
+6f5f : 00000000;
+6f60 : 00000000;
+6f61 : 00000000;
+6f62 : 00000000;
+6f63 : 00000000;
+6f64 : 00000000;
+6f65 : 00000000;
+6f66 : 00000000;
+6f67 : 00000000;
+6f68 : 00000000;
+6f69 : 00000000;
+6f6a : 00000000;
+6f6b : 00000000;
+6f6c : 00000000;
+6f6d : 00000000;
+6f6e : 00000000;
+6f6f : 00000000;
+6f70 : 00000000;
+6f71 : 00000000;
+6f72 : 00000000;
+6f73 : 00000000;
+6f74 : 00000000;
+6f75 : 00000000;
+6f76 : 00000000;
+6f77 : 00000000;
+6f78 : 00000000;
+6f79 : 00000000;
+6f7a : 00000000;
+6f7b : 00000000;
+6f7c : 00000000;
+6f7d : 00000000;
+6f7e : 00000000;
+6f7f : 00000000;
+6f80 : 00000000;
+6f81 : 00000000;
+6f82 : 00000000;
+6f83 : 00000000;
+6f84 : 00000000;
+6f85 : 00000000;
+6f86 : 00000000;
+6f87 : 00000000;
+6f88 : 00000000;
+6f89 : 00000000;
+6f8a : 00000000;
+6f8b : 00000000;
+6f8c : 00000000;
+6f8d : 00000000;
+6f8e : 00000000;
+6f8f : 00000000;
+6f90 : 00000000;
+6f91 : 00000000;
+6f92 : 00000000;
+6f93 : 00000000;
+6f94 : 00000000;
+6f95 : 00000000;
+6f96 : 00000000;
+6f97 : 00000000;
+6f98 : 00000000;
+6f99 : 00000000;
+6f9a : 00000000;
+6f9b : 00000000;
+6f9c : 00000000;
+6f9d : 00000000;
+6f9e : 00000000;
+6f9f : 00000000;
+6fa0 : 00000000;
+6fa1 : 00000000;
+6fa2 : 00000000;
+6fa3 : 00000000;
+6fa4 : 00000000;
+6fa5 : 00000000;
+6fa6 : 00000000;
+6fa7 : 00000000;
+6fa8 : 00000000;
+6fa9 : 00000000;
+6faa : 00000000;
+6fab : 00000000;
+6fac : 00000000;
+6fad : 00000000;
+6fae : 00000000;
+6faf : 00000000;
+6fb0 : 00000000;
+6fb1 : 00000000;
+6fb2 : 00000000;
+6fb3 : 00000000;
+6fb4 : 00000000;
+6fb5 : 00000000;
+6fb6 : 00000000;
+6fb7 : 00000000;
+6fb8 : 00000000;
+6fb9 : 00000000;
+6fba : 00000000;
+6fbb : 00000000;
+6fbc : 00000000;
+6fbd : 00000000;
+6fbe : 00000000;
+6fbf : 00000000;
+6fc0 : 00000000;
+6fc1 : 00000000;
+6fc2 : 00000000;
+6fc3 : 00000000;
+6fc4 : 00000000;
+6fc5 : 00000000;
+6fc6 : 00000000;
+6fc7 : 00000000;
+6fc8 : 00000000;
+6fc9 : 00000000;
+6fca : 00000000;
+6fcb : 00000000;
+6fcc : 00000000;
+6fcd : 00000000;
+6fce : 00000000;
+6fcf : 00000000;
+6fd0 : 00000000;
+6fd1 : 00000000;
+6fd2 : 00000000;
+6fd3 : 00000000;
+6fd4 : 00000000;
+6fd5 : 00000000;
+6fd6 : 00000000;
+6fd7 : 00000000;
+6fd8 : 00000000;
+6fd9 : 00000000;
+6fda : 00000000;
+6fdb : 00000000;
+6fdc : 00000000;
+6fdd : 00000000;
+6fde : 00000000;
+6fdf : 00000000;
+6fe0 : 00000000;
+6fe1 : 00000000;
+6fe2 : 00000000;
+6fe3 : 00000000;
+6fe4 : 00000000;
+6fe5 : 00000000;
+6fe6 : 00000000;
+6fe7 : 00000000;
+6fe8 : 00000000;
+6fe9 : 00000000;
+6fea : 00000000;
+6feb : 00000000;
+6fec : 00000000;
+6fed : 00000000;
+6fee : 00000000;
+6fef : 00000000;
+6ff0 : 00000000;
+6ff1 : 00000000;
+6ff2 : 00000000;
+6ff3 : 00000000;
+6ff4 : 00000000;
+6ff5 : 00000000;
+6ff6 : 00000000;
+6ff7 : 00000000;
+6ff8 : 00000000;
+6ff9 : 00000000;
+6ffa : 00000000;
+6ffb : 00000000;
+6ffc : 00000000;
+6ffd : 00000000;
+6ffe : 00000000;
+6fff : 00000000;
+7000 : 00000000;
+7001 : 00000000;
+7002 : 00000000;
+7003 : 00000000;
+7004 : 00000000;
+7005 : 00000000;
+7006 : 00000000;
+7007 : 00000000;
+7008 : 00000000;
+7009 : 00000000;
+700a : 00000000;
+700b : 00000000;
+700c : 00000000;
+700d : 00000000;
+700e : 00000000;
+700f : 00000000;
+7010 : 00000000;
+7011 : 00000000;
+7012 : 00000000;
+7013 : 00000000;
+7014 : 00000000;
+7015 : 00000000;
+7016 : 00000000;
+7017 : 00000000;
+7018 : 00000000;
+7019 : 00000000;
+701a : 00000000;
+701b : 00000000;
+701c : 00000000;
+701d : 00000000;
+701e : 00000000;
+701f : 00000000;
+7020 : 00000000;
+7021 : 00000000;
+7022 : 00000000;
+7023 : 00000000;
+7024 : 00000000;
+7025 : 00000000;
+7026 : 00000000;
+7027 : 00000000;
+7028 : 00000000;
+7029 : 00000000;
+702a : 00000000;
+702b : 00000000;
+702c : 00000000;
+702d : 00000000;
+702e : 00000000;
+702f : 00000000;
+7030 : 00000000;
+7031 : 00000000;
+7032 : 00000000;
+7033 : 00000000;
+7034 : 00000000;
+7035 : 00000000;
+7036 : 00000000;
+7037 : 00000000;
+7038 : 00000000;
+7039 : 00000000;
+703a : 00000000;
+703b : 00000000;
+703c : 00000000;
+703d : 00000000;
+703e : 00000000;
+703f : 00000000;
+7040 : 00000000;
+7041 : 00000000;
+7042 : 00000000;
+7043 : 00000000;
+7044 : 00000000;
+7045 : 00000000;
+7046 : 00000000;
+7047 : 00000000;
+7048 : 00000000;
+7049 : 00000000;
+704a : 00000000;
+704b : 00000000;
+704c : 00000000;
+704d : 00000000;
+704e : 00000000;
+704f : 00000000;
+7050 : 00000000;
+7051 : 00000000;
+7052 : 00000000;
+7053 : 00000000;
+7054 : 00000000;
+7055 : 00000000;
+7056 : 00000000;
+7057 : 00000000;
+7058 : 00000000;
+7059 : 00000000;
+705a : 00000000;
+705b : 00000000;
+705c : 00000000;
+705d : 00000000;
+705e : 00000000;
+705f : 00000000;
+7060 : 00000000;
+7061 : 00000000;
+7062 : 00000000;
+7063 : 00000000;
+7064 : 00000000;
+7065 : 00000000;
+7066 : 00000000;
+7067 : 00000000;
+7068 : 00000000;
+7069 : 00000000;
+706a : 00000000;
+706b : 00000000;
+706c : 00000000;
+706d : 00000000;
+706e : 00000000;
+706f : 00000000;
+7070 : 00000000;
+7071 : 00000000;
+7072 : 00000000;
+7073 : 00000000;
+7074 : 00000000;
+7075 : 00000000;
+7076 : 00000000;
+7077 : 00000000;
+7078 : 00000000;
+7079 : 00000000;
+707a : 00000000;
+707b : 00000000;
+707c : 00000000;
+707d : 00000000;
+707e : 00000000;
+707f : 00000000;
+7080 : 00000000;
+7081 : 00000000;
+7082 : 00000000;
+7083 : 00000000;
+7084 : 00000000;
+7085 : 00000000;
+7086 : 00000000;
+7087 : 00000000;
+7088 : 00000000;
+7089 : 00000000;
+708a : 00000000;
+708b : 00000000;
+708c : 00000000;
+708d : 00000000;
+708e : 00000000;
+708f : 00000000;
+7090 : 00000000;
+7091 : 00000000;
+7092 : 00000000;
+7093 : 00000000;
+7094 : 00000000;
+7095 : 00000000;
+7096 : 00000000;
+7097 : 00000000;
+7098 : 00000000;
+7099 : 00000000;
+709a : 00000000;
+709b : 00000000;
+709c : 00000000;
+709d : 00000000;
+709e : 00000000;
+709f : 00000000;
+70a0 : 00000000;
+70a1 : 00000000;
+70a2 : 00000000;
+70a3 : 00000000;
+70a4 : 00000000;
+70a5 : 00000000;
+70a6 : 00000000;
+70a7 : 00000000;
+70a8 : 00000000;
+70a9 : 00000000;
+70aa : 00000000;
+70ab : 00000000;
+70ac : 00000000;
+70ad : 00000000;
+70ae : 00000000;
+70af : 00000000;
+70b0 : 00000000;
+70b1 : 00000000;
+70b2 : 00000000;
+70b3 : 00000000;
+70b4 : 00000000;
+70b5 : 00000000;
+70b6 : 00000000;
+70b7 : 00000000;
+70b8 : 00000000;
+70b9 : 00000000;
+70ba : 00000000;
+70bb : 00000000;
+70bc : 00000000;
+70bd : 00000000;
+70be : 00000000;
+70bf : 00000000;
+70c0 : 00000000;
+70c1 : 00000000;
+70c2 : 00000000;
+70c3 : 00000000;
+70c4 : 00000000;
+70c5 : 00000000;
+70c6 : 00000000;
+70c7 : 00000000;
+70c8 : 00000000;
+70c9 : 00000000;
+70ca : 00000000;
+70cb : 00000000;
+70cc : 00000000;
+70cd : 00000000;
+70ce : 00000000;
+70cf : 00000000;
+70d0 : 00000000;
+70d1 : 00000000;
+70d2 : 00000000;
+70d3 : 00000000;
+70d4 : 00000000;
+70d5 : 00000000;
+70d6 : 00000000;
+70d7 : 00000000;
+70d8 : 00000000;
+70d9 : 00000000;
+70da : 00000000;
+70db : 00000000;
+70dc : 00000000;
+70dd : 00000000;
+70de : 00000000;
+70df : 00000000;
+70e0 : 00000000;
+70e1 : 00000000;
+70e2 : 00000000;
+70e3 : 00000000;
+70e4 : 00000000;
+70e5 : 00000000;
+70e6 : 00000000;
+70e7 : 00000000;
+70e8 : 00000000;
+70e9 : 00000000;
+70ea : 00000000;
+70eb : 00000000;
+70ec : 00000000;
+70ed : 00000000;
+70ee : 00000000;
+70ef : 00000000;
+70f0 : 00000000;
+70f1 : 00000000;
+70f2 : 00000000;
+70f3 : 00000000;
+70f4 : 00000000;
+70f5 : 00000000;
+70f6 : 00000000;
+70f7 : 00000000;
+70f8 : 00000000;
+70f9 : 00000000;
+70fa : 00000000;
+70fb : 00000000;
+70fc : 00000000;
+70fd : 00000000;
+70fe : 00000000;
+70ff : 00000000;
+7100 : 00000000;
+7101 : 00000000;
+7102 : 00000000;
+7103 : 00000000;
+7104 : 00000000;
+7105 : 00000000;
+7106 : 00000000;
+7107 : 00000000;
+7108 : 00000000;
+7109 : 00000000;
+710a : 00000000;
+710b : 00000000;
+710c : 00000000;
+710d : 00000000;
+710e : 00000000;
+710f : 00000000;
+7110 : 00000000;
+7111 : 00000000;
+7112 : 00000000;
+7113 : 00000000;
+7114 : 00000000;
+7115 : 00000000;
+7116 : 00000000;
+7117 : 00000000;
+7118 : 00000000;
+7119 : 00000000;
+711a : 00000000;
+711b : 00000000;
+711c : 00000000;
+711d : 00000000;
+711e : 00000000;
+711f : 00000000;
+7120 : 00000000;
+7121 : 00000000;
+7122 : 00000000;
+7123 : 00000000;
+7124 : 00000000;
+7125 : 00000000;
+7126 : 00000000;
+7127 : 00000000;
+7128 : 00000000;
+7129 : 00000000;
+712a : 00000000;
+712b : 00000000;
+712c : 00000000;
+712d : 00000000;
+712e : 00000000;
+712f : 00000000;
+7130 : 00000000;
+7131 : 00000000;
+7132 : 00000000;
+7133 : 00000000;
+7134 : 00000000;
+7135 : 00000000;
+7136 : 00000000;
+7137 : 00000000;
+7138 : 00000000;
+7139 : 00000000;
+713a : 00000000;
+713b : 00000000;
+713c : 00000000;
+713d : 00000000;
+713e : 00000000;
+713f : 00000000;
+7140 : 00000000;
+7141 : 00000000;
+7142 : 00000000;
+7143 : 00000000;
+7144 : 00000000;
+7145 : 00000000;
+7146 : 00000000;
+7147 : 00000000;
+7148 : 00000000;
+7149 : 00000000;
+714a : 00000000;
+714b : 00000000;
+714c : 00000000;
+714d : 00000000;
+714e : 00000000;
+714f : 00000000;
+7150 : 00000000;
+7151 : 00000000;
+7152 : 00000000;
+7153 : 00000000;
+7154 : 00000000;
+7155 : 00000000;
+7156 : 00000000;
+7157 : 00000000;
+7158 : 00000000;
+7159 : 00000000;
+715a : 00000000;
+715b : 00000000;
+715c : 00000000;
+715d : 00000000;
+715e : 00000000;
+715f : 00000000;
+7160 : 00000000;
+7161 : 00000000;
+7162 : 00000000;
+7163 : 00000000;
+7164 : 00000000;
+7165 : 00000000;
+7166 : 00000000;
+7167 : 00000000;
+7168 : 00000000;
+7169 : 00000000;
+716a : 00000000;
+716b : 00000000;
+716c : 00000000;
+716d : 00000000;
+716e : 00000000;
+716f : 00000000;
+7170 : 00000000;
+7171 : 00000000;
+7172 : 00000000;
+7173 : 00000000;
+7174 : 00000000;
+7175 : 00000000;
+7176 : 00000000;
+7177 : 00000000;
+7178 : 00000000;
+7179 : 00000000;
+717a : 00000000;
+717b : 00000000;
+717c : 00000000;
+717d : 00000000;
+717e : 00000000;
+717f : 00000000;
+7180 : 00000000;
+7181 : 00000000;
+7182 : 00000000;
+7183 : 00000000;
+7184 : 00000000;
+7185 : 00000000;
+7186 : 00000000;
+7187 : 00000000;
+7188 : 00000000;
+7189 : 00000000;
+718a : 00000000;
+718b : 00000000;
+718c : 00000000;
+718d : 00000000;
+718e : 00000000;
+718f : 00000000;
+7190 : 00000000;
+7191 : 00000000;
+7192 : 00000000;
+7193 : 00000000;
+7194 : 00000000;
+7195 : 00000000;
+7196 : 00000000;
+7197 : 00000000;
+7198 : 00000000;
+7199 : 00000000;
+719a : 00000000;
+719b : 00000000;
+719c : 00000000;
+719d : 00000000;
+719e : 00000000;
+719f : 00000000;
+71a0 : 00000000;
+71a1 : 00000000;
+71a2 : 00000000;
+71a3 : 00000000;
+71a4 : 00000000;
+71a5 : 00000000;
+71a6 : 00000000;
+71a7 : 00000000;
+71a8 : 00000000;
+71a9 : 00000000;
+71aa : 00000000;
+71ab : 00000000;
+71ac : 00000000;
+71ad : 00000000;
+71ae : 00000000;
+71af : 00000000;
+71b0 : 00000000;
+71b1 : 00000000;
+71b2 : 00000000;
+71b3 : 00000000;
+71b4 : 00000000;
+71b5 : 00000000;
+71b6 : 00000000;
+71b7 : 00000000;
+71b8 : 00000000;
+71b9 : 00000000;
+71ba : 00000000;
+71bb : 00000000;
+71bc : 00000000;
+71bd : 00000000;
+71be : 00000000;
+71bf : 00000000;
+71c0 : 00000000;
+71c1 : 00000000;
+71c2 : 00000000;
+71c3 : 00000000;
+71c4 : 00000000;
+71c5 : 00000000;
+71c6 : 00000000;
+71c7 : 00000000;
+71c8 : 00000000;
+71c9 : 00000000;
+71ca : 00000000;
+71cb : 00000000;
+71cc : 00000000;
+71cd : 00000000;
+71ce : 00000000;
+71cf : 00000000;
+71d0 : 00000000;
+71d1 : 00000000;
+71d2 : 00000000;
+71d3 : 00000000;
+71d4 : 00000000;
+71d5 : 00000000;
+71d6 : 00000000;
+71d7 : 00000000;
+71d8 : 00000000;
+71d9 : 00000000;
+71da : 00000000;
+71db : 00000000;
+71dc : 00000000;
+71dd : 00000000;
+71de : 00000000;
+71df : 00000000;
+71e0 : 00000000;
+71e1 : 00000000;
+71e2 : 00000000;
+71e3 : 00000000;
+71e4 : 00000000;
+71e5 : 00000000;
+71e6 : 00000000;
+71e7 : 00000000;
+71e8 : 00000000;
+71e9 : 00000000;
+71ea : 00000000;
+71eb : 00000000;
+71ec : 00000000;
+71ed : 00000000;
+71ee : 00000000;
+71ef : 00000000;
+71f0 : 00000000;
+71f1 : 00000000;
+71f2 : 00000000;
+71f3 : 00000000;
+71f4 : 00000000;
+71f5 : 00000000;
+71f6 : 00000000;
+71f7 : 00000000;
+71f8 : 00000000;
+71f9 : 00000000;
+71fa : 00000000;
+71fb : 00000000;
+71fc : 00000000;
+71fd : 00000000;
+71fe : 00000000;
+71ff : 00000000;
+7200 : 00000000;
+7201 : 00000000;
+7202 : 00000000;
+7203 : 00000000;
+7204 : 00000000;
+7205 : 00000000;
+7206 : 00000000;
+7207 : 00000000;
+7208 : 00000000;
+7209 : 00000000;
+720a : 00000000;
+720b : 00000000;
+720c : 00000000;
+720d : 00000000;
+720e : 00000000;
+720f : 00000000;
+7210 : 00000000;
+7211 : 00000000;
+7212 : 00000000;
+7213 : 00000000;
+7214 : 00000000;
+7215 : 00000000;
+7216 : 00000000;
+7217 : 00000000;
+7218 : 00000000;
+7219 : 00000000;
+721a : 00000000;
+721b : 00000000;
+721c : 00000000;
+721d : 00000000;
+721e : 00000000;
+721f : 00000000;
+7220 : 00000000;
+7221 : 00000000;
+7222 : 00000000;
+7223 : 00000000;
+7224 : 00000000;
+7225 : 00000000;
+7226 : 00000000;
+7227 : 00000000;
+7228 : 00000000;
+7229 : 00000000;
+722a : 00000000;
+722b : 00000000;
+722c : 00000000;
+722d : 00000000;
+722e : 00000000;
+722f : 00000000;
+7230 : 00000000;
+7231 : 00000000;
+7232 : 00000000;
+7233 : 00000000;
+7234 : 00000000;
+7235 : 00000000;
+7236 : 00000000;
+7237 : 00000000;
+7238 : 00000000;
+7239 : 00000000;
+723a : 00000000;
+723b : 00000000;
+723c : 00000000;
+723d : 00000000;
+723e : 00000000;
+723f : 00000000;
+7240 : 00000000;
+7241 : 00000000;
+7242 : 00000000;
+7243 : 00000000;
+7244 : 00000000;
+7245 : 00000000;
+7246 : 00000000;
+7247 : 00000000;
+7248 : 00000000;
+7249 : 00000000;
+724a : 00000000;
+724b : 00000000;
+724c : 00000000;
+724d : 00000000;
+724e : 00000000;
+724f : 00000000;
+7250 : 00000000;
+7251 : 00000000;
+7252 : 00000000;
+7253 : 00000000;
+7254 : 00000000;
+7255 : 00000000;
+7256 : 00000000;
+7257 : 00000000;
+7258 : 00000000;
+7259 : 00000000;
+725a : 00000000;
+725b : 00000000;
+725c : 00000000;
+725d : 00000000;
+725e : 00000000;
+725f : 00000000;
+7260 : 00000000;
+7261 : 00000000;
+7262 : 00000000;
+7263 : 00000000;
+7264 : 00000000;
+7265 : 00000000;
+7266 : 00000000;
+7267 : 00000000;
+7268 : 00000000;
+7269 : 00000000;
+726a : 00000000;
+726b : 00000000;
+726c : 00000000;
+726d : 00000000;
+726e : 00000000;
+726f : 00000000;
+7270 : 00000000;
+7271 : 00000000;
+7272 : 00000000;
+7273 : 00000000;
+7274 : 00000000;
+7275 : 00000000;
+7276 : 00000000;
+7277 : 00000000;
+7278 : 00000000;
+7279 : 00000000;
+727a : 00000000;
+727b : 00000000;
+727c : 00000000;
+727d : 00000000;
+727e : 00000000;
+727f : 00000000;
+7280 : 00000000;
+7281 : 00000000;
+7282 : 00000000;
+7283 : 00000000;
+7284 : 00000000;
+7285 : 00000000;
+7286 : 00000000;
+7287 : 00000000;
+7288 : 00000000;
+7289 : 00000000;
+728a : 00000000;
+728b : 00000000;
+728c : 00000000;
+728d : 00000000;
+728e : 00000000;
+728f : 00000000;
+7290 : 00000000;
+7291 : 00000000;
+7292 : 00000000;
+7293 : 00000000;
+7294 : 00000000;
+7295 : 00000000;
+7296 : 00000000;
+7297 : 00000000;
+7298 : 00000000;
+7299 : 00000000;
+729a : 00000000;
+729b : 00000000;
+729c : 00000000;
+729d : 00000000;
+729e : 00000000;
+729f : 00000000;
+72a0 : 00000000;
+72a1 : 00000000;
+72a2 : 00000000;
+72a3 : 00000000;
+72a4 : 00000000;
+72a5 : 00000000;
+72a6 : 00000000;
+72a7 : 00000000;
+72a8 : 00000000;
+72a9 : 00000000;
+72aa : 00000000;
+72ab : 00000000;
+72ac : 00000000;
+72ad : 00000000;
+72ae : 00000000;
+72af : 00000000;
+72b0 : 00000000;
+72b1 : 00000000;
+72b2 : 00000000;
+72b3 : 00000000;
+72b4 : 00000000;
+72b5 : 00000000;
+72b6 : 00000000;
+72b7 : 00000000;
+72b8 : 00000000;
+72b9 : 00000000;
+72ba : 00000000;
+72bb : 00000000;
+72bc : 00000000;
+72bd : 00000000;
+72be : 00000000;
+72bf : 00000000;
+72c0 : 00000000;
+72c1 : 00000000;
+72c2 : 00000000;
+72c3 : 00000000;
+72c4 : 00000000;
+72c5 : 00000000;
+72c6 : 00000000;
+72c7 : 00000000;
+72c8 : 00000000;
+72c9 : 00000000;
+72ca : 00000000;
+72cb : 00000000;
+72cc : 00000000;
+72cd : 00000000;
+72ce : 00000000;
+72cf : 00000000;
+72d0 : 00000000;
+72d1 : 00000000;
+72d2 : 00000000;
+72d3 : 00000000;
+72d4 : 00000000;
+72d5 : 00000000;
+72d6 : 00000000;
+72d7 : 00000000;
+72d8 : 00000000;
+72d9 : 00000000;
+72da : 00000000;
+72db : 00000000;
+72dc : 00000000;
+72dd : 00000000;
+72de : 00000000;
+72df : 00000000;
+72e0 : 00000000;
+72e1 : 00000000;
+72e2 : 00000000;
+72e3 : 00000000;
+72e4 : 00000000;
+72e5 : 00000000;
+72e6 : 00000000;
+72e7 : 00000000;
+72e8 : 00000000;
+72e9 : 00000000;
+72ea : 00000000;
+72eb : 00000000;
+72ec : 00000000;
+72ed : 00000000;
+72ee : 00000000;
+72ef : 00000000;
+72f0 : 00000000;
+72f1 : 00000000;
+72f2 : 00000000;
+72f3 : 00000000;
+72f4 : 00000000;
+72f5 : 00000000;
+72f6 : 00000000;
+72f7 : 00000000;
+72f8 : 00000000;
+72f9 : 00000000;
+72fa : 00000000;
+72fb : 00000000;
+72fc : 00000000;
+72fd : 00000000;
+72fe : 00000000;
+72ff : 00000000;
+7300 : 00000000;
+7301 : 00000000;
+7302 : 00000000;
+7303 : 00000000;
+7304 : 00000000;
+7305 : 00000000;
+7306 : 00000000;
+7307 : 00000000;
+7308 : 00000000;
+7309 : 00000000;
+730a : 00000000;
+730b : 00000000;
+730c : 00000000;
+730d : 00000000;
+730e : 00000000;
+730f : 00000000;
+7310 : 00000000;
+7311 : 00000000;
+7312 : 00000000;
+7313 : 00000000;
+7314 : 00000000;
+7315 : 00000000;
+7316 : 00000000;
+7317 : 00000000;
+7318 : 00000000;
+7319 : 00000000;
+731a : 00000000;
+731b : 00000000;
+731c : 00000000;
+731d : 00000000;
+731e : 00000000;
+731f : 00000000;
+7320 : 00000000;
+7321 : 00000000;
+7322 : 00000000;
+7323 : 00000000;
+7324 : 00000000;
+7325 : 00000000;
+7326 : 00000000;
+7327 : 00000000;
+7328 : 00000000;
+7329 : 00000000;
+732a : 00000000;
+732b : 00000000;
+732c : 00000000;
+732d : 00000000;
+732e : 00000000;
+732f : 00000000;
+7330 : 00000000;
+7331 : 00000000;
+7332 : 00000000;
+7333 : 00000000;
+7334 : 00000000;
+7335 : 00000000;
+7336 : 00000000;
+7337 : 00000000;
+7338 : 00000000;
+7339 : 00000000;
+733a : 00000000;
+733b : 00000000;
+733c : 00000000;
+733d : 00000000;
+733e : 00000000;
+733f : 00000000;
+7340 : 00000000;
+7341 : 00000000;
+7342 : 00000000;
+7343 : 00000000;
+7344 : 00000000;
+7345 : 00000000;
+7346 : 00000000;
+7347 : 00000000;
+7348 : 00000000;
+7349 : 00000000;
+734a : 00000000;
+734b : 00000000;
+734c : 00000000;
+734d : 00000000;
+734e : 00000000;
+734f : 00000000;
+7350 : 00000000;
+7351 : 00000000;
+7352 : 00000000;
+7353 : 00000000;
+7354 : 00000000;
+7355 : 00000000;
+7356 : 00000000;
+7357 : 00000000;
+7358 : 00000000;
+7359 : 00000000;
+735a : 00000000;
+735b : 00000000;
+735c : 00000000;
+735d : 00000000;
+735e : 00000000;
+735f : 00000000;
+7360 : 00000000;
+7361 : 00000000;
+7362 : 00000000;
+7363 : 00000000;
+7364 : 00000000;
+7365 : 00000000;
+7366 : 00000000;
+7367 : 00000000;
+7368 : 00000000;
+7369 : 00000000;
+736a : 00000000;
+736b : 00000000;
+736c : 00000000;
+736d : 00000000;
+736e : 00000000;
+736f : 00000000;
+7370 : 00000000;
+7371 : 00000000;
+7372 : 00000000;
+7373 : 00000000;
+7374 : 00000000;
+7375 : 00000000;
+7376 : 00000000;
+7377 : 00000000;
+7378 : 00000000;
+7379 : 00000000;
+737a : 00000000;
+737b : 00000000;
+737c : 00000000;
+737d : 00000000;
+737e : 00000000;
+737f : 00000000;
+7380 : 00000000;
+7381 : 00000000;
+7382 : 00000000;
+7383 : 00000000;
+7384 : 00000000;
+7385 : 00000000;
+7386 : 00000000;
+7387 : 00000000;
+7388 : 00000000;
+7389 : 00000000;
+738a : 00000000;
+738b : 00000000;
+738c : 00000000;
+738d : 00000000;
+738e : 00000000;
+738f : 00000000;
+7390 : 00000000;
+7391 : 00000000;
+7392 : 00000000;
+7393 : 00000000;
+7394 : 00000000;
+7395 : 00000000;
+7396 : 00000000;
+7397 : 00000000;
+7398 : 00000000;
+7399 : 00000000;
+739a : 00000000;
+739b : 00000000;
+739c : 00000000;
+739d : 00000000;
+739e : 00000000;
+739f : 00000000;
+73a0 : 00000000;
+73a1 : 00000000;
+73a2 : 00000000;
+73a3 : 00000000;
+73a4 : 00000000;
+73a5 : 00000000;
+73a6 : 00000000;
+73a7 : 00000000;
+73a8 : 00000000;
+73a9 : 00000000;
+73aa : 00000000;
+73ab : 00000000;
+73ac : 00000000;
+73ad : 00000000;
+73ae : 00000000;
+73af : 00000000;
+73b0 : 00000000;
+73b1 : 00000000;
+73b2 : 00000000;
+73b3 : 00000000;
+73b4 : 00000000;
+73b5 : 00000000;
+73b6 : 00000000;
+73b7 : 00000000;
+73b8 : 00000000;
+73b9 : 00000000;
+73ba : 00000000;
+73bb : 00000000;
+73bc : 00000000;
+73bd : 00000000;
+73be : 00000000;
+73bf : 00000000;
+73c0 : 00000000;
+73c1 : 00000000;
+73c2 : 00000000;
+73c3 : 00000000;
+73c4 : 00000000;
+73c5 : 00000000;
+73c6 : 00000000;
+73c7 : 00000000;
+73c8 : 00000000;
+73c9 : 00000000;
+73ca : 00000000;
+73cb : 00000000;
+73cc : 00000000;
+73cd : 00000000;
+73ce : 00000000;
+73cf : 00000000;
+73d0 : 00000000;
+73d1 : 00000000;
+73d2 : 00000000;
+73d3 : 00000000;
+73d4 : 00000000;
+73d5 : 00000000;
+73d6 : 00000000;
+73d7 : 00000000;
+73d8 : 00000000;
+73d9 : 00000000;
+73da : 00000000;
+73db : 00000000;
+73dc : 00000000;
+73dd : 00000000;
+73de : 00000000;
+73df : 00000000;
+73e0 : 00000000;
+73e1 : 00000000;
+73e2 : 00000000;
+73e3 : 00000000;
+73e4 : 00000000;
+73e5 : 00000000;
+73e6 : 00000000;
+73e7 : 00000000;
+73e8 : 00000000;
+73e9 : 00000000;
+73ea : 00000000;
+73eb : 00000000;
+73ec : 00000000;
+73ed : 00000000;
+73ee : 00000000;
+73ef : 00000000;
+73f0 : 00000000;
+73f1 : 00000000;
+73f2 : 00000000;
+73f3 : 00000000;
+73f4 : 00000000;
+73f5 : 00000000;
+73f6 : 00000000;
+73f7 : 00000000;
+73f8 : 00000000;
+73f9 : 00000000;
+73fa : 00000000;
+73fb : 00000000;
+73fc : 00000000;
+73fd : 00000000;
+73fe : 00000000;
+73ff : 00000000;
+7400 : 00000000;
+7401 : 00000000;
+7402 : 00000000;
+7403 : 00000000;
+7404 : 00000000;
+7405 : 00000000;
+7406 : 00000000;
+7407 : 00000000;
+7408 : 00000000;
+7409 : 00000000;
+740a : 00000000;
+740b : 00000000;
+740c : 00000000;
+740d : 00000000;
+740e : 00000000;
+740f : 00000000;
+7410 : 00000000;
+7411 : 00000000;
+7412 : 00000000;
+7413 : 00000000;
+7414 : 00000000;
+7415 : 00000000;
+7416 : 00000000;
+7417 : 00000000;
+7418 : 00000000;
+7419 : 00000000;
+741a : 00000000;
+741b : 00000000;
+741c : 00000000;
+741d : 00000000;
+741e : 00000000;
+741f : 00000000;
+7420 : 00000000;
+7421 : 00000000;
+7422 : 00000000;
+7423 : 00000000;
+7424 : 00000000;
+7425 : 00000000;
+7426 : 00000000;
+7427 : 00000000;
+7428 : 00000000;
+7429 : 00000000;
+742a : 00000000;
+742b : 00000000;
+742c : 00000000;
+742d : 00000000;
+742e : 00000000;
+742f : 00000000;
+7430 : 00000000;
+7431 : 00000000;
+7432 : 00000000;
+7433 : 00000000;
+7434 : 00000000;
+7435 : 00000000;
+7436 : 00000000;
+7437 : 00000000;
+7438 : 00000000;
+7439 : 00000000;
+743a : 00000000;
+743b : 00000000;
+743c : 00000000;
+743d : 00000000;
+743e : 00000000;
+743f : 00000000;
+7440 : 00000000;
+7441 : 00000000;
+7442 : 00000000;
+7443 : 00000000;
+7444 : 00000000;
+7445 : 00000000;
+7446 : 00000000;
+7447 : 00000000;
+7448 : 00000000;
+7449 : 00000000;
+744a : 00000000;
+744b : 00000000;
+744c : 00000000;
+744d : 00000000;
+744e : 00000000;
+744f : 00000000;
+7450 : 00000000;
+7451 : 00000000;
+7452 : 00000000;
+7453 : 00000000;
+7454 : 00000000;
+7455 : 00000000;
+7456 : 00000000;
+7457 : 00000000;
+7458 : 00000000;
+7459 : 00000000;
+745a : 00000000;
+745b : 00000000;
+745c : 00000000;
+745d : 00000000;
+745e : 00000000;
+745f : 00000000;
+7460 : 00000000;
+7461 : 00000000;
+7462 : 00000000;
+7463 : 00000000;
+7464 : 00000000;
+7465 : 00000000;
+7466 : 00000000;
+7467 : 00000000;
+7468 : 00000000;
+7469 : 00000000;
+746a : 00000000;
+746b : 00000000;
+746c : 00000000;
+746d : 00000000;
+746e : 00000000;
+746f : 00000000;
+7470 : 00000000;
+7471 : 00000000;
+7472 : 00000000;
+7473 : 00000000;
+7474 : 00000000;
+7475 : 00000000;
+7476 : 00000000;
+7477 : 00000000;
+7478 : 00000000;
+7479 : 00000000;
+747a : 00000000;
+747b : 00000000;
+747c : 00000000;
+747d : 00000000;
+747e : 00000000;
+747f : 00000000;
+7480 : 00000000;
+7481 : 00000000;
+7482 : 00000000;
+7483 : 00000000;
+7484 : 00000000;
+7485 : 00000000;
+7486 : 00000000;
+7487 : 00000000;
+7488 : 00000000;
+7489 : 00000000;
+748a : 00000000;
+748b : 00000000;
+748c : 00000000;
+748d : 00000000;
+748e : 00000000;
+748f : 00000000;
+7490 : 00000000;
+7491 : 00000000;
+7492 : 00000000;
+7493 : 00000000;
+7494 : 00000000;
+7495 : 00000000;
+7496 : 00000000;
+7497 : 00000000;
+7498 : 00000000;
+7499 : 00000000;
+749a : 00000000;
+749b : 00000000;
+749c : 00000000;
+749d : 00000000;
+749e : 00000000;
+749f : 00000000;
+74a0 : 00000000;
+74a1 : 00000000;
+74a2 : 00000000;
+74a3 : 00000000;
+74a4 : 00000000;
+74a5 : 00000000;
+74a6 : 00000000;
+74a7 : 00000000;
+74a8 : 00000000;
+74a9 : 00000000;
+74aa : 00000000;
+74ab : 00000000;
+74ac : 00000000;
+74ad : 00000000;
+74ae : 00000000;
+74af : 00000000;
+74b0 : 00000000;
+74b1 : 00000000;
+74b2 : 00000000;
+74b3 : 00000000;
+74b4 : 00000000;
+74b5 : 00000000;
+74b6 : 00000000;
+74b7 : 00000000;
+74b8 : 00000000;
+74b9 : 00000000;
+74ba : 00000000;
+74bb : 00000000;
+74bc : 00000000;
+74bd : 00000000;
+74be : 00000000;
+74bf : 00000000;
+74c0 : 00000000;
+74c1 : 00000000;
+74c2 : 00000000;
+74c3 : 00000000;
+74c4 : 00000000;
+74c5 : 00000000;
+74c6 : 00000000;
+74c7 : 00000000;
+74c8 : 00000000;
+74c9 : 00000000;
+74ca : 00000000;
+74cb : 00000000;
+74cc : 00000000;
+74cd : 00000000;
+74ce : 00000000;
+74cf : 00000000;
+74d0 : 00000000;
+74d1 : 00000000;
+74d2 : 00000000;
+74d3 : 00000000;
+74d4 : 00000000;
+74d5 : 00000000;
+74d6 : 00000000;
+74d7 : 00000000;
+74d8 : 00000000;
+74d9 : 00000000;
+74da : 00000000;
+74db : 00000000;
+74dc : 00000000;
+74dd : 00000000;
+74de : 00000000;
+74df : 00000000;
+74e0 : 00000000;
+74e1 : 00000000;
+74e2 : 00000000;
+74e3 : 00000000;
+74e4 : 00000000;
+74e5 : 00000000;
+74e6 : 00000000;
+74e7 : 00000000;
+74e8 : 00000000;
+74e9 : 00000000;
+74ea : 00000000;
+74eb : 00000000;
+74ec : 00000000;
+74ed : 00000000;
+74ee : 00000000;
+74ef : 00000000;
+74f0 : 00000000;
+74f1 : 00000000;
+74f2 : 00000000;
+74f3 : 00000000;
+74f4 : 00000000;
+74f5 : 00000000;
+74f6 : 00000000;
+74f7 : 00000000;
+74f8 : 00000000;
+74f9 : 00000000;
+74fa : 00000000;
+74fb : 00000000;
+74fc : 00000000;
+74fd : 00000000;
+74fe : 00000000;
+74ff : 00000000;
+7500 : 00000000;
+7501 : 00000000;
+7502 : 00000000;
+7503 : 00000000;
+7504 : 00000000;
+7505 : 00000000;
+7506 : 00000000;
+7507 : 00000000;
+7508 : 00000000;
+7509 : 00000000;
+750a : 00000000;
+750b : 00000000;
+750c : 00000000;
+750d : 00000000;
+750e : 00000000;
+750f : 00000000;
+7510 : 00000000;
+7511 : 00000000;
+7512 : 00000000;
+7513 : 00000000;
+7514 : 00000000;
+7515 : 00000000;
+7516 : 00000000;
+7517 : 00000000;
+7518 : 00000000;
+7519 : 00000000;
+751a : 00000000;
+751b : 00000000;
+751c : 00000000;
+751d : 00000000;
+751e : 00000000;
+751f : 00000000;
+7520 : 00000000;
+7521 : 00000000;
+7522 : 00000000;
+7523 : 00000000;
+7524 : 00000000;
+7525 : 00000000;
+7526 : 00000000;
+7527 : 00000000;
+7528 : 00000000;
+7529 : 00000000;
+752a : 00000000;
+752b : 00000000;
+752c : 00000000;
+752d : 00000000;
+752e : 00000000;
+752f : 00000000;
+7530 : 00000000;
+7531 : 00000000;
+7532 : 00000000;
+7533 : 00000000;
+7534 : 00000000;
+7535 : 00000000;
+7536 : 00000000;
+7537 : 00000000;
+7538 : 00000000;
+7539 : 00000000;
+753a : 00000000;
+753b : 00000000;
+753c : 00000000;
+753d : 00000000;
+753e : 00000000;
+753f : 00000000;
+7540 : 00000000;
+7541 : 00000000;
+7542 : 00000000;
+7543 : 00000000;
+7544 : 00000000;
+7545 : 00000000;
+7546 : 00000000;
+7547 : 00000000;
+7548 : 00000000;
+7549 : 00000000;
+754a : 00000000;
+754b : 00000000;
+754c : 00000000;
+754d : 00000000;
+754e : 00000000;
+754f : 00000000;
+7550 : 00000000;
+7551 : 00000000;
+7552 : 00000000;
+7553 : 00000000;
+7554 : 00000000;
+7555 : 00000000;
+7556 : 00000000;
+7557 : 00000000;
+7558 : 00000000;
+7559 : 00000000;
+755a : 00000000;
+755b : 00000000;
+755c : 00000000;
+755d : 00000000;
+755e : 00000000;
+755f : 00000000;
+7560 : 00000000;
+7561 : 00000000;
+7562 : 00000000;
+7563 : 00000000;
+7564 : 00000000;
+7565 : 00000000;
+7566 : 00000000;
+7567 : 00000000;
+7568 : 00000000;
+7569 : 00000000;
+756a : 00000000;
+756b : 00000000;
+756c : 00000000;
+756d : 00000000;
+756e : 00000000;
+756f : 00000000;
+7570 : 00000000;
+7571 : 00000000;
+7572 : 00000000;
+7573 : 00000000;
+7574 : 00000000;
+7575 : 00000000;
+7576 : 00000000;
+7577 : 00000000;
+7578 : 00000000;
+7579 : 00000000;
+757a : 00000000;
+757b : 00000000;
+757c : 00000000;
+757d : 00000000;
+757e : 00000000;
+757f : 00000000;
+7580 : 00000000;
+7581 : 00000000;
+7582 : 00000000;
+7583 : 00000000;
+7584 : 00000000;
+7585 : 00000000;
+7586 : 00000000;
+7587 : 00000000;
+7588 : 00000000;
+7589 : 00000000;
+758a : 00000000;
+758b : 00000000;
+758c : 00000000;
+758d : 00000000;
+758e : 00000000;
+758f : 00000000;
+7590 : 00000000;
+7591 : 00000000;
+7592 : 00000000;
+7593 : 00000000;
+7594 : 00000000;
+7595 : 00000000;
+7596 : 00000000;
+7597 : 00000000;
+7598 : 00000000;
+7599 : 00000000;
+759a : 00000000;
+759b : 00000000;
+759c : 00000000;
+759d : 00000000;
+759e : 00000000;
+759f : 00000000;
+75a0 : 00000000;
+75a1 : 00000000;
+75a2 : 00000000;
+75a3 : 00000000;
+75a4 : 00000000;
+75a5 : 00000000;
+75a6 : 00000000;
+75a7 : 00000000;
+75a8 : 00000000;
+75a9 : 00000000;
+75aa : 00000000;
+75ab : 00000000;
+75ac : 00000000;
+75ad : 00000000;
+75ae : 00000000;
+75af : 00000000;
+75b0 : 00000000;
+75b1 : 00000000;
+75b2 : 00000000;
+75b3 : 00000000;
+75b4 : 00000000;
+75b5 : 00000000;
+75b6 : 00000000;
+75b7 : 00000000;
+75b8 : 00000000;
+75b9 : 00000000;
+75ba : 00000000;
+75bb : 00000000;
+75bc : 00000000;
+75bd : 00000000;
+75be : 00000000;
+75bf : 00000000;
+75c0 : 00000000;
+75c1 : 00000000;
+75c2 : 00000000;
+75c3 : 00000000;
+75c4 : 00000000;
+75c5 : 00000000;
+75c6 : 00000000;
+75c7 : 00000000;
+75c8 : 00000000;
+75c9 : 00000000;
+75ca : 00000000;
+75cb : 00000000;
+75cc : 00000000;
+75cd : 00000000;
+75ce : 00000000;
+75cf : 00000000;
+75d0 : 00000000;
+75d1 : 00000000;
+75d2 : 00000000;
+75d3 : 00000000;
+75d4 : 00000000;
+75d5 : 00000000;
+75d6 : 00000000;
+75d7 : 00000000;
+75d8 : 00000000;
+75d9 : 00000000;
+75da : 00000000;
+75db : 00000000;
+75dc : 00000000;
+75dd : 00000000;
+75de : 00000000;
+75df : 00000000;
+75e0 : 00000000;
+75e1 : 00000000;
+75e2 : 00000000;
+75e3 : 00000000;
+75e4 : 00000000;
+75e5 : 00000000;
+75e6 : 00000000;
+75e7 : 00000000;
+75e8 : 00000000;
+75e9 : 00000000;
+75ea : 00000000;
+75eb : 00000000;
+75ec : 00000000;
+75ed : 00000000;
+75ee : 00000000;
+75ef : 00000000;
+75f0 : 00000000;
+75f1 : 00000000;
+75f2 : 00000000;
+75f3 : 00000000;
+75f4 : 00000000;
+75f5 : 00000000;
+75f6 : 00000000;
+75f7 : 00000000;
+75f8 : 00000000;
+75f9 : 00000000;
+75fa : 00000000;
+75fb : 00000000;
+75fc : 00000000;
+75fd : 00000000;
+75fe : 00000000;
+75ff : 00000000;
+7600 : 00000000;
+7601 : 00000000;
+7602 : 00000000;
+7603 : 00000000;
+7604 : 00000000;
+7605 : 00000000;
+7606 : 00000000;
+7607 : 00000000;
+7608 : 00000000;
+7609 : 00000000;
+760a : 00000000;
+760b : 00000000;
+760c : 00000000;
+760d : 00000000;
+760e : 00000000;
+760f : 00000000;
+7610 : 00000000;
+7611 : 00000000;
+7612 : 00000000;
+7613 : 00000000;
+7614 : 00000000;
+7615 : 00000000;
+7616 : 00000000;
+7617 : 00000000;
+7618 : 00000000;
+7619 : 00000000;
+761a : 00000000;
+761b : 00000000;
+761c : 00000000;
+761d : 00000000;
+761e : 00000000;
+761f : 00000000;
+7620 : 00000000;
+7621 : 00000000;
+7622 : 00000000;
+7623 : 00000000;
+7624 : 00000000;
+7625 : 00000000;
+7626 : 00000000;
+7627 : 00000000;
+7628 : 00000000;
+7629 : 00000000;
+762a : 00000000;
+762b : 00000000;
+762c : 00000000;
+762d : 00000000;
+762e : 00000000;
+762f : 00000000;
+7630 : 00000000;
+7631 : 00000000;
+7632 : 00000000;
+7633 : 00000000;
+7634 : 00000000;
+7635 : 00000000;
+7636 : 00000000;
+7637 : 00000000;
+7638 : 00000000;
+7639 : 00000000;
+763a : 00000000;
+763b : 00000000;
+763c : 00000000;
+763d : 00000000;
+763e : 00000000;
+763f : 00000000;
+7640 : 00000000;
+7641 : 00000000;
+7642 : 00000000;
+7643 : 00000000;
+7644 : 00000000;
+7645 : 00000000;
+7646 : 00000000;
+7647 : 00000000;
+7648 : 00000000;
+7649 : 00000000;
+764a : 00000000;
+764b : 00000000;
+764c : 00000000;
+764d : 00000000;
+764e : 00000000;
+764f : 00000000;
+7650 : 00000000;
+7651 : 00000000;
+7652 : 00000000;
+7653 : 00000000;
+7654 : 00000000;
+7655 : 00000000;
+7656 : 00000000;
+7657 : 00000000;
+7658 : 00000000;
+7659 : 00000000;
+765a : 00000000;
+765b : 00000000;
+765c : 00000000;
+765d : 00000000;
+765e : 00000000;
+765f : 00000000;
+7660 : 00000000;
+7661 : 00000000;
+7662 : 00000000;
+7663 : 00000000;
+7664 : 00000000;
+7665 : 00000000;
+7666 : 00000000;
+7667 : 00000000;
+7668 : 00000000;
+7669 : 00000000;
+766a : 00000000;
+766b : 00000000;
+766c : 00000000;
+766d : 00000000;
+766e : 00000000;
+766f : 00000000;
+7670 : 00000000;
+7671 : 00000000;
+7672 : 00000000;
+7673 : 00000000;
+7674 : 00000000;
+7675 : 00000000;
+7676 : 00000000;
+7677 : 00000000;
+7678 : 00000000;
+7679 : 00000000;
+767a : 00000000;
+767b : 00000000;
+767c : 00000000;
+767d : 00000000;
+767e : 00000000;
+767f : 00000000;
+7680 : 00000000;
+7681 : 00000000;
+7682 : 00000000;
+7683 : 00000000;
+7684 : 00000000;
+7685 : 00000000;
+7686 : 00000000;
+7687 : 00000000;
+7688 : 00000000;
+7689 : 00000000;
+768a : 00000000;
+768b : 00000000;
+768c : 00000000;
+768d : 00000000;
+768e : 00000000;
+768f : 00000000;
+7690 : 00000000;
+7691 : 00000000;
+7692 : 00000000;
+7693 : 00000000;
+7694 : 00000000;
+7695 : 00000000;
+7696 : 00000000;
+7697 : 00000000;
+7698 : 00000000;
+7699 : 00000000;
+769a : 00000000;
+769b : 00000000;
+769c : 00000000;
+769d : 00000000;
+769e : 00000000;
+769f : 00000000;
+76a0 : 00000000;
+76a1 : 00000000;
+76a2 : 00000000;
+76a3 : 00000000;
+76a4 : 00000000;
+76a5 : 00000000;
+76a6 : 00000000;
+76a7 : 00000000;
+76a8 : 00000000;
+76a9 : 00000000;
+76aa : 00000000;
+76ab : 00000000;
+76ac : 00000000;
+76ad : 00000000;
+76ae : 00000000;
+76af : 00000000;
+76b0 : 00000000;
+76b1 : 00000000;
+76b2 : 00000000;
+76b3 : 00000000;
+76b4 : 00000000;
+76b5 : 00000000;
+76b6 : 00000000;
+76b7 : 00000000;
+76b8 : 00000000;
+76b9 : 00000000;
+76ba : 00000000;
+76bb : 00000000;
+76bc : 00000000;
+76bd : 00000000;
+76be : 00000000;
+76bf : 00000000;
+76c0 : 00000000;
+76c1 : 00000000;
+76c2 : 00000000;
+76c3 : 00000000;
+76c4 : 00000000;
+76c5 : 00000000;
+76c6 : 00000000;
+76c7 : 00000000;
+76c8 : 00000000;
+76c9 : 00000000;
+76ca : 00000000;
+76cb : 00000000;
+76cc : 00000000;
+76cd : 00000000;
+76ce : 00000000;
+76cf : 00000000;
+76d0 : 00000000;
+76d1 : 00000000;
+76d2 : 00000000;
+76d3 : 00000000;
+76d4 : 00000000;
+76d5 : 00000000;
+76d6 : 00000000;
+76d7 : 00000000;
+76d8 : 00000000;
+76d9 : 00000000;
+76da : 00000000;
+76db : 00000000;
+76dc : 00000000;
+76dd : 00000000;
+76de : 00000000;
+76df : 00000000;
+76e0 : 00000000;
+76e1 : 00000000;
+76e2 : 00000000;
+76e3 : 00000000;
+76e4 : 00000000;
+76e5 : 00000000;
+76e6 : 00000000;
+76e7 : 00000000;
+76e8 : 00000000;
+76e9 : 00000000;
+76ea : 00000000;
+76eb : 00000000;
+76ec : 00000000;
+76ed : 00000000;
+76ee : 00000000;
+76ef : 00000000;
+76f0 : 00000000;
+76f1 : 00000000;
+76f2 : 00000000;
+76f3 : 00000000;
+76f4 : 00000000;
+76f5 : 00000000;
+76f6 : 00000000;
+76f7 : 00000000;
+76f8 : 00000000;
+76f9 : 00000000;
+76fa : 00000000;
+76fb : 00000000;
+76fc : 00000000;
+76fd : 00000000;
+76fe : 00000000;
+76ff : 00000000;
+7700 : 00000000;
+7701 : 00000000;
+7702 : 00000000;
+7703 : 00000000;
+7704 : 00000000;
+7705 : 00000000;
+7706 : 00000000;
+7707 : 00000000;
+7708 : 00000000;
+7709 : 00000000;
+770a : 00000000;
+770b : 00000000;
+770c : 00000000;
+770d : 00000000;
+770e : 00000000;
+770f : 00000000;
+7710 : 00000000;
+7711 : 00000000;
+7712 : 00000000;
+7713 : 00000000;
+7714 : 00000000;
+7715 : 00000000;
+7716 : 00000000;
+7717 : 00000000;
+7718 : 00000000;
+7719 : 00000000;
+771a : 00000000;
+771b : 00000000;
+771c : 00000000;
+771d : 00000000;
+771e : 00000000;
+771f : 00000000;
+7720 : 00000000;
+7721 : 00000000;
+7722 : 00000000;
+7723 : 00000000;
+7724 : 00000000;
+7725 : 00000000;
+7726 : 00000000;
+7727 : 00000000;
+7728 : 00000000;
+7729 : 00000000;
+772a : 00000000;
+772b : 00000000;
+772c : 00000000;
+772d : 00000000;
+772e : 00000000;
+772f : 00000000;
+7730 : 00000000;
+7731 : 00000000;
+7732 : 00000000;
+7733 : 00000000;
+7734 : 00000000;
+7735 : 00000000;
+7736 : 00000000;
+7737 : 00000000;
+7738 : 00000000;
+7739 : 00000000;
+773a : 00000000;
+773b : 00000000;
+773c : 00000000;
+773d : 00000000;
+773e : 00000000;
+773f : 00000000;
+7740 : 00000000;
+7741 : 00000000;
+7742 : 00000000;
+7743 : 00000000;
+7744 : 00000000;
+7745 : 00000000;
+7746 : 00000000;
+7747 : 00000000;
+7748 : 00000000;
+7749 : 00000000;
+774a : 00000000;
+774b : 00000000;
+774c : 00000000;
+774d : 00000000;
+774e : 00000000;
+774f : 00000000;
+7750 : 00000000;
+7751 : 00000000;
+7752 : 00000000;
+7753 : 00000000;
+7754 : 00000000;
+7755 : 00000000;
+7756 : 00000000;
+7757 : 00000000;
+7758 : 00000000;
+7759 : 00000000;
+775a : 00000000;
+775b : 00000000;
+775c : 00000000;
+775d : 00000000;
+775e : 00000000;
+775f : 00000000;
+7760 : 00000000;
+7761 : 00000000;
+7762 : 00000000;
+7763 : 00000000;
+7764 : 00000000;
+7765 : 00000000;
+7766 : 00000000;
+7767 : 00000000;
+7768 : 00000000;
+7769 : 00000000;
+776a : 00000000;
+776b : 00000000;
+776c : 00000000;
+776d : 00000000;
+776e : 00000000;
+776f : 00000000;
+7770 : 00000000;
+7771 : 00000000;
+7772 : 00000000;
+7773 : 00000000;
+7774 : 00000000;
+7775 : 00000000;
+7776 : 00000000;
+7777 : 00000000;
+7778 : 00000000;
+7779 : 00000000;
+777a : 00000000;
+777b : 00000000;
+777c : 00000000;
+777d : 00000000;
+777e : 00000000;
+777f : 00000000;
+7780 : 00000000;
+7781 : 00000000;
+7782 : 00000000;
+7783 : 00000000;
+7784 : 00000000;
+7785 : 00000000;
+7786 : 00000000;
+7787 : 00000000;
+7788 : 00000000;
+7789 : 00000000;
+778a : 00000000;
+778b : 00000000;
+778c : 00000000;
+778d : 00000000;
+778e : 00000000;
+778f : 00000000;
+7790 : 00000000;
+7791 : 00000000;
+7792 : 00000000;
+7793 : 00000000;
+7794 : 00000000;
+7795 : 00000000;
+7796 : 00000000;
+7797 : 00000000;
+7798 : 00000000;
+7799 : 00000000;
+779a : 00000000;
+779b : 00000000;
+779c : 00000000;
+779d : 00000000;
+779e : 00000000;
+779f : 00000000;
+77a0 : 00000000;
+77a1 : 00000000;
+77a2 : 00000000;
+77a3 : 00000000;
+77a4 : 00000000;
+77a5 : 00000000;
+77a6 : 00000000;
+77a7 : 00000000;
+77a8 : 00000000;
+77a9 : 00000000;
+77aa : 00000000;
+77ab : 00000000;
+77ac : 00000000;
+77ad : 00000000;
+77ae : 00000000;
+77af : 00000000;
+77b0 : 00000000;
+77b1 : 00000000;
+77b2 : 00000000;
+77b3 : 00000000;
+77b4 : 00000000;
+77b5 : 00000000;
+77b6 : 00000000;
+77b7 : 00000000;
+77b8 : 00000000;
+77b9 : 00000000;
+77ba : 00000000;
+77bb : 00000000;
+77bc : 00000000;
+77bd : 00000000;
+77be : 00000000;
+77bf : 00000000;
+77c0 : 00000000;
+77c1 : 00000000;
+77c2 : 00000000;
+77c3 : 00000000;
+77c4 : 00000000;
+77c5 : 00000000;
+77c6 : 00000000;
+77c7 : 00000000;
+77c8 : 00000000;
+77c9 : 00000000;
+77ca : 00000000;
+77cb : 00000000;
+77cc : 00000000;
+77cd : 00000000;
+77ce : 00000000;
+77cf : 00000000;
+77d0 : 00000000;
+77d1 : 00000000;
+77d2 : 00000000;
+77d3 : 00000000;
+77d4 : 00000000;
+77d5 : 00000000;
+77d6 : 00000000;
+77d7 : 00000000;
+77d8 : 00000000;
+77d9 : 00000000;
+77da : 00000000;
+77db : 00000000;
+77dc : 00000000;
+77dd : 00000000;
+77de : 00000000;
+77df : 00000000;
+77e0 : 00000000;
+77e1 : 00000000;
+77e2 : 00000000;
+77e3 : 00000000;
+77e4 : 00000000;
+77e5 : 00000000;
+77e6 : 00000000;
+77e7 : 00000000;
+77e8 : 00000000;
+77e9 : 00000000;
+77ea : 00000000;
+77eb : 00000000;
+77ec : 00000000;
+77ed : 00000000;
+77ee : 00000000;
+77ef : 00000000;
+77f0 : 00000000;
+77f1 : 00000000;
+77f2 : 00000000;
+77f3 : 00000000;
+77f4 : 00000000;
+77f5 : 00000000;
+77f6 : 00000000;
+77f7 : 00000000;
+77f8 : 00000000;
+77f9 : 00000000;
+77fa : 00000000;
+77fb : 00000000;
+77fc : 00000000;
+77fd : 00000000;
+77fe : 00000000;
+77ff : 00000000;
+7800 : 00000000;
+7801 : 00000000;
+7802 : 00000000;
+7803 : 00000000;
+7804 : 00000000;
+7805 : 00000000;
+7806 : 00000000;
+7807 : 00000000;
+7808 : 00000000;
+7809 : 00000000;
+780a : 00000000;
+780b : 00000000;
+780c : 00000000;
+780d : 00000000;
+780e : 00000000;
+780f : 00000000;
+7810 : 00000000;
+7811 : 00000000;
+7812 : 00000000;
+7813 : 00000000;
+7814 : 00000000;
+7815 : 00000000;
+7816 : 00000000;
+7817 : 00000000;
+7818 : 00000000;
+7819 : 00000000;
+781a : 00000000;
+781b : 00000000;
+781c : 00000000;
+781d : 00000000;
+781e : 00000000;
+781f : 00000000;
+7820 : 00000000;
+7821 : 00000000;
+7822 : 00000000;
+7823 : 00000000;
+7824 : 00000000;
+7825 : 00000000;
+7826 : 00000000;
+7827 : 00000000;
+7828 : 00000000;
+7829 : 00000000;
+782a : 00000000;
+782b : 00000000;
+782c : 00000000;
+782d : 00000000;
+782e : 00000000;
+782f : 00000000;
+7830 : 00000000;
+7831 : 00000000;
+7832 : 00000000;
+7833 : 00000000;
+7834 : 00000000;
+7835 : 00000000;
+7836 : 00000000;
+7837 : 00000000;
+7838 : 00000000;
+7839 : 00000000;
+783a : 00000000;
+783b : 00000000;
+783c : 00000000;
+783d : 00000000;
+783e : 00000000;
+783f : 00000000;
+7840 : 00000000;
+7841 : 00000000;
+7842 : 00000000;
+7843 : 00000000;
+7844 : 00000000;
+7845 : 00000000;
+7846 : 00000000;
+7847 : 00000000;
+7848 : 00000000;
+7849 : 00000000;
+784a : 00000000;
+784b : 00000000;
+784c : 00000000;
+784d : 00000000;
+784e : 00000000;
+784f : 00000000;
+7850 : 00000000;
+7851 : 00000000;
+7852 : 00000000;
+7853 : 00000000;
+7854 : 00000000;
+7855 : 00000000;
+7856 : 00000000;
+7857 : 00000000;
+7858 : 00000000;
+7859 : 00000000;
+785a : 00000000;
+785b : 00000000;
+785c : 00000000;
+785d : 00000000;
+785e : 00000000;
+785f : 00000000;
+7860 : 00000000;
+7861 : 00000000;
+7862 : 00000000;
+7863 : 00000000;
+7864 : 00000000;
+7865 : 00000000;
+7866 : 00000000;
+7867 : 00000000;
+7868 : 00000000;
+7869 : 00000000;
+786a : 00000000;
+786b : 00000000;
+786c : 00000000;
+786d : 00000000;
+786e : 00000000;
+786f : 00000000;
+7870 : 00000000;
+7871 : 00000000;
+7872 : 00000000;
+7873 : 00000000;
+7874 : 00000000;
+7875 : 00000000;
+7876 : 00000000;
+7877 : 00000000;
+7878 : 00000000;
+7879 : 00000000;
+787a : 00000000;
+787b : 00000000;
+787c : 00000000;
+787d : 00000000;
+787e : 00000000;
+787f : 00000000;
+7880 : 00000000;
+7881 : 00000000;
+7882 : 00000000;
+7883 : 00000000;
+7884 : 00000000;
+7885 : 00000000;
+7886 : 00000000;
+7887 : 00000000;
+7888 : 00000000;
+7889 : 00000000;
+788a : 00000000;
+788b : 00000000;
+788c : 00000000;
+788d : 00000000;
+788e : 00000000;
+788f : 00000000;
+7890 : 00000000;
+7891 : 00000000;
+7892 : 00000000;
+7893 : 00000000;
+7894 : 00000000;
+7895 : 00000000;
+7896 : 00000000;
+7897 : 00000000;
+7898 : 00000000;
+7899 : 00000000;
+789a : 00000000;
+789b : 00000000;
+789c : 00000000;
+789d : 00000000;
+789e : 00000000;
+789f : 00000000;
+78a0 : 00000000;
+78a1 : 00000000;
+78a2 : 00000000;
+78a3 : 00000000;
+78a4 : 00000000;
+78a5 : 00000000;
+78a6 : 00000000;
+78a7 : 00000000;
+78a8 : 00000000;
+78a9 : 00000000;
+78aa : 00000000;
+78ab : 00000000;
+78ac : 00000000;
+78ad : 00000000;
+78ae : 00000000;
+78af : 00000000;
+78b0 : 00000000;
+78b1 : 00000000;
+78b2 : 00000000;
+78b3 : 00000000;
+78b4 : 00000000;
+78b5 : 00000000;
+78b6 : 00000000;
+78b7 : 00000000;
+78b8 : 00000000;
+78b9 : 00000000;
+78ba : 00000000;
+78bb : 00000000;
+78bc : 00000000;
+78bd : 00000000;
+78be : 00000000;
+78bf : 00000000;
+78c0 : 00000000;
+78c1 : 00000000;
+78c2 : 00000000;
+78c3 : 00000000;
+78c4 : 00000000;
+78c5 : 00000000;
+78c6 : 00000000;
+78c7 : 00000000;
+78c8 : 00000000;
+78c9 : 00000000;
+78ca : 00000000;
+78cb : 00000000;
+78cc : 00000000;
+78cd : 00000000;
+78ce : 00000000;
+78cf : 00000000;
+78d0 : 00000000;
+78d1 : 00000000;
+78d2 : 00000000;
+78d3 : 00000000;
+78d4 : 00000000;
+78d5 : 00000000;
+78d6 : 00000000;
+78d7 : 00000000;
+78d8 : 00000000;
+78d9 : 00000000;
+78da : 00000000;
+78db : 00000000;
+78dc : 00000000;
+78dd : 00000000;
+78de : 00000000;
+78df : 00000000;
+78e0 : 00000000;
+78e1 : 00000000;
+78e2 : 00000000;
+78e3 : 00000000;
+78e4 : 00000000;
+78e5 : 00000000;
+78e6 : 00000000;
+78e7 : 00000000;
+78e8 : 00000000;
+78e9 : 00000000;
+78ea : 00000000;
+78eb : 00000000;
+78ec : 00000000;
+78ed : 00000000;
+78ee : 00000000;
+78ef : 00000000;
+78f0 : 00000000;
+78f1 : 00000000;
+78f2 : 00000000;
+78f3 : 00000000;
+78f4 : 00000000;
+78f5 : 00000000;
+78f6 : 00000000;
+78f7 : 00000000;
+78f8 : 00000000;
+78f9 : 00000000;
+78fa : 00000000;
+78fb : 00000000;
+78fc : 00000000;
+78fd : 00000000;
+78fe : 00000000;
+78ff : 00000000;
+7900 : 00000000;
+7901 : 00000000;
+7902 : 00000000;
+7903 : 00000000;
+7904 : 00000000;
+7905 : 00000000;
+7906 : 00000000;
+7907 : 00000000;
+7908 : 00000000;
+7909 : 00000000;
+790a : 00000000;
+790b : 00000000;
+790c : 00000000;
+790d : 00000000;
+790e : 00000000;
+790f : 00000000;
+7910 : 00000000;
+7911 : 00000000;
+7912 : 00000000;
+7913 : 00000000;
+7914 : 00000000;
+7915 : 00000000;
+7916 : 00000000;
+7917 : 00000000;
+7918 : 00000000;
+7919 : 00000000;
+791a : 00000000;
+791b : 00000000;
+791c : 00000000;
+791d : 00000000;
+791e : 00000000;
+791f : 00000000;
+7920 : 00000000;
+7921 : 00000000;
+7922 : 00000000;
+7923 : 00000000;
+7924 : 00000000;
+7925 : 00000000;
+7926 : 00000000;
+7927 : 00000000;
+7928 : 00000000;
+7929 : 00000000;
+792a : 00000000;
+792b : 00000000;
+792c : 00000000;
+792d : 00000000;
+792e : 00000000;
+792f : 00000000;
+7930 : 00000000;
+7931 : 00000000;
+7932 : 00000000;
+7933 : 00000000;
+7934 : 00000000;
+7935 : 00000000;
+7936 : 00000000;
+7937 : 00000000;
+7938 : 00000000;
+7939 : 00000000;
+793a : 00000000;
+793b : 00000000;
+793c : 00000000;
+793d : 00000000;
+793e : 00000000;
+793f : 00000000;
+7940 : 00000000;
+7941 : 00000000;
+7942 : 00000000;
+7943 : 00000000;
+7944 : 00000000;
+7945 : 00000000;
+7946 : 00000000;
+7947 : 00000000;
+7948 : 00000000;
+7949 : 00000000;
+794a : 00000000;
+794b : 00000000;
+794c : 00000000;
+794d : 00000000;
+794e : 00000000;
+794f : 00000000;
+7950 : 00000000;
+7951 : 00000000;
+7952 : 00000000;
+7953 : 00000000;
+7954 : 00000000;
+7955 : 00000000;
+7956 : 00000000;
+7957 : 00000000;
+7958 : 00000000;
+7959 : 00000000;
+795a : 00000000;
+795b : 00000000;
+795c : 00000000;
+795d : 00000000;
+795e : 00000000;
+795f : 00000000;
+7960 : 00000000;
+7961 : 00000000;
+7962 : 00000000;
+7963 : 00000000;
+7964 : 00000000;
+7965 : 00000000;
+7966 : 00000000;
+7967 : 00000000;
+7968 : 00000000;
+7969 : 00000000;
+796a : 00000000;
+796b : 00000000;
+796c : 00000000;
+796d : 00000000;
+796e : 00000000;
+796f : 00000000;
+7970 : 00000000;
+7971 : 00000000;
+7972 : 00000000;
+7973 : 00000000;
+7974 : 00000000;
+7975 : 00000000;
+7976 : 00000000;
+7977 : 00000000;
+7978 : 00000000;
+7979 : 00000000;
+797a : 00000000;
+797b : 00000000;
+797c : 00000000;
+797d : 00000000;
+797e : 00000000;
+797f : 00000000;
+7980 : 00000000;
+7981 : 00000000;
+7982 : 00000000;
+7983 : 00000000;
+7984 : 00000000;
+7985 : 00000000;
+7986 : 00000000;
+7987 : 00000000;
+7988 : 00000000;
+7989 : 00000000;
+798a : 00000000;
+798b : 00000000;
+798c : 00000000;
+798d : 00000000;
+798e : 00000000;
+798f : 00000000;
+7990 : 00000000;
+7991 : 00000000;
+7992 : 00000000;
+7993 : 00000000;
+7994 : 00000000;
+7995 : 00000000;
+7996 : 00000000;
+7997 : 00000000;
+7998 : 00000000;
+7999 : 00000000;
+799a : 00000000;
+799b : 00000000;
+799c : 00000000;
+799d : 00000000;
+799e : 00000000;
+799f : 00000000;
+79a0 : 00000000;
+79a1 : 00000000;
+79a2 : 00000000;
+79a3 : 00000000;
+79a4 : 00000000;
+79a5 : 00000000;
+79a6 : 00000000;
+79a7 : 00000000;
+79a8 : 00000000;
+79a9 : 00000000;
+79aa : 00000000;
+79ab : 00000000;
+79ac : 00000000;
+79ad : 00000000;
+79ae : 00000000;
+79af : 00000000;
+79b0 : 00000000;
+79b1 : 00000000;
+79b2 : 00000000;
+79b3 : 00000000;
+79b4 : 00000000;
+79b5 : 00000000;
+79b6 : 00000000;
+79b7 : 00000000;
+79b8 : 00000000;
+79b9 : 00000000;
+79ba : 00000000;
+79bb : 00000000;
+79bc : 00000000;
+79bd : 00000000;
+79be : 00000000;
+79bf : 00000000;
+79c0 : 00000000;
+79c1 : 00000000;
+79c2 : 00000000;
+79c3 : 00000000;
+79c4 : 00000000;
+79c5 : 00000000;
+79c6 : 00000000;
+79c7 : 00000000;
+79c8 : 00000000;
+79c9 : 00000000;
+79ca : 00000000;
+79cb : 00000000;
+79cc : 00000000;
+79cd : 00000000;
+79ce : 00000000;
+79cf : 00000000;
+79d0 : 00000000;
+79d1 : 00000000;
+79d2 : 00000000;
+79d3 : 00000000;
+79d4 : 00000000;
+79d5 : 00000000;
+79d6 : 00000000;
+79d7 : 00000000;
+79d8 : 00000000;
+79d9 : 00000000;
+79da : 00000000;
+79db : 00000000;
+79dc : 00000000;
+79dd : 00000000;
+79de : 00000000;
+79df : 00000000;
+79e0 : 00000000;
+79e1 : 00000000;
+79e2 : 00000000;
+79e3 : 00000000;
+79e4 : 00000000;
+79e5 : 00000000;
+79e6 : 00000000;
+79e7 : 00000000;
+79e8 : 00000000;
+79e9 : 00000000;
+79ea : 00000000;
+79eb : 00000000;
+79ec : 00000000;
+79ed : 00000000;
+79ee : 00000000;
+79ef : 00000000;
+79f0 : 00000000;
+79f1 : 00000000;
+79f2 : 00000000;
+79f3 : 00000000;
+79f4 : 00000000;
+79f5 : 00000000;
+79f6 : 00000000;
+79f7 : 00000000;
+79f8 : 00000000;
+79f9 : 00000000;
+79fa : 00000000;
+79fb : 00000000;
+79fc : 00000000;
+79fd : 00000000;
+79fe : 00000000;
+79ff : 00000000;
+7a00 : 00000000;
+7a01 : 00000000;
+7a02 : 00000000;
+7a03 : 00000000;
+7a04 : 00000000;
+7a05 : 00000000;
+7a06 : 00000000;
+7a07 : 00000000;
+7a08 : 00000000;
+7a09 : 00000000;
+7a0a : 00000000;
+7a0b : 00000000;
+7a0c : 00000000;
+7a0d : 00000000;
+7a0e : 00000000;
+7a0f : 00000000;
+7a10 : 00000000;
+7a11 : 00000000;
+7a12 : 00000000;
+7a13 : 00000000;
+7a14 : 00000000;
+7a15 : 00000000;
+7a16 : 00000000;
+7a17 : 00000000;
+7a18 : 00000000;
+7a19 : 00000000;
+7a1a : 00000000;
+7a1b : 00000000;
+7a1c : 00000000;
+7a1d : 00000000;
+7a1e : 00000000;
+7a1f : 00000000;
+7a20 : 00000000;
+7a21 : 00000000;
+7a22 : 00000000;
+7a23 : 00000000;
+7a24 : 00000000;
+7a25 : 00000000;
+7a26 : 00000000;
+7a27 : 00000000;
+7a28 : 00000000;
+7a29 : 00000000;
+7a2a : 00000000;
+7a2b : 00000000;
+7a2c : 00000000;
+7a2d : 00000000;
+7a2e : 00000000;
+7a2f : 00000000;
+7a30 : 00000000;
+7a31 : 00000000;
+7a32 : 00000000;
+7a33 : 00000000;
+7a34 : 00000000;
+7a35 : 00000000;
+7a36 : 00000000;
+7a37 : 00000000;
+7a38 : 00000000;
+7a39 : 00000000;
+7a3a : 00000000;
+7a3b : 00000000;
+7a3c : 00000000;
+7a3d : 00000000;
+7a3e : 00000000;
+7a3f : 00000000;
+7a40 : 00000000;
+7a41 : 00000000;
+7a42 : 00000000;
+7a43 : 00000000;
+7a44 : 00000000;
+7a45 : 00000000;
+7a46 : 00000000;
+7a47 : 00000000;
+7a48 : 00000000;
+7a49 : 00000000;
+7a4a : 00000000;
+7a4b : 00000000;
+7a4c : 00000000;
+7a4d : 00000000;
+7a4e : 00000000;
+7a4f : 00000000;
+7a50 : 00000000;
+7a51 : 00000000;
+7a52 : 00000000;
+7a53 : 00000000;
+7a54 : 00000000;
+7a55 : 00000000;
+7a56 : 00000000;
+7a57 : 00000000;
+7a58 : 00000000;
+7a59 : 00000000;
+7a5a : 00000000;
+7a5b : 00000000;
+7a5c : 00000000;
+7a5d : 00000000;
+7a5e : 00000000;
+7a5f : 00000000;
+7a60 : 00000000;
+7a61 : 00000000;
+7a62 : 00000000;
+7a63 : 00000000;
+7a64 : 00000000;
+7a65 : 00000000;
+7a66 : 00000000;
+7a67 : 00000000;
+7a68 : 00000000;
+7a69 : 00000000;
+7a6a : 00000000;
+7a6b : 00000000;
+7a6c : 00000000;
+7a6d : 00000000;
+7a6e : 00000000;
+7a6f : 00000000;
+7a70 : 00000000;
+7a71 : 00000000;
+7a72 : 00000000;
+7a73 : 00000000;
+7a74 : 00000000;
+7a75 : 00000000;
+7a76 : 00000000;
+7a77 : 00000000;
+7a78 : 00000000;
+7a79 : 00000000;
+7a7a : 00000000;
+7a7b : 00000000;
+7a7c : 00000000;
+7a7d : 00000000;
+7a7e : 00000000;
+7a7f : 00000000;
+7a80 : 00000000;
+7a81 : 00000000;
+7a82 : 00000000;
+7a83 : 00000000;
+7a84 : 00000000;
+7a85 : 00000000;
+7a86 : 00000000;
+7a87 : 00000000;
+7a88 : 00000000;
+7a89 : 00000000;
+7a8a : 00000000;
+7a8b : 00000000;
+7a8c : 00000000;
+7a8d : 00000000;
+7a8e : 00000000;
+7a8f : 00000000;
+7a90 : 00000000;
+7a91 : 00000000;
+7a92 : 00000000;
+7a93 : 00000000;
+7a94 : 00000000;
+7a95 : 00000000;
+7a96 : 00000000;
+7a97 : 00000000;
+7a98 : 00000000;
+7a99 : 00000000;
+7a9a : 00000000;
+7a9b : 00000000;
+7a9c : 00000000;
+7a9d : 00000000;
+7a9e : 00000000;
+7a9f : 00000000;
+7aa0 : 00000000;
+7aa1 : 00000000;
+7aa2 : 00000000;
+7aa3 : 00000000;
+7aa4 : 00000000;
+7aa5 : 00000000;
+7aa6 : 00000000;
+7aa7 : 00000000;
+7aa8 : 00000000;
+7aa9 : 00000000;
+7aaa : 00000000;
+7aab : 00000000;
+7aac : 00000000;
+7aad : 00000000;
+7aae : 00000000;
+7aaf : 00000000;
+7ab0 : 00000000;
+7ab1 : 00000000;
+7ab2 : 00000000;
+7ab3 : 00000000;
+7ab4 : 00000000;
+7ab5 : 00000000;
+7ab6 : 00000000;
+7ab7 : 00000000;
+7ab8 : 00000000;
+7ab9 : 00000000;
+7aba : 00000000;
+7abb : 00000000;
+7abc : 00000000;
+7abd : 00000000;
+7abe : 00000000;
+7abf : 00000000;
+7ac0 : 00000000;
+7ac1 : 00000000;
+7ac2 : 00000000;
+7ac3 : 00000000;
+7ac4 : 00000000;
+7ac5 : 00000000;
+7ac6 : 00000000;
+7ac7 : 00000000;
+7ac8 : 00000000;
+7ac9 : 00000000;
+7aca : 00000000;
+7acb : 00000000;
+7acc : 00000000;
+7acd : 00000000;
+7ace : 00000000;
+7acf : 00000000;
+7ad0 : 00000000;
+7ad1 : 00000000;
+7ad2 : 00000000;
+7ad3 : 00000000;
+7ad4 : 00000000;
+7ad5 : 00000000;
+7ad6 : 00000000;
+7ad7 : 00000000;
+7ad8 : 00000000;
+7ad9 : 00000000;
+7ada : 00000000;
+7adb : 00000000;
+7adc : 00000000;
+7add : 00000000;
+7ade : 00000000;
+7adf : 00000000;
+7ae0 : 00000000;
+7ae1 : 00000000;
+7ae2 : 00000000;
+7ae3 : 00000000;
+7ae4 : 00000000;
+7ae5 : 00000000;
+7ae6 : 00000000;
+7ae7 : 00000000;
+7ae8 : 00000000;
+7ae9 : 00000000;
+7aea : 00000000;
+7aeb : 00000000;
+7aec : 00000000;
+7aed : 00000000;
+7aee : 00000000;
+7aef : 00000000;
+7af0 : 00000000;
+7af1 : 00000000;
+7af2 : 00000000;
+7af3 : 00000000;
+7af4 : 00000000;
+7af5 : 00000000;
+7af6 : 00000000;
+7af7 : 00000000;
+7af8 : 00000000;
+7af9 : 00000000;
+7afa : 00000000;
+7afb : 00000000;
+7afc : 00000000;
+7afd : 00000000;
+7afe : 00000000;
+7aff : 00000000;
+7b00 : 00000000;
+7b01 : 00000000;
+7b02 : 00000000;
+7b03 : 00000000;
+7b04 : 00000000;
+7b05 : 00000000;
+7b06 : 00000000;
+7b07 : 00000000;
+7b08 : 00000000;
+7b09 : 00000000;
+7b0a : 00000000;
+7b0b : 00000000;
+7b0c : 00000000;
+7b0d : 00000000;
+7b0e : 00000000;
+7b0f : 00000000;
+7b10 : 00000000;
+7b11 : 00000000;
+7b12 : 00000000;
+7b13 : 00000000;
+7b14 : 00000000;
+7b15 : 00000000;
+7b16 : 00000000;
+7b17 : 00000000;
+7b18 : 00000000;
+7b19 : 00000000;
+7b1a : 00000000;
+7b1b : 00000000;
+7b1c : 00000000;
+7b1d : 00000000;
+7b1e : 00000000;
+7b1f : 00000000;
+7b20 : 00000000;
+7b21 : 00000000;
+7b22 : 00000000;
+7b23 : 00000000;
+7b24 : 00000000;
+7b25 : 00000000;
+7b26 : 00000000;
+7b27 : 00000000;
+7b28 : 00000000;
+7b29 : 00000000;
+7b2a : 00000000;
+7b2b : 00000000;
+7b2c : 00000000;
+7b2d : 00000000;
+7b2e : 00000000;
+7b2f : 00000000;
+7b30 : 00000000;
+7b31 : 00000000;
+7b32 : 00000000;
+7b33 : 00000000;
+7b34 : 00000000;
+7b35 : 00000000;
+7b36 : 00000000;
+7b37 : 00000000;
+7b38 : 00000000;
+7b39 : 00000000;
+7b3a : 00000000;
+7b3b : 00000000;
+7b3c : 00000000;
+7b3d : 00000000;
+7b3e : 00000000;
+7b3f : 00000000;
+7b40 : 00000000;
+7b41 : 00000000;
+7b42 : 00000000;
+7b43 : 00000000;
+7b44 : 00000000;
+7b45 : 00000000;
+7b46 : 00000000;
+7b47 : 00000000;
+7b48 : 00000000;
+7b49 : 00000000;
+7b4a : 00000000;
+7b4b : 00000000;
+7b4c : 00000000;
+7b4d : 00000000;
+7b4e : 00000000;
+7b4f : 00000000;
+7b50 : 00000000;
+7b51 : 00000000;
+7b52 : 00000000;
+7b53 : 00000000;
+7b54 : 00000000;
+7b55 : 00000000;
+7b56 : 00000000;
+7b57 : 00000000;
+7b58 : 00000000;
+7b59 : 00000000;
+7b5a : 00000000;
+7b5b : 00000000;
+7b5c : 00000000;
+7b5d : 00000000;
+7b5e : 00000000;
+7b5f : 00000000;
+7b60 : 00000000;
+7b61 : 00000000;
+7b62 : 00000000;
+7b63 : 00000000;
+7b64 : 00000000;
+7b65 : 00000000;
+7b66 : 00000000;
+7b67 : 00000000;
+7b68 : 00000000;
+7b69 : 00000000;
+7b6a : 00000000;
+7b6b : 00000000;
+7b6c : 00000000;
+7b6d : 00000000;
+7b6e : 00000000;
+7b6f : 00000000;
+7b70 : 00000000;
+7b71 : 00000000;
+7b72 : 00000000;
+7b73 : 00000000;
+7b74 : 00000000;
+7b75 : 00000000;
+7b76 : 00000000;
+7b77 : 00000000;
+7b78 : 00000000;
+7b79 : 00000000;
+7b7a : 00000000;
+7b7b : 00000000;
+7b7c : 00000000;
+7b7d : 00000000;
+7b7e : 00000000;
+7b7f : 00000000;
+7b80 : 00000000;
+7b81 : 00000000;
+7b82 : 00000000;
+7b83 : 00000000;
+7b84 : 00000000;
+7b85 : 00000000;
+7b86 : 00000000;
+7b87 : 00000000;
+7b88 : 00000000;
+7b89 : 00000000;
+7b8a : 00000000;
+7b8b : 00000000;
+7b8c : 00000000;
+7b8d : 00000000;
+7b8e : 00000000;
+7b8f : 00000000;
+7b90 : 00000000;
+7b91 : 00000000;
+7b92 : 00000000;
+7b93 : 00000000;
+7b94 : 00000000;
+7b95 : 00000000;
+7b96 : 00000000;
+7b97 : 00000000;
+7b98 : 00000000;
+7b99 : 00000000;
+7b9a : 00000000;
+7b9b : 00000000;
+7b9c : 00000000;
+7b9d : 00000000;
+7b9e : 00000000;
+7b9f : 00000000;
+7ba0 : 00000000;
+7ba1 : 00000000;
+7ba2 : 00000000;
+7ba3 : 00000000;
+7ba4 : 00000000;
+7ba5 : 00000000;
+7ba6 : 00000000;
+7ba7 : 00000000;
+7ba8 : 00000000;
+7ba9 : 00000000;
+7baa : 00000000;
+7bab : 00000000;
+7bac : 00000000;
+7bad : 00000000;
+7bae : 00000000;
+7baf : 00000000;
+7bb0 : 00000000;
+7bb1 : 00000000;
+7bb2 : 00000000;
+7bb3 : 00000000;
+7bb4 : 00000000;
+7bb5 : 00000000;
+7bb6 : 00000000;
+7bb7 : 00000000;
+7bb8 : 00000000;
+7bb9 : 00000000;
+7bba : 00000000;
+7bbb : 00000000;
+7bbc : 00000000;
+7bbd : 00000000;
+7bbe : 00000000;
+7bbf : 00000000;
+7bc0 : 00000000;
+7bc1 : 00000000;
+7bc2 : 00000000;
+7bc3 : 00000000;
+7bc4 : 00000000;
+7bc5 : 00000000;
+7bc6 : 00000000;
+7bc7 : 00000000;
+7bc8 : 00000000;
+7bc9 : 00000000;
+7bca : 00000000;
+7bcb : 00000000;
+7bcc : 00000000;
+7bcd : 00000000;
+7bce : 00000000;
+7bcf : 00000000;
+7bd0 : 00000000;
+7bd1 : 00000000;
+7bd2 : 00000000;
+7bd3 : 00000000;
+7bd4 : 00000000;
+7bd5 : 00000000;
+7bd6 : 00000000;
+7bd7 : 00000000;
+7bd8 : 00000000;
+7bd9 : 00000000;
+7bda : 00000000;
+7bdb : 00000000;
+7bdc : 00000000;
+7bdd : 00000000;
+7bde : 00000000;
+7bdf : 00000000;
+7be0 : 00000000;
+7be1 : 00000000;
+7be2 : 00000000;
+7be3 : 00000000;
+7be4 : 00000000;
+7be5 : 00000000;
+7be6 : 00000000;
+7be7 : 00000000;
+7be8 : 00000000;
+7be9 : 00000000;
+7bea : 00000000;
+7beb : 00000000;
+7bec : 00000000;
+7bed : 00000000;
+7bee : 00000000;
+7bef : 00000000;
+7bf0 : 00000000;
+7bf1 : 00000000;
+7bf2 : 00000000;
+7bf3 : 00000000;
+7bf4 : 00000000;
+7bf5 : 00000000;
+7bf6 : 00000000;
+7bf7 : 00000000;
+7bf8 : 00000000;
+7bf9 : 00000000;
+7bfa : 00000000;
+7bfb : 00000000;
+7bfc : 00000000;
+7bfd : 00000000;
+7bfe : 00000000;
+7bff : 00000000;
+7c00 : 00000000;
+7c01 : 00000000;
+7c02 : 00000000;
+7c03 : 00000000;
+7c04 : 00000000;
+7c05 : 00000000;
+7c06 : 00000000;
+7c07 : 00000000;
+7c08 : 00000000;
+7c09 : 00000000;
+7c0a : 00000000;
+7c0b : 00000000;
+7c0c : 00000000;
+7c0d : 00000000;
+7c0e : 00000000;
+7c0f : 00000000;
+7c10 : 00000000;
+7c11 : 00000000;
+7c12 : 00000000;
+7c13 : 00000000;
+7c14 : 00000000;
+7c15 : 00000000;
+7c16 : 00000000;
+7c17 : 00000000;
+7c18 : 00000000;
+7c19 : 00000000;
+7c1a : 00000000;
+7c1b : 00000000;
+7c1c : 00000000;
+7c1d : 00000000;
+7c1e : 00000000;
+7c1f : 00000000;
+7c20 : 00000000;
+7c21 : 00000000;
+7c22 : 00000000;
+7c23 : 00000000;
+7c24 : 00000000;
+7c25 : 00000000;
+7c26 : 00000000;
+7c27 : 00000000;
+7c28 : 00000000;
+7c29 : 00000000;
+7c2a : 00000000;
+7c2b : 00000000;
+7c2c : 00000000;
+7c2d : 00000000;
+7c2e : 00000000;
+7c2f : 00000000;
+7c30 : 00000000;
+7c31 : 00000000;
+7c32 : 00000000;
+7c33 : 00000000;
+7c34 : 00000000;
+7c35 : 00000000;
+7c36 : 00000000;
+7c37 : 00000000;
+7c38 : 00000000;
+7c39 : 00000000;
+7c3a : 00000000;
+7c3b : 00000000;
+7c3c : 00000000;
+7c3d : 00000000;
+7c3e : 00000000;
+7c3f : 00000000;
+7c40 : 00000000;
+7c41 : 00000000;
+7c42 : 00000000;
+7c43 : 00000000;
+7c44 : 00000000;
+7c45 : 00000000;
+7c46 : 00000000;
+7c47 : 00000000;
+7c48 : 00000000;
+7c49 : 00000000;
+7c4a : 00000000;
+7c4b : 00000000;
+7c4c : 00000000;
+7c4d : 00000000;
+7c4e : 00000000;
+7c4f : 00000000;
+7c50 : 00000000;
+7c51 : 00000000;
+7c52 : 00000000;
+7c53 : 00000000;
+7c54 : 00000000;
+7c55 : 00000000;
+7c56 : 00000000;
+7c57 : 00000000;
+7c58 : 00000000;
+7c59 : 00000000;
+7c5a : 00000000;
+7c5b : 00000000;
+7c5c : 00000000;
+7c5d : 00000000;
+7c5e : 00000000;
+7c5f : 00000000;
+7c60 : 00000000;
+7c61 : 00000000;
+7c62 : 00000000;
+7c63 : 00000000;
+7c64 : 00000000;
+7c65 : 00000000;
+7c66 : 00000000;
+7c67 : 00000000;
+7c68 : 00000000;
+7c69 : 00000000;
+7c6a : 00000000;
+7c6b : 00000000;
+7c6c : 00000000;
+7c6d : 00000000;
+7c6e : 00000000;
+7c6f : 00000000;
+7c70 : 00000000;
+7c71 : 00000000;
+7c72 : 00000000;
+7c73 : 00000000;
+7c74 : 00000000;
+7c75 : 00000000;
+7c76 : 00000000;
+7c77 : 00000000;
+7c78 : 00000000;
+7c79 : 00000000;
+7c7a : 00000000;
+7c7b : 00000000;
+7c7c : 00000000;
+7c7d : 00000000;
+7c7e : 00000000;
+7c7f : 00000000;
+7c80 : 00000000;
+7c81 : 00000000;
+7c82 : 00000000;
+7c83 : 00000000;
+7c84 : 00000000;
+7c85 : 00000000;
+7c86 : 00000000;
+7c87 : 00000000;
+7c88 : 00000000;
+7c89 : 00000000;
+7c8a : 00000000;
+7c8b : 00000000;
+7c8c : 00000000;
+7c8d : 00000000;
+7c8e : 00000000;
+7c8f : 00000000;
+7c90 : 00000000;
+7c91 : 00000000;
+7c92 : 00000000;
+7c93 : 00000000;
+7c94 : 00000000;
+7c95 : 00000000;
+7c96 : 00000000;
+7c97 : 00000000;
+7c98 : 00000000;
+7c99 : 00000000;
+7c9a : 00000000;
+7c9b : 00000000;
+7c9c : 00000000;
+7c9d : 00000000;
+7c9e : 00000000;
+7c9f : 00000000;
+7ca0 : 00000000;
+7ca1 : 00000000;
+7ca2 : 00000000;
+7ca3 : 00000000;
+7ca4 : 00000000;
+7ca5 : 00000000;
+7ca6 : 00000000;
+7ca7 : 00000000;
+7ca8 : 00000000;
+7ca9 : 00000000;
+7caa : 00000000;
+7cab : 00000000;
+7cac : 00000000;
+7cad : 00000000;
+7cae : 00000000;
+7caf : 00000000;
+7cb0 : 00000000;
+7cb1 : 00000000;
+7cb2 : 00000000;
+7cb3 : 00000000;
+7cb4 : 00000000;
+7cb5 : 00000000;
+7cb6 : 00000000;
+7cb7 : 00000000;
+7cb8 : 00000000;
+7cb9 : 00000000;
+7cba : 00000000;
+7cbb : 00000000;
+7cbc : 00000000;
+7cbd : 00000000;
+7cbe : 00000000;
+7cbf : 00000000;
+7cc0 : 00000000;
+7cc1 : 00000000;
+7cc2 : 00000000;
+7cc3 : 00000000;
+7cc4 : 00000000;
+7cc5 : 00000000;
+7cc6 : 00000000;
+7cc7 : 00000000;
+7cc8 : 00000000;
+7cc9 : 00000000;
+7cca : 00000000;
+7ccb : 00000000;
+7ccc : 00000000;
+7ccd : 00000000;
+7cce : 00000000;
+7ccf : 00000000;
+7cd0 : 00000000;
+7cd1 : 00000000;
+7cd2 : 00000000;
+7cd3 : 00000000;
+7cd4 : 00000000;
+7cd5 : 00000000;
+7cd6 : 00000000;
+7cd7 : 00000000;
+7cd8 : 00000000;
+7cd9 : 00000000;
+7cda : 00000000;
+7cdb : 00000000;
+7cdc : 00000000;
+7cdd : 00000000;
+7cde : 00000000;
+7cdf : 00000000;
+7ce0 : 00000000;
+7ce1 : 00000000;
+7ce2 : 00000000;
+7ce3 : 00000000;
+7ce4 : 00000000;
+7ce5 : 00000000;
+7ce6 : 00000000;
+7ce7 : 00000000;
+7ce8 : 00000000;
+7ce9 : 00000000;
+7cea : 00000000;
+7ceb : 00000000;
+7cec : 00000000;
+7ced : 00000000;
+7cee : 00000000;
+7cef : 00000000;
+7cf0 : 00000000;
+7cf1 : 00000000;
+7cf2 : 00000000;
+7cf3 : 00000000;
+7cf4 : 00000000;
+7cf5 : 00000000;
+7cf6 : 00000000;
+7cf7 : 00000000;
+7cf8 : 00000000;
+7cf9 : 00000000;
+7cfa : 00000000;
+7cfb : 00000000;
+7cfc : 00000000;
+7cfd : 00000000;
+7cfe : 00000000;
+7cff : 00000000;
+7d00 : 00000000;
+7d01 : 00000000;
+7d02 : 00000000;
+7d03 : 00000000;
+7d04 : 00000000;
+7d05 : 00000000;
+7d06 : 00000000;
+7d07 : 00000000;
+7d08 : 00000000;
+7d09 : 00000000;
+7d0a : 00000000;
+7d0b : 00000000;
+7d0c : 00000000;
+7d0d : 00000000;
+7d0e : 00000000;
+7d0f : 00000000;
+7d10 : 00000000;
+7d11 : 00000000;
+7d12 : 00000000;
+7d13 : 00000000;
+7d14 : 00000000;
+7d15 : 00000000;
+7d16 : 00000000;
+7d17 : 00000000;
+7d18 : 00000000;
+7d19 : 00000000;
+7d1a : 00000000;
+7d1b : 00000000;
+7d1c : 00000000;
+7d1d : 00000000;
+7d1e : 00000000;
+7d1f : 00000000;
+7d20 : 00000000;
+7d21 : 00000000;
+7d22 : 00000000;
+7d23 : 00000000;
+7d24 : 00000000;
+7d25 : 00000000;
+7d26 : 00000000;
+7d27 : 00000000;
+7d28 : 00000000;
+7d29 : 00000000;
+7d2a : 00000000;
+7d2b : 00000000;
+7d2c : 00000000;
+7d2d : 00000000;
+7d2e : 00000000;
+7d2f : 00000000;
+7d30 : 00000000;
+7d31 : 00000000;
+7d32 : 00000000;
+7d33 : 00000000;
+7d34 : 00000000;
+7d35 : 00000000;
+7d36 : 00000000;
+7d37 : 00000000;
+7d38 : 00000000;
+7d39 : 00000000;
+7d3a : 00000000;
+7d3b : 00000000;
+7d3c : 00000000;
+7d3d : 00000000;
+7d3e : 00000000;
+7d3f : 00000000;
+7d40 : 00000000;
+7d41 : 00000000;
+7d42 : 00000000;
+7d43 : 00000000;
+7d44 : 00000000;
+7d45 : 00000000;
+7d46 : 00000000;
+7d47 : 00000000;
+7d48 : 00000000;
+7d49 : 00000000;
+7d4a : 00000000;
+7d4b : 00000000;
+7d4c : 00000000;
+7d4d : 00000000;
+7d4e : 00000000;
+7d4f : 00000000;
+7d50 : 00000000;
+7d51 : 00000000;
+7d52 : 00000000;
+7d53 : 00000000;
+7d54 : 00000000;
+7d55 : 00000000;
+7d56 : 00000000;
+7d57 : 00000000;
+7d58 : 00000000;
+7d59 : 00000000;
+7d5a : 00000000;
+7d5b : 00000000;
+7d5c : 00000000;
+7d5d : 00000000;
+7d5e : 00000000;
+7d5f : 00000000;
+7d60 : 00000000;
+7d61 : 00000000;
+7d62 : 00000000;
+7d63 : 00000000;
+7d64 : 00000000;
+7d65 : 00000000;
+7d66 : 00000000;
+7d67 : 00000000;
+7d68 : 00000000;
+7d69 : 00000000;
+7d6a : 00000000;
+7d6b : 00000000;
+7d6c : 00000000;
+7d6d : 00000000;
+7d6e : 00000000;
+7d6f : 00000000;
+7d70 : 00000000;
+7d71 : 00000000;
+7d72 : 00000000;
+7d73 : 00000000;
+7d74 : 00000000;
+7d75 : 00000000;
+7d76 : 00000000;
+7d77 : 00000000;
+7d78 : 00000000;
+7d79 : 00000000;
+7d7a : 00000000;
+7d7b : 00000000;
+7d7c : 00000000;
+7d7d : 00000000;
+7d7e : 00000000;
+7d7f : 00000000;
+7d80 : 00000000;
+7d81 : 00000000;
+7d82 : 00000000;
+7d83 : 00000000;
+7d84 : 00000000;
+7d85 : 00000000;
+7d86 : 00000000;
+7d87 : 00000000;
+7d88 : 00000000;
+7d89 : 00000000;
+7d8a : 00000000;
+7d8b : 00000000;
+7d8c : 00000000;
+7d8d : 00000000;
+7d8e : 00000000;
+7d8f : 00000000;
+7d90 : 00000000;
+7d91 : 00000000;
+7d92 : 00000000;
+7d93 : 00000000;
+7d94 : 00000000;
+7d95 : 00000000;
+7d96 : 00000000;
+7d97 : 00000000;
+7d98 : 00000000;
+7d99 : 00000000;
+7d9a : 00000000;
+7d9b : 00000000;
+7d9c : 00000000;
+7d9d : 00000000;
+7d9e : 00000000;
+7d9f : 00000000;
+7da0 : 00000000;
+7da1 : 00000000;
+7da2 : 00000000;
+7da3 : 00000000;
+7da4 : 00000000;
+7da5 : 00000000;
+7da6 : 00000000;
+7da7 : 00000000;
+7da8 : 00000000;
+7da9 : 00000000;
+7daa : 00000000;
+7dab : 00000000;
+7dac : 00000000;
+7dad : 00000000;
+7dae : 00000000;
+7daf : 00000000;
+7db0 : 00000000;
+7db1 : 00000000;
+7db2 : 00000000;
+7db3 : 00000000;
+7db4 : 00000000;
+7db5 : 00000000;
+7db6 : 00000000;
+7db7 : 00000000;
+7db8 : 00000000;
+7db9 : 00000000;
+7dba : 00000000;
+7dbb : 00000000;
+7dbc : 00000000;
+7dbd : 00000000;
+7dbe : 00000000;
+7dbf : 00000000;
+7dc0 : 00000000;
+7dc1 : 00000000;
+7dc2 : 00000000;
+7dc3 : 00000000;
+7dc4 : 00000000;
+7dc5 : 00000000;
+7dc6 : 00000000;
+7dc7 : 00000000;
+7dc8 : 00000000;
+7dc9 : 00000000;
+7dca : 00000000;
+7dcb : 00000000;
+7dcc : 00000000;
+7dcd : 00000000;
+7dce : 00000000;
+7dcf : 00000000;
+7dd0 : 00000000;
+7dd1 : 00000000;
+7dd2 : 00000000;
+7dd3 : 00000000;
+7dd4 : 00000000;
+7dd5 : 00000000;
+7dd6 : 00000000;
+7dd7 : 00000000;
+7dd8 : 00000000;
+7dd9 : 00000000;
+7dda : 00000000;
+7ddb : 00000000;
+7ddc : 00000000;
+7ddd : 00000000;
+7dde : 00000000;
+7ddf : 00000000;
+7de0 : 00000000;
+7de1 : 00000000;
+7de2 : 00000000;
+7de3 : 00000000;
+7de4 : 00000000;
+7de5 : 00000000;
+7de6 : 00000000;
+7de7 : 00000000;
+7de8 : 00000000;
+7de9 : 00000000;
+7dea : 00000000;
+7deb : 00000000;
+7dec : 00000000;
+7ded : 00000000;
+7dee : 00000000;
+7def : 00000000;
+7df0 : 00000000;
+7df1 : 00000000;
+7df2 : 00000000;
+7df3 : 00000000;
+7df4 : 00000000;
+7df5 : 00000000;
+7df6 : 00000000;
+7df7 : 00000000;
+7df8 : 00000000;
+7df9 : 00000000;
+7dfa : 00000000;
+7dfb : 00000000;
+7dfc : 00000000;
+7dfd : 00000000;
+7dfe : 00000000;
+7dff : 00000000;
+7e00 : 00000000;
+7e01 : 00000000;
+7e02 : 00000000;
+7e03 : 00000000;
+7e04 : 00000000;
+7e05 : 00000000;
+7e06 : 00000000;
+7e07 : 00000000;
+7e08 : 00000000;
+7e09 : 00000000;
+7e0a : 00000000;
+7e0b : 00000000;
+7e0c : 00000000;
+7e0d : 00000000;
+7e0e : 00000000;
+7e0f : 00000000;
+7e10 : 00000000;
+7e11 : 00000000;
+7e12 : 00000000;
+7e13 : 00000000;
+7e14 : 00000000;
+7e15 : 00000000;
+7e16 : 00000000;
+7e17 : 00000000;
+7e18 : 00000000;
+7e19 : 00000000;
+7e1a : 00000000;
+7e1b : 00000000;
+7e1c : 00000000;
+7e1d : 00000000;
+7e1e : 00000000;
+7e1f : 00000000;
+7e20 : 00000000;
+7e21 : 00000000;
+7e22 : 00000000;
+7e23 : 00000000;
+7e24 : 00000000;
+7e25 : 00000000;
+7e26 : 00000000;
+7e27 : 00000000;
+7e28 : 00000000;
+7e29 : 00000000;
+7e2a : 00000000;
+7e2b : 00000000;
+7e2c : 00000000;
+7e2d : 00000000;
+7e2e : 00000000;
+7e2f : 00000000;
+7e30 : 00000000;
+7e31 : 00000000;
+7e32 : 00000000;
+7e33 : 00000000;
+7e34 : 00000000;
+7e35 : 00000000;
+7e36 : 00000000;
+7e37 : 00000000;
+7e38 : 00000000;
+7e39 : 00000000;
+7e3a : 00000000;
+7e3b : 00000000;
+7e3c : 00000000;
+7e3d : 00000000;
+7e3e : 00000000;
+7e3f : 00000000;
+7e40 : 00000000;
+7e41 : 00000000;
+7e42 : 00000000;
+7e43 : 00000000;
+7e44 : 00000000;
+7e45 : 00000000;
+7e46 : 00000000;
+7e47 : 00000000;
+7e48 : 00000000;
+7e49 : 00000000;
+7e4a : 00000000;
+7e4b : 00000000;
+7e4c : 00000000;
+7e4d : 00000000;
+7e4e : 00000000;
+7e4f : 00000000;
+7e50 : 00000000;
+7e51 : 00000000;
+7e52 : 00000000;
+7e53 : 00000000;
+7e54 : 00000000;
+7e55 : 00000000;
+7e56 : 00000000;
+7e57 : 00000000;
+7e58 : 00000000;
+7e59 : 00000000;
+7e5a : 00000000;
+7e5b : 00000000;
+7e5c : 00000000;
+7e5d : 00000000;
+7e5e : 00000000;
+7e5f : 00000000;
+7e60 : 00000000;
+7e61 : 00000000;
+7e62 : 00000000;
+7e63 : 00000000;
+7e64 : 00000000;
+7e65 : 00000000;
+7e66 : 00000000;
+7e67 : 00000000;
+7e68 : 00000000;
+7e69 : 00000000;
+7e6a : 00000000;
+7e6b : 00000000;
+7e6c : 00000000;
+7e6d : 00000000;
+7e6e : 00000000;
+7e6f : 00000000;
+7e70 : 00000000;
+7e71 : 00000000;
+7e72 : 00000000;
+7e73 : 00000000;
+7e74 : 00000000;
+7e75 : 00000000;
+7e76 : 00000000;
+7e77 : 00000000;
+7e78 : 00000000;
+7e79 : 00000000;
+7e7a : 00000000;
+7e7b : 00000000;
+7e7c : 00000000;
+7e7d : 00000000;
+7e7e : 00000000;
+7e7f : 00000000;
+7e80 : 00000000;
+7e81 : 00000000;
+7e82 : 00000000;
+7e83 : 00000000;
+7e84 : 00000000;
+7e85 : 00000000;
+7e86 : 00000000;
+7e87 : 00000000;
+7e88 : 00000000;
+7e89 : 00000000;
+7e8a : 00000000;
+7e8b : 00000000;
+7e8c : 00000000;
+7e8d : 00000000;
+7e8e : 00000000;
+7e8f : 00000000;
+7e90 : 00000000;
+7e91 : 00000000;
+7e92 : 00000000;
+7e93 : 00000000;
+7e94 : 00000000;
+7e95 : 00000000;
+7e96 : 00000000;
+7e97 : 00000000;
+7e98 : 00000000;
+7e99 : 00000000;
+7e9a : 00000000;
+7e9b : 00000000;
+7e9c : 00000000;
+7e9d : 00000000;
+7e9e : 00000000;
+7e9f : 00000000;
+7ea0 : 00000000;
+7ea1 : 00000000;
+7ea2 : 00000000;
+7ea3 : 00000000;
+7ea4 : 00000000;
+7ea5 : 00000000;
+7ea6 : 00000000;
+7ea7 : 00000000;
+7ea8 : 00000000;
+7ea9 : 00000000;
+7eaa : 00000000;
+7eab : 00000000;
+7eac : 00000000;
+7ead : 00000000;
+7eae : 00000000;
+7eaf : 00000000;
+7eb0 : 00000000;
+7eb1 : 00000000;
+7eb2 : 00000000;
+7eb3 : 00000000;
+7eb4 : 00000000;
+7eb5 : 00000000;
+7eb6 : 00000000;
+7eb7 : 00000000;
+7eb8 : 00000000;
+7eb9 : 00000000;
+7eba : 00000000;
+7ebb : 00000000;
+7ebc : 00000000;
+7ebd : 00000000;
+7ebe : 00000000;
+7ebf : 00000000;
+7ec0 : 00000000;
+7ec1 : 00000000;
+7ec2 : 00000000;
+7ec3 : 00000000;
+7ec4 : 00000000;
+7ec5 : 00000000;
+7ec6 : 00000000;
+7ec7 : 00000000;
+7ec8 : 00000000;
+7ec9 : 00000000;
+7eca : 00000000;
+7ecb : 00000000;
+7ecc : 00000000;
+7ecd : 00000000;
+7ece : 00000000;
+7ecf : 00000000;
+7ed0 : 00000000;
+7ed1 : 00000000;
+7ed2 : 00000000;
+7ed3 : 00000000;
+7ed4 : 00000000;
+7ed5 : 00000000;
+7ed6 : 00000000;
+7ed7 : 00000000;
+7ed8 : 00000000;
+7ed9 : 00000000;
+7eda : 00000000;
+7edb : 00000000;
+7edc : 00000000;
+7edd : 00000000;
+7ede : 00000000;
+7edf : 00000000;
+7ee0 : 00000000;
+7ee1 : 00000000;
+7ee2 : 00000000;
+7ee3 : 00000000;
+7ee4 : 00000000;
+7ee5 : 00000000;
+7ee6 : 00000000;
+7ee7 : 00000000;
+7ee8 : 00000000;
+7ee9 : 00000000;
+7eea : 00000000;
+7eeb : 00000000;
+7eec : 00000000;
+7eed : 00000000;
+7eee : 00000000;
+7eef : 00000000;
+7ef0 : 00000000;
+7ef1 : 00000000;
+7ef2 : 00000000;
+7ef3 : 00000000;
+7ef4 : 00000000;
+7ef5 : 00000000;
+7ef6 : 00000000;
+7ef7 : 00000000;
+7ef8 : 00000000;
+7ef9 : 00000000;
+7efa : 00000000;
+7efb : 00000000;
+7efc : 00000000;
+7efd : 00000000;
+7efe : 00000000;
+7eff : 00000000;
+7f00 : 00000000;
+7f01 : 00000000;
+7f02 : 00000000;
+7f03 : 00000000;
+7f04 : 00000000;
+7f05 : 00000000;
+7f06 : 00000000;
+7f07 : 00000000;
+7f08 : 00000000;
+7f09 : 00000000;
+7f0a : 00000000;
+7f0b : 00000000;
+7f0c : 00000000;
+7f0d : 00000000;
+7f0e : 00000000;
+7f0f : 00000000;
+7f10 : 00000000;
+7f11 : 00000000;
+7f12 : 00000000;
+7f13 : 00000000;
+7f14 : 00000000;
+7f15 : 00000000;
+7f16 : 00000000;
+7f17 : 00000000;
+7f18 : 00000000;
+7f19 : 00000000;
+7f1a : 00000000;
+7f1b : 00000000;
+7f1c : 00000000;
+7f1d : 00000000;
+7f1e : 00000000;
+7f1f : 00000000;
+7f20 : 00000000;
+7f21 : 00000000;
+7f22 : 00000000;
+7f23 : 00000000;
+7f24 : 00000000;
+7f25 : 00000000;
+7f26 : 00000000;
+7f27 : 00000000;
+7f28 : 00000000;
+7f29 : 00000000;
+7f2a : 00000000;
+7f2b : 00000000;
+7f2c : 00000000;
+7f2d : 00000000;
+7f2e : 00000000;
+7f2f : 00000000;
+7f30 : 00000000;
+7f31 : 00000000;
+7f32 : 00000000;
+7f33 : 00000000;
+7f34 : 00000000;
+7f35 : 00000000;
+7f36 : 00000000;
+7f37 : 00000000;
+7f38 : 00000000;
+7f39 : 00000000;
+7f3a : 00000000;
+7f3b : 00000000;
+7f3c : 00000000;
+7f3d : 00000000;
+7f3e : 00000000;
+7f3f : 00000000;
+7f40 : 00000000;
+7f41 : 00000000;
+7f42 : 00000000;
+7f43 : 00000000;
+7f44 : 00000000;
+7f45 : 00000000;
+7f46 : 00000000;
+7f47 : 00000000;
+7f48 : 00000000;
+7f49 : 00000000;
+7f4a : 00000000;
+7f4b : 00000000;
+7f4c : 00000000;
+7f4d : 00000000;
+7f4e : 00000000;
+7f4f : 00000000;
+7f50 : 00000000;
+7f51 : 00000000;
+7f52 : 00000000;
+7f53 : 00000000;
+7f54 : 00000000;
+7f55 : 00000000;
+7f56 : 00000000;
+7f57 : 00000000;
+7f58 : 00000000;
+7f59 : 00000000;
+7f5a : 00000000;
+7f5b : 00000000;
+7f5c : 00000000;
+7f5d : 00000000;
+7f5e : 00000000;
+7f5f : 00000000;
+7f60 : 00000000;
+7f61 : 00000000;
+7f62 : 00000000;
+7f63 : 00000000;
+7f64 : 00000000;
+7f65 : 00000000;
+7f66 : 00000000;
+7f67 : 00000000;
+7f68 : 00000000;
+7f69 : 00000000;
+7f6a : 00000000;
+7f6b : 00000000;
+7f6c : 00000000;
+7f6d : 00000000;
+7f6e : 00000000;
+7f6f : 00000000;
+7f70 : 00000000;
+7f71 : 00000000;
+7f72 : 00000000;
+7f73 : 00000000;
+7f74 : 00000000;
+7f75 : 00000000;
+7f76 : 00000000;
+7f77 : 00000000;
+7f78 : 00000000;
+7f79 : 00000000;
+7f7a : 00000000;
+7f7b : 00000000;
+7f7c : 00000000;
+7f7d : 00000000;
+7f7e : 00000000;
+7f7f : 00000000;
+7f80 : 00000000;
+7f81 : 00000000;
+7f82 : 00000000;
+7f83 : 00000000;
+7f84 : 00000000;
+7f85 : 00000000;
+7f86 : 00000000;
+7f87 : 00000000;
+7f88 : 00000000;
+7f89 : 00000000;
+7f8a : 00000000;
+7f8b : 00000000;
+7f8c : 00000000;
+7f8d : 00000000;
+7f8e : 00000000;
+7f8f : 00000000;
+7f90 : 00000000;
+7f91 : 00000000;
+7f92 : 00000000;
+7f93 : 00000000;
+7f94 : 00000000;
+7f95 : 00000000;
+7f96 : 00000000;
+7f97 : 00000000;
+7f98 : 00000000;
+7f99 : 00000000;
+7f9a : 00000000;
+7f9b : 00000000;
+7f9c : 00000000;
+7f9d : 00000000;
+7f9e : 00000000;
+7f9f : 00000000;
+7fa0 : 00000000;
+7fa1 : 00000000;
+7fa2 : 00000000;
+7fa3 : 00000000;
+7fa4 : 00000000;
+7fa5 : 00000000;
+7fa6 : 00000000;
+7fa7 : 00000000;
+7fa8 : 00000000;
+7fa9 : 00000000;
+7faa : 00000000;
+7fab : 00000000;
+7fac : 00000000;
+7fad : 00000000;
+7fae : 00000000;
+7faf : 00000000;
+7fb0 : 00000000;
+7fb1 : 00000000;
+7fb2 : 00000000;
+7fb3 : 00000000;
+7fb4 : 00000000;
+7fb5 : 00000000;
+7fb6 : 00000000;
+7fb7 : 00000000;
+7fb8 : 00000000;
+7fb9 : 00000000;
+7fba : 00000000;
+7fbb : 00000000;
+7fbc : 00000000;
+7fbd : 00000000;
+7fbe : 00000000;
+7fbf : 00000000;
+7fc0 : 00000000;
+7fc1 : 00000000;
+7fc2 : 00000000;
+7fc3 : 00000000;
+7fc4 : 00000000;
+7fc5 : 00000000;
+7fc6 : 00000000;
+7fc7 : 00000000;
+7fc8 : 00000000;
+7fc9 : 00000000;
+7fca : 00000000;
+7fcb : 00000000;
+7fcc : 00000000;
+7fcd : 00000000;
+7fce : 00000000;
+7fcf : 00000000;
+7fd0 : 00000000;
+7fd1 : 00000000;
+7fd2 : 00000000;
+7fd3 : 00000000;
+7fd4 : 00000000;
+7fd5 : 00000000;
+7fd6 : 00000000;
+7fd7 : 00000000;
+7fd8 : 00000000;
+7fd9 : 00000000;
+7fda : 00000000;
+7fdb : 00000000;
+7fdc : 00000000;
+7fdd : 00000000;
+7fde : 00000000;
+7fdf : 00000000;
+7fe0 : 00000000;
+7fe1 : 00000000;
+7fe2 : 00000000;
+7fe3 : 00000000;
+7fe4 : 00000000;
+7fe5 : 00000000;
+7fe6 : 00000000;
+7fe7 : 00000000;
+7fe8 : 00000000;
+7fe9 : 00000000;
+7fea : 00000000;
+7feb : 00000000;
+7fec : 00000000;
+7fed : 00000000;
+7fee : 00000000;
+7fef : 00000000;
+7ff0 : 00000000;
+7ff1 : 00000000;
+7ff2 : 00000000;
+7ff3 : 00000000;
+7ff4 : 00000000;
+7ff5 : 00000000;
+7ff6 : 00000000;
+7ff7 : 00000000;
+7ff8 : 00000000;
+7ff9 : 00000000;
+7ffa : 00000000;
+7ffb : 00000000;
+7ffc : 00000000;
+7ffd : 00000000;
+7ffe : 00000000;
+7fff : 00000000;
+END;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd
new file mode 100644
index 000000000..81a61a583
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/wr_board_pkg.vhd
@@ -0,0 +1,359 @@
+-------------------------------------------------------------------------------
+-- Title : Common WRPC Wrapper package
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : xwrc_board_common.vhd
+-- Company : CERN (BE-CO-HT)
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN
+--
+-- GNU LESSER GENERAL PUBLIC LICENSE
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.wrcore_pkg.all;
+use work.streamers_pkg.all;
+
+package wr_board_pkg is
+
+ type t_board_fabric_iface is (PLAIN, STREAMERS, ETHERBONE, always_last_invalid);
+
+ -- TODO: using these default paths requires absolute path. If relative path is used,
+ -- they work only for reference designs by chance. Once we figure out how to
+ -- automatically figure out absolute path of <wr-cores location>/bin/wrpc, we
+ -- will be able to use this concept in f_find_default_lm32_firmware()
+ constant dpram_initf_default_altera_phy8 : string := "";
+ constant dpram_initf_default_xilinx_phy8 : string := "";
+ constant dpram_initf_default_altera_phy8_sim : string := "";
+ constant dpram_initf_default_xilinx_phy8_sim : string := "";
+
+ procedure f_check_fabric_iface_type (
+ constant iface_type : in t_board_fabric_iface);
+
+ procedure f_check_diag_id (
+ constant diag_id, diag_ver : in integer);
+
+ function f_str2iface_type (
+ constant iface_str : string(1 to 9))
+ return t_board_fabric_iface;
+
+ function f_pick_diag_val (
+ iface : t_board_fabric_iface;
+ streamers_val : integer;
+ application_val : integer
+ ) return integer;
+
+ function f_pick_diag_size (
+ iface : t_board_fabric_iface;
+ streamers_size : integer;
+ application_size : integer
+ ) return integer;
+
+ function f_vectorize_diag (
+ diag_in : t_generic_word_array;
+ diag_vector_size : integer)
+ return std_logic_vector;
+
+ function f_de_vectorize_diag (
+ diag_in : std_logic_vector;
+ diag_vector_size : integer)
+ return t_generic_word_array;
+
+ function f_find_default_lm32_firmware (
+ dpram_initf : string;
+ simulation : integer;
+ pcs_16_bit : boolean)
+ return string;
+
+ component xwrc_board_common is
+ generic (
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := TRUE;
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for M25P128
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for M25P128
+ g_phys_uart : boolean := TRUE;
+ g_virtual_uart : boolean := TRUE;
+ g_aux_clks : integer := 0;
+ g_ep_rxbuf_size : integer := 1024;
+ g_tx_runt_padding : boolean := TRUE;
+ g_dpram_initf : string := "";
+ g_dpram_size : integer := 131072/4;
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := FALSE;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := FALSE;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0;
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ g_fabric_iface : t_board_fabric_iface := PLAIN);
+ port (
+ clk_sys_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+ clk_ref_i : in std_logic;
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ clk_10m_ext_i : in std_logic := '0';
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+ pps_ext_i : in std_logic := '0';
+ rst_n_i : in std_logic;
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+ scl_o : out std_logic;
+ scl_i : in std_logic := '1';
+ sda_o : out std_logic;
+ sda_i : in std_logic := '1';
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := '1';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := '1';
+ sfp_det_i : in std_logic;
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+ uart_rxd_i : in std_logic := '0';
+ uart_txd_o : out std_logic;
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := (others => '1');
+ wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ wb_slave_o : out t_wishbone_slave_out;
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+ wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0');
+ wrs_tx_valid_i : in std_logic := '0';
+ wrs_tx_dreq_o : out std_logic;
+ wrs_tx_last_i : in std_logic := '1';
+ wrs_tx_flush_i : in std_logic := '0';
+ wrs_rx_first_o : out std_logic;
+ wrs_rx_last_o : out std_logic;
+ wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ wrs_rx_valid_o : out std_logic;
+ wrs_rx_dreq_i : in std_logic := '0';
+ wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default;
+ wb_eth_master_o : out t_wishbone_master_out;
+ wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+ tm_link_up_o : out std_logic;
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+ link_ok_o : out std_logic);
+ end component xwrc_board_common;
+
+end wr_board_pkg;
+
+package body wr_board_pkg is
+
+ procedure f_check_fabric_iface_type (
+ constant iface_type : in t_board_fabric_iface) is
+ begin
+ if iface_type >= always_last_invalid then
+ assert FALSE
+ report "WR PTP core fabric interface [" & t_board_fabric_iface'image(iface_type) & "] is not supported"
+ severity FAILURE;
+ end if;
+ end procedure f_check_fabric_iface_type;
+
+ procedure f_check_diag_id (
+ constant diag_id, diag_ver : in integer) is
+ begin
+ assert (diag_id /= 1) report
+ "g_diag_id=1 is reserved for wr_streamers and cannot be set by users"
+ severity FAILURE;
+
+ assert (not (diag_id /= 0 and diag_ver = 0)) report
+ "If diag_id is set by the user (diag_id > 1), g_diag_ver must be at least 1"
+ severity FAILURE;
+ end procedure f_check_diag_id;
+
+ function f_str2iface_type (
+ constant iface_str : string(1 to 9))
+ return t_board_fabric_iface is
+ variable result : t_board_fabric_iface;
+ begin
+ case iface_str is
+ when "PLAINFBRC" => result := PLAIN;
+ when "STREAMERS" => result := STREAMERS;
+ when "ETHERBONE" => result := ETHERBONE;
+ when others => result := always_last_invalid;
+ end case;
+ return result;
+ end function f_str2iface_type;
+
+ -- this function decides what is the diag_id/ver used in the WRPC and MIB for access
+ -- via SNMP
+ function f_pick_diag_val (
+ iface : t_board_fabric_iface;
+ streamers_val : integer;
+ application_val : integer
+ ) return integer is
+ begin
+ -- streamers are enabled and application/user does nto use diags (no vector specified),
+ -- use default streamer's id/ver
+ if(iface = STREAMERS and application_val = 0) then
+ return streamers_val;
+ else -- otherwise, use id/ver specified by the user/application. This is the case also
+ -- when streamers are used.
+ return application_val;
+ end if;
+ end f_pick_diag_val;
+
+ -- provide the size of the final diag array.
+ function f_pick_diag_size (
+ iface : t_board_fabric_iface;
+ streamers_size : integer;
+ application_size : integer
+ ) return integer is
+ begin
+ -- when streamers are used, concatenate the array of streamers and application/user
+ if(iface = STREAMERS) then
+ return (streamers_size+application_size);
+ else -- otherwise, only the size provided by the application/user
+ return application_size;
+ end if;
+ end f_pick_diag_size;
+
+ function f_vectorize_diag (
+ diag_in : t_generic_word_array;
+ diag_vector_size : integer)
+ return std_logic_vector is
+ variable result : std_logic_vector(diag_vector_size-1 downto 0);
+ begin
+ assert (diag_vector_size mod 32 = 0) report
+ "g_diag_ro/w_vector_width must have value that is a mutiple of 32"
+ severity FAILURE;
+ for i in 0 to diag_vector_size/32-1 loop
+ result(i*32-31 downto i*32) := diag_in(i);
+ end loop;
+ return result;
+ end function f_vectorize_diag;
+
+ function f_de_vectorize_diag (
+ diag_in : std_logic_vector;
+ diag_vector_size : integer)
+ return t_generic_word_array is
+ variable result : t_generic_word_array(diag_vector_size/32-1 downto 0);
+ begin
+ assert (diag_vector_size mod 32 = 0) report
+ "g_diag_ro/w_vector_width must have value that is a mutiple of 32"
+ severity FAILURE;
+ for i in 0 to diag_vector_size/32-1 loop
+ result(i) := diag_in(i*32-31 downto i*32);
+ end loop;
+ return result;
+ end function f_de_vectorize_diag;
+
+ function f_find_default_lm32_firmware (
+ dpram_initf : string;
+ simulation : integer;
+ pcs_16_bit : boolean)
+ return string is
+ begin
+ if((dpram_initf = "default_altera" or dpram_initf = "default_xilinx") and
+ pcs_16_bit = TRUE) then
+ assert FALSE
+ report "[Board:Software for LM32 in WR Core] No release binary for " &
+ "pcs_16_bit." severity FAILURE;
+ return "";
+ elsif (dpram_initf /= "default_altera" and dpram_initf /= "default_xilinx") then
+ report "[Board:Software for LM32 in WR Core] Using user-provided LM32 " &
+ "firmware ("&dpram_initf&")." severity NOTE;
+ return dpram_initf;
+ elsif (simulation = 0 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and
+ dpram_initf_default_altera_phy8 /= "") then
+ report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
+ "(altera, phy8)." severity NOTE;
+ return dpram_initf_default_altera_phy8;
+ elsif (simulation = 0 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and
+ dpram_initf_default_xilinx_phy8 /= "") then
+ report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
+ "(xilnix, phy8)" severity NOTE;
+ return dpram_initf_default_xilinx_phy8;
+ elsif (simulation = 1 and dpram_initf = "default_altera" and pcs_16_bit = FALSE and
+ dpram_initf_default_altera_phy8_sim /= "") then
+ report "Board:[Software for LM32 in WR Core] Using release LM32 firmware " &
+ "(altera, phy8, sim)." severity NOTE;
+ return dpram_initf_default_altera_phy8_sim;
+ elsif (simulation = 1 and dpram_initf = "default_xilinx" and pcs_16_bit = FALSE and
+ dpram_initf_default_xilinx_phy8_sim /= "") then
+ report "[Board:Software for LM32 in WR Core] Using release LM32 firmware " &
+ "(xilinx, phy8, sim)." severity NOTE;
+ return dpram_initf_default_xilinx_phy8_sim;
+ else
+ assert FALSE
+ report "[Board:Software for LM32 in WR Core] Default inclussion of LM32" &
+ "binary with software is not supported yet. In your instantiation" &
+ "of the board (xwrc_board_{spec,svec,vfchd} set g_dpram_initf to the" &
+ "correct path, i.e." &
+ "<your wr-cores location>/bin/wrpc/wrc_phy8_sim.{bram, mif} " severity FAILURE;
+ return "";
+ end if;
+ end function;
+
+end package body wr_board_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd
new file mode 100644
index 000000000..1ec195920
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/common/xwrc_board_common.vhd
@@ -0,0 +1,552 @@
+-------------------------------------------------------------------------------
+-- Title : Common WRPC Wrapper
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : xwrc_board_common.vhd
+-- Company : CERN (BE-CO-HT)
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Wrapper for WR PTP core with common features shared between
+-- the various supported boards. These include the core itself, as well as
+-- a selection of fabric interfaces between the core and the application.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN
+--
+-- GNU LESSER GENERAL PUBLIC LICENSE
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.wrcore_pkg.all;
+use work.wishbone_pkg.all;
+use work.etherbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.streamers_pkg.all;
+use work.wr_board_pkg.all;
+
+entity xwrc_board_common is
+ generic(
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := TRUE;
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for M25P128
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for M25P128
+ g_phys_uart : boolean := TRUE;
+ g_virtual_uart : boolean := TRUE;
+ g_aux_clks : integer := 0;
+ g_ep_rxbuf_size : integer := 1024;
+ g_tx_runt_padding : boolean := TRUE;
+ g_dpram_initf : string := "";
+ g_dpram_size : integer := 131072/4;
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := FALSE;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := FALSE;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0;
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ g_fabric_iface : t_board_fabric_iface := PLAIN);
+ port(
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+ -- system reference clock (any frequency <= f(clk_ref_i))
+ clk_sys_i : in std_logic;
+
+ -- DDMTD offset clock (125.x MHz)
+ clk_dmtd_i : in std_logic;
+
+ -- Timing reference (125 MHz)
+ clk_ref_i : in std_logic;
+
+ -- Aux clock (i.e. the FMC clock), which can be disciplined by the WR Core
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+
+ -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode
+ clk_10m_ext_i : in std_logic := '0';
+
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+ -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode
+ pps_ext_i : in std_logic := '0';
+
+ rst_n_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ --Timing system
+ ---------------------------------------------------------------------------
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- PHY I/f
+ ---------------------------------------------------------------------------
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+
+ ---------------------------------------------------------------------------
+ -- I2C EEPROM
+ ---------------------------------------------------------------------------
+ scl_o : out std_logic;
+ scl_i : in std_logic := '1';
+ sda_o : out std_logic;
+ sda_i : in std_logic := '1';
+
+ ---------------------------------------------------------------------------
+ -- SFP management info
+ ---------------------------------------------------------------------------
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := '1';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := '1';
+ sfp_det_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Flash memory SPI interface
+ ---------------------------------------------------------------------------
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ --UART
+ ---------------------------------------------------------------------------
+ uart_rxd_i : in std_logic := '0';
+ uart_txd_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- 1-wire
+ ---------------------------------------------------------------------------
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := (others => '1');
+
+ ---------------------------------------------------------------------------
+ --External WB interface
+ ---------------------------------------------------------------------------
+ wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ wb_slave_o : out t_wishbone_slave_out;
+
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ ---------------------------------------------------------------------------
+ -- External Fabric I/F (when g_fabric_iface = PLAIN)
+ ---------------------------------------------------------------------------
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+
+ ---------------------------------------------------------------------------
+ -- WR streamers (when g_fabric_iface = STREAMERS)
+ ---------------------------------------------------------------------------
+ wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0');
+ wrs_tx_valid_i : in std_logic := '0';
+ wrs_tx_dreq_o : out std_logic;
+ wrs_tx_last_i : in std_logic := '1';
+ wrs_tx_flush_i : in std_logic := '0';
+ wrs_rx_first_o : out std_logic;
+ wrs_rx_last_o : out std_logic;
+ wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ wrs_rx_valid_o : out std_logic;
+ wrs_rx_dreq_i : in std_logic := '0';
+ wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default;
+ ---------------------------------------------------------------------------
+ -- Etherbone WB master interface (when g_fabric_iface = ETHERBONE)
+ ---------------------------------------------------------------------------
+ wb_eth_master_o : out t_wishbone_master_out;
+ wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ ---------------------------------------------------------------------------
+ -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+ ---------------------------------------------------------------------------
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- Aux clocks control
+ ---------------------------------------------------------------------------
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- External Tx Timestamping I/F
+ ---------------------------------------------------------------------------
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Pause Frame Control
+ ---------------------------------------------------------------------------
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Timecode I/F
+ ---------------------------------------------------------------------------
+ tm_link_up_o : out std_logic;
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- Buttons, LEDs and PPS output
+ ---------------------------------------------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ -- 1PPS output
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+ -- Link ok indication
+ link_ok_o : out std_logic
+ );
+
+end entity xwrc_board_common;
+
+
+architecture struct of xwrc_board_common is
+
+ -----------------------------------------------------------------------------
+ -- Signals
+ -----------------------------------------------------------------------------
+
+ -- Timecode interface
+ signal tm_time_valid : std_logic;
+ signal tm_tai : std_logic_vector(39 downto 0);
+ signal tm_cycles : std_logic_vector(27 downto 0);
+
+ -- WR fabric interface
+ signal wrf_src_out : t_wrf_source_out;
+ signal wrf_src_in : t_wrf_source_in;
+ signal wrf_snk_out : t_wrf_sink_out;
+ signal wrf_snk_in : t_wrf_sink_in;
+
+ -- Aux WB interface
+ signal aux_master_out : t_wishbone_master_out;
+ signal aux_master_in : t_wishbone_master_in;
+ signal aux_rst_n : std_logic;
+
+ -- Aux diagnostics:
+ -- 1) streamers have their own ID not to be used by the users
+ -- 2) regardless whether streamers are enabled nor not, application can use diagnostics
+ -- 3) if application uses diagnostics, it must specify diag_id > 1, diag_ver should start
+ -- with 1.
+ -- Application diagnostic words are added after streamer's diagnostics in the array that
+ -- goes to/from WRPC
+
+ constant c_streamers_diag_id : integer := 1; -- id reserved for streamers
+ constant c_streamers_diag_ver : integer := 2; -- version that will be probably increased
+ -- when more diagnostics is added to streamers
+
+ -- final values that go to WRPC generics (depend on configuration)
+ constant c_diag_id : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_id, g_diag_id);
+ constant c_diag_ver : integer := f_pick_diag_val(g_fabric_iface, c_streamers_diag_ver, g_diag_id);
+
+ constant c_diag_ro_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_STREAMERS_ARR_SIZE_OUT, g_diag_ro_size);
+ constant c_diag_rw_size : integer := f_pick_diag_size(g_fabric_iface, c_WR_STREAMERS_ARR_SIZE_IN, g_diag_rw_size);
+
+ -- WR SNMP
+ signal aux_diag_in : t_generic_word_array(c_diag_ro_size-1 downto 0);
+ signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
+
+ -- link state
+ signal link_ok : std_logic;
+
+begin -- architecture struct
+
+ -- Check for unsupported fabric interface type
+ f_check_fabric_iface_type(g_fabric_iface);
+
+ -- check whether diag id and version are correct, i.e.:
+ -- * diag_id =1 is reserved for wr_streamers and cannot be used
+ -- * diag_ver values should start with 1
+ f_check_diag_id(g_diag_id, g_diag_ver);
+
+ -----------------------------------------------------------------------------
+ -- The WR PTP core itself
+ -----------------------------------------------------------------------------
+
+ cmp_xwr_core : xwr_core
+ generic map (
+ g_simulation => g_simulation,
+ g_with_external_clock_input => g_with_external_clock_input,
+ g_board_name => g_board_name,
+ g_flash_secsz_kb => g_flash_secsz_kb,
+ g_flash_sdbfs_baddr => g_flash_sdbfs_baddr,
+ g_phys_uart => g_phys_uart,
+ g_virtual_uart => g_virtual_uart,
+ g_aux_clks => g_aux_clks,
+ g_ep_rxbuf_size => g_ep_rxbuf_size,
+ g_tx_runt_padding => g_tx_runt_padding,
+ g_dpram_initf => f_find_default_lm32_firmware(g_dpram_initf, g_simulation, g_pcs_16bit),
+ g_dpram_size => g_dpram_size,
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_aux_sdb => g_aux_sdb,
+ g_softpll_enable_debugger => g_softpll_enable_debugger,
+ g_vuart_fifo_size => g_vuart_fifo_size,
+ g_pcs_16bit => g_pcs_16bit,
+ g_records_for_phy => TRUE,
+ g_diag_id => c_diag_id,
+ g_diag_ver => c_diag_ver,
+ g_diag_ro_size => c_diag_ro_size,
+ g_diag_rw_size => c_diag_rw_size)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_ref_i => clk_ref_i,
+ clk_aux_i => clk_aux_i,
+ clk_ext_i => clk_10m_ext_i,
+ clk_ext_mul_i => clk_ext_mul_i,
+ clk_ext_mul_locked_i => clk_ext_mul_locked_i,
+ clk_ext_stopped_i => clk_ext_stopped_i,
+ clk_ext_rst_o => clk_ext_rst_o,
+ pps_ext_i => pps_ext_i,
+ rst_n_i => rst_n_i,
+ dac_hpll_load_p1_o => dac_hpll_load_p1_o,
+ dac_hpll_data_o => dac_hpll_data_o,
+ dac_dpll_load_p1_o => dac_dpll_load_p1_o,
+ dac_dpll_data_o => dac_dpll_data_o,
+ phy_ref_clk_i => '0',
+ phy_tx_data_o => open,
+ phy_tx_k_o => open,
+ phy_tx_disparity_i => '0',
+ phy_tx_enc_err_i => '0',
+ phy_rx_data_i => (others => '0'),
+ phy_rx_rbclk_i => '0',
+ phy_rx_k_i => (others => '0'),
+ phy_rx_enc_err_i => '0',
+ phy_rx_bitslide_i => (others => '0'),
+ phy_rst_o => open,
+ phy_rdy_i => '1',
+ phy_loopen_o => open,
+ phy_loopen_vec_o => open,
+ phy_tx_prbs_sel_o => open,
+ phy_sfp_tx_fault_i => '0',
+ phy_sfp_los_i => '0',
+ phy_sfp_tx_disable_o => open,
+ phy8_o => phy8_o,
+ phy8_i => phy8_i,
+ phy16_o => phy16_o,
+ phy16_i => phy16_i,
+ led_act_o => led_act_o,
+ led_link_o => led_link_o,
+ scl_o => scl_o,
+ scl_i => scl_i,
+ sda_o => sda_o,
+ sda_i => sda_i,
+ sfp_scl_o => sfp_scl_o,
+ sfp_scl_i => sfp_scl_i,
+ sfp_sda_o => sfp_sda_o,
+ sfp_sda_i => sfp_sda_i,
+ sfp_det_i => sfp_det_i,
+ btn1_i => btn1_i,
+ btn2_i => btn2_i,
+ spi_sclk_o => spi_sclk_o,
+ spi_ncs_o => spi_ncs_o,
+ spi_mosi_o => spi_mosi_o,
+ spi_miso_i => spi_miso_i,
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o,
+ owr_pwren_o => owr_pwren_o,
+ owr_en_o => owr_en_o,
+ owr_i => owr_i,
+ slave_i => wb_slave_i,
+ slave_o => wb_slave_o,
+ aux_master_o => aux_master_out,
+ aux_master_i => aux_master_in,
+ wrf_src_o => wrf_src_out,
+ wrf_src_i => wrf_src_in,
+ wrf_snk_o => wrf_snk_out,
+ wrf_snk_i => wrf_snk_in,
+ timestamps_o => timestamps_o,
+ timestamps_ack_i => timestamps_ack_i,
+ abscal_txts_o => abscal_txts_o,
+ abscal_rxts_o => abscal_rxts_o,
+ fc_tx_pause_req_i => fc_tx_pause_req_i,
+ fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+ tm_link_up_o => tm_link_up_o,
+ tm_dac_value_o => tm_dac_value_o,
+ tm_dac_wr_o => tm_dac_wr_o,
+ tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+ tm_clk_aux_locked_o => tm_clk_aux_locked_o,
+ tm_time_valid_o => tm_time_valid,
+ tm_tai_o => tm_tai,
+ tm_cycles_o => tm_cycles,
+ pps_csync_o => pps_csync_o,
+ pps_p_o => pps_p_o,
+ pps_led_o => pps_led_o,
+ rst_aux_n_o => aux_rst_n,
+ aux_diag_i => aux_diag_in,
+ aux_diag_o => aux_diag_out,
+ link_ok_o => link_ok);
+
+ link_ok_o <= link_ok;
+ tm_time_valid_o <= tm_time_valid;
+ tm_tai_o <= tm_tai;
+ tm_cycles_o <= tm_cycles;
+
+ gen_wr_streamers : if (g_fabric_iface = STREAMERS) generate
+
+ cmp_xwr_streamers : xwr_streamers
+ generic map (
+ g_streamers_op_mode => g_streamers_op_mode,
+ g_tx_streamer_params => g_tx_streamer_params,
+ g_rx_streamer_params => g_rx_streamer_params,
+ g_simulation => g_simulation)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ src_i => wrf_snk_out,
+ src_o => wrf_snk_in,
+ snk_i => wrf_src_out,
+ snk_o => wrf_src_in,
+ tx_data_i => wrs_tx_data_i,
+ tx_valid_i => wrs_tx_valid_i,
+ tx_dreq_o => wrs_tx_dreq_o,
+ tx_last_p1_i => wrs_tx_last_i,
+ tx_flush_p1_i => wrs_tx_flush_i,
+ rx_first_p1_o => wrs_rx_first_o,
+ rx_last_p1_o => wrs_rx_last_o,
+ rx_data_o => wrs_rx_data_o,
+ rx_valid_o => wrs_rx_valid_o,
+ rx_dreq_i => wrs_rx_dreq_i,
+ clk_ref_i => clk_ref_i,
+ tm_time_valid_i => tm_time_valid,
+ tm_tai_i => tm_tai,
+ tm_cycles_i => tm_cycles,
+ link_ok_i => link_ok,
+ wb_slave_i => aux_master_out,
+ wb_slave_o => aux_master_in,
+ snmp_array_o => aux_diag_in(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0),
+ snmp_array_i => aux_diag_out(c_WR_STREAMERS_ARR_SIZE_IN-1 downto 0),
+ tx_streamer_cfg_i=> wrs_tx_cfg_i,
+ rx_streamer_cfg_i=> wrs_rx_cfg_i);
+
+ -- unused output ports
+ wrf_src_o <= c_dummy_snk_in;
+ wrf_snk_o <= c_dummy_src_in;
+
+ aux_master_o <= cc_dummy_master_out;
+ wb_eth_master_o <= cc_dummy_master_out;
+
+ aux_diag_in(c_diag_ro_size-1 downto c_WR_STREAMERS_ARR_SIZE_OUT) <= aux_diag_i;
+ aux_diag_o <= aux_diag_out(c_diag_rw_size-1 downto c_WR_STREAMERS_ARR_SIZE_IN);
+
+ end generate gen_wr_streamers;
+
+ gen_etherbone : if (g_fabric_iface = ETHERBONE) generate
+
+ cmp_eb_ethernet_slave : eb_ethernet_slave
+ generic map (
+ g_sdb_address => x"0000000000030000")
+ port map (
+ clk_i => clk_sys_i,
+ nRst_i => aux_rst_n,
+ src_o => wrf_snk_in,
+ src_i => wrf_snk_out,
+ snk_o => wrf_src_in,
+ snk_i => wrf_src_out,
+ cfg_slave_o => aux_master_in,
+ cfg_slave_i => aux_master_out,
+ master_o => wb_eth_master_o,
+ master_i => wb_eth_master_i);
+
+ -- unused output ports
+ wrf_src_o <= c_dummy_snk_in;
+ wrf_snk_o <= c_dummy_src_in;
+
+ wrs_tx_dreq_o <= '0';
+ wrs_rx_first_o <= '0';
+ wrs_rx_last_o <= '0';
+ wrs_rx_valid_o <= '0';
+ wrs_rx_data_o <= (others => '0');
+
+ aux_master_o <= cc_dummy_master_out;
+
+ -- unused inputs to WR PTP core
+ aux_diag_in <= aux_diag_i;
+ aux_diag_o <= aux_diag_out;
+
+ end generate gen_etherbone;
+
+ gen_wr_fabric : if (g_fabric_iface = PLAIN) generate
+
+ wrf_src_o <= wrf_src_out;
+ wrf_snk_o <= wrf_snk_out;
+
+ wrf_src_in <= wrf_src_i;
+ wrf_snk_in <= wrf_snk_i;
+
+ -- unused output ports
+ wrs_tx_dreq_o <= '0';
+ wrs_rx_first_o <= '0';
+ wrs_rx_last_o <= '0';
+ wrs_rx_valid_o <= '0';
+ wrs_rx_data_o <= (others => '0');
+
+ wb_eth_master_o <= cc_dummy_master_out;
+
+ aux_master_in <= aux_master_i;
+ aux_master_o <= aux_master_out;
+
+ -- unused inputs to WR PTP core
+ aux_diag_in <= aux_diag_i;
+ aux_diag_o <= aux_diag_out;
+
+ end generate gen_wr_fabric;
+
+end architecture struct;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd
new file mode 100644
index 000000000..673b361d2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/sfp_eeprom.vhd
@@ -0,0 +1,161 @@
+-------------------------------------------------------------------------------
+--
+-- File: sfp_eeprom.vhd
+-- Author: National Instruments
+-- Original Project: N310
+-- Date: 22 February 2018
+--
+-------------------------------------------------------------------------------
+-- Copyright 2018 Ettus Research, A National Instruments Company
+-- SPDX-License-Identifier: LGPL-3.0
+-------------------------------------------------------------------------------
+--
+-- Purpose:
+--
+-- Responds to I2C reads from the WRC to pretend to be an AXGE SFP module.
+--
+-------------------------------------------------------------------------------
+
+library IEEE;
+
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+
+entity sfp_eeprom is
+
+ port (
+ -- clock & reset
+ clk_i : in std_logic;
+ sfp_scl : in std_logic;
+ sfp_sda_i : in std_logic;
+ sfp_sda_o : out std_logic
+ );
+end sfp_eeprom;
+
+
+architecture syn of sfp_eeprom is
+
+ signal SfpSdaIn_ms : std_logic := '0';
+ signal SfpSdaIn : std_logic := '0';
+ signal SfpSdaInDel : std_logic := '0';
+ signal SfpScl_ms : std_logic := '0';
+ signal SfpScl : std_logic := '0';
+ signal SfpSclDel : std_logic := '0';
+ signal SfpSdaOut : std_logic := '1';
+
+ signal ClockRe : boolean := false;
+ signal ClockFe : boolean := false;
+ signal DataFe : boolean := false;
+ signal DataRe : boolean := false;
+ signal Running : boolean := false;
+ signal ReadSel : boolean := false;
+
+ signal BitCount : integer range -1 to 7 := 7;
+ signal AddrCount : unsigned(4 downto 0) := (others=>'0');
+ signal ByteCount : integer range 0 to 143;
+
+ type Eeprom_t is array(0 to 143) of std_logic_vector(7 downto 0);
+ signal Eeprom : Eeprom_t := (
+ X"03", X"04", X"07", X"00", X"00", X"00", X"40", X"00", X"00", X"00", X"00", X"01", X"0d", X"00", X"0a", X"64",
+ X"00", X"00", X"00", X"00", X"41", X"78", X"63", X"65", X"6e", X"20", X"50", X"68", X"6f", X"74", X"6f", X"6e",
+ X"69", X"63", X"73", X"20", X"00", X"00", X"17", X"2d", X"41", X"58", X"47", X"45", X"2d", X"31", X"32", X"35",
+ X"34", X"2d", X"30", X"35", X"33", X"31", X"20", X"20", X"56", X"31", X"2e", X"31", X"05", X"1e", X"00", X"51",
+ X"00", X"1a", X"00", X"00", X"41", X"58", X"31", X"36", X"35", X"30", X"30", X"30", X"30", X"36", X"37", X"36",
+ X"39", X"20", X"20", X"20", X"31", X"36", X"31", X"32", X"30", X"38", X"20", X"20", X"00", X"00", X"00", X"bd",
+ X"45", X"58", X"54", X"52", X"45", X"4d", X"45", X"4c", X"59", X"20", X"43", X"4f", X"4d", X"50", X"41", X"54",
+ X"49", X"42", X"4c", X"45", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20", X"20",
+ X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF", X"FF");
+
+ -- AXGE Optical
+ -- 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
+ -- 00: 03 04 07 00 00 00 40 00 00 00 00 01 0d 00 0a 64 ???...@....??.?d
+ -- 10: 00 00 00 00 41 78 63 65 6e 20 50 68 6f 74 6f 6e ....Axcen Photon
+ -- 20: 69 63 73 20 00 00 17 2d 41 58 47 45 2d 31 32 35 ics ..?-AXGE-125
+ -- 30: 34 2d 30 35 33 31 20 20 56 31 2e 31 05 1e 00 51 4-0531 V1.1??.Q
+ -- 40: 00 1a 00 00 41 58 31 36 35 30 30 30 30 36 37 36 .?..AX1650000676
+ -- 50: 39 20 20 20 31 36 31 32 30 38 20 20 00 00 00 bd 9 161208 ...?
+ -- 60: 45 58 54 52 45 4d 45 4c 59 20 43 4f 4d 50 41 54 EXTREMELY COMPAT
+ -- 70: 49 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 IBLE
+ -- 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
+
+begin
+
+ sfp_sda_o <= SfpSdaOut;
+
+ -- Double syncs on the I2C lines
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ SfpSdaIn_ms <= sfp_sda_i;
+ SfpSdaIn <= SfpSdaIn_ms;
+ SfpSdaInDel <= SfpSdaIn;
+
+ SfpScl_ms <= sfp_scl;
+ SfpScl <= SfpScl_ms;
+ SfpSclDel <= SfpScl;
+ end if;
+ end process;
+
+ ClockRe <= SfpScl='1' and SfpSclDel='0';
+ ClockFe <= SfpScl='0' and SfpSclDel='1';
+ DataRe <= SfpSdaIn='1' and SfpSdaInDel='0';
+ DataFe <= SfpSdaIn='0' and SfpSdaInDel='1';
+
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ SfpSdaOut <= '1';
+ if (DataFe and SfpScl='1') or not Running then -- detect start condition
+ BitCount <= 7;
+ AddrCount <= (others=>'0');
+ --ByteCount <= 0;
+ Running <= true;
+ ReadSel <= false;
+ else -- if running, then start generating data
+ if DataRe and SfpScl='1' then -- detect stop condition
+ Running <= false;
+ elsif AddrCount<9 then
+ if ClockFe then
+ AddrCount <= AddrCOunt + 1;
+ if AddrCount=8 then
+ if SfpSdaIn='0' then -- reset byte count for write operation
+ ByteCount <= 0;
+ end if;
+ ReadSel <= SfpSdaIn='1';
+ end if;
+ end if;
+ elsif AddrCount=9 then
+ SfpSdaOut <= '0'; -- output ACK and hold it for a clock tick
+ if ClockFe then
+ AddrCount <= AddrCOunt + 1;
+ end if;
+ else
+ if BitCount>=0 then -- shift out 8 bits if it's a read
+ if ReadSel then
+ SfpSdaOut <= Eeprom(ByteCount)(BitCount);
+ else
+ SfpSdaOut <= '1';
+ end if;
+ if ClockFe then
+ BitCount <= BitCOunt - 1;
+ end if;
+ else -- ignore ACK, update byte counter
+ SfpSdaOut <= '0';
+ if ClockFe then
+ if ReadSel then
+ if ByteCount<143 then
+ ByteCount <= ByteCount + 1;
+ else
+ ByteCount <= 143; -- play X"FF" for all remaining bytes
+ end if;
+ end if;
+ BitCount <= 7;
+ end if;
+ end if;
+ end if;
+ end if; -- Running
+ end if;
+ end process;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd
new file mode 100644
index 000000000..4eec0765c
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/eeprom/tb_sfp_eeprom.vhd
@@ -0,0 +1,96 @@
+-------------------------------------------------------------------------------
+--
+-- File: tb_sfp_eeprom.vhd
+-- Author: National Instruments
+-- Original Project: N310
+-- Date: 22 February 2018
+--
+-------------------------------------------------------------------------------
+-- Copyright 2018 Ettus Research, A National Instruments Company
+-- SPDX-License-Identifier: LGPL-3.0
+-------------------------------------------------------------------------------
+--
+-- Purpose:
+--
+-- Testbench for sfp_eeprom.vhd
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+ use ieee.std_logic_1164.all;
+ use ieee.numeric_std.all;
+
+entity tb_sfp_eeprom is
+end tb_sfp_eeprom;
+
+architecture test of tb_sfp_eeprom is
+
+ constant kHalfPeriod : time := 25 ns;
+
+ signal clk_i : std_logic := '1';
+ signal sfp_scl : std_logic := '1';
+ signal sfp_sda_i : std_logic := '1';
+ signal sfp_sda_o : std_logic := '1';
+
+
+ signal StopSim : boolean := false;
+
+ -- This procedure waits for X rising edges of Clk
+ procedure ClkWait (X : integer := 1) is
+ begin
+ for i in 1 to X loop
+ wait until rising_edge(clk_i);
+ end loop;
+ end procedure ClkWait;
+
+ component sfp_eeprom
+ port (
+ clk_i : in std_logic;
+ sfp_scl : in std_logic;
+ sfp_sda_i : in std_logic;
+ sfp_sda_o : out std_logic);
+ end component;
+
+begin
+
+ -- Set up the clock(s)
+ clk_i <= not clk_i after kHalfPeriod when not StopSim else '0';
+
+
+ DUT: sfp_eeprom
+ port map (
+ clk_i => clk_i,
+ sfp_scl => sfp_scl,
+ sfp_sda_i => sfp_sda_i,
+ sfp_sda_o => sfp_sda_o );
+
+
+ Sim: process
+ begin
+ for K in 0 to 1 loop
+ wait for 210 ns;
+ -- send start condition
+ sfp_sda_i <= '0';
+ wait for 210 ns;
+ sfp_scl <= '0';
+ wait for 210 ns;
+ for I in 0 to 150 loop
+ for J in 0 to 8 loop
+ sfp_scl <= '1';
+ wait for 210 ns;
+ sfp_scl <= '0';
+ wait for 210 ns;
+ end loop;
+ wait for 210 ns;
+ end loop;
+ sfp_scl <= '1';
+ wait for 210 ns;
+ sfp_sda_i <= '1';
+ wait for 210 ns;
+ end loop;
+ StopSim <= true;
+ wait;
+ end process Sim;
+
+
+end test;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd
new file mode 100644
index 000000000..eeb3c81b9
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wr_fasec_pkg.vhd
@@ -0,0 +1,198 @@
+-------------------------------------------------------------------------------
+-- Title : WRPC Wrapper for FASEC package
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : wr_fasec_pkg.vhd
+-- Author(s) : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2017-08-02
+-- Last update: 2017-09-07
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN
+--
+-- GNU LESSER GENERAL PUBLIC LICENSE
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.wrcore_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_board_pkg.all;
+use work.streamers_pkg.all;
+
+package wr_fasec_pkg is
+
+ component xwrc_board_fasec
+ generic(
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := TRUE;
+ g_aux_clks : integer := 0;
+ g_fabric_iface : t_board_fabric_iface := plain;
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ g_dpram_initf : string := "default_xilinx";
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0);
+ port (
+ areset_n_i : in std_logic;
+ areset_edge_n_i : in std_logic := '1';
+ clk_20m_vcxo_i : in std_logic;
+ clk_125m_pllref_p_i : in std_logic;
+ clk_125m_pllref_n_i : in std_logic;
+ clk_125m_gtp_n_i : in std_logic;
+ clk_125m_gtp_p_i : in std_logic;
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ clk_10m_ext_i : in std_logic := '0';
+ pps_ext_i : in std_logic := '0';
+ clk_sys_62m5_o : out std_logic;
+ clk_ref_125m_o : out std_logic;
+ rst_sys_62m5_n_o : out std_logic;
+ rst_ref_125m_n_o : out std_logic;
+
+ plldac_sclk_o : out std_logic;
+ plldac_din_o : out std_logic;
+ pll25dac_cs_n_o : out std_logic;
+ pll20dac_cs_n_o : out std_logic;
+
+ sfp_txp_o : out std_logic;
+ sfp_txn_o : out std_logic;
+ sfp_rxp_i : in std_logic;
+ sfp_rxn_i : in std_logic;
+ sfp_det_i : in std_logic := '1';
+ sfp_sda_i : in std_logic;
+ sfp_sda_o : out std_logic;
+ sfp_sda_t : out std_logic;
+ sfp_scl_i : in std_logic;
+ sfp_scl_o : out std_logic;
+ sfp_scl_t : out std_logic;
+ sfp_rate_select_o : out std_logic;
+ sfp_tx_fault_i : in std_logic := '0';
+ sfp_tx_disable_o : out std_logic;
+ sfp_los_i : in std_logic := '0';
+
+ eeprom_sda_i : in std_logic;
+ eeprom_sda_o : out std_logic;
+ eeprom_sda_t : out std_logic;
+ eeprom_scl_i : in std_logic;
+ eeprom_scl_o : out std_logic;
+ eeprom_scl_t : out std_logic;
+
+ thermo_id_i : in std_logic;
+ thermo_id_o : out std_logic;
+ thermo_id_t : out std_logic;
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic;
+
+ flash_sclk_o : out std_logic;
+ flash_ncs_o : out std_logic;
+ flash_mosi_o : out std_logic;
+ flash_miso_i : in std_logic := '0';
+
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ s00_axi_aclk_o : out std_logic;
+ s00_axi_aresetn : in std_logic;
+ s00_axi_awaddr : in std_logic_vector(31 downto 0);
+ s00_axi_awprot : in std_logic_vector(2 downto 0);
+ s00_axi_awvalid : in std_logic;
+ s00_axi_awready : out std_logic;
+ s00_axi_wdata : in std_logic_vector(31 downto 0);
+ s00_axi_wstrb : in std_logic_vector(3 downto 0);
+ s00_axi_wvalid : in std_logic;
+ s00_axi_wready : out std_logic;
+ s00_axi_bresp : out std_logic_vector(1 downto 0);
+ s00_axi_bvalid : out std_logic;
+ s00_axi_bready : in std_logic;
+ s00_axi_araddr : in std_logic_vector(31 downto 0);
+ s00_axi_arprot : in std_logic_vector(2 downto 0);
+ s00_axi_arvalid : in std_logic;
+ s00_axi_arready : out std_logic;
+ s00_axi_rdata : out std_logic_vector(31 downto 0);
+ s00_axi_rresp : out std_logic_vector(1 downto 0);
+ s00_axi_rvalid : out std_logic;
+ s00_axi_rready : in std_logic;
+ s00_axi_rlast : out std_logic;
+ axi_int_o : out std_logic;
+
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+
+ wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0');
+ wrs_tx_valid_i : in std_logic := '0';
+ wrs_tx_dreq_o : out std_logic;
+ wrs_tx_last_i : in std_logic := '1';
+ wrs_tx_flush_i : in std_logic := '0';
+ wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ wrs_rx_first_o : out std_logic;
+ wrs_rx_last_o : out std_logic;
+ wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ wrs_rx_valid_o : out std_logic;
+ wrs_rx_dreq_i : in std_logic := '0';
+ wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default;
+
+ wb_eth_master_o : out t_wishbone_master_out;
+ wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ tm_link_up_o : out std_logic;
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+ link_ok_o : out std_logic);
+ end component xwrc_board_fasec;
+
+end wr_fasec_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd
new file mode 100644
index 000000000..3aeca64b7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/wrc_board_fasec.vhd
@@ -0,0 +1,599 @@
+-------------------------------------------------------------------------------
+-- Title : WRPC Wrapper for FASEC
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : wrc_board_fasec.vhd
+-- Author(s) : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2017-08-02
+-- Last update: 2017-09-07
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Top-level wrapper for WR PTP core including all the modules
+-- needed to operate the core on the FASEC board.
+-- Version with no VHDL records on the top-level (mainly for Verilog
+-- instantiation).
+-- http://www.ohwr.org/projects/fasec/
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+-------------------------------------------------------------------------------
+-- GNU LESSER GENERAL PUBLIC LICENSE
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.wrcore_pkg.all;
+use work.wishbone_pkg.all;
+use work.etherbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.streamers_pkg.all;
+use work.wr_xilinx_pkg.all;
+use work.wr_board_pkg.all;
+use work.wr_fasec_pkg.all;
+
+entity wrc_board_fasec is
+ generic(
+ -- set to 1 to speed up some initialization processes during simulation
+ g_simulation : integer := 0;
+ -- Select whether to include external ref clock input
+ g_with_external_clock_input : integer := 0;
+ -- Number of aux clocks syntonized by WRPC to WR timebase
+ g_aux_clks : integer := 0;
+ -- "plainfbrc" = expose WRC fabric interface
+ -- "streamers" = attach WRC streamers to fabric interface
+ -- "etherbone" = attach Etherbone slave to fabric interface
+ g_fabric_iface : string := "plainfbrc";
+ -- parameters configuration when g_fabric_iface = "streamers" (otherwise ignored)
+ --g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ --g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ --g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ -- memory initialisation file for embedded CPU
+ g_dpram_initf : string := "../../../../bin/wrpc/wrc_phy16.bram";
+ -- identification (id and ver) of the layout of words in the generic diag interface
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ -- size the generic diag interface
+ g_diag_ro_vector_width : integer := 0;
+ g_diag_rw_vector_width : integer := 0
+ );
+ port (
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+ -- Reset from system fpga
+ areset_n_i : in std_logic;
+ -- Optional reset input active low with rising edge detection. Does not
+ -- reset PLLs.
+ --areset_edge_n_i : in std_logic := '1';
+ -- Clock inputs from the board
+ clk_20m_vcxo_i : in std_logic;
+ clk_125m_pllref_p_i : in std_logic;
+ clk_125m_pllref_n_i : in std_logic;
+ clk_125m_gtp_n_i : in std_logic;
+ clk_125m_gtp_p_i : in std_logic;
+ -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
+ clk_10m_ext_i : in std_logic := '0';
+ -- External PPS input (g_with_external_clock_input = TRUE)
+ pps_ext_i : in std_logic := '0';
+ -- 62.5MHz sys clock output
+ clk_sys_62m5_o : out std_logic;
+ -- 125MHz ref clock output
+ clk_ref_125m_o : out std_logic;
+ -- active low reset outputs, synchronous to 62m5 and 125m clocks
+ rst_sys_62m5_n_o : out std_logic;
+ rst_ref_125m_n_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Shared SPI interface to DACs
+ ---------------------------------------------------------------------------
+ plldac_sclk_o : out std_logic;
+ plldac_din_o : out std_logic;
+ pll25dac_cs_n_o : out std_logic;
+ pll20dac_cs_n_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- SFP I/O for transceiver and SFP management info
+ ---------------------------------------------------------------------------
+ sfp_tx_p_o : out std_logic;
+ sfp_tx_n_o : out std_logic;
+ sfp_rx_p_i : in std_logic;
+ sfp_rx_n_i : in std_logic;
+ sfp_det_i : in std_logic := '1';
+ sfp_sda_i : in std_logic;
+ sfp_sda_o : out std_logic;
+ sfp_sda_t : out std_logic;
+ sfp_scl_i : in std_logic;
+ sfp_scl_o : out std_logic;
+ sfp_scl_t : out std_logic;
+ sfp_rate_select_o : out std_logic;
+ sfp_tx_fault_i : in std_logic := '0';
+ sfp_tx_disable_o : out std_logic;
+ sfp_los_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- I2C EEPROM
+ ---------------------------------------------------------------------------
+ eeprom_sda_i : in std_logic;
+ eeprom_sda_o : out std_logic;
+ eeprom_sda_t : out std_logic;
+ eeprom_scl_i : in std_logic;
+ eeprom_scl_o : out std_logic;
+ eeprom_scl_t : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Onewire interface
+ ---------------------------------------------------------------------------
+ thermo_id_i : in std_logic;
+ thermo_id_o : out std_logic;
+ thermo_id_t : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- UART
+ ---------------------------------------------------------------------------
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Flash memory SPI interface
+ ---------------------------------------------------------------------------
+ --flash_sclk_o : out std_logic;
+ --flash_ncs_o : out std_logic;
+ --flash_mosi_o : out std_logic;
+ --flash_miso_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- External WB interface
+ ---------------------------------------------------------------------------
+ --aux_master_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ --aux_master_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ --aux_master_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
+ --aux_master_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+ --aux_master_we_o : out std_logic;
+ --aux_master_cyc_o : out std_logic;
+ --aux_master_stb_o : out std_logic;
+ --aux_master_ack_i : in std_logic := '0';
+ --aux_master_int_i : in std_logic := '0';
+ --aux_master_err_i : in std_logic := '0';
+ --aux_master_rty_i : in std_logic := '0';
+ --aux_master_stall_i : in std_logic := '0';
+
+ ------------------------------------------
+ -- Axi Slave Bus Interface S00_AXI
+ ------------------------------------------
+ s00_axi_aclk_o : out std_logic;
+ s00_axi_aresetn : in std_logic := '1';
+ s00_axi_awaddr : in std_logic_vector(31 downto 0) := (others=>'0');
+ --s00_axi_awprot : in std_logic_vector(2 downto 0);
+ s00_axi_awvalid : in std_logic := '0';
+ s00_axi_awready : out std_logic;
+ s00_axi_wdata : in std_logic_vector(31 downto 0) := (others=>'0');
+ s00_axi_wstrb : in std_logic_vector(3 downto 0) := (others=>'0');
+ s00_axi_wvalid : in std_logic := '0';
+ s00_axi_wready : out std_logic;
+ s00_axi_bresp : out std_logic_vector(1 downto 0);
+ s00_axi_bvalid : out std_logic;
+ s00_axi_bready : in std_logic := '0';
+ s00_axi_araddr : in std_logic_vector(31 downto 0) := (others=>'0');
+ --s00_axi_arprot : in std_logic_vector(2 downto 0);
+ s00_axi_arvalid : in std_logic := '0';
+ s00_axi_arready : out std_logic;
+ s00_axi_rdata : out std_logic_vector(31 downto 0);
+ s00_axi_rresp : out std_logic_vector(1 downto 0);
+ s00_axi_rvalid : out std_logic;
+ s00_axi_rready : in std_logic := '0';
+ s00_axi_rlast : out std_logic;
+ axi_int_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- WR fabric interface (when g_fabric_iface = "plain")
+ ---------------------------------------------------------------------------
+ --wrf_src_adr_o : out std_logic_vector(1 downto 0);
+ --wrf_src_dat_o : out std_logic_vector(15 downto 0);
+ --wrf_src_cyc_o : out std_logic;
+ --wrf_src_stb_o : out std_logic;
+ --wrf_src_we_o : out std_logic;
+ --wrf_src_sel_o : out std_logic_vector(1 downto 0);
+ --wrf_src_ack_i : in std_logic;
+ --wrf_src_stall_i : in std_logic;
+ --wrf_src_err_i : in std_logic;
+ --wrf_src_rty_i : in std_logic;
+ --wrf_snk_adr_i : in std_logic_vector(1 downto 0);
+ --wrf_snk_dat_i : in std_logic_vector(15 downto 0);
+ --wrf_snk_cyc_i : in std_logic;
+ --wrf_snk_stb_i : in std_logic;
+ --wrf_snk_we_i : in std_logic;
+ --wrf_snk_sel_i : in std_logic_vector(1 downto 0);
+ --wrf_snk_ack_o : out std_logic;
+ --wrf_snk_stall_o : out std_logic;
+ --wrf_snk_err_o : out std_logic;
+ --wrf_snk_rty_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- WR streamers (when g_fabric_iface = "streamers")
+ ---------------------------------------------------------------------------
+ ----wrs_tx_data_i : in std_logic_vector(c_tx_streamer_params_defaut.data_width-1 downto 0) := (others => '0');
+ --wrs_tx_data_i : in std_logic_vector(31 downto 0) := (others => '0');
+ --wrs_tx_valid_i : in std_logic := '0';
+ --wrs_tx_dreq_o : out std_logic;
+ --wrs_tx_last_i : in std_logic := '1';
+ --wrs_tx_flush_i : in std_logic := '0';
+ --wrs_tx_cfg_mac_l_i : in std_logic_vector(47 downto 0) := x"000000000000";
+ --wrs_tx_cfg_mac_t_i : in std_logic_vector(47 downto 0) := x"ffffffffffff";
+ --wrs_tx_cfg_etype_i : in std_logic_vector(15 downto 0) := x"dbff";
+ --wrs_rx_first_o : out std_logic;
+ --wrs_rx_last_o : out std_logic;
+ ----wrs_rx_data_o : out std_logic_vector(c_rx_streamer_params_defaut.data_width-1 downto 0);
+ --wrs_rx_data_o : out std_logic_vector(31 downto 0);
+ --wrs_rx_valid_o : out std_logic;
+ --wrs_rx_dreq_i : in std_logic := '0';
+ --wrs_rx_cfg_mac_l_i : in std_logic_vector(47 downto 0) := x"000000000000";
+ --wrs_rx_cfg_mac_r_i : in std_logic_vector(47 downto 0) := x"000000000000";
+ --wrs_rx_cfg_etype_i : in std_logic_vector(15 downto 0) := x"dbff";
+ --wrs_rx_cfg_acc_b_i : in std_logic := '1';
+ --wrs_rx_cfg_flt_r_i : in std_logic := '0';
+ --wrs_rx_cfg_fix_l_i : in std_logic_vector(27 downto 0) := x"0000000";
+ ---------------------------------------------------------------------------
+ -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
+ ---------------------------------------------------------------------------
+ --wb_eth_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ --wb_eth_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ --wb_eth_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
+ --wb_eth_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+ --wb_eth_we_o : out std_logic;
+ --wb_eth_cyc_o : out std_logic;
+ --wb_eth_stb_o : out std_logic;
+ --wb_eth_ack_i : in std_logic := '0';
+ --wb_eth_int_i : in std_logic := '0';
+ --wb_eth_err_i : in std_logic := '0';
+ --wb_eth_rty_i : in std_logic := '0';
+ --wb_eth_stall_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+ ---------------------------------------------------------------------------
+ --aux_diag_i : in std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+ --aux_diag_o : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
+
+ ---------------------------------------------------------------------------
+ -- Aux clocks control
+ ---------------------------------------------------------------------------
+ --tm_dac_value_o : out std_logic_vector(23 downto 0);
+ --tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ --tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ --tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- External Tx Timestamping I/F
+ ---------------------------------------------------------------------------
+ --tstamps_stb_o : out std_logic;
+ --tstamps_tsval_o : out std_logic_vector(31 downto 0);
+ --tstamps_port_id_o : out std_logic_vector(5 downto 0);
+ --tstamps_frame_id_o : out std_logic_vector(15 downto 0);
+ --tstamps_incorrect_o : out std_logic;
+ --tstamps_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ --abscal_txts_o : out std_logic;
+ --abscal_rxts_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Pause Frame Control
+ ---------------------------------------------------------------------------
+ --fc_tx_pause_req_i : in std_logic := '0';
+ --fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ --fc_tx_pause_ready_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Timecode I/F
+ ---------------------------------------------------------------------------
+ --tm_link_up_o : out std_logic;
+ --tm_time_valid_o : out std_logic;
+ --tm_tai_o : out std_logic_vector(39 downto 0);
+ --tm_cycles_o : out std_logic_vector(27 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- Buttons, LEDs and PPS output
+ ---------------------------------------------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ --btn1_i : in std_logic := '1';
+ --btn2_i : in std_logic := '1';
+ -- 1PPS output
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+ -- Link ok indication
+ link_ok_o : out std_logic
+ );
+
+end entity wrc_board_fasec;
+
+
+architecture std_wrapper of wrc_board_fasec is
+
+ -----------------------------------------------------------------------------
+ -- Signals
+ -----------------------------------------------------------------------------
+
+ -- WR fabric interface
+ signal wrf_src_out : t_wrf_source_out;
+ signal wrf_src_in : t_wrf_source_in;
+ signal wrf_snk_out : t_wrf_sink_out;
+ signal wrf_snk_in : t_wrf_sink_in;
+
+ signal aux_master_out : t_wishbone_master_out;
+ signal aux_master_in : t_wishbone_master_in;
+
+ -- Etherbone interface
+ signal wb_eth_master_out : t_wishbone_master_out;
+ signal wb_eth_master_in : t_wishbone_master_in;
+
+ -- Aux diagnostics
+ constant c_diag_ro_size : integer := g_diag_ro_vector_width/32;
+ constant c_diag_rw_size : integer := g_diag_rw_vector_width/32;
+
+ signal aux_diag_in : t_generic_word_array(c_diag_ro_size-1 downto 0);
+ signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
+
+ -- External Tx Timestamping I/F
+ signal timestamps_out : t_txtsu_timestamp;
+
+ -- streamers config
+ signal wrs_tx_cfg_in : t_tx_streamer_cfg;
+ signal wrs_rx_cfg_in : t_rx_streamer_cfg;
+
+ -- axi signals
+ signal s_axi_araddr : std_logic_vector(31 downto 0);
+ signal s_axi_awaddr : std_logic_vector(31 downto 0);
+
+begin -- architecture struct
+
+ -- Map top-level signals to internal records
+ --aux_master_adr_o <= aux_master_out.adr;
+ --aux_master_dat_o <= aux_master_out.dat;
+ --aux_master_cyc_o <= aux_master_out.cyc;
+ --aux_master_stb_o <= aux_master_out.stb;
+ --aux_master_sel_o <= aux_master_out.sel;
+ --aux_master_we_o <= aux_master_out.we;
+
+ --aux_master_in.dat <= aux_master_dat_i;
+ --aux_master_in.ack <= aux_master_ack_i;
+ --aux_master_in.int <= aux_master_int_i;
+ --aux_master_in.err <= aux_master_err_i;
+ --aux_master_in.rty <= aux_master_rty_i;
+ --aux_master_in.stall <= aux_master_stall_i;
+
+ --wrf_src_adr_o <= wrf_src_out.adr;
+ --wrf_src_dat_o <= wrf_src_out.dat;
+ --wrf_src_cyc_o <= wrf_src_out.cyc;
+ --wrf_src_stb_o <= wrf_src_out.stb;
+ --wrf_src_we_o <= wrf_src_out.we;
+ --wrf_src_sel_o <= wrf_src_out.sel;
+ --wrf_src_in.ack <= wrf_src_ack_i;
+ --wrf_src_in.stall <= wrf_src_stall_i;
+ --wrf_src_in.err <= wrf_src_err_i;
+ --wrf_src_in.rty <= wrf_src_rty_i;
+
+ --wrf_snk_in.adr <= wrf_snk_adr_i;
+ --wrf_snk_in.dat <= wrf_snk_dat_i;
+ --wrf_snk_in.cyc <= wrf_snk_cyc_i;
+ --wrf_snk_in.stb <= wrf_snk_stb_i;
+ --wrf_snk_in.we <= wrf_snk_we_i;
+ --wrf_snk_in.sel <= wrf_snk_sel_i;
+ --wrf_snk_ack_o <= wrf_snk_out.ack;
+ --wrf_snk_stall_o <= wrf_snk_out.stall;
+ --wrf_snk_err_o <= wrf_snk_out.err;
+ --wrf_snk_rty_o <= wrf_snk_out.rty;
+
+
+ --wb_eth_adr_o <= wb_eth_master_out.adr;
+ --wb_eth_dat_o <= wb_eth_master_out.dat;
+ --wb_eth_cyc_o <= wb_eth_master_out.cyc;
+ --wb_eth_stb_o <= wb_eth_master_out.stb;
+ --wb_eth_sel_o <= wb_eth_master_out.sel;
+ --wb_eth_we_o <= wb_eth_master_out.we;
+
+ --wb_eth_master_in.dat <= wb_eth_dat_i;
+ --wb_eth_master_in.ack <= wb_eth_ack_i;
+ --wb_eth_master_in.int <= wb_eth_int_i;
+ --wb_eth_master_in.err <= wb_eth_err_i;
+ --wb_eth_master_in.rty <= wb_eth_rty_i;
+ --wb_eth_master_in.stall <= wb_eth_stall_i;
+
+ --aux_diag_in <= f_de_vectorize_diag(aux_diag_i, g_diag_ro_vector_width);
+ --aux_diag_o <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width);
+
+ --tstamps_stb_o <= timestamps_out.stb;
+ --tstamps_tsval_o <= timestamps_out.tsval;
+ --tstamps_port_id_o <= timestamps_out.port_id;
+ --tstamps_frame_id_o <= timestamps_out.frame_id;
+
+ --wrs_tx_cfg_in.mac_local <= wrs_tx_cfg_mac_l_i;
+ --wrs_tx_cfg_in.mac_target <= wrs_tx_cfg_mac_t_i;
+ --wrs_tx_cfg_in.ethertype <= wrs_tx_cfg_etype_i;
+
+ --wrs_rx_cfg_in.mac_local <= wrs_rx_cfg_mac_l_i;
+ --wrs_rx_cfg_in.mac_remote <= wrs_rx_cfg_mac_r_i;
+ --wrs_rx_cfg_in.ethertype <= wrs_rx_cfg_etype_i;
+ --wrs_rx_cfg_in.accept_broadcasts <= wrs_rx_cfg_acc_b_i;
+ --wrs_rx_cfg_in.filter_remote <= wrs_rx_cfg_flt_r_i;
+ --wrs_rx_cfg_in.fixed_latency <= wrs_rx_cfg_fix_l_i;
+
+ -- axi supports word-addressing only, i.e. per 4 bytes; shift for wb-bridge
+ s_axi_araddr <= "00" & s00_axi_araddr(31 downto 2);
+ s_axi_awaddr <= "00" & s00_axi_awaddr(31 downto 2);
+ -- Instantiate the records-based module
+ cmp_xwrc_board_fasec : xwrc_board_fasec
+ generic map (
+ g_simulation => g_simulation,
+ g_with_external_clock_input => f_int2bool(g_with_external_clock_input),
+ g_aux_clks => g_aux_clks,
+ g_fabric_iface => f_str2iface_type(g_fabric_iface),
+ g_streamers_op_mode => TX_AND_RX,
+ g_tx_streamer_params => c_tx_streamer_params_defaut,
+ g_rx_streamer_params => c_rx_streamer_params_defaut,
+ g_dpram_initf => g_dpram_initf,
+ g_diag_id => g_diag_id,
+ g_diag_ver => g_diag_ver,
+ g_diag_ro_size => c_diag_ro_size,
+ g_diag_rw_size => c_diag_rw_size)
+ port map (
+ areset_n_i => areset_n_i,
+ --areset_edge_n_i => areset_edge_n_i,
+ clk_20m_vcxo_i => clk_20m_vcxo_i,
+ clk_125m_pllref_p_i => clk_125m_pllref_p_i,
+ clk_125m_pllref_n_i => clk_125m_pllref_n_i,
+ clk_125m_gtp_n_i => clk_125m_gtp_n_i,
+ clk_125m_gtp_p_i => clk_125m_gtp_p_i,
+ clk_10m_ext_i => clk_10m_ext_i,
+ pps_ext_i => pps_ext_i,
+ clk_sys_62m5_o => clk_sys_62m5_o,
+ clk_ref_125m_o => clk_ref_125m_o,
+ rst_sys_62m5_n_o => rst_sys_62m5_n_o,
+ rst_ref_125m_n_o => rst_ref_125m_n_o,
+ --
+ plldac_sclk_o => plldac_sclk_o,
+ plldac_din_o => plldac_din_o,
+ pll25dac_cs_n_o => pll25dac_cs_n_o,
+ pll20dac_cs_n_o => pll20dac_cs_n_o,
+ --
+ sfp_txp_o => sfp_tx_p_o,
+ sfp_txn_o => sfp_tx_n_o,
+ sfp_rxp_i => sfp_rx_p_i,
+ sfp_rxn_i => sfp_rx_n_i,
+ sfp_det_i => sfp_det_i,
+ sfp_sda_i => sfp_sda_i,
+ sfp_sda_o => sfp_sda_o,
+ sfp_sda_t => sfp_sda_t,
+ sfp_scl_i => sfp_scl_i,
+ sfp_scl_o => sfp_scl_o,
+ sfp_scl_t => sfp_scl_t,
+ sfp_rate_select_o => sfp_rate_select_o,
+ sfp_tx_fault_i => sfp_tx_fault_i,
+ sfp_tx_disable_o => sfp_tx_disable_o,
+ sfp_los_i => sfp_los_i,
+ --
+ eeprom_sda_i => eeprom_sda_i,
+ eeprom_sda_o => eeprom_sda_o,
+ eeprom_sda_t => eeprom_sda_t,
+ eeprom_scl_i => eeprom_scl_i,
+ eeprom_scl_o => eeprom_scl_o,
+ eeprom_scl_t => eeprom_scl_t,
+ --
+ thermo_id_i => thermo_id_i,
+ thermo_id_o => thermo_id_o,
+ thermo_id_t => thermo_id_t,
+ --
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o,
+ --
+ --flash_sclk_o => flash_sclk_o,
+ --flash_ncs_o => flash_ncs_o,
+ --flash_mosi_o => flash_mosi_o,
+ --flash_miso_i => flash_miso_i,
+ --
+ --aux_master_o => aux_master_out,
+ --aux_master_i => aux_master_in,
+ --
+ s00_axi_aclk_o => s00_axi_aclk_o,
+ s00_axi_aresetn => s00_axi_aresetn,
+ s00_axi_awaddr => s_axi_awaddr,
+ s00_axi_awprot => (others=>'0'), --s00_axi_awprot,
+ s00_axi_awvalid => s00_axi_awvalid,
+ s00_axi_awready => s00_axi_awready,
+ s00_axi_wdata => s00_axi_wdata,
+ s00_axi_wstrb => s00_axi_wstrb,
+ s00_axi_wvalid => s00_axi_wvalid,
+ s00_axi_wready => s00_axi_wready,
+ s00_axi_bresp => s00_axi_bresp,
+ s00_axi_bvalid => s00_axi_bvalid,
+ s00_axi_bready => s00_axi_bready,
+ s00_axi_araddr => s_axi_araddr,
+ s00_axi_arprot => (others=>'0'), --s00_axi_arprot,
+ s00_axi_arvalid => s00_axi_arvalid,
+ s00_axi_arready => s00_axi_arready,
+ s00_axi_rdata => s00_axi_rdata,
+ s00_axi_rresp => s00_axi_rresp,
+ s00_axi_rvalid => s00_axi_rvalid,
+ s00_axi_rready => s00_axi_rready,
+ s00_axi_rlast => s00_axi_rlast,
+ axi_int_o => axi_int_o,
+ --
+ --wrf_src_o => wrf_src_out,
+ --wrf_src_i => wrf_src_in,
+ --wrf_snk_o => wrf_snk_out,
+ --wrf_snk_i => wrf_snk_in,
+ --
+ --wrs_tx_data_i => wrs_tx_data_i,
+ --wrs_tx_valid_i => wrs_tx_valid_i,
+ --wrs_tx_dreq_o => wrs_tx_dreq_o,
+ --wrs_tx_last_i => wrs_tx_last_i,
+ --wrs_tx_flush_i => wrs_tx_flush_i,
+ --wrs_tx_cfg_i => wrs_tx_cfg_in,
+ --wrs_rx_first_o => wrs_rx_first_o,
+ --wrs_rx_last_o => wrs_rx_last_o,
+ --wrs_rx_data_o => wrs_rx_data_o,
+ --wrs_rx_valid_o => wrs_rx_valid_o,
+ --wrs_rx_dreq_i => wrs_rx_dreq_i,
+ --wrs_rx_cfg_i => wrs_rx_cfg_in,
+ --
+ --wb_eth_master_o => wb_eth_master_out,
+ --wb_eth_master_i => wb_eth_master_in,
+ --
+ --aux_diag_i => aux_diag_in,
+ --aux_diag_o => aux_diag_out,
+ --
+ --tm_dac_value_o => tm_dac_value_o,
+ --tm_dac_wr_o => tm_dac_wr_o,
+ --tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+ --tm_clk_aux_locked_o => tm_clk_aux_locked_o,
+ --
+ --timestamps_o => timestamps_out,
+ --timestamps_ack_i => tstamps_ack_i,
+ --
+ --abscal_txts_o => abscal_txts_o,
+ --abscal_rxts_o => abscal_rxts_o,
+ --
+ --fc_tx_pause_req_i => fc_tx_pause_req_i,
+ --fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ --fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+ --
+ --tm_link_up_o => tm_link_up_o,
+ --tm_time_valid_o => tm_time_valid_o,
+ --tm_tai_o => tm_tai_o,
+ --tm_cycles_o => tm_cycles_o,
+ --
+ led_act_o => led_act_o,
+ led_link_o => led_link_o,
+ --btn1_i => btn1_i,
+ --btn2_i => btn2_i,
+ --
+ pps_p_o => pps_p_o,
+ pps_led_o => pps_led_o,
+ --
+ link_ok_o => link_ok_o);
+
+end architecture std_wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd
new file mode 100644
index 000000000..30bc6f3ed
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/board/fasec/xwrc_board_fasec.vhd
@@ -0,0 +1,623 @@
+-------------------------------------------------------------------------------
+-- Title : WRPC Wrapper for FASEC
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : xwrc_board_fasec.vhd
+-- Author(s) : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2017-08-02
+-- Last update: 2017-08-02
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Top-level wrapper for WR PTP core including all the modules
+-- needed to operate the core on the FASEC board.
+-- http://www.ohwr.org/projects/fasec/
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+-------------------------------------------------------------------------------
+-- GNU LESSER GENERAL PUBLIC LICENSE
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.wrcore_pkg.all;
+use work.wishbone_pkg.all;
+use work.etherbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.streamers_pkg.all;
+use work.wr_xilinx_pkg.all;
+use work.wr_board_pkg.all;
+use work.wr_fasec_pkg.all;
+use work.axi4_pkg.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
+entity xwrc_board_fasec is
+ generic(
+ -- set to 1 to speed up some initialization processes during simulation
+ g_simulation : integer := 0;
+ -- Select whether to include external ref clock input
+ g_with_external_clock_input : boolean := TRUE;
+ -- Number of aux clocks syntonized by WRPC to WR timebase
+ g_aux_clks : integer := 0;
+ -- plain = expose WRC fabric interface
+ -- streamers = attach WRC streamers to fabric interface
+ -- etherbone = attach Etherbone slave to fabric interface
+ g_fabric_iface : t_board_fabric_iface := plain;
+ -- parameters configuration when g_fabric_iface = "streamers" (otherwise ignored)
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ -- memory initialisation file for embedded CPU
+ g_dpram_initf : string := "/home/greg/wr/wr-cores/bin/wrpc/wrc_phy16.bram";
+ -- identification (id and ver) of the layout of words in the generic diag interface
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ -- size the generic diag interface
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0
+ );
+ port (
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+ -- Reset input (active low, can be async)
+ areset_n_i : in std_logic;
+ -- Optional reset input active low with rising edge detection. Does not
+ -- reset PLLs.
+ areset_edge_n_i : in std_logic := '1';
+ -- Clock inputs from the board
+ clk_20m_vcxo_i : in std_logic;
+ clk_125m_pllref_p_i : in std_logic;
+ clk_125m_pllref_n_i : in std_logic;
+ clk_125m_gtp_n_i : in std_logic;
+ clk_125m_gtp_p_i : in std_logic;
+ -- Aux clocks, which can be disciplined by the WR Core
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
+ clk_10m_ext_i : in std_logic := '0';
+ -- External PPS input (g_with_external_clock_input = TRUE)
+ pps_ext_i : in std_logic := '0';
+ -- 62.5MHz sys clock output
+ clk_sys_62m5_o : out std_logic;
+ -- 125MHz ref clock output
+ clk_ref_125m_o : out std_logic;
+ -- active low reset outputs, synchronous to 62m5 and 125m clocks
+ rst_sys_62m5_n_o : out std_logic;
+ rst_ref_125m_n_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Shared SPI interface to DACs
+ ---------------------------------------------------------------------------
+ plldac_sclk_o : out std_logic;
+ plldac_din_o : out std_logic;
+ pll25dac_cs_n_o : out std_logic;
+ pll20dac_cs_n_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- SFP I/O for transceiver and SFP management info
+ ---------------------------------------------------------------------------
+ sfp_txp_o : out std_logic;
+ sfp_txn_o : out std_logic;
+ sfp_rxp_i : in std_logic;
+ sfp_rxn_i : in std_logic;
+ sfp_det_i : in std_logic := '1';
+ sfp_sda_i : in std_logic;
+ sfp_sda_o : out std_logic;
+ sfp_sda_t : out std_logic;
+ sfp_scl_i : in std_logic;
+ sfp_scl_o : out std_logic;
+ sfp_scl_t : out std_logic;
+ sfp_rate_select_o : out std_logic;
+ sfp_tx_fault_i : in std_logic := '0';
+ sfp_tx_disable_o : out std_logic;
+ sfp_los_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- I2C EEPROM
+ ---------------------------------------------------------------------------
+ eeprom_sda_i : in std_logic;
+ eeprom_sda_o : out std_logic;
+ eeprom_sda_t : out std_logic;
+ eeprom_scl_i : in std_logic;
+ eeprom_scl_o : out std_logic;
+ eeprom_scl_t : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Onewire interface
+ ---------------------------------------------------------------------------
+ thermo_id_i : in std_logic;
+ thermo_id_o : out std_logic;
+ thermo_id_t : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- UART
+ ---------------------------------------------------------------------------
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Flash memory SPI interface
+ ---------------------------------------------------------------------------
+ flash_sclk_o : out std_logic;
+ flash_ncs_o : out std_logic;
+ flash_mosi_o : out std_logic;
+ flash_miso_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- External WB interface
+ ---------------------------------------------------------------------------
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ ------------------------------------------
+ -- Axi Slave Bus Interface S00_AXI
+ ------------------------------------------
+ -- aclk provided by this IP, wire to master!
+ s00_axi_aclk_o : out std_logic;
+ s00_axi_aresetn : in std_logic;
+ s00_axi_awaddr : in std_logic_vector(31 downto 0);
+ s00_axi_awprot : in std_logic_vector(2 downto 0);
+ s00_axi_awvalid : in std_logic;
+ s00_axi_awready : out std_logic;
+ s00_axi_wdata : in std_logic_vector(31 downto 0);
+ s00_axi_wstrb : in std_logic_vector(3 downto 0);
+ s00_axi_wvalid : in std_logic;
+ s00_axi_wready : out std_logic;
+ s00_axi_bresp : out std_logic_vector(1 downto 0);
+ s00_axi_bvalid : out std_logic;
+ s00_axi_bready : in std_logic;
+ s00_axi_araddr : in std_logic_vector(31 downto 0);
+ s00_axi_arprot : in std_logic_vector(2 downto 0);
+ s00_axi_arvalid : in std_logic;
+ s00_axi_arready : out std_logic;
+ s00_axi_rdata : out std_logic_vector(31 downto 0);
+ s00_axi_rresp : out std_logic_vector(1 downto 0);
+ s00_axi_rvalid : out std_logic;
+ s00_axi_rready : in std_logic;
+ s00_axi_rlast : out std_logic;
+ axi_int_o : out std_logic; -- axi interrupt signal
+
+ ---------------------------------------------------------------------------
+ -- WR fabric interface (when g_fabric_iface = "plainfbrc")
+ ---------------------------------------------------------------------------
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+
+ ---------------------------------------------------------------------------
+ -- WR streamers (when g_fabric_iface = "streamers")
+ ---------------------------------------------------------------------------
+ wrs_tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0) := (others => '0');
+ wrs_tx_valid_i : in std_logic := '0';
+ wrs_tx_dreq_o : out std_logic;
+ wrs_tx_last_i : in std_logic := '1';
+ wrs_tx_flush_i : in std_logic := '0';
+ wrs_tx_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ wrs_rx_first_o : out std_logic;
+ wrs_rx_last_o : out std_logic;
+ wrs_rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ wrs_rx_valid_o : out std_logic;
+ wrs_rx_dreq_i : in std_logic := '0';
+ wrs_rx_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default;
+ ---------------------------------------------------------------------------
+ -- Etherbone WB master interface (when g_fabric_iface = "etherbone")
+ ---------------------------------------------------------------------------
+ wb_eth_master_o : out t_wishbone_master_out;
+ wb_eth_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ ---------------------------------------------------------------------------
+ -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+ ---------------------------------------------------------------------------
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others => (others => '0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- Aux clocks control
+ ---------------------------------------------------------------------------
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- External Tx Timestamping I/F
+ ---------------------------------------------------------------------------
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Pause Frame Control
+ ---------------------------------------------------------------------------
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Timecode I/F
+ ---------------------------------------------------------------------------
+ tm_link_up_o : out std_logic;
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+
+ ---------------------------------------------------------------------------
+ -- Buttons, LEDs and PPS output
+ ---------------------------------------------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ -- 1PPS output
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+ -- Link ok indication
+ link_ok_o : out std_logic
+ );
+
+end entity xwrc_board_fasec;
+
+
+architecture struct of xwrc_board_fasec is
+
+ -----------------------------------------------------------------------------
+ -- Signals
+ -----------------------------------------------------------------------------
+
+ -- IBUFDS
+ signal clk_125m_pllref_buf : std_logic;
+
+ -- PLLs, clocks
+ signal clk_pll_62m5 : std_logic;
+ signal clk_pll_125m : std_logic;
+ signal clk_pll_dmtd : std_logic;
+ signal pll_locked : std_logic;
+ signal clk_10m_ext : std_logic;
+
+ -- Reset logic
+ signal areset_edge_ppulse : std_logic;
+ signal rst_62m5_n : std_logic;
+ signal rstlogic_arst_n : std_logic;
+ signal rstlogic_clk_in : std_logic_vector(1 downto 0);
+ signal rstlogic_rst_out : std_logic_vector(1 downto 0);
+
+ -- PLL DAC ARB
+ signal dac_hpll_load_p1 : std_logic;
+ signal dac_hpll_data : std_logic_vector(15 downto 0);
+ signal dac_dpll_load_p1 : std_logic;
+ signal dac_dpll_data : std_logic_vector(15 downto 0);
+
+ -- OneWire
+ signal onewire_in : std_logic_vector(1 downto 0);
+ signal onewire_en : std_logic_vector(1 downto 0);
+
+ -- PHY
+ signal phy16_to_wrc : t_phy_16bits_to_wrc;
+ signal phy16_from_wrc : t_phy_16bits_from_wrc;
+
+ -- External reference
+ signal ext_ref_mul : std_logic;
+ signal ext_ref_mul_locked : std_logic;
+ signal ext_ref_mul_stopped : std_logic;
+ signal ext_ref_rst : std_logic;
+
+ -- WRC WB Slave interface
+ signal wb_slave_out : t_wishbone_slave_out;
+ signal wb_slave_in : t_wishbone_slave_in;
+ signal zero : std_logic;
+
+begin -- architecture struct
+
+ -----------------------------------------------------------------------------
+ -- Platform-dependent part (PHY, PLLs, buffers, etc)
+ -----------------------------------------------------------------------------
+
+ cmp_ibufgds_pllref : IBUFGDS
+ generic map (
+ DIFF_TERM => TRUE,
+ IBUF_LOW_PWR => TRUE,
+ IOSTANDARD => "DEFAULT")
+ port map (
+ O => clk_125m_pllref_buf,
+ I => clk_125m_pllref_p_i,
+ IB => clk_125m_pllref_n_i);
+
+ cmp_xwrc_platform : xwrc_platform_xilinx
+ generic map (
+ g_fpga_family => "kintex7",
+ g_with_external_clock_input => g_with_external_clock_input,
+ g_use_default_plls => TRUE,
+ g_simulation => g_simulation)
+ port map (
+ areset_n_i => areset_n_i,
+ clk_10m_ext_i => clk_10m_ext_i,
+ clk_20m_vcxo_i => clk_20m_vcxo_i,
+ clk_125m_pllref_i => clk_125m_pllref_buf,
+ clk_125m_gtp_p_i => clk_125m_gtp_p_i,
+ clk_125m_gtp_n_i => clk_125m_gtp_n_i,
+ sfp_txn_o => sfp_txn_o,
+ sfp_txp_o => sfp_txp_o,
+ sfp_rxn_i => sfp_rxn_i,
+ sfp_rxp_i => sfp_rxp_i,
+ sfp_tx_fault_i => sfp_tx_fault_i,
+ sfp_los_i => sfp_los_i,
+ sfp_tx_disable_o => sfp_tx_disable_o,
+ clk_62m5_sys_o => clk_pll_62m5,
+ clk_125m_ref_o => clk_pll_125m,
+ clk_62m5_dmtd_o => clk_pll_dmtd,
+ pll_locked_o => pll_locked,
+ clk_10m_ext_o => clk_10m_ext,
+ phy16_o => phy16_to_wrc,
+ phy16_i => phy16_from_wrc,
+ ext_ref_mul_o => ext_ref_mul,
+ ext_ref_mul_locked_o => ext_ref_mul_locked,
+ ext_ref_mul_stopped_o => ext_ref_mul_stopped,
+ ext_ref_rst_i => ext_ref_rst);
+
+ clk_sys_62m5_o <= clk_pll_62m5;
+ clk_ref_125m_o <= clk_pll_125m;
+
+ -----------------------------------------------------------------------------
+ -- Reset logic
+ -----------------------------------------------------------------------------
+ -- Detect when areset_edge_n_i goes high (end of reset) and use this edge to
+ -- generate rstlogic_arst_n. This is needed to connect optional reset like PCIe
+ -- reset. When baord runs standalone, we need to ignore PCIe reset being
+ -- constantly low.
+ cmp_arst_edge: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_pll_62m5,
+ rst_n_i => '1',
+ data_i => areset_edge_n_i,
+ ppulse_o => areset_edge_ppulse);
+
+ -- logic AND of all async reset sources (active low)
+ rstlogic_arst_n <= pll_locked and areset_n_i and (not areset_edge_ppulse);
+
+ -- concatenation of all clocks required to have synced resets
+ rstlogic_clk_in(0) <= clk_pll_62m5;
+ rstlogic_clk_in(1) <= clk_pll_125m;
+
+ cmp_rstlogic_reset : gc_reset
+ generic map (
+ g_clocks => 2, -- 62.5MHz, 125MHz
+ g_logdelay => 4, -- 16 clock cycles
+ g_syncdepth => 3) -- length of sync chains
+ port map (
+ free_clk_i => clk_125m_pllref_buf,
+ locked_i => rstlogic_arst_n,
+ clks_i => rstlogic_clk_in,
+ rstn_o => rstlogic_rst_out);
+
+ -- distribution of resets (already synchronized to their clock domains)
+ rst_62m5_n <= rstlogic_rst_out(0);
+
+ rst_sys_62m5_n_o <= rst_62m5_n;
+ rst_ref_125m_n_o <= rstlogic_rst_out(1);
+
+ -----------------------------------------------------------------------------
+ -- 2x SPI DAC
+ -----------------------------------------------------------------------------
+
+ cmp_dac_arb : spec_serial_dac_arb
+ generic map (
+ g_invert_sclk => FALSE,
+ g_num_extra_bits => 8)
+ port map (
+ clk_i => clk_pll_62m5,
+ rst_n_i => rst_62m5_n,
+ val1_i => dac_dpll_data,
+ load1_i => dac_dpll_load_p1,
+ val2_i => dac_hpll_data,
+ load2_i => dac_hpll_load_p1,
+ dac_cs_n_o(0) => pll25dac_cs_n_o,
+ dac_cs_n_o(1) => pll20dac_cs_n_o,
+ dac_sclk_o => plldac_sclk_o,
+ dac_din_o => plldac_din_o);
+
+ -----------------------------------------------------------------------------
+ -- The WR PTP core with optional fabric interface attached
+ -----------------------------------------------------------------------------
+
+ cmp_board_common : xwrc_board_common
+ generic map (
+ g_simulation => g_simulation,
+ g_with_external_clock_input => g_with_external_clock_input,
+ g_board_name => "FSEC",
+ g_phys_uart => TRUE,
+ g_virtual_uart => TRUE,
+ g_aux_clks => g_aux_clks,
+ g_ep_rxbuf_size => 1024,
+ g_tx_runt_padding => TRUE,
+ g_dpram_initf => g_dpram_initf,
+ g_dpram_size => 131072/4,
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_aux_sdb => c_wrc_periph3_sdb,
+ g_softpll_enable_debugger => FALSE,
+ g_vuart_fifo_size => 1024,
+ g_pcs_16bit => TRUE,
+ g_diag_id => g_diag_id,
+ g_diag_ver => g_diag_ver,
+ g_diag_ro_size => g_diag_ro_size,
+ g_diag_rw_size => g_diag_rw_size,
+ g_streamers_op_mode => g_streamers_op_mode,
+ g_tx_streamer_params => g_tx_streamer_params,
+ g_rx_streamer_params => g_rx_streamer_params,
+ g_fabric_iface => g_fabric_iface
+ )
+ port map (
+ clk_sys_i => clk_pll_62m5,
+ clk_dmtd_i => clk_pll_dmtd,
+ clk_ref_i => clk_pll_125m,
+ clk_aux_i => clk_aux_i,
+ clk_10m_ext_i => clk_10m_ext,
+ clk_ext_mul_i => ext_ref_mul,
+ clk_ext_mul_locked_i => ext_ref_mul_locked,
+ clk_ext_stopped_i => ext_ref_mul_stopped,
+ clk_ext_rst_o => ext_ref_rst,
+ pps_ext_i => pps_ext_i,
+ rst_n_i => rst_62m5_n,
+ dac_hpll_load_p1_o => dac_hpll_load_p1,
+ dac_hpll_data_o => dac_hpll_data,
+ dac_dpll_load_p1_o => dac_dpll_load_p1,
+ dac_dpll_data_o => dac_dpll_data,
+ phy16_o => phy16_from_wrc,
+ phy16_i => phy16_to_wrc,
+ scl_o => eeprom_scl_t,
+ scl_i => eeprom_scl_i,
+ sda_o => eeprom_sda_t,
+ sda_i => eeprom_sda_i,
+ sfp_scl_o => sfp_scl_t,
+ sfp_scl_i => sfp_scl_i,
+ sfp_sda_o => sfp_sda_t,
+ sfp_sda_i => sfp_sda_i,
+ sfp_det_i => sfp_det_i,
+ spi_sclk_o => flash_sclk_o,
+ spi_ncs_o => flash_ncs_o,
+ spi_mosi_o => flash_mosi_o,
+ spi_miso_i => flash_miso_i,
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o,
+ owr_pwren_o => open,
+ owr_en_o => onewire_en,
+ owr_i => onewire_in,
+ wb_slave_i => wb_slave_in,
+ wb_slave_o => wb_slave_out,
+ aux_master_o => aux_master_o,
+ aux_master_i => aux_master_i,
+ wrf_src_o => wrf_src_o,
+ wrf_src_i => wrf_src_i,
+ wrf_snk_o => wrf_snk_o,
+ wrf_snk_i => wrf_snk_i,
+ wrs_tx_data_i => wrs_tx_data_i,
+ wrs_tx_valid_i => wrs_tx_valid_i,
+ wrs_tx_dreq_o => wrs_tx_dreq_o,
+ wrs_tx_last_i => wrs_tx_last_i,
+ wrs_tx_flush_i => wrs_tx_flush_i,
+ wrs_tx_cfg_i => wrs_tx_cfg_i,
+ wrs_rx_first_o => wrs_rx_first_o,
+ wrs_rx_last_o => wrs_rx_last_o,
+ wrs_rx_data_o => wrs_rx_data_o,
+ wrs_rx_valid_o => wrs_rx_valid_o,
+ wrs_rx_dreq_i => wrs_rx_dreq_i,
+ wrs_rx_cfg_i => wrs_rx_cfg_i,
+ wb_eth_master_o => wb_eth_master_o,
+ wb_eth_master_i => wb_eth_master_i,
+ aux_diag_i => aux_diag_i,
+ aux_diag_o => aux_diag_o,
+ tm_dac_value_o => tm_dac_value_o,
+ tm_dac_wr_o => tm_dac_wr_o,
+ tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+ tm_clk_aux_locked_o => tm_clk_aux_locked_o,
+ timestamps_o => timestamps_o,
+ timestamps_ack_i => timestamps_ack_i,
+ abscal_txts_o => abscal_txts_o,
+ abscal_rxts_o => abscal_rxts_o,
+ fc_tx_pause_req_i => fc_tx_pause_req_i,
+ fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+ tm_link_up_o => tm_link_up_o,
+ tm_time_valid_o => tm_time_valid_o,
+ tm_tai_o => tm_tai_o,
+ tm_cycles_o => tm_cycles_o,
+ led_act_o => led_act_o,
+ led_link_o => led_link_o,
+ btn1_i => btn1_i,
+ btn2_i => btn2_i,
+ pps_p_o => pps_p_o,
+ pps_led_o => pps_led_o,
+ link_ok_o => link_ok_o);
+
+ sfp_rate_select_o <= '1';
+
+ --onewire_oen_o <= onewire_en(0);
+ --onewire_in(0) <= onewire_i;
+ --onewire_in(1) <= '1';
+
+ thermo_id_t <= '0' when onewire_en(0) = '1' else '1';
+ thermo_id_o <= '0';
+ onewire_in(0) <= thermo_id_i;
+ onewire_in(1) <= '1';
+
+ eeprom_sda_o <= '0';
+ eeprom_scl_o <= '0';
+ sfp_sda_o <= '0';
+ sfp_scl_o <= '0';
+
+ s00_axi_aclk_o <= clk_pll_62m5;
+
+ zero <= '0';
+ cmp_axi4lite_wbm: wb_axi4lite_bridge
+ port map (
+ clk_sys_i => clk_pll_62m5,
+ rst_n_i => s00_axi_aresetn,
+
+ AWADDR => s00_axi_awaddr,
+ AWVALID => s00_axi_awvalid,
+ AWREADY => s00_axi_awready,
+ WDATA => s00_axi_wdata,
+ WSTRB => s00_axi_wstrb,
+ WVALID => s00_axi_wvalid,
+ WREADY => s00_axi_wready,
+ WLAST => zero,
+ BRESP => s00_axi_bresp,
+ BVALID => s00_axi_bvalid,
+ BREADY => s00_axi_bready,
+ ARADDR => s00_axi_araddr,
+ ARVALID => s00_axi_arvalid,
+ ARREADY => s00_axi_arready,
+ RDATA => s00_axi_rdata,
+ RRESP => s00_axi_rresp,
+ RVALID => s00_axi_rvalid,
+ RREADY => s00_axi_rready,
+ RLAST => s00_axi_rlast,
+
+ wb_adr => wb_slave_in.adr,
+ wb_dat_m2s => wb_slave_in.dat,
+ wb_sel => wb_slave_in.sel,
+ wb_cyc => wb_slave_in.cyc,
+ wb_stb => wb_slave_in.stb,
+ wb_we => wb_slave_in.we,
+
+ wb_dat_s2m => wb_slave_out.dat,
+ wb_err => wb_slave_out.err,
+ wb_rty => wb_slave_out.rty,
+ wb_ack => wb_slave_out.ack,
+ wb_stall => wb_slave_out.stall
+ );
+
+
+end architecture struct;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd
new file mode 100644
index 000000000..684633eba
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_cfg_fifo.vhd
@@ -0,0 +1,177 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Config Master FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_cfg_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Buffers Config space requests
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_cfg_fifo is
+ generic(
+ g_sdb_address : t_wishbone_address);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ errreg_i : in std_logic_vector(63 downto 0);
+
+ cfg_i : in t_wishbone_slave_in;
+ cfg_o : out t_wishbone_slave_out;
+
+ fsm_stb_i : in std_logic;
+ fsm_adr_i : in t_wishbone_address;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic;
+
+ my_mac_o : out std_logic_vector(47 downto 0);
+ my_ip_o : out std_logic_vector(31 downto 0);
+ my_port_o : out std_logic_vector(15 downto 0));
+end eb_cfg_fifo;
+
+architecture rtl of eb_cfg_fifo is
+
+ constant c_pad : std_logic_vector(31 downto 16) := (others => '0');
+
+ signal r_mac : std_logic_vector(6*8-1 downto 0);
+ signal r_ip : std_logic_vector(4*8-1 downto 0);
+ signal r_port : std_logic_vector(2*8-1 downto 0);
+
+ signal s_fsm_adr : std_logic_vector(2 downto 0);
+ signal s_fifo_adr : std_logic_vector(2 downto 0);
+ signal s_fifo_empty : std_logic;
+ signal s_fifo_pop : std_logic;
+ signal r_cache_empty : std_logic;
+ signal r_cache_adr : std_logic_vector(2 downto 0);
+
+ impure function update(x : std_logic_vector) return std_logic_vector is
+ alias y : std_logic_vector(x'length-1 downto 0) is x;
+ variable o : std_logic_vector(x'length-1 downto 0);
+ begin
+ for i in (y'length/8)-1 downto 0 loop
+ if cfg_i.sel(i) = '1' then
+ o(i*8+7 downto i*8) := cfg_i.dat(i*8+7 downto i*8);
+ else
+ o(i*8+7 downto i*8) := y(i*8+7 downto i*8);
+ end if;
+ end loop;
+
+ return o;
+ end update;
+
+begin
+
+ cfg_o.int <= '0';
+ cfg_o.err <= '0';
+ cfg_o.rty <= '0';
+ cfg_o.stall <= '0';
+
+ cfg_wbs : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_mac <= x"D15EA5EDBEEF";
+ r_ip <= x"C0A80064";
+ r_port <= x"EBD0";
+
+ cfg_o.ack <= '0';
+ cfg_o.dat <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if cfg_i.cyc = '1' and cfg_i.stb = '1' and cfg_i.we = '1' then
+ case to_integer(unsigned(cfg_i.adr(4 downto 2))) is
+ when 4 => r_mac(47 downto 32) <= update(r_mac(47 downto 32));
+ when 5 => r_mac(31 downto 0) <= update(r_mac(31 downto 0));
+ when 6 => r_ip <= update(r_ip);
+ when 7 => r_port <= update(r_port);
+ when others => null;
+ end case;
+ end if;
+
+ cfg_o.ack <= cfg_i.cyc and cfg_i.stb;
+
+ case to_integer(unsigned(cfg_i.adr(4 downto 2))) is
+ when 0 => cfg_o.dat <= errreg_i(63 downto 32);
+ when 1 => cfg_o.dat <= errreg_i(31 downto 0);
+ when 2 => cfg_o.dat <= (others => '0');
+ when 3 => cfg_o.dat <= g_sdb_address;
+ when 4 => cfg_o.dat <= c_pad & r_mac(47 downto 32);
+ when 5 => cfg_o.dat <= r_mac(31 downto 0);
+ when 6 => cfg_o.dat <= r_ip;
+ when others => cfg_o.dat <= c_pad & r_port;
+ end case;
+
+ end if;
+ end process;
+
+ -- Discard writes.
+ s_fsm_adr <= fsm_adr_i(4 downto 2);
+
+ fifo : eb_fifo
+ generic map(
+ g_width => 3,
+ g_size => c_queue_depth)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ w_full_o => fsm_full_o,
+ w_push_i => fsm_stb_i,
+ w_dat_i => s_fsm_adr,
+ r_empty_o => s_fifo_empty,
+ r_pop_i => s_fifo_pop,
+ r_dat_o => s_fifo_adr);
+
+ s_fifo_pop <= not s_fifo_empty and (r_cache_empty or mux_pop_i);
+
+ cache : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_cache_empty <= '1';
+ r_cache_adr <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if r_cache_empty = '1' or mux_pop_i = '1' then
+ r_cache_empty <= s_fifo_empty;
+ r_cache_adr <= s_fifo_adr;
+ end if;
+ end if;
+ end process;
+
+ mux_empty_o <= r_cache_empty;
+
+ with r_cache_adr select
+ mux_dat_o <=
+ errreg_i(63 downto 32) when "000",
+ errreg_i(31 downto 0) when "001",
+ x"00000000" when "010",
+ g_sdb_address when "011",
+ c_pad & r_mac(47 downto 32) when "100",
+ r_mac(31 downto 0) when "101",
+ r_ip when "110",
+ c_pad & r_port when others;
+
+ my_mac_o <= r_mac;
+ my_ip_o <= r_ip;
+ my_port_o <= r_port;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd
new file mode 100644
index 000000000..6eb2c9df2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_checksum.vhd
@@ -0,0 +1,101 @@
+--! @file eb_checksum.vhd
+--! @brief IP checksum generator for EtherBone
+--!
+--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH
+--!
+--! Important details about its implementation
+--! should go in these comments.
+--!
+--! @author Mathias Kreider <m.kreider@gsi.de>
+--!
+--! @bug No know bugs.
+--!
+--------------------------------------------------------------------------------
+--! This library is free software; you can redistribute it and/or
+--! modify it under the terms of the GNU Lesser General Public
+--! License as published by the Free Software Foundation; either
+--! version 3 of the License, or (at your option) any later version.
+--!
+--! This library is distributed in the hope that it will be useful,
+--! but WITHOUT ANY WARRANTY; without even the implied warranty of
+--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+--! Lesser General Public License for more details.
+--!
+--! You should have received a copy of the GNU Lesser General Public
+--! License along with this library. If not, see <http://www.gnu.org/licenses/>.
+---------------------------------------------------------------------------------
+
+---! Standard library
+library IEEE;
+--! Standard packages
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+--! Additional library
+library work;
+--! Additional packages
+use work.eb_hdr_pkg.all;
+
+entity eb_checksum is
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ en_i : in std_logic;
+ data_i : in std_logic_vector(15 downto 0);
+ done_o : out std_logic;
+ sum_o : out std_logic_vector(15 downto 0));
+end eb_checksum;
+
+architecture behavioral of eb_checksum is
+ constant c_width : natural := 28;
+ type t_state is (S_IDLE, S_ADDUP);
+
+ signal state : t_state := S_IDLE;
+ signal sum : unsigned(c_width-1 downto 0);
+
+ function f_wrap(sum : unsigned) return unsigned is
+ variable sum0, sum1 : unsigned(16 downto 0);
+ begin
+ sum0 := resize(sum(15 downto 0), 17) + resize(sum(c_width-1 downto 16), 17);
+ sum1 := resize(sum(15 downto 0), 17) + resize(sum(c_width-1 downto 16), 17) + 1;
+ if sum0(16) = '1' then
+ return sum1(15 downto 0);
+ else
+ return sum0(15 downto 0);
+ end if;
+ end f_wrap;
+
+begin
+
+ sum_o <= std_logic_vector(sum(15 downto 0));
+
+ adder: process(clk_i, nRst_i)
+ begin
+ if nRst_i = '0' then
+ done_o <= '0';
+ state <= S_IDLE;
+ sum <= (others => '0');
+ elsif rising_edge(clk_i) then
+ case state is
+
+ when S_IDLE =>
+ done_o <= '0';
+ if en_i = '1' then
+ state <= S_ADDUP;
+ sum <= resize(unsigned(data_i), c_width);
+ end if;
+
+ when S_ADDUP =>
+ if en_i = '0' then
+ sum <= resize(f_wrap(sum), c_width);
+ done_o <= '1';
+ state <= S_IDLE;
+ else
+ sum <= sum + resize(unsigned(data_i), c_width);
+ end if;
+
+ end case;
+ end if;
+ end process;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd
new file mode 100644
index 000000000..24bab963d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_commit_fifo.vhd
@@ -0,0 +1,123 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Commit FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-29
+-- Last update: 2013-04-29
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A FIFO which can commit/abort a sequence of writes
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+use work.genram_pkg.all;
+
+-- r_dat_o is valid when r_empty_o=0 (show ahead)
+-- w_dat_i is valid when w_push_i =1
+-- r_pop_i affects r_empty_o on the next cycle
+-- w_push_i affects w_full_o on the next cycle
+entity eb_commit_fifo is
+ generic(
+ g_width : natural;
+ g_size : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ w_full_o : out std_logic;
+ w_push_i : in std_logic;
+ w_dat_i : in std_logic_vector(g_width-1 downto 0);
+ w_commit_i : in std_logic;
+ w_abort_i : in std_logic;
+ r_empty_o : out std_logic;
+ r_pop_i : in std_logic;
+ r_dat_o : out std_logic_vector(g_width-1 downto 0));
+end eb_commit_fifo;
+
+architecture rtl of eb_commit_fifo is
+ constant c_depth : natural := f_ceil_log2(g_size);
+
+ signal r_idx : unsigned(c_depth downto 0);
+ signal w_idx : unsigned(c_depth downto 0);
+ signal e_idx : unsigned(c_depth downto 0);
+ signal r_idx1 : unsigned(c_depth downto 0);
+ signal w_idx1 : unsigned(c_depth downto 0);
+
+ constant c_low : unsigned(c_depth-1 downto 0) := (others => '0');
+ constant c_high : unsigned(c_depth downto 0) := '1' & c_low;
+
+begin
+
+ ram : generic_simple_dpram
+ generic map(
+ g_data_width => g_width,
+ g_size => 2**c_depth,
+ g_dual_clock => false)
+ port map(
+ rst_n_i => rstn_i,
+ clka_i => clk_i,
+ bwea_i => (others => '1'),
+ wea_i => w_push_i,
+ aa_i => std_logic_vector(w_idx(c_depth-1 downto 0)),
+ da_i => w_dat_i,
+ clkb_i => clk_i,
+ ab_i => std_logic_vector(r_idx1(c_depth-1 downto 0)),
+ qb_o => r_dat_o);
+
+ r_idx1 <= (r_idx+1) when r_pop_i ='1' else r_idx;
+ w_idx1 <= (w_idx+1) when w_push_i='1' else w_idx;
+
+ main : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_idx <= (others => '0');
+ e_idx <= (others => '0');
+ w_idx <= (others => '0');
+ w_full_o <= '0';
+ r_empty_o <= '1';
+ elsif rising_edge(clk_i) then
+ r_idx <= r_idx1;
+
+ if w_commit_i = '1' then
+ e_idx <= w_idx1;
+ end if;
+
+ if w_abort_i = '1' then
+ w_idx <= e_idx;
+ else
+ w_idx <= w_idx1;
+ end if;
+
+ -- Compare the newest pointers
+ if (w_idx1 xor c_high) = r_idx1 then
+ w_full_o <= '1';
+ else
+ w_full_o <= '0';
+ end if;
+
+ -- Use the OLD write pointer to prevent read-during-write
+ if e_idx = r_idx1 then
+ r_empty_o <= '1';
+ else
+ r_empty_o <= '0';
+ end if;
+
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd
new file mode 100644
index 000000000..e4e60e3dd
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_rx.vhd
@@ -0,0 +1,183 @@
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.eb_hdr_pkg.all;
+
+entity eb_eth_rx is
+ generic(
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in;
+ stb_o : out std_logic;
+ stall_i : in std_logic;
+ mac_o : out std_logic_vector(47 downto 0);
+ ip_o : out std_logic_vector(31 downto 0);
+ port_o : out std_logic_vector(15 downto 0);
+ length_o : out unsigned(15 downto 0));
+end eb_eth_rx;
+
+architecture rtl of eb_eth_rx is
+ subtype t_index is unsigned(f_ceil_log2(g_mtu)-1 downto 0);
+
+ type t_state is (S_DROP, S_WAIT, S_ETHERNET, S_IP, S_UDP, S_STB);
+
+ -- Two bytes at a time
+ constant c_step : natural := 2;
+
+ signal r_state : t_state;
+ signal r_state_next : t_state;
+ signal r_count : t_index;
+
+ signal r_ack : std_logic;
+ signal r_pass : std_logic;
+ signal r_shift : std_logic_vector(c_ip_len*8-1 downto 0);
+ signal r_stb : std_logic;
+ signal r_mac : std_logic_vector(47 downto 0);
+ signal r_ip : std_logic_vector(31 downto 0);
+ signal r_port : std_logic_vector(15 downto 0);
+ signal r_length : unsigned(15 downto 0);
+
+ signal s_stall : std_logic;
+ signal s_eth_hdr : t_eth_hdr;
+ signal s_ip_hdr : t_ip_hdr;
+ signal s_udp_hdr : t_udp_hdr;
+ signal s_optlen : unsigned(3 downto 0);
+ signal s_shift : std_logic_vector(c_ip_len*8-1 downto 0);
+
+ function f_step(x : natural) return t_index is
+ begin
+ return to_unsigned(x/2 - 1, t_index'length);
+ end function;
+begin
+
+ master_o.cyc <= snk_i.cyc;
+ master_o.stb <= (r_pass and snk_i.stb) when snk_i.adr = c_WRF_DATA else '0';
+ master_o.adr <= (others => '0');
+ master_o.sel <= "0011";
+ master_o.we <= '1';
+ master_o.dat(31 downto 16) <= (others => '0');
+ master_o.dat(15 downto 0) <= snk_i.dat;
+
+ snk_o.ack <= r_ack;
+ snk_o.err <= '0';
+ snk_o.rty <= '0';
+ snk_o.stall <= s_stall;
+
+ stb_o <= r_stb;
+ mac_o <= r_mac;
+ ip_o <= r_ip;
+ port_o <= r_port;
+ length_o <= r_length;
+
+ s_stall <= r_stb when r_state = S_UDP else (r_pass and master_i.stall);
+
+ -- These are valid when header is fully shifted in
+ s_shift <= r_shift(r_shift'left-16 downto 0) & snk_i.dat;
+ s_eth_hdr <= f_parse_eth(s_shift);
+ s_ip_hdr <= f_parse_ip (s_shift);
+ s_udp_hdr <= f_parse_udp(s_shift);
+
+ s_optlen <= unsigned(s_ip_hdr.ihl)-5;
+
+ fsm : process(clk_i, rst_n_i) is
+ begin
+ if rst_n_i = '0' then
+ r_state <= S_WAIT;
+ r_state_next <= S_ETHERNET;
+ r_count <= f_step(c_eth_len);
+
+ r_ack <= '0';
+ r_pass <= '0';
+ r_shift <= (others => '0');
+ r_stb <= '0';
+ r_mac <= (others => '0');
+ r_ip <= (others => '0');
+ r_port <= (others => '0');
+ r_length <= (others => '0');
+ elsif rising_edge(clk_i) then
+ r_ack <= snk_i.cyc and snk_i.stb and not s_stall;
+ r_stb <= r_stb and stall_i;
+
+ if snk_i.cyc = '0' then
+ r_pass <= '0';
+ r_state <= S_WAIT;
+ r_state_next <= S_ETHERNET;
+ r_count <= f_step(c_eth_len);
+ elsif snk_i.stb = '1' and s_stall = '0' and snk_i.adr = c_WRF_DATA then
+
+ -- defaults
+ r_state <= S_WAIT;
+ r_state_next <= S_DROP;
+ r_count <= r_count - 1;
+ r_shift <= s_shift;
+
+ case r_state is
+ -- special states
+ when S_DROP =>
+ r_state <= S_DROP;
+ r_pass <= '0';
+
+ when S_WAIT =>
+ r_state_next <= r_state_next;
+ if r_count = to_unsigned(1, r_count'length) then
+ r_state <= r_state_next;
+ end if;
+
+ -- payload states
+ when S_ETHERNET =>
+ r_mac <= s_eth_hdr.src;
+
+ r_count <= f_step(c_ip_len);
+ if s_eth_hdr.typ = c_eth_typ_ip then
+ r_state_next <= S_IP;
+ else
+ r_state <= S_DROP;
+ end if;
+
+ when S_IP =>
+ r_ip <= s_ip_hdr.src;
+
+ r_count <= f_step(to_integer(s_optlen)*4 + c_udp_len);
+ if s_ip_hdr.ver = x"4" and unsigned(s_ip_hdr.ihl) >= 5 and s_ip_hdr.pro = c_ip_typ_udp then
+ r_state_next <= S_UDP;
+ else
+ r_state <= S_DROP;
+ end if;
+
+ when S_UDP =>
+ r_port <= s_udp_hdr.src;
+ r_length <= unsigned(s_udp_hdr.len);
+
+ -- Raise stb four bytes after fsm starts (=> fsm will TX)
+ r_count <= f_step(4);
+
+ -- Enforce MTU and 4-byte alignment
+ if unsigned(s_udp_hdr.len) >= 12 and
+ unsigned(s_udp_hdr.len) <= g_mtu-c_ip_len and
+ s_udp_hdr.len(1 downto 0) = "00" then
+ r_pass <= '1'; -- Feed future bytes to etherbone fsm
+ r_state_next <= S_STB;
+ else
+ r_state <= S_DROP;
+ end if;
+
+ when S_STB =>
+ r_stb <= '1'; -- this must be 4 bytes after r_pass='1'
+ r_count <= f_step(to_integer(r_length)-c_udp_len-4);
+ r_state_next <= S_DROP;
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd
new file mode 100644
index 000000000..661c7712d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_eth_tx.vhd
@@ -0,0 +1,332 @@
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.eb_internals_pkg.all;
+use work.eb_hdr_pkg.all;
+
+entity eb_eth_tx is
+ generic(
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ slave_o : out t_wishbone_slave_out;
+ slave_i : in t_wishbone_slave_in;
+ stb_i : in std_logic;
+ stall_o : out std_logic;
+ mac_i : in std_logic_vector(47 downto 0);
+ ip_i : in std_logic_vector(31 downto 0);
+ port_i : in std_logic_vector(15 downto 0);
+ length_i : in unsigned(15 downto 0);
+ skip_stb_i : in std_logic;
+ skip_stall_o : out std_logic;
+ my_mac_i : in std_logic_vector(47 downto 0);
+ my_ip_i : in std_logic_vector(31 downto 0);
+ my_port_i : in std_logic_vector(15 downto 0));
+end eb_eth_tx;
+
+architecture rtl of eb_eth_tx is
+ type t_state is (S_WRF_STATUS, S_ETHERNET, S_IP, S_UDP, S_DONE, S_WAIT, S_PAYLOAD, S_RUNT, S_LOWER, S_SKIP, S_PUSH);
+ type t_sum_state is (S_CONST, S_DST_HI, S_DST_LO, S_SRC_HI, S_SRC_LO, S_LENGTH, S_DONE);
+
+ signal r_state : t_state;
+ signal r_staten : t_state;
+ signal r_count : unsigned(4 downto 0);
+
+ signal r_ready : std_logic;
+ signal r_mac : std_logic_vector(47 downto 0);
+ signal r_ip : std_logic_vector(31 downto 0);
+ signal r_port : std_logic_vector(15 downto 0);
+ signal r_length : unsigned(15 downto 0);
+
+ signal r_hdr_stb : std_logic;
+ signal r_shift : std_logic_vector(c_ip_len*8-1 downto 0);
+ signal r_ack : std_logic;
+ signal s_stall : std_logic;
+
+ signal s_buf_stb : std_logic;
+ signal s_buf_full : std_logic;
+ signal s_buf_push : std_logic;
+ signal s_buf_commit : std_logic;
+ signal s_buf_abort : std_logic;
+ signal s_buf_cyc : std_logic;
+ signal s_buf_data : std_logic_vector(15 downto 0);
+ signal r_buf_typ : std_logic;
+
+ signal r_tx_cyc : std_logic;
+ signal s_tx_empty : std_logic;
+ signal s_tx_pop : std_logic;
+ signal s_tx_cyc : std_logic;
+ signal s_tx_typ : std_logic;
+ signal s_tx_dat : std_logic_vector(15 downto 0);
+
+ signal r_sum_state : t_sum_state;
+ signal r_sum_en : std_logic;
+ signal r_sum_data : std_logic_vector(15 downto 0);
+ signal s_sum_done : std_logic_vector(15 downto 0);
+
+ constant c_hdr_len : natural := c_ip_len;
+ constant c_runt_min : natural := 46 - c_ip_len;
+
+ function f_send_eth(dst, src : std_logic_vector(47 downto 0)) return std_logic_vector is
+ variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-');
+ variable eth : t_eth_hdr := c_eth_init;
+ begin
+ eth.dst := dst;
+ eth.src := src;
+ o(o'left downto (c_hdr_len-c_eth_len)*8) := f_format_eth(eth);
+ return o;
+ end function;
+
+ function f_send_ip(dst, src : std_logic_vector(31 downto 0); len : unsigned(15 downto 0); sum : std_logic_vector(15 downto 0)) return std_logic_vector is
+ variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-');
+ variable ip : t_ip_hdr := c_ip_init;
+ begin
+ ip.tol := std_logic_vector(len+20);
+ ip.dst := dst;
+ ip.src := src;
+ ip.sum := not sum;
+ o(o'left downto (c_hdr_len-c_ip_len)*8) := f_format_ip(ip);
+ return o;
+ end function;
+
+ function f_send_udp(dst, src : std_logic_vector(15 downto 0); len : unsigned(15 downto 0)) return std_logic_vector is
+ variable o : std_logic_vector(c_hdr_len*8-1 downto 0) := (others => '-');
+ variable udp : t_udp_hdr := c_udp_init;
+ begin
+ udp.src := src;
+ udp.dst := dst;
+ udp.len := std_logic_vector(len);
+ o(o'left downto (c_hdr_len-c_udp_len)*8) := f_format_udp(udp);
+ return o;
+ end function;
+
+ function f_step(x : natural) return unsigned is
+ begin
+ return to_unsigned(x/2 - 1, 5);
+ end function;
+
+begin
+
+ tx : eb_commit_fifo
+ generic map(
+ g_width => 18,
+ g_size => (g_mtu+c_eth_len)/2)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rst_n_i,
+ w_full_o => s_buf_full,
+ w_push_i => s_buf_push,
+ w_commit_i => s_buf_commit,
+ w_abort_i => s_buf_abort,
+ r_empty_o => s_tx_empty,
+ r_pop_i => s_tx_pop,
+ w_dat_i(17) => s_buf_cyc,
+ w_dat_i(16) => r_buf_typ,
+ w_dat_i(15 downto 0) => s_buf_data,
+ r_dat_o(17) => s_tx_cyc,
+ r_dat_o(16) => s_tx_typ,
+ r_dat_o(15 downto 0) => s_tx_dat);
+
+ slave_o.ack <= r_ack;
+ slave_o.int <= '0';
+ slave_o.rty <= '0';
+ slave_o.err <= '0';
+ slave_o.stall <= s_stall;
+ slave_o.dat <= (others => '0');
+
+ stall_o <= r_ready; -- already have params
+
+ s_stall <= s_buf_full when r_state=S_PAYLOAD else '1';
+ skip_stall_o <= '0' when r_state=S_SKIP else '1';
+ s_buf_stb <= (slave_i.cyc and slave_i.stb) when r_state=S_PAYLOAD else r_hdr_stb;
+ s_buf_push <= s_buf_stb and not s_buf_full;
+ s_buf_abort <= '1' when r_state=S_SKIP else '0';
+ s_buf_commit <= '1' when r_state=S_LOWER else '0';
+ s_buf_cyc <= '0' when r_state=S_LOWER else '1';
+ s_buf_data <= slave_i.dat(15 downto 0) when r_state=S_PAYLOAD else r_shift(r_shift'left downto r_shift'left-15);
+
+ hdr : process(clk_i, rst_n_i) is
+ begin
+ if rst_n_i = '0' then
+ r_state <= S_WRF_STATUS;
+ r_staten <= S_WRF_STATUS;
+ r_count <= (others => '0');
+ r_ready <= '0';
+ r_mac <= (others => '0');
+ r_ip <= (others => '0');
+ r_port <= (others => '0');
+ r_length <= (others => '0');
+ r_hdr_stb <= '0';
+ r_ack <= '0';
+ r_shift <= (others => '-');
+ r_tx_cyc <= '0';
+ elsif rising_edge(clk_i) then
+ r_ack <= slave_i.cyc and slave_i.stb and not s_stall;
+
+ if s_tx_empty = '0' then
+ r_tx_cyc <= s_tx_cyc;
+ end if;
+
+ if stb_i = '1' and r_ready = '0' then
+ r_mac <= mac_i;
+ r_ip <= ip_i;
+ r_port <= port_i;
+ r_length <= length_i;
+ r_ready <= '1';
+ end if;
+
+ case r_state is
+ when S_WRF_STATUS =>
+ if r_ready = '1' then
+ r_hdr_stb <= '1';
+ r_buf_typ <= '1';
+ r_shift <= (others => '0');
+ r_state <= S_ETHERNET;
+ end if;
+
+ when S_ETHERNET =>
+ if s_buf_full = '0' then
+ r_buf_typ <= '0';
+ r_shift <= f_send_eth(r_mac, my_mac_i);
+ r_count <= f_step(c_eth_len);
+ r_staten <= S_IP;
+ r_state <= S_PUSH;
+ end if;
+
+ when S_IP =>
+ if s_buf_full = '0' then
+ r_shift <= f_send_ip(r_ip, my_ip_i, r_length, s_sum_done);
+ r_count <= f_step(c_ip_len);
+ r_staten <= S_UDP;
+ r_state <= S_PUSH;
+ end if;
+
+ when S_UDP =>
+ if s_buf_full = '0' then
+ r_shift <= f_send_udp(r_port, my_port_i, r_length);
+ r_count <= f_step(c_udp_len);
+ r_staten <= S_DONE;
+ r_state <= S_PUSH;
+ end if;
+
+ when S_DONE =>
+ if s_buf_full = '0' then
+ r_ready <= '0'; -- can latch next header params
+ r_hdr_stb <= '0'; -- nothing more from the header side of things
+
+ -- After payload, may need to add runt padding
+ r_shift <= (others => '0');
+
+ if r_length < c_runt_min then
+ r_staten <= S_RUNT;
+ r_count <= f_step(c_runt_min - to_integer(r_length));
+ else
+ r_staten <= S_LOWER;
+ r_count <= (others => '-');
+ end if;
+
+ -- Make sure we don't skip the payload!
+ if slave_i.cyc = '1' then
+ r_state <= S_PAYLOAD;
+ elsif skip_stb_i = '1' then
+ r_state <= S_SKIP;
+ else
+ r_state <= S_WAIT;
+ end if;
+ end if;
+
+ when S_WAIT =>
+ if slave_i.cyc = '1' then
+ r_state <= S_PAYLOAD;
+ elsif skip_stb_i = '1' then
+ r_state <= S_SKIP;
+ end if;
+
+ when S_PAYLOAD =>
+ if slave_i.cyc = '0' then
+ r_hdr_stb <= '1';
+ r_state <= r_staten;
+ end if;
+
+ when S_RUNT =>
+ if s_buf_full = '0' then
+ r_state <= S_PUSH;
+ r_staten <= S_LOWER;
+ end if;
+
+ when S_LOWER =>
+ if s_buf_full = '0' then
+ r_hdr_stb <= '0';
+ r_state <= S_WRF_STATUS;
+ end if;
+
+ when S_SKIP =>
+ r_state <= S_WRF_STATUS;
+
+ when S_PUSH =>
+ if s_buf_full = '0' then
+ r_count <= r_count - 1;
+ r_shift <= r_shift(r_shift'left-16 downto 0) & x"0000";
+
+ if r_count = to_unsigned(1, r_count'length) then
+ r_state <= r_staten;
+ end if;
+ end if;
+
+ end case;
+ end if;
+ end process;
+
+ src_o.cyc <= s_tx_cyc when s_tx_empty='0' else r_tx_cyc;
+ src_o.stb <= not s_tx_empty;
+ src_o.adr <= c_WRF_STATUS when s_tx_typ='1' else c_WRF_DATA;
+ src_o.we <= '1';
+ src_o.sel <= "11";
+ src_o.dat <= s_tx_dat;
+
+ s_tx_pop <= not s_tx_empty and not (s_tx_cyc and src_i.stall);
+
+ sum : eb_checksum
+ port map(
+ clk_i => clk_i,
+ nRst_i => rst_n_i,
+ en_i => r_sum_en,
+ data_i => r_sum_data,
+ done_o => open,
+ sum_o => s_sum_done);
+
+ sum_header : process(clk_i, rst_n_i) is
+ begin
+ if rst_n_i = '0' then
+ r_sum_state <= S_CONST;
+ r_sum_en <= '0';
+ r_sum_data <= (others => '0');
+ elsif rising_edge(clk_i) then
+
+ case r_sum_state is
+ when S_CONST =>
+ r_sum_data <= f_checksum(f_format_ip(c_ip_init));
+ if stb_i = '1' and r_ready = '0' then
+ r_sum_en <= '1';
+ r_sum_state <= S_DST_HI;
+ end if;
+
+ when S_DST_HI => r_sum_state <= S_DST_LO; r_sum_data <= r_ip(31 downto 16);
+ when S_DST_LO => r_sum_state <= S_SRC_HI; r_sum_data <= r_ip(15 downto 0);
+ when S_SRC_HI => r_sum_state <= S_SRC_LO; r_sum_data <= my_ip_i(31 downto 16);
+ when S_SRC_LO => r_sum_state <= S_LENGTH; r_sum_data <= my_ip_i(15 downto 0);
+ when S_LENGTH => r_sum_state <= S_DONE; r_sum_data <= std_logic_vector(r_length+20);
+ when S_DONE => r_sum_state <= S_CONST; r_sum_en <= '0';
+ end case;
+
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd
new file mode 100644
index 000000000..304333085
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_ethernet_slave.vhd
@@ -0,0 +1,164 @@
+--! @file eb_ethernet_slave.vhd
+--! @brief Top file for EtherBone core
+--!
+--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH
+--!
+--! Important details about its implementation
+--! should go in these comments.
+--!
+--! @author Mathias Kreider <m.kreider@gsi.de>
+--! @author Wesley W. Terpstra <w.terpstra@gsi.de>
+--!
+--------------------------------------------------------------------------------
+--! This library is free software; you can redistribute it and/or
+--! modify it under the terms of the GNU Lesser General Public
+--! License as published by the Free Software Foundation; either
+--! version 3 of the License, or (at your option) any later version.
+--!
+--! This library is distributed in the hope that it will be useful,
+--! but WITHOUT ANY WARRANTY; without even the implied warranty of
+--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+--! Lesser General Public License for more details.
+--!
+--! You should have received a copy of the GNU Lesser General Public
+--! License along with this library. If not, see <http://www.gnu.org/licenses/>.
+---------------------------------------------------------------------------------
+
+--! Standard library
+library IEEE;
+--! Standard packages
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+library work;
+use work.etherbone_pkg.all;
+use work.eb_hdr_pkg.all;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_ethernet_slave is
+ generic(
+ g_sdb_address : std_logic_vector(63 downto 0);
+ g_timeout_cycles : natural;
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+ cfg_slave_o : out t_wishbone_slave_out;
+ cfg_slave_i : in t_wishbone_slave_in;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in);
+end eb_ethernet_slave;
+
+
+architecture rtl of eb_ethernet_slave is
+ signal s_his_mac, s_my_mac : std_logic_vector(47 downto 0);
+ signal s_his_ip, s_my_ip : std_logic_vector(31 downto 0);
+ signal s_his_port, s_my_port : std_logic_vector(15 downto 0);
+
+ signal s_tx_stb : std_logic;
+ signal s_tx_stall : std_logic;
+ signal s_skip_stb : std_logic;
+ signal s_skip_stall : std_logic;
+ signal s_length : unsigned(15 downto 0); -- of UDP in words
+
+ signal s_rx2widen : t_wishbone_master_out;
+ signal s_widen2rx : t_wishbone_master_in;
+ signal s_widen2fsm : t_wishbone_master_out;
+ signal s_fsm2widen : t_wishbone_master_in;
+ signal s_fsm2narrow : t_wishbone_master_out;
+ signal s_narrow2fsm : t_wishbone_master_in;
+ signal s_narrow2tx : t_wishbone_master_out;
+ signal s_tx2narrow : t_wishbone_master_in;
+
+begin
+ rx : eb_eth_rx
+ generic map(
+ g_mtu => g_mtu)
+ port map(
+ clk_i => clk_i,
+ rst_n_i => nRst_i,
+ snk_i => snk_i,
+ snk_o => snk_o,
+ master_o => s_rx2widen,
+ master_i => s_widen2rx,
+ stb_o => s_tx_stb,
+ stall_i => s_tx_stall,
+ mac_o => s_his_mac,
+ ip_o => s_his_ip,
+ port_o => s_his_port,
+ length_o => s_length);
+
+ widen : eb_stream_widen
+ generic map(
+ g_slave_width => 16,
+ g_master_width => 32)
+ port map(
+ clk_i => clk_i,
+ rst_n_i => nRst_i,
+ slave_i => s_rx2widen,
+ slave_o => s_widen2rx,
+ master_i => s_fsm2widen,
+ master_o => s_widen2fsm);
+
+ eb : eb_slave_top
+ generic map(
+ g_sdb_address => g_sdb_address(31 downto 0),
+ g_timeout_cycles => g_timeout_cycles)
+ port map(
+ clk_i => clk_i,
+ nRst_i => nRst_i,
+ EB_RX_i => s_widen2fsm,
+ EB_RX_o => s_fsm2widen,
+ EB_TX_i => s_narrow2fsm,
+ EB_TX_o => s_fsm2narrow,
+ skip_stb_o => s_skip_stb,
+ skip_stall_i => s_skip_stall,
+ WB_config_i => cfg_slave_i,
+ WB_config_o => cfg_slave_o,
+ WB_master_i => master_i,
+ WB_master_o => master_o,
+ my_mac_o => s_my_mac,
+ my_ip_o => s_my_ip,
+ my_port_o => s_my_port);
+
+ narrow : eb_stream_narrow
+ generic map(
+ g_slave_width => 32,
+ g_master_width => 16)
+ port map(
+ clk_i => clk_i,
+ rst_n_i => nRst_i,
+ slave_i => s_fsm2narrow,
+ slave_o => s_narrow2fsm,
+ master_i => s_tx2narrow,
+ master_o => s_narrow2tx);
+
+ tx : eb_eth_tx
+ generic map(
+ g_mtu => g_mtu)
+ port map(
+ clk_i => clk_i,
+ rst_n_i => nRst_i,
+ src_i => src_i,
+ src_o => src_o,
+ slave_o => s_tx2narrow,
+ slave_i => s_narrow2tx,
+ stb_i => s_tx_stb,
+ stall_o => s_tx_stall,
+ mac_i => s_his_mac,
+ ip_i => s_his_ip,
+ port_i => s_his_port,
+ length_i => s_length,
+ skip_stb_i => s_skip_stb,
+ skip_stall_o => s_skip_stall,
+ my_mac_i => s_my_mac,
+ my_ip_i => s_my_ip,
+ my_port_i => s_my_port);
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd
new file mode 100644
index 000000000..22ac21364
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_fifo.vhd
@@ -0,0 +1,112 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A convenience wrapper for FIFOs used in Etherbone
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+use work.genram_pkg.all;
+
+-- r_dat_o is valid when r_empty_o=0 (show ahead)
+-- w_dat_i is valid when w_push_i =1
+-- r_pop_i affects r_empty_o on the next cycle
+-- w_push_i affects w_full_o on the next cycle
+entity eb_fifo is
+ generic(
+ g_width : natural;
+ g_size : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ w_full_o : out std_logic;
+ w_push_i : in std_logic;
+ w_dat_i : in std_logic_vector(g_width-1 downto 0);
+ r_empty_o : out std_logic;
+ r_pop_i : in std_logic;
+ r_dat_o : out std_logic_vector(g_width-1 downto 0));
+end eb_fifo;
+
+architecture rtl of eb_fifo is
+ constant c_depth : natural := f_ceil_log2(g_size);
+
+ signal r_idx : unsigned(c_depth downto 0);
+ signal w_idx : unsigned(c_depth downto 0);
+ signal r_idx1 : unsigned(c_depth downto 0);
+ signal w_idx1 : unsigned(c_depth downto 0);
+
+ constant c_low : unsigned(c_depth-1 downto 0) := (others => '0');
+ constant c_high : unsigned(c_depth downto 0) := '1' & c_low;
+
+begin
+
+ ram : generic_simple_dpram
+ generic map(
+ g_data_width => g_width,
+ g_size => g_size,
+ g_dual_clock => false)
+ port map(
+ rst_n_i => rstn_i,
+
+ clka_i => clk_i,
+ bwea_i => (others => '1'),
+ wea_i => w_push_i,
+ aa_i => std_logic_vector(w_idx(c_depth-1 downto 0)),
+ da_i => w_dat_i,
+
+ clkb_i => clk_i,
+ ab_i => std_logic_vector(r_idx1(c_depth-1 downto 0)),
+ qb_o => r_dat_o);
+
+ r_idx1 <= (r_idx+1) when r_pop_i ='1' else r_idx;
+ w_idx1 <= (w_idx+1) when w_push_i='1' else w_idx;
+
+ main : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_idx <= (others => '0');
+ w_idx <= (others => '0');
+ w_full_o <= '0';
+ r_empty_o <= '1';
+ elsif rising_edge(clk_i) then
+ r_idx <= r_idx1;
+ w_idx <= w_idx1;
+
+ -- Compare the newest pointers
+ if (w_idx1 xor c_high) = r_idx1 then
+ w_full_o <= '1';
+ else
+ w_full_o <= '0';
+ end if;
+
+ -- Use the OLD write pointer to prevent read-during-write
+ if w_idx = r_idx1 then
+ r_empty_o <= '1';
+ else
+ r_empty_o <= '0';
+ end if;
+
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd
new file mode 100644
index 000000000..c7d40aa07
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_hdr_pkg.vhd
@@ -0,0 +1,271 @@
+--! @file eb_hdr_pkg.vhd
+--! @brief EtherBone Header definitions - Eth, IPV4, UDP, EB
+--!
+--! Copyright (C) 2011-2012 GSI Helmholtz Centre for Heavy Ion Research GmbH
+--!
+--! Important details about its implementation
+--! should go in these comments.
+--!
+--! @author Mathias Kreider <m.kreider@gsi.de>
+--! @author Wesley W. Terpstra <w.terpstra@gsi.de>
+--!
+--------------------------------------------------------------------------------
+--! This library is free software; you can redistribute it and/or
+--! modify it under the terms of the GNU Lesser General Public
+--! License as published by the Free Software Foundation; either
+--! version 3 of the License, or (at your option) any later version.
+--!
+--! This library is distributed in the hope that it will be useful,
+--! but WITHOUT ANY WARRANTY; without even the implied warranty of
+--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+--! Lesser General Public License for more details.
+--!
+--! You should have received a copy of the GNU Lesser General Public
+--! License along with this library. If not, see <http://www.gnu.org/licenses/>.
+---------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+
+package eb_hdr_pkg is
+
+ constant c_eth_typ_ip : std_logic_vector((2*8)-1 downto 0) := x"0800";
+ type t_eth_hdr is record
+ dst : std_logic_vector((6*8)-1 downto 0);
+ src : std_logic_vector((6*8)-1 downto 0);
+ typ : std_logic_vector((2*8)-1 downto 0);
+ end record;
+ constant c_eth_len : natural := 14;
+ constant c_eth_init : t_eth_hdr := (
+ dst => (others => '0'), -- set!
+ src => (others => '0'), -- set!
+ typ => c_eth_typ_ip);
+
+ constant c_ip_typ_udp : std_logic_vector(7 downto 0) := x"11";
+ type t_ip_hdr is record
+ ver : std_logic_vector(3 downto 0);
+ ihl : std_logic_vector(3 downto 0);
+ tos : std_logic_vector(7 downto 0);
+ tol : std_logic_vector(15 downto 0);
+ id : std_logic_vector(15 downto 0);
+ flg : std_logic_vector(2 downto 0);
+ fro : std_logic_vector(12 downto 0);
+ ttl : std_logic_vector(7 downto 0);
+ pro : std_logic_vector(7 downto 0);
+ sum : std_logic_vector(15 downto 0);
+ src : std_logic_vector(31 downto 0);
+ dst : std_logic_vector(31 downto 0);
+ end record;
+ constant c_ip_len : natural := 20;
+ constant c_ip_init : t_ip_hdr := (
+ ver => x"4",
+ ihl => x"5",
+ tos => x"00",
+ tol => (others => '0'), -- set!
+ id => (others => '0'),
+ flg => "010", -- don't fragment
+ fro => (others => '0'),
+ ttl => x"3f",
+ pro => c_ip_typ_udp,
+ sum => (others => '0'), -- set!
+ src => (others => '0'), -- set!
+ dst => (others => '0')); -- set!
+
+ type t_udp_hdr is record
+ src : std_logic_vector(15 downto 0);
+ dst : std_logic_vector(15 downto 0);
+ len : std_logic_vector(15 downto 0);
+ sum : std_logic_vector(15 downto 0);
+ end record;
+ constant c_udp_len : natural := 8;
+ constant c_udp_init : t_udp_hdr := (
+ src => (others => '0'), -- set!
+ dst => (others => '0'), -- set!
+ len => (others => '0'), -- set!
+ sum => (others => '0'));
+
+ constant c_eb_magic : std_logic_vector(15 downto 0) := x"4e6f";
+ constant c_eb_ver : std_logic_vector(3 downto 0) := x"1";
+ type t_eb_hdr is record
+ magic : std_logic_vector(15 downto 0);
+ ver : std_logic_vector(3 downto 0);
+ res1 : std_logic;
+ no_response : std_logic;
+ probe_res : std_logic;
+ probe : std_logic;
+ addr_size : std_logic_vector(3 downto 0);
+ data_size : std_logic_vector(3 downto 0);
+ end record;
+ constant c_eb_len : natural := 4;
+ constant c_eb_init : t_eb_hdr := (
+ magic => c_eb_magic,
+ ver => c_eb_ver,
+ res1 => '0',
+ no_response => '1',
+ probe_res => '0',
+ probe => '0',
+ addr_size => x"4", -- 32-bit only
+ data_size => x"4");
+
+ type t_rec_hdr is record
+ bca_cfg : std_logic;
+ rca_cfg : std_logic;
+ rd_fifo : std_logic;
+ res1 : std_logic;
+ drop_cyc : std_logic;
+ wca_cfg : std_logic;
+ wr_fifo : std_logic;
+ res2 : std_logic;
+ sel : std_logic_vector(7 downto 0);
+ wr_cnt : unsigned(7 downto 0);
+ rd_cnt : unsigned(7 downto 0);
+ end record;
+ constant c_rec_len : natural := 4;
+ constant c_rec_init : t_rec_hdr := (
+ bca_cfg => '0',
+ rca_cfg => '0',
+ rd_fifo => '0',
+ res1 => '0',
+ drop_cyc => '0',
+ wca_cfg => '0',
+ wr_fifo => '0',
+ res2 => '0',
+ sel => (others => '0'),
+ wr_cnt => (others => '0'),
+ rd_cnt => (others => '0'));
+
+ function f_parse_eth(x : std_logic_vector) return t_eth_hdr;
+ function f_parse_ip (x : std_logic_vector) return t_ip_hdr;
+ function f_parse_udp(x : std_logic_vector) return t_udp_hdr;
+ function f_parse_eb (x : std_logic_vector) return t_eb_hdr;
+ function f_parse_rec(x : std_logic_vector) return t_rec_hdr;
+
+ function f_format_eth(x : t_eth_hdr) return std_logic_vector; --(c_eth_len*8-1 downto 0);
+ function f_format_ip (x : t_ip_hdr) return std_logic_vector; --(c_ip_len *8-1 downto 0);
+ function f_format_udp(x : t_udp_hdr) return std_logic_vector; --(c_udp_len*8-1 downto 0);
+ function f_format_eb (x : t_eb_hdr) return std_logic_vector; --(c_eb_len *8-1 downto 0);
+ function f_format_rec(x : t_rec_hdr) return std_logic_vector; --(c_rec_len*8-1 downto 0);
+
+ -- To be used only on constants!
+ function f_checksum(x : std_logic_vector) return std_logic_vector;
+
+end package;
+
+package body eb_hdr_pkg is
+
+ function f_parse_eth(x : std_logic_vector) return t_eth_hdr is
+ variable o : t_eth_hdr;
+ begin
+ o.dst := x(111 downto 64);
+ o.src := x( 63 downto 16);
+ o.typ := x( 15 downto 0);
+ return o;
+ end function;
+
+ function f_parse_ip(x : std_logic_vector) return t_ip_hdr is
+ variable o : t_ip_hdr;
+ begin
+ o.ver := x(159 downto 156);
+ o.ihl := x(155 downto 152);
+ o.tos := x(151 downto 144);
+ o.tol := x(143 downto 128);
+ o.id := x(127 downto 112);
+ o.flg := x(111 downto 109);
+ o.fro := x(108 downto 96);
+ o.ttl := x(95 downto 88);
+ o.pro := x(87 downto 80);
+ o.sum := x(79 downto 64);
+ o.src := x(63 downto 32);
+ o.dst := x(31 downto 0);
+ return o;
+ end function;
+
+ function f_parse_udp(x : std_logic_vector) return t_udp_hdr is
+ variable o : t_udp_hdr;
+ begin
+ o.src := x(63 downto 48);
+ o.dst := x(47 downto 32);
+ o.len := x(31 downto 16);
+ o.sum := x(15 downto 0);
+ return o;
+ end function;
+
+ function f_parse_eb(x : std_logic_vector) return t_eb_hdr is
+ variable o : t_eb_hdr;
+ begin
+ o.magic := x(31 downto 16);
+ o.ver := x(15 downto 12);
+ o.res1 := x(11);
+ o.no_response := x(10);
+ o.probe_res := x(9);
+ o.probe := x(8);
+ o.addr_size := x( 7 downto 4);
+ o.data_size := x( 3 downto 0);
+ return o;
+ end function;
+
+ function f_parse_rec(x : std_logic_vector) return t_rec_hdr is
+ variable o : t_rec_hdr;
+ begin
+ o.bca_cfg := x(31);
+ o.rca_cfg := x(30);
+ o.rd_fifo := x(29);
+ o.res1 := x(28);
+ o.drop_cyc := x(27);
+ o.wca_cfg := x(26);
+ o.wr_fifo := x(25);
+ o.res2 := x(24);
+ o.sel := x(23 downto 16);
+ o.wr_cnt := unsigned(x(15 downto 8));
+ o.rd_cnt := unsigned(x( 7 downto 0));
+ return o;
+ end function;
+
+ function f_format_eth(x : t_eth_hdr) return std_logic_vector is
+ begin
+ return x.dst & x.src & x.typ;
+ end function;
+
+ function f_format_ip (x : t_ip_hdr) return std_logic_vector is
+ begin
+ return x.ver & x.ihl & x.tos & x.tol & x.id & x.flg &
+ x.fro & x.ttl & x.pro & x.sum & x.src & x.dst;
+ end function;
+
+ function f_format_udp(x : t_udp_hdr) return std_logic_vector is
+ begin
+ return x.src & x.dst & x.len & x.sum;
+ end function;
+
+ function f_format_eb (x : t_eb_hdr) return std_logic_vector is
+ begin
+ return x.magic & x.ver & x.res1 & x.no_response & x.probe_res &
+ x.probe & x.addr_size & x.data_size;
+ end function;
+
+ function f_format_rec(x : t_rec_hdr) return std_logic_vector is
+ begin
+ return x.bca_cfg & x.rca_cfg & x.rd_fifo & x.res1 &
+ x.drop_cyc & x.wca_cfg & x.wr_fifo & x.res2 &
+ x.sel & std_logic_vector(x.wr_cnt) & std_logic_vector(x.rd_cnt);
+ end function;
+
+ function f_checksum(x : std_logic_vector) return std_logic_vector is
+ alias y : std_logic_vector((x'length/16)*16-1 downto 0) is x;
+ variable o : unsigned(16 downto 0) := (others => '0');
+ begin
+ for i in y'length/16-1 downto 0 loop
+ o := o + ('0' & unsigned(y(i*16+15 downto i*16)));
+ if o(16) = '1' then
+ o := o + 1;
+ o(16) := '0';
+ end if;
+ end loop;
+ return std_logic_vector(o(15 downto 0));
+ end function;
+
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd
new file mode 100644
index 000000000..27fc5a893
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_internals_pkg.vhd
@@ -0,0 +1,418 @@
+library IEEE;
+--! Standard packages
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+--! Additional library
+library work;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.eb_hdr_pkg.all;
+
+package eb_internals_pkg is
+
+ subtype t_tag is std_logic_vector(2 downto 0);
+
+ constant c_tag_drop_tx : t_tag := "000";
+ constant c_tag_skip_tx : t_tag := "001";
+ constant c_tag_pass_tx : t_tag := "010";
+ constant c_tag_pass_on : t_tag := "011";
+ constant c_tag_cfg_req : t_tag := "100";
+ constant c_tag_cfg_ign : t_tag := "101";
+ constant c_tag_wbm_req : t_tag := "110";
+ constant c_tag_wbm_ign : t_tag := "111";
+
+ constant c_queue_depth : natural := 32;
+
+ component eb_slave_top is
+ generic(
+ g_sdb_address : t_wishbone_address;
+ g_timeout_cycles : natural);
+ port(
+ clk_i : in std_logic; --! System Clk
+ nRst_i : in std_logic; --! active low sync reset
+
+ EB_RX_i : in t_wishbone_slave_in; --! Streaming wishbone(record) sink from RX transport protocol block
+ EB_RX_o : out t_wishbone_slave_out; --! Streaming WB sink flow control to RX transport protocol block
+ EB_TX_i : in t_wishbone_master_in; --! Streaming WB src flow control from TX transport protocol block
+ EB_TX_o : out t_wishbone_master_out; --! Streaming WB src to TX transport protocol block
+
+ skip_stb_o : out std_logic; --! Does a packet get discarded?
+ skip_stall_i: in std_logic;
+
+ WB_config_i : in t_wishbone_slave_in; --! WB V4 interface to WB interconnect/device(s)
+ WB_config_o : out t_wishbone_slave_out; --! WB V4 interface to WB interconnect/device(s)
+ WB_master_i : in t_wishbone_master_in; --! WB V4 interface to WB interconnect/device(s)
+ WB_master_o : out t_wishbone_master_out; --! WB V4 interface to WB interconnect/device(s)
+
+ my_mac_o : out std_logic_vector(47 downto 0);
+ my_ip_o : out std_logic_vector(31 downto 0);
+ my_port_o : out std_logic_vector(15 downto 0));
+ end component;
+
+ component eb_slave_fsm is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ rx_cyc_i : in std_logic;
+ rx_stb_i : in std_logic;
+ rx_dat_i : in t_wishbone_data;
+ rx_stall_o : out std_logic;
+
+ tag_stb_o : out std_logic;
+ tag_dat_o : out t_tag;
+ tag_full_i : in std_logic;
+
+ pass_stb_o : out std_logic;
+ pass_dat_o : out t_wishbone_data;
+ pass_full_i : in std_logic;
+
+ cfg_stb_o : out std_logic;
+ cfg_adr_o : out t_wishbone_address;
+ cfg_full_i : in std_logic;
+
+ wbm_stb_o : out std_logic;
+ wbm_full_i : in std_logic;
+ wbm_busy_i : in std_logic;
+
+ master_o : out t_wishbone_master_out;
+ master_stall_i : in std_logic);
+ end component;
+
+ component eb_fifo is
+ generic(
+ g_width : natural;
+ g_size : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ w_full_o : out std_logic;
+ w_push_i : in std_logic;
+ w_dat_i : in std_logic_vector(g_width-1 downto 0);
+ r_empty_o : out std_logic;
+ r_pop_i : in std_logic;
+ r_dat_o : out std_logic_vector(g_width-1 downto 0));
+ end component;
+
+ component eb_commit_fifo is
+ generic(
+ g_width : natural;
+ g_size : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ w_full_o : out std_logic;
+ w_push_i : in std_logic;
+ w_dat_i : in std_logic_vector(g_width-1 downto 0);
+ w_commit_i : in std_logic;
+ w_abort_i : in std_logic;
+ r_empty_o : out std_logic;
+ r_pop_i : in std_logic;
+ r_dat_o : out std_logic_vector(g_width-1 downto 0));
+ end component;
+
+ component eb_tx_mux is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ tag_pop_o : out std_logic;
+ tag_dat_i : in t_tag;
+ tag_empty_i : in std_logic;
+
+ pass_pop_o : out std_logic;
+ pass_dat_i : in t_wishbone_data;
+ pass_empty_i : in std_logic;
+
+ cfg_pop_o : out std_logic;
+ cfg_dat_i : in t_wishbone_data;
+ cfg_empty_i : in std_logic;
+
+ wbm_pop_o : out std_logic;
+ wbm_dat_i : in t_wishbone_data;
+ wbm_empty_i : in std_logic;
+
+ skip_stb_o : out std_logic;
+ skip_stall_i : in std_logic;
+
+ tx_cyc_o : out std_logic;
+ tx_stb_o : out std_logic;
+ tx_dat_o : out t_wishbone_data;
+ tx_stall_i : in std_logic);
+ end component;
+
+ component eb_tag_fifo is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ fsm_stb_i : in std_logic;
+ fsm_dat_i : in t_tag;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_tag;
+ mux_empty_o : out std_logic);
+ end component;
+
+ component eb_pass_fifo is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ fsm_stb_i : in std_logic;
+ fsm_dat_i : in t_wishbone_data;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic);
+ end component;
+
+ component eb_cfg_fifo is
+ generic(
+ g_sdb_address : t_wishbone_address);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ errreg_i : in std_logic_vector(63 downto 0);
+
+ cfg_i : in t_wishbone_slave_in;
+ cfg_o : out t_wishbone_slave_out;
+
+ fsm_stb_i : in std_logic;
+ fsm_adr_i : in t_wishbone_address;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic;
+
+ my_mac_o : out std_logic_vector(47 downto 0);
+ my_ip_o : out std_logic_vector(31 downto 0);
+ my_port_o : out std_logic_vector(15 downto 0));
+ end component;
+
+ component eb_wbm_fifo is
+ generic(
+ g_timeout_cycles : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ errreg_o : out std_logic_vector(63 downto 0);
+ wb_i : in t_wishbone_master_in;
+
+ fsm_stb_i : in std_logic;
+ fsm_full_o : out std_logic;
+ fsm_busy_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic);
+ end component;
+
+ component eb_stream_narrow is
+ generic(
+ g_slave_width : natural;
+ g_master_width : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out);
+ end component;
+
+ component eb_stream_widen is
+ generic(
+ g_slave_width : natural;
+ g_master_width : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out);
+ end component;
+
+ component eb_checksum is
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ en_i : in std_logic;
+ data_i : in std_logic_vector(15 downto 0);
+ done_o : out std_logic;
+ sum_o : out std_logic_vector(15 downto 0));
+ end component;
+
+ component eb_eth_rx is
+ generic(
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in;
+ stb_o : out std_logic;
+ stall_i : in std_logic;
+ mac_o : out std_logic_vector(47 downto 0);
+ ip_o : out std_logic_vector(31 downto 0);
+ port_o : out std_logic_vector(15 downto 0);
+ length_o : out unsigned(15 downto 0));
+ end component;
+
+ component eb_eth_tx is
+ generic(
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ slave_o : out t_wishbone_slave_out;
+ slave_i : in t_wishbone_slave_in;
+ stb_i : in std_logic;
+ stall_o : out std_logic;
+ mac_i : in std_logic_vector(47 downto 0);
+ ip_i : in std_logic_vector(31 downto 0);
+ port_i : in std_logic_vector(15 downto 0);
+ length_i : in unsigned(15 downto 0);
+ skip_stb_i : in std_logic;
+ skip_stall_o : out std_logic;
+ my_mac_i : in std_logic_vector(47 downto 0);
+ my_ip_i : in std_logic_vector(31 downto 0);
+ my_port_i : in std_logic_vector(15 downto 0));
+ end component;
+
+-----------------------------------------------------------------
+-- EB Master Stuff
+-----------------------------------------------------------------
+
+
+
+ component eb_master_wb_if is
+ generic(g_adr_bits_hi : natural;
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ byte_cnt_i : in std_logic_vector(15 downto 0);
+ error_i : in std_logic_vector(0 downto 0);
+
+
+ clear_o : out std_logic;
+ flush_o : out std_logic;
+
+ my_mac_o : out std_logic_vector(47 downto 0);
+ my_ip_o : out std_logic_vector(31 downto 0);
+ my_port_o : out std_logic_vector(15 downto 0);
+
+ his_mac_o : out std_logic_vector(47 downto 0);
+ his_ip_o : out std_logic_vector(31 downto 0);
+ his_port_o : out std_logic_vector(15 downto 0);
+ length_o : out unsigned(15 downto 0);
+ max_ops_o : out unsigned(15 downto 0);
+ adr_hi_o : out std_logic_vector(g_adr_bits_hi-1 downto 0);
+ eb_opt_o : out t_rec_hdr;
+
+ udp_raw_o : out std_logic;
+ udp_we_o : out std_logic;
+ udp_valid_i : in std_logic;
+ udp_data_o : out std_logic_vector(31 downto 0));
+ end component;
+
+
+ component eb_framer is
+ port(
+ clk_i : in std_logic; -- WB Clock
+ rst_n_i : in std_logic; -- async reset
+
+ slave_i : in t_wishbone_slave_in; -- WB op. -> not WB compliant, but the record format is convenient
+ slave_o : out t_wishbone_slave_out; -- flow control
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in;
+
+ byte_cnt_o : out std_logic_vector(15 downto 0);
+ ovf_o : out std_logic;
+
+ tx_send_now_i : in std_logic;
+ tx_flush_o : out std_logic;
+ max_ops_i : in unsigned(15 downto 0);
+ length_i : in unsigned(15 downto 0);
+ cfg_rec_hdr_i : in t_rec_hdr -- EB cfg information, eg read from cfg space etc
+ );
+ end component;
+
+ component eb_record_gen is
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_stall_o : out std_logic;
+ slave_ack_o : out std_logic;
+
+ rec_valid_o : out std_logic;
+ rec_hdr_o : out t_rec_hdr;
+ rec_adr_rd_o : out t_wishbone_data;
+ rec_adr_wr_o : out t_wishbone_address;
+ rec_ack_i : in std_logic;
+ byte_cnt_o : out unsigned(15 downto 0);
+ cfg_rec_hdr_i : in t_rec_hdr);
+ end component ;
+
+ component eb_master_eth_tx is
+ generic(
+ g_mtu : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ slave_o : out t_wishbone_slave_out;
+ slave_i : in t_wishbone_slave_in;
+ stb_i : in std_logic;
+ stall_o : out std_logic;
+ mac_i : in std_logic_vector(47 downto 0);
+ ip_i : in std_logic_vector(31 downto 0);
+ port_i : in std_logic_vector(15 downto 0);
+ skip_stb_i : in std_logic;
+ skip_stall_o : out std_logic;
+ my_mac_i : in std_logic_vector(47 downto 0);
+ my_ip_i : in std_logic_vector(31 downto 0);
+ my_port_i : in std_logic_vector(15 downto 0)
+ );
+ end component;
+
+ component eb_commit_len_fifo is
+ generic(
+ g_width : natural;
+ g_size : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ w_cnt_o : out unsigned(f_ceil_log2(g_size) downto 0);
+ r_cnt_o : out unsigned(f_ceil_log2(g_size) downto 0);
+ w_full_o : out std_logic;
+ w_push_i : in std_logic;
+ w_dat_i : in std_logic_vector(g_width-1 downto 0);
+ w_commit_i : in std_logic;
+ w_abort_i : in std_logic;
+ r_empty_o : out std_logic;
+ r_pop_i : in std_logic;
+ r_dat_o : out std_logic_vector(g_width-1 downto 0)
+ );
+ end component;
+
+end package;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd
new file mode 100644
index 000000000..df04798ff
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_pass_fifo.vhd
@@ -0,0 +1,61 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Pass FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_pass_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Records protocol data that should be put into response
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_pass_fifo is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ fsm_stb_i : in std_logic;
+ fsm_dat_i : in t_wishbone_data;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic);
+end eb_pass_fifo;
+
+architecture rtl of eb_pass_fifo is
+begin
+
+ fifo : eb_fifo
+ generic map(
+ g_width => c_wishbone_data_width,
+ g_size => c_queue_depth)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ w_full_o => fsm_full_o,
+ w_push_i => fsm_stb_i,
+ w_dat_i => fsm_dat_i,
+ r_empty_o => mux_empty_o,
+ r_pop_i => mux_pop_i,
+ r_dat_o => mux_dat_o);
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd
new file mode 100644
index 000000000..9eb991a7c
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_fsm.vhd
@@ -0,0 +1,353 @@
+library IEEE;
+--! Standard packages
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+--! Additional library
+library work;
+--! Additional packages
+use work.eb_internals_pkg.all;
+use work.eb_hdr_pkg.all;
+use work.wishbone_pkg.all;
+
+entity eb_slave_fsm is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ rx_cyc_i : in std_logic;
+ rx_stb_i : in std_logic;
+ rx_dat_i : in t_wishbone_data;
+ rx_stall_o : out std_logic;
+
+ tag_stb_o : out std_logic;
+ tag_dat_o : out t_tag;
+ tag_full_i : in std_logic;
+
+ pass_stb_o : out std_logic;
+ pass_dat_o : out t_wishbone_data;
+ pass_full_i : in std_logic;
+
+ cfg_stb_o : out std_logic;
+ cfg_adr_o : out t_wishbone_address;
+ cfg_full_i : in std_logic;
+
+ wbm_stb_o : out std_logic;
+ wbm_full_i : in std_logic;
+ wbm_busy_i : in std_logic;
+
+ master_o : out t_wishbone_master_out;
+ master_stall_i : in std_logic);
+
+end entity;
+
+architecture behavioral of eb_slave_fsm is
+
+ type t_state_RX is (S_EB_HDR, S_PROBE_DROP, S_PROBE_ID, S_CYC_HDR, S_WR_ADR, S_WRITE, S_RD_ADR, S_READ, S_DROP);
+
+ signal r_tag_stb_o : std_logic;
+ signal r_tag_dat_o : t_tag;
+ signal r_pass_stb_o : std_logic;
+ signal r_pass_dat_o : t_wishbone_data;
+ signal r_cfg_stb_o : std_logic;
+ signal r_wbm_stb_o : std_logic;
+ signal r_master_cyc_o : std_logic;
+ signal r_master_stb_o : std_logic;
+ signal r_master_we_o : std_logic;
+ signal r_master_adr_o : t_wishbone_address;
+ signal r_master_dat_o : t_wishbone_data;
+ signal r_wr_adr : unsigned(t_wishbone_address'range);
+ signal r_rx_rec_hdr : t_rec_hdr;
+ signal r_tx_rec_hdr : t_rec_hdr;
+ signal r_rx_cyc : std_logic;
+ signal r_state : t_state_RX;
+ signal s_stall : std_logic;
+ signal s_wbm_busy : std_logic;
+ signal s_rx_eb_hdr : t_eb_hdr;
+ signal s_tx_eb_hdr : t_eb_hdr;
+ signal s_rx_rec_hdr : t_rec_hdr;
+ signal s_tx_rec_hdr : t_rec_hdr;
+
+ function f_reply_eb(rx_eb_hdr : t_eb_hdr) return t_eb_hdr is
+ variable tx_eb_hdr : t_eb_hdr := c_eb_init;
+ begin
+ tx_eb_hdr.probe_res := rx_eb_hdr.probe;
+ return tx_eb_hdr;
+ end function;
+
+ function f_reply_rec(rx_rec_hdr : t_rec_hdr) return t_rec_hdr is
+ variable tx_rec_hdr : t_rec_hdr := C_rec_init;
+ begin
+ tx_rec_hdr.WCA_CFG := rx_rec_hdr.BCA_CFG;
+ tx_rec_hdr.RD_FIFO := '0';
+ tx_rec_hdr.RD_CNT := (others => '0');
+ tx_rec_hdr.WR_FIFO := rx_rec_hdr.RD_FIFO;
+ tx_rec_hdr.WR_CNT := rx_rec_hdr.RD_CNT;
+ tx_rec_hdr.SEL := rx_rec_hdr.SEL;
+ tx_rec_hdr.DROP_CYC := rx_rec_hdr.DROP_CYC;
+ return tx_rec_hdr;
+ end function;
+
+begin
+
+ rx_stall_o <= s_stall;
+ tag_stb_o <= r_tag_stb_o;
+ tag_dat_o <= r_tag_dat_o;
+ pass_stb_o <= r_pass_stb_o;
+ pass_dat_o <= r_pass_dat_o;
+ cfg_stb_o <= r_cfg_stb_o;
+ cfg_adr_o <= r_master_adr_o;
+ wbm_stb_o <= r_wbm_stb_o;
+
+ s_wbm_busy <= wbm_busy_i or r_wbm_stb_o; -- cope with 1 cycle latency
+ master_o.cyc <= r_master_cyc_o or s_wbm_busy;
+ master_o.stb <= r_master_stb_o;
+ master_o.we <= r_master_we_o;
+ master_o.adr <= r_master_adr_o;
+ master_o.dat <= r_master_dat_o;
+ master_o.sel <= r_rx_rec_hdr.sel(master_o.sel'range);
+
+ -- Stall the RX path if:
+ -- Any TX FIFO is full
+ -- We are pushing a strobe that is stalled
+ -- We are waiting to lower the cycle line
+ s_stall <= tag_full_i OR pass_full_i OR cfg_full_i OR wbm_full_i OR
+ (r_master_stb_o and master_stall_i) OR
+ (not r_master_cyc_o and s_wbm_busy);
+
+ s_rx_eb_hdr <= f_parse_eb(rx_dat_i);
+ s_tx_eb_hdr <= f_reply_eb(s_rx_eb_hdr);
+
+ s_rx_rec_hdr <= f_parse_rec(rx_dat_i);
+ s_tx_rec_hdr <= f_reply_rec(s_rx_rec_hdr);
+
+ fsm : process(clk_i, rstn_i) is
+ begin
+ if (rstn_i = '0') then
+ r_tag_stb_o <= '0';
+ r_tag_dat_o <= (others => '0');
+ r_pass_stb_o <= '0';
+ r_pass_dat_o <= (others => '0');
+ r_cfg_stb_o <= '0';
+ r_wbm_stb_o <= '0';
+ r_master_cyc_o <= '0';
+ r_master_stb_o <= '0';
+ r_master_we_o <= '0';
+ r_master_adr_o <= (others => '0');
+ r_master_dat_o <= (others => '0');
+ r_wr_adr <= (others => '0');
+ r_rx_rec_hdr <= c_rec_init;
+ r_tx_rec_hdr <= c_rec_init;
+ r_rx_cyc <= '0';
+ r_state <= S_EB_HDR;
+ elsif rising_edge(clk_i) then
+
+ -- By default, write nowhere in particular
+ r_tag_stb_o <= '0';
+ r_pass_stb_o <= '0';
+ r_cfg_stb_o <= '0';
+ r_wbm_stb_o <= '0';
+
+ -- Lower strobe line when it is queued
+ r_master_stb_o <= r_master_stb_o and master_stall_i;
+
+ -- Register to enable detecting falling edge
+ r_rx_cyc <= rx_cyc_i;
+
+ if(rx_cyc_i = '0') then
+ -- expect a new negotiation header
+ r_state <= S_EB_HDR;
+ -- guard against improperly terminated streams
+ r_master_cyc_o <= '0';
+
+ -- On falling edge of RX cycle line, push a tag to drop TX cycle
+ if r_rx_cyc = '1' then
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_drop_tx;
+ end if;
+ elsif(rx_stb_i = '1' and s_stall = '0') then
+ -- Every non-error state must write something
+
+ case r_state is
+ when s_EB_HDR =>
+ -- supported EB header?
+ if (s_rx_eb_hdr.magic = c_eb_magic and s_rx_eb_hdr.ver = c_eb_ver) then
+ -- Raise TX cycle line if this needs to be sent
+ if s_rx_eb_hdr.no_response = '1' then
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_skip_tx;
+ else
+ -- Write the header using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_tx;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= f_format_eb(s_tx_eb_hdr);
+ end if;
+
+ if s_rx_eb_hdr.probe = '1' then
+ if s_rx_eb_hdr.addr_size(2) = '1' and
+ s_rx_eb_hdr.data_size(2) = '1' then
+ -- Allow follow-up payload for stream channels
+ r_state <= S_PROBE_ID;
+ else
+ -- Does not support 32-bit? drop anything after probe id
+ r_state <= S_PROBE_DROP;
+ end if;
+ else -- not a probe
+ if s_rx_eb_hdr.addr_size = x"4" or
+ s_rx_eb_hdr.data_size = x"4" then
+ -- Must be the exactly right format if not a probe!
+ r_state <= S_CYC_HDR;
+ else
+ -- Do the best we can ... report proper EB header and pad with 0s
+ r_state <= S_DROP;
+ end if;
+ end if;
+ else --bad eb header. drop all til cycle line is lowered again
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_skip_tx;
+ r_state <= S_DROP;
+ end if;
+
+ when S_PROBE_DROP =>
+ -- Write the probe-id using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= rx_dat_i;
+
+ r_state <= s_DROP;
+
+ when S_PROBE_ID =>
+ -- Write the probe-id using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= rx_dat_i;
+
+ r_state <= s_CYC_HDR;
+
+ when S_CYC_HDR =>
+ r_tx_rec_hdr <= s_tx_rec_hdr;
+ r_rx_rec_hdr <= s_rx_rec_hdr;
+
+ -- Write padding/header using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+
+ if (s_rx_rec_hdr.WR_CNT /= 0) then
+ --padding logic 1. insert padding instead of the header
+ r_pass_dat_o <= x"00000000";
+ r_state <= S_WR_ADR;
+ elsif (s_rx_rec_hdr.RD_CNT /= 0) then
+ --no writes, no padding. insert the header
+ r_pass_dat_o <= f_format_rec(s_tx_rec_hdr);
+ r_state <= S_RD_ADR;
+ else
+ --no writes, no padding. insert the header
+ r_pass_dat_o <= f_format_rec(s_tx_rec_hdr);
+
+ r_master_cyc_o <= r_master_cyc_o and not s_rx_rec_hdr.DROP_CYC;
+ r_state <= S_CYC_HDR;
+ end if;
+
+ when S_WR_ADR =>
+ r_wr_adr <= unsigned(rx_dat_i);
+
+ -- Write padding using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= x"00000000";
+
+ r_state <= S_WRITE;
+
+ when S_WRITE =>
+ r_master_we_o <= '1';
+ r_master_adr_o <= std_logic_vector(r_wr_adr);
+ r_master_dat_o <= rx_dat_i;
+
+ if(r_rx_rec_hdr.WR_FIFO = '0') then
+ r_wr_adr <= r_wr_adr + 4;
+ end if;
+
+ -- Write padding/header using pass fifo
+ r_tag_stb_o <= '1';
+ r_pass_stb_o <= '1';
+
+ -- Writes need their output discarded
+ if r_rx_rec_hdr.WCA_CFG = '1' then
+ r_cfg_stb_o <= '1';
+ r_tag_dat_o <= c_tag_cfg_ign;
+ else
+ r_wbm_stb_o <= '1';
+ r_tag_dat_o <= c_tag_wbm_ign;
+ r_master_cyc_o <= '1';
+ r_master_stb_o <= '1';
+ end if;
+
+ if (r_rx_rec_hdr.WR_CNT /= 1) then
+ r_pass_dat_o <= x"00000000";
+ else
+ r_pass_dat_o <= f_format_rec(r_tx_rec_hdr);
+
+ if (r_rx_rec_hdr.RD_CNT /= 0) then
+ r_state <= S_RD_ADR;
+ else
+ r_master_cyc_o <= r_master_cyc_o and not r_rx_rec_hdr.DROP_CYC;
+ r_state <= S_CYC_HDR;
+ end if;
+ end if;
+
+ r_rx_rec_hdr.WR_CNT <= r_rx_rec_hdr.WR_CNT - 1;
+
+ when S_RD_ADR =>
+ -- Copy address using pass fifo
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= rx_dat_i; --pass the rx readback address as base write address to tx
+
+ r_state <= S_READ;
+
+ when S_READ =>
+ r_master_we_o <= '0';
+ r_master_adr_o <= rx_dat_i;
+
+ -- Get data from either cfg or wbm fifos
+ r_tag_stb_o <= '1';
+
+ if r_rx_rec_hdr.RCA_CFG = '1' then
+ r_cfg_stb_o <= '1';
+ r_tag_dat_o <= c_tag_cfg_req;
+ else
+ r_wbm_stb_o <= '1';
+ r_tag_dat_o <= c_tag_wbm_req;
+ r_master_cyc_o <= '1';
+ r_master_stb_o <= '1';
+ end if;
+
+ if(r_rx_rec_hdr.RD_CNT = 1) then
+ r_master_cyc_o <= r_master_cyc_o and not r_rx_rec_hdr.DROP_CYC;
+ r_state <= S_CYC_HDR;
+ end if;
+
+ r_rx_rec_hdr.RD_CNT <= r_rx_rec_hdr.RD_CNT - 1;
+
+ when S_DROP =>
+ -- preserve packet length
+ r_tag_stb_o <= '1';
+ r_tag_dat_o <= c_tag_pass_on;
+ r_pass_stb_o <= '1';
+ r_pass_dat_o <= (others => '0');
+
+ when others =>
+ r_state <= S_DROP;
+
+ end case;
+ end if; --rx_stb_i
+ end if; --clk edge
+ end process;
+
+end architecture;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd
new file mode 100644
index 000000000..4003d37b5
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_slave_top.vhd
@@ -0,0 +1,205 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Slave
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_slave.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Connect all the components of an Etherbone slave
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_slave_top is
+ generic(
+ g_sdb_address : t_wishbone_address;
+ g_timeout_cycles : natural);
+ port(
+ clk_i : in std_logic; --! System Clk
+ nRst_i : in std_logic; --! active low sync reset
+
+ EB_RX_i : in t_wishbone_slave_in; --! Streaming wishbone(record) sink from RX transport protocol block
+ EB_RX_o : out t_wishbone_slave_out; --! Streaming WB sink flow control to RX transport protocol block
+ EB_TX_i : in t_wishbone_master_in; --! Streaming WB src flow control from TX transport protocol block
+ EB_TX_o : out t_wishbone_master_out; --! Streaming WB src to TX transport protocol block
+
+ skip_stb_o : out std_logic; --! Does a packet get discarded?
+ skip_stall_i: in std_logic;
+
+ WB_config_i : in t_wishbone_slave_in; --! WB V4 interface to WB interconnect/device(s)
+ WB_config_o : out t_wishbone_slave_out; --! WB V4 interface to WB interconnect/device(s)
+ WB_master_i : in t_wishbone_master_in; --! WB V4 interface to WB interconnect/device(s)
+ WB_master_o : out t_wishbone_master_out; --! WB V4 interface to WB interconnect/device(s)
+
+ my_mac_o : out std_logic_vector(47 downto 0);
+ my_ip_o : out std_logic_vector(31 downto 0);
+ my_port_o : out std_logic_vector(15 downto 0));
+end eb_slave_top;
+
+architecture rtl of eb_slave_top is
+ signal rstn_i : std_logic;
+
+ signal errreg : std_logic_vector(63 downto 0);
+ signal rx_stall : std_logic;
+
+ signal fsm_tag_stb : std_logic;
+ signal fsm_tag_dat : t_tag;
+ signal tag_fsm_full : std_logic;
+ signal fsm_pass_stb : std_logic;
+ signal fsm_pass_dat : t_wishbone_data;
+ signal pass_fsm_full : std_logic;
+ signal fsm_cfg_stb : std_logic;
+ signal fsm_cfg_adr : t_wishbone_address;
+ signal cfg_fsm_full : std_logic;
+ signal fsm_wbm_stb : std_logic;
+ signal wbm_fsm_full : std_logic;
+ signal wbm_fsm_busy : std_logic;
+
+ signal mux_tag_pop : std_logic;
+ signal tag_mux_dat : t_tag;
+ signal tag_mux_empty : std_logic;
+ signal mux_pass_pop : std_logic;
+ signal pass_mux_dat : t_wishbone_data;
+ signal pass_mux_empty : std_logic;
+ signal mux_cfg_pop : std_logic;
+ signal cfg_mux_dat : t_wishbone_data;
+ signal cfg_mux_empty : std_logic;
+ signal mux_wbm_pop : std_logic;
+ signal wbm_mux_dat : t_wishbone_data;
+ signal wbm_mux_empty : std_logic;
+
+begin
+
+ rstn_i <= nRst_i;
+
+ EB_RX_o.ack <= EB_RX_i.cyc and EB_RX_i.stb and not rx_stall;
+ EB_RX_o.err <= '0';
+ EB_RX_o.rty <= '0';
+ EB_RX_o.int <= '0';
+ EB_RX_o.stall <= rx_stall;
+ EB_RX_o.dat <= (others => '0');
+
+ fsm : eb_slave_fsm
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ rx_cyc_i => EB_RX_i.cyc,
+ rx_stb_i => EB_RX_i.stb,
+ rx_dat_i => EB_RX_i.dat,
+ rx_stall_o => rx_stall,
+ tag_stb_o => fsm_tag_stb,
+ tag_dat_o => fsm_tag_dat,
+ tag_full_i => tag_fsm_full,
+ pass_stb_o => fsm_pass_stb,
+ pass_dat_o => fsm_pass_dat,
+ pass_full_i => pass_fsm_full,
+ cfg_stb_o => fsm_cfg_stb,
+ cfg_adr_o => fsm_cfg_adr,
+ cfg_full_i => cfg_fsm_full,
+ wbm_stb_o => fsm_wbm_stb,
+ wbm_full_i => wbm_fsm_full,
+ wbm_busy_i => wbm_fsm_busy,
+ master_o => WB_master_o,
+ master_stall_i => WB_master_i.stall);
+
+ EB_TX_o.we <= '1';
+ EB_TX_o.sel <= (others => '1');
+ EB_TX_o.adr <= (others => '0');
+
+ mux : eb_tx_mux
+ port map (
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ tag_pop_o => mux_tag_pop,
+ tag_dat_i => tag_mux_dat,
+ tag_empty_i => tag_mux_empty,
+ pass_pop_o => mux_pass_pop,
+ pass_dat_i => pass_mux_dat,
+ pass_empty_i => pass_mux_empty,
+ cfg_pop_o => mux_cfg_pop,
+ cfg_dat_i => cfg_mux_dat,
+ cfg_empty_i => cfg_mux_empty,
+ wbm_pop_o => mux_wbm_pop,
+ wbm_dat_i => wbm_mux_dat,
+ wbm_empty_i => wbm_mux_empty,
+ skip_stb_o => skip_stb_o,
+ skip_stall_i => skip_stall_i,
+ tx_cyc_o => EB_TX_o.cyc,
+ tx_stb_o => EB_TX_o.stb,
+ tx_dat_o => EB_TX_o.dat,
+ tx_stall_i => EB_TX_i.stall);
+
+ tag : eb_tag_fifo
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ fsm_stb_i => fsm_tag_stb,
+ fsm_dat_i => fsm_tag_dat,
+ fsm_full_o => tag_fsm_full,
+ mux_pop_i => mux_tag_pop,
+ mux_dat_o => tag_mux_dat,
+ mux_empty_o => tag_mux_empty);
+
+ pass : eb_pass_fifo
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ fsm_stb_i => fsm_pass_stb,
+ fsm_dat_i => fsm_pass_dat,
+ fsm_full_o => pass_fsm_full,
+ mux_pop_i => mux_pass_pop,
+ mux_dat_o => pass_mux_dat,
+ mux_empty_o => pass_mux_empty);
+
+ cfg : eb_cfg_fifo
+ generic map(
+ g_sdb_address => g_sdb_address)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ errreg_i => errreg,
+ cfg_i => WB_config_i,
+ cfg_o => WB_config_o,
+ fsm_stb_i => fsm_cfg_stb,
+ fsm_adr_i => fsm_cfg_adr,
+ fsm_full_o => cfg_fsm_full,
+ mux_pop_i => mux_cfg_pop,
+ mux_dat_o => cfg_mux_dat,
+ mux_empty_o => cfg_mux_empty,
+ my_mac_o => my_mac_o,
+ my_ip_o => my_ip_o,
+ my_port_o => my_port_o);
+
+ wbm : eb_wbm_fifo
+ generic map(
+ g_timeout_cycles => g_timeout_cycles)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ errreg_o => errreg,
+ wb_i => WB_master_i,
+ fsm_stb_i => fsm_wbm_stb,
+ fsm_full_o => wbm_fsm_full,
+ fsm_busy_o => wbm_fsm_busy,
+ mux_pop_i => mux_wbm_pop,
+ mux_dat_o => wbm_mux_dat,
+ mux_empty_o => wbm_mux_empty);
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd
new file mode 100644
index 000000000..268c13ed1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_narrow.vhd
@@ -0,0 +1,150 @@
+--! @file eb_stream_narrow.vhd
+--! @brief Adapts the width of a wishbone data stream.
+--!
+--! Copyright (C) 2013 GSI Helmholtz Centre for Heavy Ion Research GmbH
+--!
+--! Fairly simple state-machine
+--!
+--! @author Wesley W. Terpstra <w.terpstra@gsi.de>
+--!
+--------------------------------------------------------------------------------
+--! This library is free software; you can redistribute it and/or
+--! modify it under the terms of the GNU Lesser General Public
+--! License as published by the Free Software Foundation; either
+--! version 3 of the License, or (at your option) any later version.
+--!
+--! This library is distributed in the hope that it will be useful,
+--! but WITHOUT ANY WARRANTY; without even the implied warranty of
+--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+--! Lesser General Public License for more details.
+--!
+--! You should have received a copy of the GNU Lesser General Public
+--! License along with this library. If not, see <http://www.gnu.org/licenses/>.
+--------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+use work.genram_pkg.all;
+
+-- Completely breaks/ignores: adr, sel, we, ack, err
+entity eb_stream_narrow is
+ generic(
+ g_slave_width : natural;
+ g_master_width : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out);
+end eb_stream_narrow;
+
+architecture rtl of eb_stream_narrow is
+
+ subtype t_index is unsigned(f_ceil_log2(g_slave_width/g_master_width)-1 downto 0);
+ constant c_max : t_index := to_unsigned(g_slave_width/g_master_width-1, t_index'length);
+ constant c_one : t_index := to_unsigned(1, t_index'length);
+ constant c_zero : t_index := (others => '0');
+
+ signal r_ack : std_logic;
+ signal r_cyc : std_logic;
+ signal r_drop : std_logic; -- need to report any cycle line drops
+ signal r_stb : std_logic;
+ signal r_last : std_logic; -- '1' when r_idx = 0
+ signal r_idx : t_index;
+ signal r_dat : std_logic_vector(g_master_width-1 downto 0);
+ signal s_stall : std_logic;
+ signal s_cyc_cases : std_logic_vector(2 downto 0);
+
+begin
+
+ assert (g_slave_width <= c_wishbone_data_width)
+ report "g_master_width can not exceed wishbone data width"
+ severity error;
+
+ assert (g_slave_width mod g_master_width = 0)
+ report "g_master_width must divide g_slave_width"
+ severity error;
+
+ assert (g_master_width < g_slave_width)
+ report "g_master_width must be < g_slave_width"
+ severity error;
+
+ -- Outputs
+ slave_o.ack <= r_ack;
+ slave_o.err <= '0';
+ slave_o.stall <= s_stall;
+ slave_o.dat <= (others => '0');
+
+ master_o.cyc <= r_cyc;
+ master_o.stb <= r_stb;
+ master_o.we <= '1';
+ master_o.adr <= (others => '0');
+ master_o.dat(c_wishbone_data_width-1 downto g_master_width) <= (others => '0');
+ master_o.dat(g_master_width-1 downto 0) <= r_dat;
+
+ output_sel : for i in t_wishbone_byte_select'range generate
+ master_o.sel(i) <= '1' when (i*8 < g_master_width) else '0';
+ end generate;
+
+ -- Actual logic
+ s_stall <= not r_last or master_i.stall or r_drop;
+ s_cyc_cases(2) <= r_drop;
+ s_cyc_cases(1) <= r_stb;
+ s_cyc_cases(0) <= slave_i.cyc;
+
+ main : process(clk_i, rst_n_i) is
+ begin
+ if rst_n_i = '0' then
+ r_ack <= '0';
+ r_cyc <= '0';
+ r_drop <= '0';
+ r_stb <= '0';
+ r_last <= '0';
+ r_idx <= c_max;
+ r_dat <= (others => '0');
+ elsif rising_edge(clk_i) then
+ r_ack <= slave_i.cyc and slave_i.stb and not s_stall;
+
+ -- Make sure we always report cycle line changes
+ case s_cyc_cases is
+ when "000" => r_cyc <= '0'; r_drop <= '0'; -- can end cycle immediately
+ when "001" => r_cyc <= '1'; r_drop <= '0'; -- start new cycle
+ when "010" => r_cyc <= '1'; r_drop <= '1'; -- report this!
+ when "011" => r_cyc <= '1'; r_drop <= '0'; -- operation in progress
+ when "100" => r_cyc <= '0'; r_drop <= '0'; -- reported!
+ when "101" => r_cyc <= '0'; r_drop <= '0'; -- reported!
+ when others => r_cyc <= '1'; r_drop <= '1'; -- wait for r_stb to fall
+ end case;
+
+ -- When strobing and stalled the process is blocked
+ if (r_stb and master_i.stall) = '0' then
+ -- Steal data from the stalled request
+ r_dat <= slave_i.dat((to_integer(r_idx)+1)*g_master_width-1 downto to_integer(r_idx)*g_master_width);
+ -- If the slave has no new data for us, stop strobing
+ if r_idx = c_max and (slave_i.cyc and slave_i.stb and not r_drop) = '0' then
+ r_stb <= '0';
+ else
+ r_stb <= '1';
+ if r_idx = c_one then
+ r_last <= '1';
+ else
+ r_last <= '0';
+ end if;
+ if r_idx = c_zero then
+ r_idx <= c_max;
+ else
+ r_idx <= r_idx - 1;
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd
new file mode 100644
index 000000000..049646600
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_stream_widen.vhd
@@ -0,0 +1,145 @@
+--! @file eb_stream_adapt.vhd
+--! @brief Adapts the width of a wishbone data stream.
+--!
+--! Copyright (C) 2013 GSI Helmholtz Centre for Heavy Ion Research GmbH
+--!
+--! Fairly simple state-machine
+--!
+--! @author Wesley W. Terpstra <w.terpstra@gsi.de>
+--!
+--------------------------------------------------------------------------------
+--! This library is free software; you can redistribute it and/or
+--! modify it under the terms of the GNU Lesser General Public
+--! License as published by the Free Software Foundation; either
+--! version 3 of the License, or (at your option) any later version.
+--!
+--! This library is distributed in the hope that it will be useful,
+--! but WITHOUT ANY WARRANTY; without even the implied warranty of
+--! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+--! Lesser General Public License for more details.
+--!
+--! You should have received a copy of the GNU Lesser General Public
+--! License along with this library. If not, see <http://www.gnu.org/licenses/>.
+--------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+use work.genram_pkg.all;
+
+-- Completely breaks/ignores: adr, sel, we, ack, err
+entity eb_stream_widen is
+ generic(
+ g_slave_width : natural;
+ g_master_width : natural);
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out);
+end eb_stream_widen;
+
+architecture rtl of eb_stream_widen is
+
+ subtype t_index is unsigned(f_ceil_log2(g_master_width/g_slave_width)-1 downto 0);
+ constant c_max : t_index := to_unsigned(g_master_width/g_slave_width-1, t_index'length);
+ constant c_zero : t_index := (others => '0');
+
+ signal r_ack : std_logic;
+ signal r_cyc : std_logic;
+ signal r_drop : std_logic; -- need to report any cycle line drops
+ signal r_stb : std_logic;
+ signal r_idx : t_index;
+ signal r_dat : t_wishbone_data;
+ signal s_stall : std_logic;
+ signal s_cyc_cases : std_logic_vector(2 downto 0);
+
+begin
+
+ assert (g_master_width <= c_wishbone_data_width)
+ report "g_master_width can not exceed wishbone data width"
+ severity error;
+
+ assert (g_master_width mod g_slave_width = 0)
+ report "g_slave_width must divide g_master_width"
+ severity error;
+
+ assert (g_master_width > g_slave_width)
+ report "g_slave_width must be < g_master_width"
+ severity error;
+
+ -- Outputs
+ slave_o.ack <= r_ack;
+ slave_o.err <= '0';
+ slave_o.stall <= s_stall;
+ slave_o.dat <= (others => '0');
+
+ master_o.cyc <= r_cyc;
+ master_o.stb <= r_stb;
+ master_o.we <= '1';
+ master_o.adr <= (others => '0');
+ master_o.dat <= r_dat;
+
+ output_sel : for i in t_wishbone_byte_select'range generate
+ master_o.sel(i) <= '1' when (i*8 < g_master_width) else '0';
+ end generate;
+
+ -- Actual logic
+ s_stall <= (r_stb and master_i.stall) or r_drop;
+ s_cyc_cases(2) <= r_drop;
+ s_cyc_cases(1) <= r_stb;
+ s_cyc_cases(0) <= slave_i.cyc;
+
+ main : process(clk_i, rst_n_i) is
+ begin
+ if rst_n_i = '0' then
+ r_ack <= '0';
+ r_cyc <= '0';
+ r_drop <= '0';
+ r_stb <= '0';
+ r_idx <= c_max;
+ r_dat <= (others => '0');
+ elsif rising_edge(clk_i) then
+ r_ack <= slave_i.cyc and slave_i.stb and not s_stall;
+
+ -- Make sure we always report cycle line changes
+ case s_cyc_cases is
+ when "000" => r_cyc <= '0'; r_drop <= '0'; -- can end cycle immediately
+ when "001" => r_cyc <= '1'; r_drop <= '0'; -- start new cycle
+ when "010" => r_cyc <= '1'; r_drop <= '1'; -- report this!
+ when "011" => r_cyc <= '1'; r_drop <= '0'; -- operation in progress
+ when "100" => r_cyc <= '0'; r_drop <= '0'; -- reported!
+ when "101" => r_cyc <= '0'; r_drop <= '0'; -- reported!
+ when others => r_cyc <= '1'; r_drop <= '1'; -- wait for r_stb to fall
+ end case;
+
+ -- Transfer done?
+ if (r_stb and not master_i.stall) = '1' then
+ r_stb <= '0';
+ end if;
+
+ -- Did the slave push us data?
+ if slave_i.cyc = '0' then
+ r_idx <= c_max; -- reset counter to restore alignment
+ -- leave r_stb/r_dat unchanged!
+ elsif (slave_i.stb and not s_stall) = '1' then
+ r_dat(((to_integer(r_idx)+1)*g_slave_width)-1 downto to_integer(r_idx)*g_slave_width) <=
+ slave_i.dat(g_slave_width-1 downto 0);
+ if r_idx = c_zero then
+ r_idx <= c_max;
+ r_stb <= '1';
+ else
+ r_idx <= r_idx - 1;
+ end if;
+ end if;
+
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd
new file mode 100644
index 000000000..015e32bb0
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tag_fifo.vhd
@@ -0,0 +1,61 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Tag FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_tag_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Tracks which channel the MUX should pop next
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_tag_fifo is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ fsm_stb_i : in std_logic;
+ fsm_dat_i : in t_tag;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_tag;
+ mux_empty_o : out std_logic);
+end eb_tag_fifo;
+
+architecture rtl of eb_tag_fifo is
+begin
+
+ fifo : eb_fifo
+ generic map(
+ g_width => t_tag'length,
+ g_size => c_queue_depth)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ w_full_o => fsm_full_o,
+ w_push_i => fsm_stb_i,
+ w_dat_i => fsm_dat_i,
+ r_empty_o => mux_empty_o,
+ r_pop_i => mux_pop_i,
+ r_dat_o => mux_dat_o);
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd
new file mode 100644
index 000000000..2c2c4c345
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_tx_mux.vhd
@@ -0,0 +1,170 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone TX MUX
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_tux_mux.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Combines output streams into a packet
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_tx_mux is
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ tag_pop_o : out std_logic;
+ tag_dat_i : in t_tag;
+ tag_empty_i : in std_logic;
+
+ pass_pop_o : out std_logic;
+ pass_dat_i : in t_wishbone_data;
+ pass_empty_i : in std_logic;
+
+ cfg_pop_o : out std_logic;
+ cfg_dat_i : in t_wishbone_data;
+ cfg_empty_i : in std_logic;
+
+ wbm_pop_o : out std_logic;
+ wbm_dat_i : in t_wishbone_data;
+ wbm_empty_i : in std_logic;
+
+ skip_stb_o : out std_logic;
+ skip_stall_i : in std_logic;
+
+ tx_cyc_o : out std_logic;
+ tx_stb_o : out std_logic;
+ tx_dat_o : out t_wishbone_data;
+ tx_stall_i : in std_logic);
+end eb_tx_mux;
+
+architecture rtl of eb_tx_mux is
+
+ signal r_skip : std_logic;
+ signal r_tx_cyc : std_logic;
+ signal r_tx_stb : std_logic;
+ signal s_can_tx : std_logic;
+ signal s_dat_mux : t_wishbone_data;
+ signal s_tag_mux : std_logic;
+ signal s_pass_mux : std_logic;
+ signal s_cfg_mux : std_logic;
+ signal s_wbm_mux : std_logic;
+ signal s_tag_pop : std_logic;
+ signal r_tag_valid : std_logic;
+ signal r_tag_value : t_tag;
+
+begin
+
+ -- We can write whenever TX is unstalled and/or not full
+ s_can_tx <= not ((r_tx_cyc and r_tx_stb and tx_stall_i) or (r_skip and skip_stall_i));
+
+ skip_stb_o <= r_skip;
+ tx_cyc_o <= r_tx_cyc;
+ tx_stb_o <= r_tx_stb;
+
+ tx_out : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_skip <= '0';
+ r_tx_cyc <= '0';
+ r_tx_stb <= '0';
+ tx_dat_o <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if s_can_tx = '1' then -- is prior operation complete?
+ r_tx_stb <= not s_tag_mux and r_tag_valid;
+ r_skip <= '0';
+ tx_dat_o <= s_dat_mux;
+ -- Control the TX cycle line
+ if r_tag_valid = '1' then
+ case r_tag_value is
+ when c_tag_drop_tx => r_tx_cyc <= '0';
+ when c_tag_pass_tx => r_tx_cyc <= '1';
+ when c_tag_skip_tx => r_skip <= '1';
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ with r_tag_value select
+ s_dat_mux <=
+ pass_dat_i when c_tag_pass_tx,
+ pass_dat_i when c_tag_pass_on,
+ cfg_dat_i when c_tag_cfg_req,
+ pass_dat_i when c_tag_cfg_ign,
+ wbm_dat_i when c_tag_wbm_req,
+ pass_dat_i when c_tag_wbm_ign,
+ (others => '-') when others; -- c_tag_skip_tx, c_tag_drop_tx
+
+ with r_tag_value select
+ s_tag_mux <=
+ pass_empty_i when c_tag_pass_tx,
+ pass_empty_i when c_tag_pass_on,
+ cfg_empty_i when c_tag_cfg_req,
+ (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign,
+ wbm_empty_i when c_tag_wbm_req,
+ (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign,
+ '0' when others; -- c_tag_skip_tx, c_tag_drop_tx
+
+ with r_tag_value select
+ s_pass_mux <=
+ pass_empty_i when c_tag_pass_tx,
+ pass_empty_i when c_tag_pass_on,
+ (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign,
+ (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign,
+ '1' when others; -- c_tag_skip_tx, c_tag_drop_tx, c_tag_cfg_req, c_tag_wbm_req
+
+ with r_tag_value select
+ s_cfg_mux <=
+ cfg_empty_i when c_tag_cfg_req,
+ (pass_empty_i or cfg_empty_i) when c_tag_cfg_ign,
+ '1' when others;
+
+ with r_tag_value select
+ s_wbm_mux <=
+ wbm_empty_i when c_tag_wbm_req,
+ (pass_empty_i or wbm_empty_i) when c_tag_wbm_ign,
+ '1' when others;
+
+ -- Pop the queue we fed into TX
+ pass_pop_o <= s_can_tx and r_tag_valid and not s_pass_mux;
+ cfg_pop_o <= s_can_tx and r_tag_valid and not s_cfg_mux;
+ wbm_pop_o <= s_can_tx and r_tag_valid and not s_wbm_mux;
+ s_tag_pop <= s_can_tx and r_tag_valid and not s_tag_mux;
+
+ -- Pop the tag FIFO if the register is empty/emptied
+ tag_pop_o <= not tag_empty_i and (s_tag_pop or not r_tag_valid);
+ tag_in : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_tag_valid <= '0';
+ r_tag_value <= c_tag_drop_tx;
+ elsif rising_edge(clk_i) then
+ if s_tag_pop = '1' or r_tag_valid = '0' then
+ r_tag_valid <= not tag_empty_i;
+ r_tag_value <= tag_dat_i;
+ end if;
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd
new file mode 100644
index 000000000..245863e42
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/eb_wbm_fifo.vhd
@@ -0,0 +1,171 @@
+------------------------------------------------------------------------------
+-- Title : Etherbone Wishbone Master FIFO
+-- Project : Etherbone Core
+------------------------------------------------------------------------------
+-- File : eb_wbm_fifo.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Buffers Wishbone requests to resulting data
+-------------------------------------------------------------------------------
+-- Copyright (c) 2013 GSI
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 1.0 terpstra Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.eb_internals_pkg.all;
+
+entity eb_wbm_fifo is
+ generic(
+ g_timeout_cycles : natural);
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+
+ errreg_o : out std_logic_vector(63 downto 0);
+ wb_i : in t_wishbone_master_in;
+
+ fsm_stb_i : in std_logic;
+ fsm_busy_o : out std_logic;
+ fsm_full_o : out std_logic;
+
+ mux_pop_i : in std_logic;
+ mux_dat_o : out t_wishbone_data;
+ mux_empty_o : out std_logic);
+end eb_wbm_fifo;
+
+architecture rtl of eb_wbm_fifo is
+
+ constant c_size : natural := c_queue_depth;
+ constant c_sbits : natural := f_ceil_log2(c_size);
+ constant c_tbits : natural := f_ceil_log2(g_timeout_cycles);
+
+ signal s_wb_i_rdy : std_logic; -- 1 when a strobe ackd
+ signal r_inflight : unsigned(c_sbits-1 downto 0); -- # unacked strobes
+ signal r_busy : std_logic; -- 1 when r_inflight > 0
+ signal r_queued : unsigned(c_sbits-1 downto 0); -- # unpoped strobes (>= r_inflight)
+ signal r_full : std_logic; -- 1 when r_queued > 0
+ signal r_timeout : unsigned(c_tbits-1 downto 0); -- counts downto 0 between acks
+ signal r_kill_ack : std_logic; -- 1 when r_timeout expires
+ signal r_errreg : std_logic_vector(63 downto 0); -- shifts in ack when data pops
+ signal s_ack : std_logic; -- ack of ready data
+
+begin
+
+ s_wb_i_rdy <= wb_i.ack or wb_i.err or wb_i.rty or r_kill_ack;
+
+ fsm_busy_o <= r_busy;
+ busy : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_busy <= '0';
+ r_inflight <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if fsm_stb_i = '1' then
+ if s_wb_i_rdy = '1' then -- push+pop
+ r_inflight <= r_inflight;
+ else -- push
+ r_busy <= '1';
+ r_inflight <= r_inflight + 1;
+ end if;
+ else
+ if s_wb_i_rdy = '1' then -- pop
+ if r_inflight = 1 then
+ r_busy <= '0';
+ end if;
+ r_inflight <= r_inflight - 1;
+ else -- noop
+ r_inflight <= r_inflight;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ fsm_full_o <= r_full;
+ full : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_full <= '0';
+ r_queued <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if fsm_stb_i = '1' then
+ if mux_pop_i = '1' then -- push+pop
+ r_queued <= r_queued;
+ else -- push
+ if r_queued = c_size-1 then
+ r_full <= '1';
+ end if;
+ r_queued <= r_queued + 1;
+ end if;
+ else
+ if mux_pop_i = '1' then -- pop
+ r_full <= '0';
+ r_queued <= r_queued - 1;
+ else -- noop
+ r_queued <= r_queued;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ kill_ack : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_kill_ack <= '0';
+ r_timeout <= to_unsigned(g_timeout_cycles, r_timeout'length);
+ elsif rising_edge(clk_i) then
+ if s_wb_i_rdy = '1' or r_busy = '0' then -- ackd?
+ r_kill_ack <= '0';
+ r_timeout <= to_unsigned(g_timeout_cycles, r_timeout'length);
+ else
+ if r_timeout = 1 then
+ r_kill_ack <= '1'; -- causes s_wb_i_rdy next cycle
+ end if;
+ r_timeout <= r_timeout - 1;
+ end if;
+ end if;
+ end process;
+
+ datfifo : eb_fifo
+ generic map(
+ g_width => c_wishbone_data_width+1,
+ g_size => c_size)
+ port map(
+ clk_i => clk_i,
+ rstn_i => rstn_i,
+ w_full_o => open,
+ w_push_i => s_wb_i_rdy,
+ w_dat_i(t_wishbone_data'range) => wb_i.dat,
+ w_dat_i(t_wishbone_data'length) => wb_i.ack,
+ r_empty_o => mux_empty_o,
+ r_pop_i => mux_pop_i,
+ r_dat_o(t_wishbone_data'range) => mux_dat_o,
+ r_dat_o(t_wishbone_data'length) => s_ack);
+
+ -- Shift the error register during data pop
+ -- This ensures that it reflects state synchronous to the TX path
+ errreg_o <= r_errreg;
+ errreg : process(rstn_i, clk_i) is
+ begin
+ if rstn_i = '0' then
+ r_errreg <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if mux_pop_i = '1' then
+ r_errreg <= r_errreg(r_errreg'left-1 downto 0) & (not s_ack);
+ end if;
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd
new file mode 100644
index 000000000..394b1e878
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/etherbone-core/hdl/eb_slave_core/etherbone_pkg.vhd
@@ -0,0 +1,168 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+
+package etherbone_pkg is
+ constant c_etherbone_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"4", --32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"0000000000000651", -- GSI
+ device_id => x"68202b22",
+ version => x"00000001",
+ date => x"20130211",
+ name => "Etherbone-Config ")));
+
+ constant c_ebm_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"0000000000ffffff",
+ product => (
+ vendor_id => x"0000000000000651", -- GSI
+ device_id => x"00000815",
+ version => x"00000002",
+ date => x"20140615",
+ name => "Etherbone_Master ")));
+
+ function f_hi_adr_bits(ebm : t_sdb_device) return natural;
+
+
+ component eb_raw_slave is
+ generic(
+ g_sdb_address : std_logic_vector(63 downto 0);
+ g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz
+ g_bus_width : natural);
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ snk_i : in t_wishbone_slave_in;
+ snk_o : out t_wishbone_slave_out;
+ src_o : out t_wishbone_master_out;
+ src_i : in t_wishbone_master_in;
+ cfg_slave_o : out t_wishbone_slave_out;
+ cfg_slave_i : in t_wishbone_slave_in;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in);
+ end component;
+
+ component eb_master_slave_wrapper is
+ generic(
+ g_with_master : boolean := false;
+
+ g_ebs_sdb_address : std_logic_vector(63 downto 0);
+ g_ebs_timeout_cycles : natural := 6250000;
+ g_ebs_mtu : natural := 1500;
+
+ g_ebm_adr_bits_hi : natural := f_hi_adr_bits(c_ebm_sdb)
+
+ );
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+
+ --to wr core, ext wrf if
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+
+ --ebs
+ ebs_cfg_slave_o : out t_wishbone_slave_out;
+ ebs_cfg_slave_i : in t_wishbone_slave_in;
+ ebs_wb_master_o : out t_wishbone_master_out;
+ ebs_wb_master_i : in t_wishbone_master_in;
+
+ --ebm (optional)
+ ebm_wb_slave_i : in t_wishbone_slave_in;
+ ebm_wb_slave_o : out t_wishbone_slave_out
+
+ );
+ end component;
+
+ component eb_ethernet_slave is
+ generic(
+ g_sdb_address : std_logic_vector(63 downto 0);
+ g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz
+ g_mtu : natural := 1500);
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+ cfg_slave_o : out t_wishbone_slave_out;
+ cfg_slave_i : in t_wishbone_slave_in;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in);
+ end component;
+
+ -- Backwards compatability component; use eb_ethernet_slave
+ component eb_slave_core is
+ generic(
+ g_sdb_address : std_logic_vector(63 downto 0);
+ g_timeout_cycles : natural := 6250000; -- 100 ms at 62.5MHz
+ g_mtu : natural := 1500);
+ port(
+ clk_i : in std_logic;
+ nRst_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+ cfg_slave_o : out t_wishbone_slave_out;
+ cfg_slave_i : in t_wishbone_slave_in;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in);
+ end component;
+
+ component eb_master_top is
+generic(g_adr_bits_hi : natural := 8;
+ g_mtu : natural := 32);
+port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ framer_in : out t_wishbone_slave_in;
+ framer_out : out t_wishbone_slave_out;
+
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out
+);
+end component;
+
+
+
+end etherbone_pkg;
+
+package body etherbone_pkg is
+
+ -- gets correct number of high address bits from ebm sdb
+ function f_hi_adr_bits(ebm : t_sdb_device) return natural is
+ variable ret : natural := 2;
+ variable len : natural;
+ begin
+ len := f_hot_to_bin(ebm.sdb_component.addr_last);
+ ret := c_wishbone_address_width - (len - 2);
+ return ret;
+ end f_hi_adr_bits;
+
+end etherbone_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd
new file mode 100644
index 000000000..e7d6b6665
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_crc_gen.vhd
@@ -0,0 +1,280 @@
+----------------------------------------------------------------------
+---- ----
+---- Ultimate CRC. ----
+---- ----
+---- This file is part of the ultimate CRC projectt ----
+---- http://www.opencores.org/cores/ultimate_crc/ ----
+---- ----
+---- Description ----
+---- CRC generator/checker, parallel implementation. ----
+---- ----
+---- ----
+---- To Do: ----
+---- - ----
+---- ----
+---- Author(s): ----
+---- - Geir Drange, gedra@opencores.org ----
+---- ----
+----------------------------------------------------------------------
+---- ----
+---- Copyright (C) 2005 Authors and OPENCORES.ORG ----
+---- ----
+---- This source file may be used and distributed without ----
+---- restriction provided that this copyright statement is not ----
+---- removed from the file and that any derivative work contains ----
+---- the original copyright notice and the associated disclaimer. ----
+---- ----
+---- This source 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.0 of the License, or (at your option) any ----
+---- later version. ----
+---- ----
+---- This source 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 source; if not, download it ----
+---- from http://www.gnu.org/licenses/gpl.txt ----
+---- ----
+----------------------------------------------------------------------
+--
+-- CVS Revision History
+--
+-- $Log: ucrc_par.vhd,v $
+-- Revision 1.1 2005/05/09 15:58:38 gedra
+-- Parallel implementation
+--
+-- Modified by T.W. for use in GenCores library
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use work.gencores_pkg.all;
+
+entity gc_crc_gen is
+ generic (
+-- polynomial of our CRC generator
+ g_polynomial : std_logic_vector := x"04C11DB7";
+-- initial (after-reset) value of CRC
+ g_init_value : std_logic_vector := x"ffffffff";
+-- residual value of CRC when matched
+ g_residue : std_logic_vector := x"38fb2284";
+-- width of full data input word
+ g_data_width : integer range 2 to 256 := 16;
+-- width of smaller-than-full data input word
+ g_half_width : integer range 2 to 256 := 8;
+-- use synchronous reset when 1
+ g_sync_reset : integer range 0 to 1 := 0;
+-- dual-width mode (g_data_width - wide input word when 1 and g_half_width input
+-- word when 0)
+ g_dual_width : integer range 0 to 1 := 0;
+-- if true, match_o output is registered, otherwise it's driven combinatorially
+ g_registered_match_output : boolean := true;
+ g_registered_crc_output : boolean := true);
+ port (
+ clk_i : in std_logic; -- clock
+ rst_i : in std_logic; -- reset, active high
+ en_i : in std_logic; -- enable input, active high
+ half_i : in std_logic; -- 1: input word has g_half_width bits
+ -- 0: input word has g_data_width bits
+
+ data_i : in std_logic_vector(g_data_width - 1 downto 0); -- data input
+ restart_i : in std_logic := '0';
+
+ match_o : out std_logic; -- CRC match flag: 1 - CRC matches
+
+ crc_o : out std_logic_vector(g_polynomial'length - 1 downto 0)); -- CRC
+ -- output value
+end gc_crc_gen;
+
+architecture rtl of gc_crc_gen is
+
+ function f_reverse_vector (a : in std_logic_vector)
+ return std_logic_vector is
+ variable v_result : std_logic_vector(a'reverse_range);
+ begin
+ for i in a'range loop
+ v_result(i) := a(i);
+ end loop;
+ return v_result;
+ end;
+
+ function f_reverse_bytes (a : in std_logic_vector)
+ return std_logic_vector is
+ variable tmp : std_logic_vector(a'length-1 downto 0);
+ variable v_result : std_logic_vector(a'length-1 downto 0);
+ begin
+ tmp := a;
+ for i in tmp'range loop
+ v_result(i) := tmp(((tmp'length/8-1) - i/8)*8 + (i mod 8));
+ end loop;
+ return v_result;
+ end;
+
+
+ constant msb : integer := g_polynomial'length - 1;
+ constant init_msb : integer := g_init_value'length - 1;
+ constant p : std_logic_vector(msb downto 0) := g_polynomial;
+ constant dw : integer := g_data_width;
+ constant pw : integer := g_polynomial'length;
+ type fb_array is array (dw downto 1) of std_logic_vector(msb downto 0);
+ type dmsb_array is array (dw downto 1) of std_logic_vector(msb downto 1);
+ signal crca : fb_array;
+ signal da, ma : dmsb_array;
+ signal crc : std_logic_vector(msb downto 0);
+ signal arst, srst : std_logic;
+
+
+ signal data_i2 : std_logic_vector(g_data_width-1 downto 0);
+ signal en_d0 : std_logic;
+ signal crc_cur, crc_next : std_logic_vector(g_polynomial'length-1 downto 0);
+
+
+begin
+
+-- Parameter checking: Invalid generics will abort simulation/synthesis
+ PCHK1 : if msb /= init_msb generate
+ process
+ begin
+ report "g_polynomial and g_init_value vectors must be equal length!"
+ severity failure;
+ wait;
+ end process;
+ end generate PCHK1;
+
+ PCHK2 : if (msb < 3) or (msb > 31) generate
+ process
+ begin
+ report "g_polynomial must be of order 4 to 32!"
+ severity failure;
+ wait;
+ end process;
+ end generate PCHK2;
+
+ PCHK3 : if p(0) /= '1' generate -- LSB must be 1
+ process
+ begin
+ report "g_polynomial must have lsb set to 1!"
+ severity failure;
+ wait;
+ end process;
+ end generate PCHK3;
+
+ data_i2 <= f_reverse_bytes(data_i);
+
+ crc_cur <= g_init_value when restart_i = '1' else crc;
+
+-- Generate vector of each data bit
+ CA : for i in 1 to dw generate -- data bits
+ DAT : for j in 1 to msb generate
+ da(i)(j) <= data_i2(i - 1);
+ end generate DAT;
+ end generate CA;
+
+-- Generate vector of each CRC MSB
+ MS0 : for i in 1 to msb generate
+ ma(1)(i) <= crc_cur(msb);
+ end generate MS0;
+ MSP : for i in 2 to dw generate
+ MSU : for j in 1 to msb generate
+ ma(i)(j) <= crca(i - 1)(msb);
+ end generate MSU;
+ end generate MSP;
+
+-- Generate feedback matrix
+ crca(1)(0) <= da(1)(1) xor crc_cur(msb);
+ crca(1)(msb downto 1) <= crc_cur(msb - 1 downto 0) xor ((da(1) xor ma(1)) and p(msb downto 1));
+ FB : for i in 2 to dw generate
+ crca(i)(0) <= da(i)(1) xor crca(i - 1)(msb);
+ crca(i)(msb downto 1) <= crca(i - 1)(msb - 1 downto 0) xor
+ ((da(i) xor ma(i)) and p(msb downto 1));
+ end generate FB;
+
+-- Reset signal
+ SR : if g_sync_reset = 1 generate
+ srst <= rst_i;
+ arst <= '0';
+ end generate SR;
+ AR : if g_sync_reset = 0 generate
+ srst <= '0';
+ arst <= rst_i;
+ end generate AR;
+
+
+ CRCP : process (clk_i, arst)
+ begin
+ if arst = '1' then -- async. reset
+ crc <= g_init_value;
+ elsif rising_edge(clk_i) then
+ if srst = '1' then -- sync. reset
+ crc <= g_init_value;
+ elsif en_i = '1' then
+
+ if(half_i = '1' and g_dual_width = 1) then
+ crc <= crca(g_half_width);
+ else
+ crc <= crca(g_data_width);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_crc_next : process(crc, half_i, crca)
+ begin
+ if(g_registered_crc_output) then
+ crc_next <= f_reverse_bytes(f_reverse_vector(not crc));
+ else
+ if(half_i = '1' and g_dual_width = 1) then
+ crc_next <= f_reverse_bytes(f_reverse_vector(not crca(g_half_width)));
+ else
+ crc_next <= f_reverse_bytes(f_reverse_vector(not crca(g_data_width)));
+ end if;
+ end if;
+ end process;
+
+ p_crc_output : process(crc_next, crc, en_i)
+ begin
+ if(g_registered_crc_output) then
+ crc_o <= crc_next;
+ elsif(en_i = '1') then
+ crc_o <= crc_next;
+ else
+ crc_o <= f_reverse_bytes(f_reverse_vector(not crc));
+ end if;
+ end process;
+
+ gen_reg_match_output : if(g_registered_match_output) generate
+
+ match_gen : process (clk_i, arst)
+ begin
+ if arst = '1' then -- async. reset
+ match_o <= '0';
+ en_d0 <= '0';
+ elsif rising_edge(clk_i) then
+ if srst = '1' then -- sync. reset
+ match_o <= '0';
+ en_d0 <= '0';
+ else
+ en_d0 <= en_i;
+
+ if(en_d0 = '1') then
+ if crc_next = g_residue then
+ match_o <= '1';
+ else
+ match_o <= '0';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ end generate gen_reg_match_output;
+
+ gen_comb_match_output : if (not g_registered_match_output) generate
+ match_o <= '1' when crc_next = g_residue else '0';
+ end generate gen_comb_match_output;
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd
new file mode 100644
index 000000000..939d516a4
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_extend_pulse.vhd
@@ -0,0 +1,93 @@
+-------------------------------------------------------------------------------
+-- Title : Pulse width extender
+-- Project : General Cores library
+-------------------------------------------------------------------------------
+-- File : gc_extend_pulse.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Created : 2009-09-01
+-- Last update: 2012-06-19
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description:
+-- Synchronous pulse extender. Generates a pulse of programmable width upon
+-- detection of a rising edge in the input.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-09-01 0.9 twlostow Created
+-- 2011-04-18 1.0 twlostow Added comments & header
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.NUMERIC_STD.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+
+entity gc_extend_pulse is
+
+ generic (
+ -- output pulse width in clk_i cycles
+ g_width : natural := 1000
+ );
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ -- input pulse (synchronou to clk_i)
+ pulse_i : in std_logic;
+ -- extended output pulse
+ extended_o : out std_logic := '0');
+end gc_extend_pulse;
+
+architecture rtl of gc_extend_pulse is
+
+ signal cntr : unsigned(f_log2_size(g_width)-1 downto 0);
+ signal extended_int : std_logic;
+
+begin -- rtl
+
+ extend : process (clk_i, rst_n_i)
+ begin -- process extend
+ if rst_n_i = '0' then -- asynchronous reset (active low)
+ extended_int <= '0';
+ cntr <= (others => '0');
+ elsif clk_i'event and clk_i = '1' then -- rising clock edge
+ if(pulse_i = '1') then
+ extended_int <= '1';
+ cntr <= to_unsigned(g_width - 2, cntr'length);
+ elsif cntr /= to_unsigned(0, cntr'length) then
+ cntr <= cntr - 1;
+ else
+ extended_int <= '0';
+ end if;
+ end if;
+ end process extend;
+
+ extended_o <= pulse_i or extended_int;
+
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd
new file mode 100644
index 000000000..39b15afc7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_frequency_meter.vhd
@@ -0,0 +1,130 @@
+-------------------------------------------------------------------------------
+-- Title : Frequency meter
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : gc_frequency_meter.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2012-2015 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+
+entity gc_frequency_meter is
+ generic(
+ g_with_internal_timebase : boolean := true;
+ g_clk_sys_freq : integer;
+ g_counter_bits : integer := 32);
+
+ port(
+ clk_sys_i : in std_logic;
+ clk_in_i : in std_logic;
+ rst_n_i : in std_logic;
+ pps_p1_i : in std_logic;
+ freq_o : out std_logic_vector(g_counter_bits-1 downto 0);
+ freq_valid_o : out std_logic
+ );
+
+end gc_frequency_meter;
+
+
+architecture behavioral of gc_frequency_meter is
+
+ signal gate_pulse, gate_pulse_synced : std_logic;
+
+ signal cntr_gate : unsigned(g_counter_bits-1 downto 0);
+ signal cntr_meas : unsigned(g_counter_bits-1 downto 0);
+ signal freq_reg : std_logic_vector(g_counter_bits-1 downto 0);
+
+begin
+
+ gen_internal_timebase : if(g_with_internal_timebase = true) generate
+
+ p_gate_counter : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ cntr_gate <= (others => '0');
+ gate_pulse <= '0';
+ else
+ if(cntr_gate = g_clk_sys_freq-1) then
+ cntr_gate <= (others => '0');
+ gate_pulse <= '1';
+ else
+ cntr_gate <= cntr_gate + 1;
+ gate_pulse <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ U_Sync_Gate : gc_pulse_synchronizer
+ port map (
+ clk_in_i => clk_sys_i,
+ clk_out_i => clk_in_i,
+ rst_n_i => rst_n_i,
+ d_ready_o => freq_valid_o,
+ d_p_i => gate_pulse,
+ q_p_o => gate_pulse_synced);
+
+ end generate gen_internal_timebase;
+
+ gen_external_timebase : if(g_with_internal_timebase = false) generate
+
+ U_Sync_Gate : gc_pulse_synchronizer
+ port map (
+ clk_in_i => clk_sys_i,
+ clk_out_i => clk_in_i,
+ rst_n_i => rst_n_i,
+ d_ready_o => freq_valid_o,
+ d_p_i => pps_p1_i,
+ q_p_o => gate_pulse_synced);
+
+ end generate gen_external_timebase;
+
+
+ p_freq_counter : process (clk_in_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then -- asynchronous reset (active low)
+ cntr_meas <= (others => '0');
+ freq_reg <= (others => '0');
+ elsif rising_edge(clk_in_i) then
+
+ if(gate_pulse_synced = '1') then
+ freq_reg <= std_logic_vector(cntr_meas);
+ cntr_meas <= (others => '0');
+ else
+ cntr_meas <= cntr_meas + 1;
+ end if;
+ end if;
+ end process p_freq_counter;
+
+ freq_o <= freq_reg;
+end behavioral;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd
new file mode 100644
index 000000000..1707450d1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer.vhd
@@ -0,0 +1,134 @@
+-------------------------------------------------------------------------------
+-- Title : Pulse synchronizer
+-- Project : General Cores Library
+-------------------------------------------------------------------------------
+-- File : gc_pulse_synchronizer.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-01-10
+-- Last update: 2012-08-29
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Full feedback pulse synchronizer (works independently of the
+-- input/output clock domain frequency ratio)
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2012-01-12 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.gencores_pkg.all;
+
+entity gc_pulse_synchronizer is
+
+ port (
+ -- pulse input clock
+ clk_in_i : in std_logic;
+ -- pulse output clock
+ clk_out_i : in std_logic;
+ -- system reset (clk_in_i domain)
+ rst_n_i : in std_logic;
+ -- pulse input ready (clk_in_i domain). When HI, a pulse coming to d_p_i will be
+ -- correctly transferred to q_p_o.
+ d_ready_o : out std_logic;
+ -- pulse input (clk_in_i domain)
+ d_p_i : in std_logic;
+ -- pulse output (clk_out_i domain)
+ q_p_o : out std_logic);
+
+end gc_pulse_synchronizer;
+
+architecture rtl of gc_pulse_synchronizer is
+
+ constant c_sync_stages : integer := 3;
+
+ signal ready, d_p_d0 : std_logic;
+
+ signal in_ext, out_ext : std_logic;
+ signal out_feedback : std_logic;
+
+ signal d_in2out : std_logic_vector(c_sync_stages-1 downto 0);
+ signal d_out2in : std_logic_vector(c_sync_stages-1 downto 0);
+
+begin -- rtl
+
+ process(clk_out_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ d_in2out <= (others => '0');
+ out_ext <= '0';
+ elsif rising_edge(clk_out_i) then
+ d_in2out <= d_in2out(c_sync_stages-2 downto 0) & in_ext;
+ out_ext <= d_in2out(c_sync_stages-1);
+ end if;
+ end process;
+
+
+ process(clk_in_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ d_out2in <= (others => '0');
+ elsif rising_edge(clk_in_i) then
+ d_out2in <= d_out2in(c_sync_stages-2 downto 0) & out_ext;
+ end if;
+ end process;
+
+ out_feedback <= d_out2in(c_sync_stages-1);
+
+ p_input_ack : process(clk_in_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ ready <= '1';
+ in_ext <= '0';
+ d_p_d0 <= '0';
+ elsif rising_edge(clk_in_i) then
+
+ d_p_d0 <= d_p_i;
+
+ if(ready = '1' and d_p_i = '1' and d_p_d0 = '0') then
+ in_ext <= '1';
+ ready <= '0';
+ elsif(in_ext = '1' and out_feedback = '1') then
+ in_ext <= '0';
+ elsif(in_ext = '0' and out_feedback = '0') then
+ ready <= '1';
+ end if;
+ end if;
+ end process;
+
+ p_drive_output : process(clk_out_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ q_p_o <= '0';
+ elsif rising_edge(clk_out_i) then
+ q_p_o <= not out_ext and d_in2out(c_sync_stages-1);
+ end if;
+ end process;
+
+ d_ready_o <= ready;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd
new file mode 100644
index 000000000..280c72bd8
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_pulse_synchronizer2.vhd
@@ -0,0 +1,132 @@
+-------------------------------------------------------------------------------
+-- Title : Pulse synchronizer
+-- Project : General Cores Library
+-------------------------------------------------------------------------------
+-- File : gc_pulse_synchronizer2.vhd
+-- Author : Tomasz Wlostowski, Wesley Terpstra
+-- Company : CERN BE-CO-HT
+-- Created : 2012-01-10
+-- Last update: 2012-08-29
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Full feedback pulse synchronizer (works independently of the
+-- input/output clock domain frequency ratio)
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2012-01-12 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.gencores_pkg.all;
+
+entity gc_pulse_synchronizer2 is
+ port (
+ -- pulse input clock
+ clk_in_i : in std_logic;
+ rst_in_n_i : in std_logic;
+ -- pulse output clock
+ clk_out_i : in std_logic;
+ rst_out_n_i : in std_logic;
+
+ -- pulse input ready (clk_in_i domain). When HI, a pulse coming to d_p_i will be
+ -- correctly transferred to q_p_o.
+ d_ready_o : out std_logic;
+ -- pulse input (clk_in_i domain)
+ d_p_i : in std_logic;
+ -- pulse output (clk_out_i domain)
+ q_p_o : out std_logic);
+
+end gc_pulse_synchronizer2;
+
+architecture rtl of gc_pulse_synchronizer2 is
+
+ constant c_sync_stages : integer := 3;
+
+ signal ready, d_p_d0 : std_logic;
+
+ signal in_ext, out_ext : std_logic;
+ signal out_feedback : std_logic;
+
+ signal d_in2out : std_logic_vector(c_sync_stages-1 downto 0);
+ signal d_out2in : std_logic_vector(c_sync_stages-1 downto 0);
+
+begin -- rtl
+
+ process(clk_out_i, rst_out_n_i)
+ begin
+ if rst_out_n_i = '0' then
+ d_in2out <= (others => '0');
+ out_ext <= '0';
+ elsif rising_edge(clk_out_i) then
+ d_in2out <= d_in2out(c_sync_stages-2 downto 0) & in_ext;
+ out_ext <= d_in2out(c_sync_stages-1);
+ end if;
+ end process;
+
+
+ process(clk_in_i, rst_in_n_i)
+ begin
+ if rst_in_n_i = '0' then
+ d_out2in <= (others => '0');
+ elsif rising_edge(clk_in_i) then
+ d_out2in <= d_out2in(c_sync_stages-2 downto 0) & out_ext;
+ end if;
+ end process;
+
+ out_feedback <= d_out2in(c_sync_stages-1);
+
+ p_input_ack : process(clk_in_i, rst_in_n_i)
+ begin
+ if rst_in_n_i = '0' then
+ ready <= '1';
+ in_ext <= '0';
+ d_p_d0 <= '0';
+ elsif rising_edge(clk_in_i) then
+
+ d_p_d0 <= d_p_i;
+
+ if(ready = '1' and d_p_i = '1' and d_p_d0 = '0') then
+ in_ext <= not in_ext;
+ ready <= '0';
+ elsif(in_ext = out_feedback) then
+ ready <= '1';
+ end if;
+ end if;
+ end process;
+
+ p_drive_output : process(clk_out_i, rst_out_n_i)
+ begin
+ if rst_out_n_i = '0' then
+ q_p_o <= '0';
+ elsif rising_edge(clk_out_i) then
+ q_p_o <= out_ext xor d_in2out(c_sync_stages-1);
+ end if;
+ end process;
+
+ d_ready_o <= ready;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd
new file mode 100644
index 000000000..e4fa0a493
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_reset.vhd
@@ -0,0 +1,87 @@
+-------------------------------------------------------------------------------
+-- Title : Reset synchronizer and generator
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : gc_reset.vhd
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+entity gc_reset is
+ generic(
+ g_clocks : natural := 1;
+ g_logdelay : natural := 10;
+ g_syncdepth : natural := 3);
+ port(
+ free_clk_i : in std_logic;
+ locked_i : in std_logic := '1'; -- All the PLL locked signals ANDed together
+ clks_i : in std_logic_vector(g_clocks-1 downto 0);
+ rstn_o : out std_logic_vector(g_clocks-1 downto 0));
+end gc_reset;
+
+architecture rtl of gc_reset is
+ subtype t_shifter is std_logic_vector(g_syncdepth-1 downto 0);
+ type t_shifters is array(natural range <>) of t_shifter;
+
+ signal shifters : t_shifters(g_clocks-1 downto 0) := (others => (others => '0')); -- start reset
+ signal locked_count : unsigned(g_logdelay-1 downto 0) := (others => '0');
+ signal master_rstn : std_logic := '0';
+begin
+ lock : process(free_clk_i, locked_i)
+ constant locked_done : unsigned(g_logdelay-1 downto 0) := (others => '1');
+ begin
+ -- Asynchronous reset
+ if locked_i = '0' then
+ master_rstn <= '0';
+ locked_count <= (others => '0');
+ else
+ if rising_edge(free_clk_i) then
+ if locked_count = locked_done then
+ master_rstn <= '1';
+ else
+ master_rstn <= '0';
+ locked_count <= locked_count + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- Generate the sync chains for each clock domain
+ syncs : for i in g_clocks-1 downto 0 generate
+ sync : process(clks_i(i))
+ begin
+ if rising_edge(clks_i(i)) then
+ shifters(i) <= master_rstn & shifters(i)(g_syncdepth-1 downto 1);
+ end if;
+ end process;
+ end generate;
+
+ -- Output the synchronized reset
+ rstn : for i in g_clocks-1 downto 0 generate
+ rstn_o(i) <= shifters(i)(0);
+ end generate;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd
new file mode 100644
index 000000000..6603c0297
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_ffs.vhd
@@ -0,0 +1,125 @@
+-------------------------------------------------------------------------------
+-- Title : Synchronizer chain
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : gc_sync_ffs.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-06-14
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL'87
+-------------------------------------------------------------------------------
+-- Description: Synchronizer chain and edge detector.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-06-14 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity gc_sync_ffs is
+ generic(
+ g_sync_edge : string := "positive"
+ );
+ port(
+ clk_i : in std_logic; -- clock from the destination clock domain
+ rst_n_i : in std_logic; -- reset
+ data_i : in std_logic; -- async input
+ synced_o : out std_logic; -- synchronized output
+ npulse_o : out std_logic; -- negative edge detect output (single-clock
+ -- pulse)
+ ppulse_o : out std_logic -- positive edge detect output (single-clock
+ -- pulse)
+ );
+end gc_sync_ffs;
+
+-- make Altera Quartus quiet regarding unknown attributes:
+-- altera message_off 10335
+
+architecture behavioral of gc_sync_ffs is
+ signal sync0, sync1, sync2 : std_logic;
+
+ attribute shreg_extract : string;
+ attribute shreg_extract of sync0 : signal is "no";
+ attribute shreg_extract of sync1 : signal is "no";
+ attribute shreg_extract of sync2 : signal is "no";
+
+ attribute keep : string;
+ attribute keep of sync0 : signal is "true";
+ attribute keep of sync1 : signal is "true";
+
+ -- synchronizer attribute for Vivado
+ attribute ASYNC_REG : string;
+ attribute ASYNC_REG of sync0 : signal is "true";
+ attribute ASYNC_REG of sync1 : signal is "true";
+ attribute ASYNC_REG of sync2 : signal is "true";
+
+begin
+
+
+ sync_posedge : if (g_sync_edge = "positive") generate
+ process(clk_i, rst_n_i)
+ begin
+ if(rst_n_i = '0') then
+ sync0 <= '0';
+ sync1 <= '0';
+ sync2 <= '0';
+ synced_o <= '0';
+ npulse_o <= '0';
+ ppulse_o <= '0';
+ elsif rising_edge(clk_i) then
+ sync0 <= data_i;
+ sync1 <= sync0;
+ sync2 <= sync1;
+ synced_o <= sync1;
+ npulse_o <= sync2 and not sync1;
+ ppulse_o <= not sync2 and sync1;
+ end if;
+ end process;
+ end generate sync_posedge;
+
+ sync_negedge : if(g_sync_edge = "negative") generate
+ process(clk_i, rst_n_i)
+ begin
+ if(rst_n_i = '0') then
+ sync0 <= '0';
+ sync1 <= '0';
+ sync2 <= '0';
+ synced_o <= '0';
+ npulse_o <= '0';
+ ppulse_o <= '0';
+ elsif falling_edge(clk_i) then
+ sync0 <= data_i;
+ sync1 <= sync0;
+ sync2 <= sync1;
+ synced_o <= sync1;
+ npulse_o <= sync2 and not sync1;
+ ppulse_o <= not sync2 and sync1;
+ end if;
+ end process;
+ end generate sync_negedge;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd
new file mode 100644
index 000000000..8d43ef443
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gc_sync_register.vhd
@@ -0,0 +1,88 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrized synchronizer
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : gc_sync_register.vhd
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2014-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- Modifications:
+-- 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch)
+-- * added ASYNC_REG attribute for better timing analysis/simulation
+-- in Xilinx tools
+--------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity gc_sync_register is
+ generic (
+ g_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_a_i : in std_logic;
+ d_i : in std_logic_vector(g_width-1 downto 0);
+ q_o : out std_logic_vector(g_width-1 downto 0));
+
+end gc_sync_register;
+
+-- make Altera Quartus quiet regarding unknown attributes:
+-- altera message_off 10335
+
+architecture rtl of gc_sync_register is
+
+ signal gc_sync_register_in : std_logic_vector(g_width-1 downto 0);
+ signal sync0, sync1 : std_logic_vector(g_width-1 downto 0);
+
+ attribute shreg_extract : string;
+ attribute shreg_extract of gc_sync_register_in : signal is "no";
+ attribute shreg_extract of sync0 : signal is "no";
+ attribute shreg_extract of sync1 : signal is "no";
+
+ attribute keep : string;
+ attribute keep of gc_sync_register_in : signal is "true";
+ attribute keep of sync0 : signal is "true";
+ attribute keep of sync1 : signal is "true";
+
+ attribute async_reg : string;
+ attribute async_reg of gc_sync_register_in : signal is "true";
+ attribute async_reg of sync0 : signal is "true";
+ attribute async_reg of sync1 : signal is "true";
+
+begin
+
+ process(clk_i, rst_n_a_i)
+ begin
+ if(rst_n_a_i = '0') then
+ sync1 <= (others => '0');
+ sync0 <= (others => '0');
+ elsif rising_edge(clk_i) then
+ sync0 <= gc_sync_register_in;
+ sync1 <= sync0;
+ end if;
+ end process;
+
+ gc_sync_register_in <= d_i;
+ q_o <= sync1;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd
new file mode 100644
index 000000000..4e6d39fe7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/common/gencores_pkg.vhd
@@ -0,0 +1,674 @@
+-------------------------------------------------------------------------------
+-- Title : General cores VHDL package
+-- Project : General Cores library
+-------------------------------------------------------------------------------
+-- File : gencores_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Theodor-Adrian Stana
+-- Matthieu Cattin
+-- Dimitrios Lampridis
+-- Company : CERN
+-- Created : 2009-09-01
+-- Last update: 2017-10-11
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description:
+-- Package incorporating simple VHDL modules and functions, which are used
+-- in the WR and other OHWR projects.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2016 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+
+package gencores_pkg is
+
+ --============================================================================
+ -- Component instantiations
+ --============================================================================
+
+ ------------------------------------------------------------------------------
+ -- Pulse extender
+ ------------------------------------------------------------------------------
+ component gc_extend_pulse
+ generic (
+ g_width : natural);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ pulse_i : in std_logic;
+ extended_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- CRC generator
+ ------------------------------------------------------------------------------
+ component gc_crc_gen
+ generic (
+ g_polynomial : std_logic_vector := x"04C11DB7";
+ g_init_value : std_logic_vector := x"ffffffff";
+ g_residue : std_logic_vector := x"38fb2284";
+ g_data_width : integer range 2 to 256 := 16;
+ g_half_width : integer range 2 to 256 := 8;
+ g_sync_reset : integer range 0 to 1 := 1;
+ g_dual_width : integer range 0 to 1 := 0;
+ g_registered_match_output : boolean := true;
+ g_registered_crc_output : boolean := true);
+ port (
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ en_i : in std_logic;
+ half_i : in std_logic;
+ restart_i : in std_logic := '0';
+ data_i : in std_logic_vector(g_data_width - 1 downto 0);
+ match_o : out std_logic;
+ crc_o : out std_logic_vector(g_polynomial'length - 1 downto 0));
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Moving average
+ ------------------------------------------------------------------------------
+ component gc_moving_average
+ generic (
+ g_data_width : natural;
+ g_avg_log2 : natural range 1 to 8);
+ port (
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ din_i : in std_logic_vector(g_data_width-1 downto 0);
+ dout_o : out std_logic_vector(g_data_width+g_avg_log2-1 downto 0);
+ dout_stb_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Delay line
+ ------------------------------------------------------------------------------
+ component gc_delay_line
+ generic (
+ g_delay : integer;
+ g_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_width -1 downto 0);
+ q_o : out std_logic_vector(g_width -1 downto 0);
+ ready_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- PI controller
+ ------------------------------------------------------------------------------
+ component gc_dual_pi_controller
+ generic (
+ g_error_bits : integer;
+ g_dacval_bits : integer;
+ g_output_bias : integer;
+ g_integrator_fracbits : integer;
+ g_integrator_overbits : integer;
+ g_coef_bits : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_sysclk_i : in std_logic;
+ phase_err_i : in std_logic_vector(g_error_bits-1 downto 0);
+ phase_err_stb_p_i : in std_logic;
+ freq_err_i : in std_logic_vector(g_error_bits-1 downto 0);
+ freq_err_stb_p_i : in std_logic;
+ mode_sel_i : in std_logic;
+ dac_val_o : out std_logic_vector(g_dacval_bits-1 downto 0);
+ dac_val_stb_p_o : out std_logic;
+ pll_pcr_enable_i : in std_logic;
+ pll_pcr_force_f_i : in std_logic;
+ pll_fbgr_f_kp_i : in std_logic_vector(g_coef_bits-1 downto 0);
+ pll_fbgr_f_ki_i : in std_logic_vector(g_coef_bits-1 downto 0);
+ pll_pbgr_p_kp_i : in std_logic_vector(g_coef_bits-1 downto 0);
+ pll_pbgr_p_ki_i : in std_logic_vector(g_coef_bits-1 downto 0));
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Serial 16-bit DAC interface (SPI/QSPI/MICROWIRE compatible)
+ ------------------------------------------------------------------------------
+ component gc_serial_dac
+ generic (
+ g_num_data_bits : integer;
+ g_num_extra_bits : integer;
+ g_num_cs_select : integer;
+ g_sclk_polarity : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ value_i : in std_logic_vector(g_num_data_bits-1 downto 0);
+ cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0);
+ load_i : in std_logic;
+ sclk_divsel_i : in std_logic_vector(2 downto 0);
+ dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0);
+ dac_sclk_o : out std_logic;
+ dac_sdata_o : out std_logic;
+ busy_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Synchronisation FF chain
+ ------------------------------------------------------------------------------
+ component gc_sync_ffs
+ generic (
+ g_sync_edge : string := "positive");
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ data_i : in std_logic;
+ synced_o : out std_logic;
+ npulse_o : out std_logic;
+ ppulse_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Pulse synchroniser
+ ------------------------------------------------------------------------------
+ component gc_pulse_synchronizer
+ port (
+ clk_in_i : in std_logic;
+ clk_out_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_ready_o : out std_logic;
+ d_p_i : in std_logic;
+ q_p_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Pulse synchroniser (with reset from both clock domains)
+ ------------------------------------------------------------------------------
+ component gc_pulse_synchronizer2 is
+ port (
+ clk_in_i : in std_logic;
+ rst_in_n_i : in std_logic;
+ clk_out_i : in std_logic;
+ rst_out_n_i : in std_logic;
+ d_ready_o : out std_logic;
+ d_p_i : in std_logic;
+ q_p_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Frequency meter
+ ------------------------------------------------------------------------------
+ component gc_frequency_meter
+ generic (
+ g_with_internal_timebase : boolean;
+ g_clk_sys_freq : integer;
+ g_counter_bits : integer);
+ port (
+ clk_sys_i : in std_logic;
+ clk_in_i : in std_logic;
+ rst_n_i : in std_logic;
+ pps_p1_i : in std_logic;
+ freq_o : out std_logic_vector(g_counter_bits-1 downto 0);
+ freq_valid_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Time-division multiplexer with round robin arbitration
+ ------------------------------------------------------------------------------
+ component gc_arbitrated_mux
+ generic (
+ g_num_inputs : integer;
+ g_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_num_inputs * g_width-1 downto 0);
+ d_valid_i : in std_logic_vector(g_num_inputs-1 downto 0);
+ d_req_o : out std_logic_vector(g_num_inputs-1 downto 0);
+ q_o : out std_logic_vector(g_width-1 downto 0);
+ q_valid_o : out std_logic;
+ q_input_id_o : out std_logic_vector(f_log2_size(g_num_inputs)-1 downto 0));
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Power-On reset generator
+ ------------------------------------------------------------------------------
+ component gc_reset is
+ generic(
+ g_clocks : natural := 1;
+ g_logdelay : natural := 10;
+ g_syncdepth : natural := 3);
+ port(
+ free_clk_i : in std_logic;
+ locked_i : in std_logic := '1'; -- All the PLL locked signals ANDed together
+ clks_i : in std_logic_vector(g_clocks-1 downto 0);
+ rstn_o : out std_logic_vector(g_clocks-1 downto 0));
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Power-On reset generator of synchronous single reset from multiple
+ -- asynchronous input reset signals
+ ------------------------------------------------------------------------------
+ component gc_single_reset_gen is
+ generic(
+ g_out_reg_depth : natural :=2;
+ g_rst_in_num : natural :=2);
+ port (
+ clk_i : in std_logic;
+ rst_signals_n_a_i : in std_logic_vector(g_rst_in_num-1 downto 0);
+ rst_n_o : out std_logic
+ );
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Round robin arbiter
+ ------------------------------------------------------------------------------
+ component gc_rr_arbiter
+ generic (
+ g_size : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ req_i : in std_logic_vector(g_size-1 downto 0);
+ grant_o : out std_logic_vector(g_size-1 downto 0);
+ grant_comb_o : out std_logic_vector(g_size-1 downto 0));
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Pack or unpack words
+ ------------------------------------------------------------------------------
+ component gc_word_packer
+ generic (
+ g_input_width : integer;
+ g_output_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_input_width-1 downto 0);
+ d_valid_i : in std_logic;
+ d_req_o : out std_logic;
+ flush_i : in std_logic := '0';
+ q_o : out std_logic_vector(g_output_width-1 downto 0);
+ q_valid_o : out std_logic;
+ q_req_i : in std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- Adder
+ ------------------------------------------------------------------------------
+ component gc_big_adder is
+ generic(
+ g_data_bits : natural := 64;
+ g_parts : natural := 4);
+ port(
+ clk_i : in std_logic;
+ stall_i : in std_logic := '0';
+ a_i : in std_logic_vector(g_data_bits-1 downto 0);
+ b_i : in std_logic_vector(g_data_bits-1 downto 0);
+ c_i : in std_logic := '0';
+ c1_o : out std_logic;
+ x2_o : out std_logic_vector(g_data_bits-1 downto 0);
+ c2_o : out std_logic);
+ end component;
+
+ ------------------------------------------------------------------------------
+ -- I2C slave
+ ------------------------------------------------------------------------------
+ constant c_i2cs_idle : std_logic_vector(1 downto 0) := "00";
+ constant c_i2cs_addr_good : std_logic_vector(1 downto 0) := "01";
+ constant c_i2cs_rd_done : std_logic_vector(1 downto 0) := "10";
+ constant c_i2cs_wr_done : std_logic_vector(1 downto 0) := "11";
+
+ component gc_i2c_slave is
+ generic
+ (
+ -- Length of glitch filter
+ -- 0 - SCL and SDA lines are passed only through synchronizer
+ -- 1 - one clk_i glitches filtered
+ -- 2 - two clk_i glitches filtered
+ g_gf_len : natural := 0;
+ g_auto_addr_ack : boolean := FALSE
+ );
+ port
+ (
+ -- Clock, reset ports
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- I2C lines
+ scl_i : in std_logic;
+ scl_o : out std_logic;
+ scl_en_o : out std_logic;
+ sda_i : in std_logic;
+ sda_o : out std_logic;
+ sda_en_o : out std_logic;
+
+ -- Slave address
+ i2c_addr_i : in std_logic_vector(6 downto 0);
+
+ -- ACK input, should be set after done_p_o = '1'
+ -- (note that the bit is reversed wrt I2C ACK bit)
+ -- '1' - ACK
+ -- '0' - NACK
+ ack_i : in std_logic;
+
+ -- Byte to send, should be loaded while done_p_o = '1'
+ tx_byte_i : in std_logic_vector(7 downto 0);
+
+ -- Received byte, valid after done_p_o = '1'
+ rx_byte_o : out std_logic_vector(7 downto 0);
+
+ -- Pulse outputs signaling various I2C actions
+ -- Start and stop conditions
+ i2c_sta_p_o : out std_logic;
+ i2c_sto_p_o : out std_logic;
+ -- Received address corresponds addr_i
+ addr_good_p_o : out std_logic;
+ -- Read and write done
+ r_done_p_o : out std_logic;
+ w_done_p_o : out std_logic;
+
+ -- I2C bus operation, set after address detection
+ -- '0' - write
+ -- '1' - read
+ op_o : out std_logic
+ );
+ end component gc_i2c_slave;
+
+ ------------------------------------------------------------------------------
+ -- Glitch filter
+ ------------------------------------------------------------------------------
+ component gc_glitch_filt is
+ generic
+ (
+ -- Length of glitch filter:
+ -- g_len = 1 => data width should be > 1 clk_i cycle
+ -- g_len = 2 => data width should be > 2 clk_i cycle
+ -- etc.
+ g_len : natural := 4
+ );
+ port
+ (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Data input
+ dat_i : in std_logic;
+
+ -- Data output
+ -- latency: g_len+1 clk_i cycles
+ dat_o : out std_logic
+ );
+ end component gc_glitch_filt;
+
+ ------------------------------------------------------------------------------
+ -- Dynamic glitch filter
+ ------------------------------------------------------------------------------
+ component gc_dyn_glitch_filt is
+ generic
+ (
+ -- Number of bit of the glitch filter length input
+ g_len_width : natural := 8
+ );
+ port
+ (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Glitch filter length
+ len_i : in std_logic_vector(g_len_width-1 downto 0);
+
+ -- Data input
+ dat_i : in std_logic;
+
+ -- Data output
+ -- latency: g_len+1 clk_i cycles
+ dat_o : out std_logic
+ );
+ end component gc_dyn_glitch_filt;
+
+ ------------------------------------------------------------------------------
+ -- FSM Watchdog Timer
+ ------------------------------------------------------------------------------
+ component gc_fsm_watchdog is
+ generic
+ (
+ -- Maximum value of watchdog timer in clk_i cycles
+ g_wdt_max : positive := 65535
+ );
+ port
+ (
+ -- Clock and active-low reset line
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Active-high watchdog timer reset line, synchronous to clk_i
+ wdt_rst_i : in std_logic;
+
+ -- Active-high reset output, synchronous to clk_i
+ fsm_rst_o : out std_logic
+ );
+ end component gc_fsm_watchdog;
+
+ ------------------------------------------------------------------------------
+ -- Bicolor LED controller
+ ------------------------------------------------------------------------------
+ constant c_led_red : std_logic_vector(1 downto 0) := "10";
+ constant c_led_green : std_logic_vector(1 downto 0) := "01";
+ constant c_led_red_green : std_logic_vector(1 downto 0) := "11";
+ constant c_led_off : std_logic_vector(1 downto 0) := "00";
+
+ component gc_bicolor_led_ctrl
+ generic(
+ g_nb_column : natural := 4;
+ g_nb_line : natural := 2;
+ g_clk_freq : natural := 125000000; -- in Hz
+ g_refresh_rate : natural := 250 -- in Hz
+ );
+ port
+ (
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ led_intensity_i : in std_logic_vector(6 downto 0);
+ led_state_i : in std_logic_vector((g_nb_line * g_nb_column * 2) - 1 downto 0);
+ column_o : out std_logic_vector(g_nb_column - 1 downto 0);
+ line_o : out std_logic_vector(g_nb_line - 1 downto 0);
+ line_oen_o : out std_logic_vector(g_nb_line - 1 downto 0)
+ );
+ end component;
+
+ component gc_sync_register is
+ generic (
+ g_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_a_i : in std_logic;
+ d_i : in std_logic_vector(g_width-1 downto 0);
+ q_o : out std_logic_vector(g_width-1 downto 0));
+ end component gc_sync_register;
+
+ component gc_async_signals_input_stage is
+ generic (
+ g_signal_num : integer;
+ g_extended_pulse_width : integer;
+ g_dglitch_filter_len : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ signals_a_i : in std_logic_vector(g_signal_num-1 downto 0);
+ config_active_i : in std_logic_vector(g_signal_num-1 downto 0);
+ signals_o : out std_logic_vector(g_signal_num-1 downto 0);
+ signals_p1_o : out std_logic_vector(g_signal_num-1 downto 0);
+ signals_pN_o : out std_logic_vector(g_signal_num-1 downto 0));
+ end component;
+
+ --============================================================================
+ -- Procedures and functions
+ --============================================================================
+ procedure f_rr_arbitrate (
+ signal req : in std_logic_vector;
+ signal pre_grant : in std_logic_vector;
+ signal grant : out std_logic_vector);
+ function f_onehot_decode(x : std_logic_vector; size : integer) return std_logic_vector;
+
+ function f_big_ripple(a, b : std_logic_vector; c : std_logic) return std_logic_vector;
+ function f_gray_encode(x : std_logic_vector) return std_logic_vector;
+ function f_gray_decode(x : std_logic_vector; step : natural) return std_logic_vector;
+ function log2_ceil(N : natural) return positive;
+
+ function f_bool2int (b : boolean) return natural;
+ function f_int2bool (n : natural) return boolean;
+
+end package;
+
+package body gencores_pkg is
+
+ ------------------------------------------------------------------------------
+ -- Simple round-robin arbiter:
+ -- req = requests (1 = pending request),
+ -- pre_grant = previous grant vector (1 cycle delay)
+ -- grant = new grant vector
+ ------------------------------------------------------------------------------
+ procedure f_rr_arbitrate (
+ signal req : in std_logic_vector;
+ signal pre_grant : in std_logic_vector;
+ signal grant : out std_logic_vector)is
+
+ variable reqs : std_logic_vector(req'length - 1 downto 0);
+ variable gnts : std_logic_vector(req'length - 1 downto 0);
+ variable gnt : std_logic_vector(req'length - 1 downto 0);
+ variable gntM : std_logic_vector(req'length - 1 downto 0);
+ variable zeros : std_logic_vector(req'length - 1 downto 0);
+
+ begin
+ zeros := (others => '0');
+
+ -- bit twiddling magic :
+ gnt := req and std_logic_vector(unsigned(not req) + 1);
+ reqs := req and not (std_logic_vector(unsigned(pre_grant) - 1) or pre_grant);
+ gnts := reqs and std_logic_vector(unsigned(not reqs)+1);
+
+ if(reqs = zeros) then
+ gntM := gnt;
+ else
+ gntM := gnts;
+ end if;
+
+ if((req and pre_grant) = zeros) then
+ grant <= gntM;
+ else
+ grant <= pre_grant;
+ end if;
+
+ end f_rr_arbitrate;
+
+ function f_onehot_decode(x : std_logic_vector; size : integer) return std_logic_vector is
+ begin
+ for j in 0 to x'left loop
+ if x(j) /= '0' then
+ return std_logic_vector(to_unsigned(j, size));
+ end if;
+ end loop; -- i
+ return std_logic_vector(to_unsigned(0, size));
+ end f_onehot_decode;
+
+
+
+ ------------------------------------------------------------------------------
+ -- Carry ripple
+ ------------------------------------------------------------------------------
+ function f_big_ripple(a, b : std_logic_vector; c : std_logic) return std_logic_vector is
+ constant len : natural := a'length;
+ variable aw, bw, rw : std_logic_vector(len+1 downto 0);
+ variable x : std_logic_vector(len downto 0);
+ begin
+ aw := "0" & a & c;
+ bw := "0" & b & c;
+ rw := std_logic_vector(unsigned(aw) + unsigned(bw));
+ x := rw(len+1 downto 1);
+ return x;
+ end f_big_ripple;
+
+
+ ------------------------------------------------------------------------------
+ -- Gray encoder
+ ------------------------------------------------------------------------------
+ function f_gray_encode(x : std_logic_vector) return std_logic_vector is
+ variable o : std_logic_vector(x'length downto 0);
+ begin
+ o := (x & '0') xor ('0' & x);
+ return o(x'length downto 1);
+ end f_gray_encode;
+
+ ------------------------------------------------------------------------------
+ -- Gray decoder
+ -- call with step=1
+ ------------------------------------------------------------------------------
+ function f_gray_decode(x : std_logic_vector; step : natural) return std_logic_vector is
+ constant len : natural := x'length;
+ alias y : std_logic_vector(len-1 downto 0) is x;
+ variable z : std_logic_vector(len-1 downto 0) := (others => '0');
+ begin
+ if step >= len then
+ return y;
+ else
+ z(len-step-1 downto 0) := y(len-1 downto step);
+ return f_gray_decode(y xor z, step+step);
+ end if;
+ end f_gray_decode;
+
+ ------------------------------------------------------------------------------
+ -- Returns log of 2 of a natural number
+ ------------------------------------------------------------------------------
+ function log2_ceil(N : natural) return positive is
+ begin
+ if N <= 2 then
+ return 1;
+ elsif N mod 2 = 0 then
+ return 1 + log2_ceil(N/2);
+ else
+ return 1 + log2_ceil((N+1)/2);
+ end if;
+ end;
+
+ ------------------------------------------------------------------------------
+ -- Converts a boolean to natural integer (false -> 0, true -> 1)
+ ------------------------------------------------------------------------------
+ function f_bool2int (b : boolean) return natural is
+ begin
+ if b then
+ return 1;
+ else
+ return 0;
+ end if;
+ end;
+
+ ------------------------------------------------------------------------------
+ -- Converts a natural integer to boolean (0 -> false, any positive -> true)
+ ------------------------------------------------------------------------------
+ function f_int2bool (n : natural) return boolean is
+ begin
+ if n = 0 then
+ return false;
+ else
+ return true;
+ end if;
+ end;
+
+end gencores_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd
new file mode 100644
index 000000000..9158a4fdb
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/generic_shiftreg_fifo.vhd
@@ -0,0 +1,168 @@
+----------------------------------------------------------------------------
+---- ----
+---- ----
+---- This file is part of the srl_fifo project ----
+---- http://www.opencores.org/cores/srl_fifo ----
+---- ----
+---- Description ----
+---- Implementation of srl_fifo IP core according to ----
+---- srl_fifo IP core specification document. ----
+---- ----
+---- To Do: ----
+---- NA ----
+---- ----
+---- Author(s): ----
+---- Andrew Mulcock, amulcock@opencores.org ----
+---- ----
+---- Modified for WR Project by Tomasz Wlostowski ----
+----------------------------------------------------------------------------
+---- ----
+---- Copyright (C) 2008 Authors and OPENCORES.ORG ----
+---- ----
+---- This source file may be used and distributed without ----
+---- restriction provided that this copyright statement is not ----
+---- removed from the file and that any derivative work contains ----
+---- the original copyright notice and the associated disclaimer. ----
+---- ----
+---- This source file is free software; you can redistribute it ----
+---- and/or modify it under the terms of the GNU Lesser General ----
+---- Public License as published by the Free Software Foundation; ----
+---- either version 2.1 of the License, or (at your option) any ----
+---- later version. ----
+---- ----
+---- This source 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 Lesser General Public License for more ----
+---- details. ----
+---- ----
+---- You should have received a copy of the GNU Lesser General ----
+---- Public License along with this source; if not, download it ----
+---- from http://www.opencores.org/lgpl.shtml ----
+---- ----
+----------------------------------------------------------------------------
+
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use ieee.NUMERIC_STD.all;
+
+use work.genram_pkg.all;
+
+entity generic_shiftreg_fifo is
+ generic (
+ g_data_width : integer := 128;
+ g_size : integer := 32
+ );
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+
+ full_o : out std_logic;
+ almost_full_o : out std_logic;
+ q_valid_o : out std_logic
+ );
+
+end generic_shiftreg_fifo;
+
+architecture rtl of generic_shiftreg_fifo is
+
+ component gc_shiftreg
+ generic (
+ g_size : integer);
+ port (
+ clk_i : in std_logic;
+ en_i : in std_logic;
+ d_i : in std_logic;
+ q_o : out std_logic;
+ a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+ signal pointer : integer range 0 to g_size-1 := 0;
+
+ signal srl_addr : std_logic_vector(f_log2_size(g_size)-1 downto 0) := (others => '0');
+ signal pointer_zero : std_logic;
+ signal pointer_full : std_logic;
+ signal pointer_almost_full : std_logic;
+ signal empty : std_logic := '1';
+ signal valid_count : std_logic;
+ signal do_write : std_logic;
+begin
+
+-- Valid write, high when valid to write data to the store.
+
+ do_write <= '1' when (rd_i = '1' and we_i = '1')
+ or (we_i = '1' and pointer_full = '0') else '0';
+
+
+ gen_sregs : for i in 0 to g_data_width-1 generate
+ U_SRLx : gc_shiftreg
+ generic map (
+ g_size => g_size)
+ port map (
+ clk_i => clk_i,
+ en_i => do_write,
+ d_i => d_i(i),
+ q_o => q_o(i),
+ a_i => srl_addr);
+ end generate gen_sregs;
+
+ srl_addr <= std_logic_vector(to_unsigned(pointer, srl_addr'length));
+
+ p_empty_logic : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ empty <= '1';
+ elsif empty = '1' and we_i = '1' then
+ empty <= '0';
+ elsif pointer_zero = '1' and rd_i = '1' and we_i = '0' then
+ empty <= '1';
+ end if;
+ end if;
+ end process;
+
+-- W R Action
+-- 0 0 pointer <= pointer
+-- 0 1 pointer <= pointer - 1 Read, but no write, so less data in counter
+-- 1 0 pointer <= pointer + 1 Write, but no read, so more data in fifo
+-- 1 1 pointer <= pointer Read and write, so same number of words in fifo
+--
+
+ valid_count <= '1' when (
+ (we_i = '1' and rd_i = '0' and pointer_full = '0' and empty = '0')
+ or
+ (we_i = '0' and rd_i = '1' and pointer_zero = '0')
+ ) else '0';
+
+ p_gen_address : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ pointer <= 0;
+ elsif valid_count = '1' then
+ if we_i = '1' then
+ pointer <= pointer + 1;
+ else
+ pointer <= pointer - 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- Detect when pointer is zero and maximum
+ pointer_zero <= '1' when pointer = 0 else '0';
+ pointer_full <= '1' when pointer = g_size - 1 else '0';
+ pointer_almost_full <= '1' when pointer_full = '1' or pointer = g_size -3 or pointer = g_size - 2 else '0';
+
+
+ -- assign internal signals to outputs
+ full_o <= pointer_full;
+ almost_full_o <= pointer_almost_full;
+ q_valid_o <= not empty;
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd
new file mode 100644
index 000000000..bf24ea561
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_async_fifo.vhd
@@ -0,0 +1,326 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable asynchronous FIFO (Generic version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_async_fifo.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2014-07-31
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Dual-clock asynchronous FIFO.
+-- - configurable data width and size
+-- - configurable full/empty/almost full/almost empty/word count signals
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+use work.gencores_pkg.all;
+
+entity inferred_async_fifo is
+
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+
+ -- Read-side flag selection
+ g_with_rd_empty : boolean := true; -- with empty flag
+ g_with_rd_full : boolean := false; -- with full flag
+ g_with_rd_almost_empty : boolean := false;
+ g_with_rd_almost_full : boolean := false;
+ g_with_rd_count : boolean := false; -- with words counter
+
+ g_with_wr_empty : boolean := false;
+ g_with_wr_full : boolean := true;
+ g_with_wr_almost_empty : boolean := false;
+ g_with_wr_almost_full : boolean := false;
+ g_with_wr_count : boolean := false;
+
+ g_almost_empty_threshold : integer; -- threshold for almost empty flag
+ g_almost_full_threshold : integer -- threshold for almost full flag
+ );
+
+ port (
+ rst_n_i : in std_logic := '1';
+
+
+ -- write port
+ clk_wr_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_almost_empty_o : out std_logic; -- TODO: assign
+ wr_almost_full_o : out std_logic;
+ wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0);
+
+ -- read port
+ clk_rd_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_almost_empty_o : out std_logic;
+ rd_almost_full_o : out std_logic; -- TODO: assign
+ rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)
+ );
+
+end inferred_async_fifo;
+
+
+architecture syn of inferred_async_fifo is
+
+ function f_bin2gray(bin : std_logic_vector) return std_logic_vector is
+ begin
+ return bin(bin'left) & (bin(bin'left-1 downto 0) xor bin(bin'left downto 1));
+ end f_bin2gray;
+
+ function f_gray2bin(gray : std_logic_vector) return std_logic_vector is
+ variable bin : std_logic_vector(gray'left downto 0);
+ begin
+ -- gray to binary
+ for i in 0 to gray'left loop
+ bin(i) := '0';
+ for j in i to gray'left loop
+ bin(i) := bin(i) xor gray(j);
+ end loop; -- j
+ end loop; -- i
+ return bin;
+ end f_gray2bin;
+
+ constant c_counter_bits : integer := f_log2_size(g_size) + 1;
+ subtype t_counter is std_logic_vector(c_counter_bits-1 downto 0);
+
+ type t_counter_block is record
+ bin, bin_next, gray, gray_next : t_counter;
+ bin_x, gray_x, gray_xm : t_counter;
+ end record;
+
+ type t_mem_type is array (0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0);
+ signal mem : t_mem_type;
+
+ signal rcb, wcb : t_counter_block;
+
+
+ signal full_int, empty_int : std_logic;
+ signal almost_full_int, almost_empty_int : std_logic;
+ signal going_full : std_logic;
+
+ signal wr_count, rd_count : t_counter;
+ signal rd_int, we_int : std_logic;
+
+ signal wr_empty_xm, wr_empty_x : std_logic;
+ signal rd_full_xm, rd_full_x : std_logic;
+
+ signal almost_full_x, almost_full_xm : std_logic;
+ signal almost_empty_x, almost_empty_xm : std_logic;
+
+begin -- syn
+
+ rd_int <= rd_i and not empty_int;
+ we_int <= we_i and not full_int;
+
+ p_mem_write : process(clk_wr_i)
+ begin
+ if rising_edge(clk_wr_i) then
+ if(we_int = '1') then
+ mem(to_integer(unsigned(wcb.bin(wcb.bin'left-1 downto 0)))) <= d_i;
+ end if;
+ end if;
+ end process;
+
+ p_mem_read : process(clk_rd_i)
+ begin
+ if rising_edge(clk_rd_i) then
+ if(rd_int = '1') then
+ q_o <= mem(to_integer(unsigned(rcb.bin(rcb.bin'left-1 downto 0))));
+ end if;
+ end if;
+ end process;
+
+ wcb.bin_next <= std_logic_vector(unsigned(wcb.bin) + 1);
+ wcb.gray_next <= f_bin2gray(wcb.bin_next);
+
+ p_write_ptr : process(clk_wr_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ wcb.bin <= (others => '0');
+ wcb.gray <= (others => '0');
+ elsif rising_edge(clk_wr_i) then
+ if(we_int = '1') then
+ wcb.bin <= wcb.bin_next;
+ wcb.gray <= wcb.gray_next;
+ end if;
+ end if;
+ end process;
+
+ rcb.bin_next <= std_logic_vector(unsigned(rcb.bin) + 1);
+ rcb.gray_next <= f_bin2gray(rcb.bin_next);
+
+ p_read_ptr : process(clk_rd_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ rcb.bin <= (others => '0');
+ rcb.gray <= (others => '0');
+ elsif rising_edge(clk_rd_i) then
+ if(rd_int = '1') then
+ rcb.bin <= rcb.bin_next;
+ rcb.gray <= rcb.gray_next;
+ end if;
+ end if;
+ end process;
+
+ U_Sync1: gc_sync_register
+ generic map (
+ g_width => c_counter_bits)
+ port map (
+ clk_i => clk_wr_i,
+ rst_n_a_i => rst_n_i,
+ d_i => rcb.gray,
+ q_o => rcb.gray_x);
+
+ U_Sync2: gc_sync_register
+ generic map (
+ g_width => c_counter_bits)
+ port map (
+ clk_i => clk_rd_i,
+ rst_n_a_i => rst_n_i,
+ d_i => wcb.gray,
+ q_o => wcb.gray_x);
+
+ wcb.bin_x <= f_gray2bin(wcb.gray_x);
+ rcb.bin_x <= f_gray2bin(rcb.gray_x);
+
+ p_gen_empty : process(clk_rd_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ empty_int <= '1';
+ elsif rising_edge (clk_rd_i) then
+ if(rcb.gray = wcb.gray_x or (rd_int = '1' and (wcb.gray_x = rcb.gray_next))) then
+ empty_int <= '1';
+ else
+ empty_int <= '0';
+ end if;
+ end if;
+ end process;
+
+ U_Sync_Empty: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_wr_i,
+ rst_n_i => rst_n_i,
+ data_i => empty_int,
+ synced_o => wr_empty_x);
+
+ U_Sync_Full: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_rd_i,
+ rst_n_i => rst_n_i,
+ data_i => full_int,
+ synced_o => rd_full_x);
+
+
+
+ rd_empty_o <= empty_int;
+ wr_empty_o <= wr_empty_x;
+
+ p_gen_going_full : process(we_int, wcb, rcb)
+ begin
+ if ((wcb.bin (wcb.bin'left-1 downto 0) = rcb.bin_x(rcb.bin_x'left-1 downto 0))
+ and (wcb.bin(wcb.bin'left) /= rcb.bin_x(wcb.bin_x'left))) then
+ going_full <= '1';
+ elsif (we_int = '1'
+ and (wcb.bin_next(wcb.bin'left-1 downto 0) = rcb.bin_x(rcb.bin_x'left-1 downto 0))
+ and (wcb.bin_next(wcb.bin'left) /= rcb.bin_x(rcb.bin_x'left))) then
+ going_full <= '1';
+ else
+ going_full <= '0';
+ end if;
+ end process;
+
+ p_register_full : process(clk_wr_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ full_int <= '0';
+ elsif rising_edge (clk_wr_i) then
+ full_int <= going_full;
+ end if;
+ end process;
+
+ wr_full_o <= full_int;
+ rd_full_o <= rd_full_x;
+
+ p_reg_almost_full : process(clk_wr_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ almost_full_int <= '0';
+ elsif rising_edge(clk_wr_i) then
+ wr_count <= std_logic_vector(unsigned(wcb.bin) - unsigned(rcb.bin_x));
+ if (unsigned(wr_count) >= g_almost_full_threshold) then
+ almost_full_int <= '1';
+ else
+ almost_full_int <= '0';
+ end if;
+ end if;
+ end process;
+
+ U_Sync_AlmostFull: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_rd_i,
+ rst_n_i => rst_n_i,
+ data_i => almost_full_int,
+ synced_o => almost_full_x);
+
+ wr_almost_full_o <= almost_full_int;
+ rd_almost_full_o <= almost_full_x;
+
+ p_reg_almost_empty : process(clk_rd_i, rst_n_i)
+ begin
+ if rst_n_i = '0' then
+ almost_empty_int <= '1';
+ elsif rising_edge(clk_rd_i) then
+ rd_count <= std_logic_vector(unsigned(wcb.bin_x) - unsigned(rcb.bin));
+ if (unsigned(rd_count) <= g_almost_empty_threshold) then
+ almost_empty_int <= '1';
+ else
+ almost_empty_int <= '0';
+ end if;
+ end if;
+ end process;
+
+ U_Sync_AlmostEmpty: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_wr_i,
+ rst_n_i => rst_n_i,
+ data_i => almost_empty_int,
+ synced_o => almost_empty_x);
+
+ rd_almost_empty_o <= almost_empty_int;
+ wr_almost_empty_o <= almost_empty_x;
+
+ wr_count_o <= std_logic_vector(wr_count(f_log2_size(g_size)-1 downto 0));
+ rd_count_o <= std_logic_vector(rd_count(f_log2_size(g_size)-1 downto 0));
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd
new file mode 100644
index 000000000..c70a83003
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/common/inferred_sync_fifo.vhd
@@ -0,0 +1,261 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable synchronous FIFO (Generic version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_sync_fifo_std.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2017-02-03
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Single-clock FIFO.
+-- - configurable data width and size
+-- - configurable full/empty/almost full/almost empty/word count signals
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011-2017 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+
+entity inferred_sync_fifo is
+
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+
+ -- Read-side flag selection
+ g_with_empty : boolean := true; -- with empty flag
+ g_with_full : boolean := true; -- with full flag
+ g_with_almost_empty : boolean := false;
+ g_with_almost_full : boolean := false;
+ g_with_count : boolean := false; -- with words counter
+
+ g_almost_empty_threshold : integer := 0; -- threshold for almost empty flag
+ g_almost_full_threshold : integer := 0; -- threshold for almost full flag
+
+ g_register_flag_outputs : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1';
+
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+
+ empty_o : out std_logic;
+ full_o : out std_logic;
+ almost_empty_o : out std_logic;
+ almost_full_o : out std_logic;
+ count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)
+ );
+
+end inferred_sync_fifo;
+
+architecture syn of inferred_sync_fifo is
+
+ constant c_pointer_width : integer := f_log2_size(g_size);
+ signal rd_ptr, wr_ptr, wr_ptr_d0, rd_ptr_muxed : unsigned(c_pointer_width-1 downto 0);
+ signal usedw : unsigned(c_pointer_width downto 0);
+ signal full, empty : std_logic;
+ signal q_int : std_logic_vector(g_data_width-1 downto 0);
+ signal we_int, rd_int : std_logic;
+ signal guard_bit : std_logic;
+
+ signal q_comb : std_logic_vector(g_data_width-1 downto 0);
+
+begin -- syn
+
+ we_int <= we_i and not full;
+ rd_int <= rd_i and not empty;
+
+ U_FIFO_Ram : generic_dpram
+ generic map (
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_with_byte_enable => false,
+ g_addr_conflict_resolution => "dont_care",
+ g_dual_clock => false)
+ port map (
+ rst_n_i => rst_n_i,
+ clka_i => clk_i,
+ wea_i => we_int,
+ aa_i => std_logic_vector(wr_ptr(c_pointer_width-1 downto 0)),
+ da_i => d_i,
+ clkb_i => '0',
+ ab_i => std_logic_vector(rd_ptr_muxed(c_pointer_width-1 downto 0)),
+ qb_o => q_comb);
+
+ process(rd_ptr, rd_i, rd_int)
+ begin
+ if(rd_int = '1' and g_show_ahead) then
+ rd_ptr_muxed <= rd_ptr + 1;
+ elsif((rd_int = '1' and not g_show_ahead) or (g_show_ahead)) then
+ rd_ptr_muxed <= rd_ptr;
+ else
+ rd_ptr_muxed <= rd_ptr - 1;
+ end if;
+ end process;
+
+ q_o <= q_comb;
+
+ p_pointers : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ wr_ptr <= (others => '0');
+ rd_ptr <= (others => '0');
+ else
+ if(we_int = '1') then
+ wr_ptr <= wr_ptr + 1;
+ end if;
+
+ if(rd_int = '1') then
+ rd_ptr <= rd_ptr + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ gen_comb_flags_showahead : if(g_show_ahead = true) generate
+
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if ((rd_ptr + 1 = wr_ptr and rd_int = '1') or (rd_ptr = wr_ptr)) then
+ empty <= '1';
+ else
+ empty <= '0';
+ end if;
+ end if;
+ end process;
+ full <= '1' when (wr_ptr + 1 = rd_ptr) else '0';
+
+ end generate gen_comb_flags_showahead;
+
+ gen_comb_flags : if(g_register_flag_outputs = false and g_show_ahead = false) generate
+ empty <= '1' when (wr_ptr = rd_ptr and guard_bit = '0') else '0';
+ full <= '1' when (wr_ptr = rd_ptr and guard_bit = '1') else '0';
+
+ p_guard_bit : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ guard_bit <= '0';
+ elsif(wr_ptr + 1 = rd_ptr and we_int = '1') then
+ guard_bit <= '1';
+ elsif(rd_i = '1') then
+ guard_bit <= '0';
+ end if;
+ end if;
+ end process;
+ end generate gen_comb_flags;
+
+ gen_registered_flags : if(g_register_flag_outputs = true and g_show_ahead = false) generate
+ p_reg_flags : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+
+ if(rst_n_i = '0') then
+ full <= '0';
+ empty <= '1';
+ else
+ if(usedw = 1 and rd_int = '1' and we_int = '0') then
+ empty <= '1';
+ elsif(we_int = '1' and rd_int = '0') then
+ empty <= '0';
+ end if;
+
+ if(usedw = g_size-2 and we_int = '1' and rd_int = '0') then
+ full <= '1';
+ elsif(usedw = g_size-1 and rd_int = '1' and we_int = '0') then
+ full <= '0';
+ end if;
+ end if;
+
+ end if;
+ end process;
+ end generate gen_registered_flags;
+
+
+ gen_with_word_counter : if(g_with_count or g_with_almost_empty or g_with_almost_full or g_register_flag_outputs) generate
+ p_usedw_counter : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ usedw <= (others => '0');
+ else
+ if(we_int = '1' and rd_int = '0') then
+ usedw <= usedw + 1;
+ elsif(we_int = '0' and rd_int = '1') then
+ usedw <= usedw - 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ count_o <= std_logic_vector(usedw(c_pointer_width-1 downto 0));
+
+ end generate gen_with_word_counter;
+
+ gen_with_almost_full : if(g_with_almost_full) generate
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ almost_full_o <= '0';
+ else
+ if(usedw = g_almost_full_threshold-1) and (we_int = '1' and rd_int = '0') then
+ almost_full_o <= '1';
+ elsif (usedw = g_almost_full_threshold) and (rd_int = '1' and we_int = '0') then
+ almost_full_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+ end generate gen_with_almost_full;
+
+ gen_without_almost_full : if(not g_with_almost_full) generate
+ almost_full_o <= '0';
+ end generate gen_without_almost_full;
+
+ gen_with_almost_empty : if(g_with_almost_empty) generate
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ almost_empty_o <= '1';
+ else
+ if(usedw = g_almost_empty_threshold+1) and (rd_int = '1' and we_int = '0') then
+ almost_empty_o <= '1';
+ elsif (usedw = g_almost_empty_threshold) and (we_int = '1' and rd_int = '0') then
+ almost_empty_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+ end generate gen_with_almost_empty;
+
+ gen_without_almost_empty : if(not g_with_almost_empty) generate
+ almost_empty_o <= '0';
+ end generate gen_without_almost_empty;
+
+ full_o <= full;
+ empty_o <= empty;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd
new file mode 100644
index 000000000..66fce2fe0
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_async_fifo.vhd
@@ -0,0 +1,162 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable asynchronous FIFO (Generic version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_async_fifo.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2012-07-03
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Dual-clock asynchronous FIFO.
+-- - configurable data width and size
+-- - configurable full/empty/almost full/almost empty/word count signals
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+
+entity generic_async_fifo is
+
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+
+ -- Read-side flag selection
+ g_with_rd_empty : boolean := true; -- with empty flag
+ g_with_rd_full : boolean := false; -- with full flag
+ g_with_rd_almost_empty : boolean := false;
+ g_with_rd_almost_full : boolean := false;
+ g_with_rd_count : boolean := false; -- with words counter
+
+ g_with_wr_empty : boolean := false;
+ g_with_wr_full : boolean := true;
+ g_with_wr_almost_empty : boolean := false;
+ g_with_wr_almost_full : boolean := false;
+ g_with_wr_count : boolean := false;
+
+ g_almost_empty_threshold : integer; -- threshold for almost empty flag
+ g_almost_full_threshold : integer -- threshold for almost full flag
+ );
+
+ port (
+ rst_n_i : in std_logic := '1';
+
+
+ -- write port
+ clk_wr_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_almost_empty_o : out std_logic;
+ wr_almost_full_o : out std_logic;
+ wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0);
+
+ -- read port
+ clk_rd_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_almost_empty_o : out std_logic;
+ rd_almost_full_o : out std_logic;
+ rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)
+ );
+
+end generic_async_fifo;
+
+
+architecture syn of generic_async_fifo is
+
+ component inferred_async_fifo
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean;
+ g_with_rd_empty : boolean;
+ g_with_rd_full : boolean;
+ g_with_rd_almost_empty : boolean;
+ g_with_rd_almost_full : boolean;
+ g_with_rd_count : boolean;
+ g_with_wr_empty : boolean;
+ g_with_wr_full : boolean;
+ g_with_wr_almost_empty : boolean;
+ g_with_wr_almost_full : boolean;
+ g_with_wr_count : boolean;
+ g_almost_empty_threshold : integer;
+ g_almost_full_threshold : integer);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_wr_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_almost_empty_o : out std_logic;
+ wr_almost_full_o : out std_logic;
+ wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ clk_rd_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_almost_empty_o : out std_logic;
+ rd_almost_full_o : out std_logic;
+ rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+
+begin -- syn
+
+ U_Inferred_FIFO : inferred_async_fifo
+ generic map (
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_show_ahead => g_show_ahead,
+ g_with_rd_empty => g_with_rd_empty,
+ g_with_rd_full => g_with_rd_full,
+ g_with_rd_almost_empty => g_with_rd_almost_empty,
+ g_with_rd_almost_full => g_with_rd_almost_full,
+ g_with_rd_count => g_with_rd_count,
+ g_with_wr_empty => g_with_wr_empty,
+ g_with_wr_full => g_with_wr_full,
+ g_with_wr_almost_empty => g_with_wr_almost_empty,
+ g_with_wr_almost_full => g_with_wr_almost_full,
+ g_with_wr_count => g_with_wr_count,
+ g_almost_empty_threshold => g_almost_empty_threshold,
+ g_almost_full_threshold => g_almost_full_threshold)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_wr_i => clk_wr_i,
+ d_i => d_i,
+ we_i => we_i,
+ wr_empty_o => wr_empty_o,
+ wr_full_o => wr_full_o,
+ wr_almost_empty_o => wr_almost_empty_o,
+ wr_almost_full_o => wr_almost_full_o,
+ wr_count_o => wr_count_o,
+ clk_rd_i => clk_rd_i,
+ q_o => q_o,
+ rd_i => rd_i,
+ rd_empty_o => rd_empty_o,
+ rd_full_o => rd_full_o,
+ rd_almost_empty_o => rd_almost_empty_o,
+ rd_almost_full_o => rd_almost_full_o,
+ rd_count_o => rd_count_o);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd
new file mode 100644
index 000000000..fecd0882d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/generic/generic_sync_fifo.vhd
@@ -0,0 +1,130 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable synchronous FIFO (Xilinx version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_sync_fifo.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2012-07-03
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Single-clock FIFO.
+-- - configurable data width and size
+-- - "show ahead" mode
+-- - configurable full/empty/almost full/almost empty/word count signals
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+
+entity generic_sync_fifo is
+
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+
+ -- Read-side flag selection
+ g_with_empty : boolean := true; -- with empty flag
+ g_with_full : boolean := true; -- with full flag
+ g_with_almost_empty : boolean := false;
+ g_with_almost_full : boolean := false;
+ g_with_count : boolean := false; -- with words counter
+
+ g_almost_empty_threshold : integer; -- threshold for almost empty flag
+ g_almost_full_threshold : integer; -- threshold for almost full flag
+ g_register_flag_outputs : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1';
+
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+
+ empty_o : out std_logic;
+ full_o : out std_logic;
+ almost_empty_o : out std_logic;
+ almost_full_o : out std_logic;
+ count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0)
+ );
+
+end generic_sync_fifo;
+
+architecture syn of generic_sync_fifo is
+
+ component inferred_sync_fifo
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean;
+ g_with_empty : boolean;
+ g_with_full : boolean;
+ g_with_almost_empty : boolean;
+ g_with_almost_full : boolean;
+ g_with_count : boolean;
+ g_almost_empty_threshold : integer;
+ g_almost_full_threshold : integer;
+ g_register_flag_outputs : boolean);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ empty_o : out std_logic;
+ full_o : out std_logic;
+ almost_empty_o : out std_logic;
+ almost_full_o : out std_logic;
+ count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+begin -- syn
+
+ U_Inferred_FIFO : inferred_sync_fifo
+ generic map (
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_show_ahead => g_show_ahead,
+ g_with_empty => g_with_empty,
+ g_with_full => g_with_full,
+ g_with_almost_empty => g_with_almost_empty,
+ g_with_almost_full => g_with_almost_full,
+ g_with_count => g_with_count,
+ g_almost_empty_threshold => g_almost_empty_threshold,
+ g_almost_full_threshold => g_almost_full_threshold,
+ g_register_flag_outputs => g_register_flag_outputs)
+
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_i,
+ d_i => d_i,
+ we_i => we_i,
+ q_o => q_o,
+ rd_i => rd_i,
+ empty_o => empty_o,
+ full_o => full_o,
+ almost_empty_o => almost_empty_o,
+ almost_full_o => almost_full_o,
+ count_o => count_o);
+
+
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd
new file mode 100644
index 000000000..c212bbf32
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/genram_pkg.vhd
@@ -0,0 +1,262 @@
+-------------------------------------------------------------------------------
+-- Title : Main package file
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : genram_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2013-10-30
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package genram_pkg is
+
+ function f_log2_size (A : natural) return natural;
+ function f_gen_dummy_vec (val : std_logic; size : natural) return std_logic_vector;
+ function f_zeros (size : integer) return std_logic_vector;
+ function f_check_bounds(x : integer; minx : integer; maxx : integer) return integer;
+
+ type t_generic_ram_init is array (integer range <>, integer range <>) of std_logic;
+ type t_ram8_type is array (integer range <>) of std_logic_vector(7 downto 0);
+ type t_ram16_type is array (integer range <>) of std_logic_vector(15 downto 0);
+ type t_ram32_type is array (integer range <>) of std_logic_vector(31 downto 0);
+
+ -- Single-port synchronous RAM
+ component generic_spram
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_with_byte_enable : boolean := false;
+ g_init_file : string := "none";
+ g_addr_conflict_resolution : string := "dont_care") ;
+ port (
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ bwe_i : in std_logic_vector((g_data_width+7)/8-1 downto 0):= f_gen_dummy_vec('1', (g_data_width+7)/8);
+ we_i : in std_logic;
+ a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ d_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width);
+ q_o : out std_logic_vector(g_data_width-1 downto 0));
+ end component;
+
+ component generic_simple_dpram
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "dont_care";
+ g_init_file : string := "none";
+ g_dual_clock : boolean := true);
+ port (
+ rst_n_i : in std_logic := '1';
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8 -1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width -1 downto 0);
+ clkb_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width -1 downto 0));
+ end component;
+
+ component generic_dpram
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "dont_care";
+ g_init_file : string := "none";
+ g_dual_clock : boolean := true);
+ port (
+ rst_n_i : in std_logic := '1';
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8);
+ wea_i : in std_logic := '0';
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+ clkb_i : in std_logic;
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_width+7)/8);
+ web_i : in std_logic := '0';
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0) := f_gen_dummy_vec('0', g_data_width);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0));
+ end component;
+
+ component generic_dpram_mixed
+ generic (
+ g_data_a_width : natural;
+ g_data_b_width : natural;
+ g_size : natural;
+ g_addr_conflict_resolution : string := "dont_care";
+ g_init_file : string := "none";
+ g_dual_clock : boolean := true);
+ port (
+ rst_n_i : in std_logic := '1';
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_a_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_a_width+7)/8);
+ wea_i : in std_logic := '0';
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_a_width-1 downto 0) := f_gen_dummy_vec('0', g_data_a_width);
+ qa_o : out std_logic_vector(g_data_a_width-1 downto 0);
+ clkb_i : in std_logic;
+ bweb_i : in std_logic_vector((g_data_b_width+7)/8-1 downto 0) := f_gen_dummy_vec('1', (g_data_b_width+7)/8);
+ web_i : in std_logic := '0';
+ ab_i : in std_logic_vector(f_log2_size(g_data_a_width*g_size/g_data_b_width)-1 downto 0);
+ db_i : in std_logic_vector(g_data_b_width-1 downto 0) := f_gen_dummy_vec('0', g_data_b_width);
+ qb_o : out std_logic_vector(g_data_b_width-1 downto 0));
+ end component;
+
+ component generic_async_fifo
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+ g_with_rd_empty : boolean := true;
+ g_with_rd_full : boolean := false;
+ g_with_rd_almost_empty : boolean := false;
+ g_with_rd_almost_full : boolean := false;
+ g_with_rd_count : boolean := false;
+ g_with_wr_empty : boolean := false;
+ g_with_wr_full : boolean := true;
+ g_with_wr_almost_empty : boolean := false;
+ g_with_wr_almost_full : boolean := false;
+ g_with_wr_count : boolean := false;
+ g_almost_empty_threshold : integer := 0;
+ g_almost_full_threshold : integer := 0);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_wr_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_almost_empty_o : out std_logic;
+ wr_almost_full_o : out std_logic;
+ wr_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ clk_rd_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_almost_empty_o : out std_logic;
+ rd_almost_full_o : out std_logic;
+ rd_count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+
+ component generic_sync_fifo
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean := false;
+ g_with_empty : boolean := true;
+ g_with_full : boolean := true;
+ g_with_almost_empty : boolean := false;
+ g_with_almost_full : boolean := false;
+ g_with_count : boolean := false;
+ g_almost_empty_threshold : integer := 0;
+ g_almost_full_threshold : integer := 0);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ empty_o : out std_logic;
+ full_o : out std_logic;
+ almost_empty_o : out std_logic;
+ almost_full_o : out std_logic;
+ count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+ component generic_shiftreg_fifo
+ generic (
+ g_data_width : integer;
+ g_size : integer);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ full_o : out std_logic;
+ almost_full_o : out std_logic;
+ q_valid_o : out std_logic
+ );
+ end component;
+
+end genram_pkg;
+
+package body genram_pkg is
+
+ function f_log2_size (A : natural) return natural is
+ begin
+ for I in 1 to 64 loop -- Works for up to 64 bits
+ if (2**I >= A) then
+ return(I);
+ end if;
+ end loop;
+ return(63);
+ end function f_log2_size;
+
+ function f_gen_dummy_vec (val : std_logic; size : natural) return std_logic_vector is
+ variable tmp : std_logic_vector(size-1 downto 0);
+ begin
+ for i in 0 to size-1 loop
+ tmp(i) := val;
+ end loop; -- i
+ return tmp;
+ end f_gen_dummy_vec;
+
+ function f_zeros(size : integer)
+ return std_logic_vector is
+ begin
+ return std_logic_vector(to_unsigned(0, size));
+ end f_zeros;
+
+ function f_check_bounds(x : integer; minx : integer; maxx : integer) return integer is
+ begin
+ if(x < minx) then
+ return minx;
+ elsif(x > maxx) then
+ return maxx;
+ else
+ return x;
+ end if;
+ end f_check_bounds;
+
+end genram_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd
new file mode 100644
index 000000000..5bb1da6d3
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/memory_loader_pkg.vhd
@@ -0,0 +1,251 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library std;
+use std.textio.all;
+
+library work;
+use work.genram_pkg.all;
+
+package memory_loader_pkg is
+
+ subtype t_meminit_array is t_generic_ram_init;
+
+ impure function f_load_mem_from_file
+ (file_name : in string;
+ mem_size : in integer;
+ mem_width : in integer;
+ fail_if_notfound : boolean)
+ return t_meminit_array;
+
+ impure function f_load_mem32_from_file
+ (file_name : in string; mem_size : in integer; fail_if_notfound : boolean)
+ return t_ram32_type;
+
+ impure function f_load_mem16_from_file
+ (file_name : in string; mem_size : in integer; fail_if_notfound : boolean)
+ return t_ram16_type;
+
+ impure function f_load_mem8_from_file
+ (file_name : in string; mem_size : in integer; fail_if_notfound : boolean)
+ return t_ram8_type;
+
+ impure function f_load_mem32_from_file_split
+ (file_name : in string; mem_size : in integer;
+ fail_if_notfound : boolean; byte_idx : in integer)
+ return t_ram8_type;
+
+end memory_loader_pkg;
+
+package body memory_loader_pkg is
+
+ impure function f_load_mem_from_file
+ (file_name : in string;
+ mem_size : in integer;
+ mem_width : in integer;
+ fail_if_notfound : boolean)
+ return t_meminit_array is
+
+ FILE f_in : text;
+ variable l : line;
+ variable tmp_bv : bit_vector(mem_width-1 downto 0);
+ variable tmp_sv : std_logic_vector(mem_width-1 downto 0);
+ variable mem: t_meminit_array(0 to mem_size-1, mem_width-1 downto 0);
+ variable status : file_open_status;
+ begin
+ if(file_name = "" or file_name = "none") then
+ mem:= (others => (others => '0'));
+ return mem;
+ end if;
+
+ file_open(status, f_in, file_name, read_mode);
+
+ if(status /= open_ok) then
+ if(fail_if_notfound) then
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure;
+ else
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning;
+ end if;
+ end if;
+
+ for I in 0 to mem_size-1 loop
+ readline (f_in, l);
+ -- read function gives us bit_vector
+ read (l, tmp_bv);
+ tmp_sv := to_stdlogicvector(tmp_bv);
+ for J in 0 to mem_width-1 loop
+ mem(i, j) := tmp_sv(j);
+ end loop;
+ end loop;
+
+ file_close(f_in);
+ return mem;
+ end f_load_mem_from_file;
+
+ -------------------------------------------------------------------
+ -- RAM initialization for most common sizes to speed-up synthesis
+ -------------------------------------------------------------------
+
+ impure function f_load_mem32_from_file
+ (file_name : in string;
+ mem_size : in integer;
+ fail_if_notfound : boolean)
+ return t_ram32_type is
+
+ FILE f_in : text;
+ variable l : line;
+ variable tmp_bv : bit_vector(31 downto 0);
+ variable mem: t_ram32_type(0 to mem_size-1);
+ variable status : file_open_status;
+ begin
+ if(file_name = "" or file_name = "none") then
+ mem:= (others => (others => '0'));
+ return mem;
+ end if;
+
+ file_open(status, f_in, file_name, read_mode);
+
+ if(status /= open_ok) then
+ if(fail_if_notfound) then
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure;
+ else
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning;
+ end if;
+ end if;
+
+ for I in 0 to mem_size-1 loop
+ readline (f_in, l);
+ -- read function gives us bit_vector
+ read (l, tmp_bv);
+ mem(I) := to_stdlogicvector(tmp_bv);
+ end loop;
+
+ file_close(f_in);
+ return mem;
+ end f_load_mem32_from_file;
+
+ -------------------------------------------------------------------
+
+ impure function f_load_mem16_from_file
+ (file_name : in string;
+ mem_size : in integer;
+ fail_if_notfound : boolean)
+ return t_ram16_type is
+
+ FILE f_in : text;
+ variable l : line;
+ variable tmp_bv : bit_vector(15 downto 0);
+ variable mem: t_ram16_type(0 to mem_size-1);
+ variable status : file_open_status;
+ begin
+ if(file_name = "" or file_name = "none") then
+ mem:= (others => (others => '0'));
+ return mem;
+ end if;
+
+ file_open(status, f_in, file_name, read_mode);
+
+ if(status /= open_ok) then
+ if(fail_if_notfound) then
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure;
+ else
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning;
+ end if;
+ end if;
+
+ for I in 0 to mem_size-1 loop
+ readline (f_in, l);
+ -- read function gives us bit_vector
+ read (l, tmp_bv);
+ mem(I) := to_stdlogicvector(tmp_bv);
+ end loop;
+
+ file_close(f_in);
+ return mem;
+ end f_load_mem16_from_file;
+
+ -------------------------------------------------------------------
+
+ impure function f_load_mem8_from_file
+ (file_name : in string;
+ mem_size : in integer;
+ fail_if_notfound : boolean)
+ return t_ram8_type is
+
+ FILE f_in : text;
+ variable l : line;
+ variable tmp_bv : bit_vector(7 downto 0);
+ variable mem: t_ram8_type(0 to mem_size-1);
+ variable status : file_open_status;
+ begin
+ if(file_name = "" or file_name = "none") then
+ mem:= (others => (others => '0'));
+ return mem;
+ end if;
+
+ file_open(status, f_in, file_name, read_mode);
+
+ if(status /= open_ok) then
+ if(fail_if_notfound) then
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure;
+ else
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning;
+ end if;
+ end if;
+
+ for I in 0 to mem_size-1 loop
+ readline (f_in, l);
+ -- read function gives us bit_vector
+ read (l, tmp_bv);
+ mem(I) := to_stdlogicvector(tmp_bv);
+ end loop;
+
+ file_close(f_in);
+ return mem;
+ end f_load_mem8_from_file;
+
+ -------------------------------------------------------------------
+ -- initialization for 32-bit RAM split into 4x 8-bit BRAM
+ -------------------------------------------------------------------
+
+ impure function f_load_mem32_from_file_split
+ (file_name : in string;
+ mem_size : in integer;
+ fail_if_notfound : boolean;
+ byte_idx : in integer)
+ return t_ram8_type is
+
+ FILE f_in : text;
+ variable l : line;
+ variable tmp_bv : bit_vector(31 downto 0);
+ variable mem: t_ram8_type(0 to mem_size-1);
+ variable status : file_open_status;
+ begin
+ if(file_name = "" or file_name = "none") then
+ mem:= (others => (others => '0'));
+ return mem;
+ end if;
+
+ file_open(status, f_in, file_name, read_mode);
+
+ if(status /= open_ok) then
+ if(fail_if_notfound) then
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity failure;
+ else
+ report "f_load_mem_from_file(): can't open file '"&file_name&"'" severity warning;
+ end if;
+ end if;
+
+ for I in 0 to mem_size-1 loop
+ readline (f_in, l);
+ -- read function gives us bit_vector
+ read (l, tmp_bv);
+ mem(I) := to_stdlogicvector( tmp_bv((byte_idx+1)*8-1 downto byte_idx*8) );
+ end loop;
+
+ file_close(f_in);
+ return mem;
+ end f_load_mem32_from_file_split;
+
+end memory_loader_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd
new file mode 100644
index 000000000..87a4eee97
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/gc_shiftreg.vhd
@@ -0,0 +1,68 @@
+library ieee;
+
+use ieee.STD_LOGIC_1164.all;
+use ieee.NUMERIC_STD.all;
+
+use work.genram_pkg.all;
+
+entity gc_shiftreg is
+
+ generic (
+ g_size : integer);
+
+ port (
+ clk_i : in std_logic;
+ en_i : in std_logic;
+ d_i : in std_logic;
+ q_o : out std_logic;
+ a_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0));
+
+end gc_shiftreg;
+
+
+architecture wrapper of gc_shiftreg is
+
+ component SRLC32E
+ port (
+ Q : out std_ulogic;
+ A : in std_logic_vector (4 downto 0);
+ CE : in std_ulogic;
+ CLK : in std_ulogic;
+ D : in std_ulogic);
+ end component;
+
+ signal a : std_logic_vector(4 downto 0);
+ signal sr : std_logic_vector(g_size-1 downto 0);
+
+begin -- wrapper
+
+ assert (g_size <= 32) report "gc_shiftreg[xilinx]: forced SRL32 implementation can be done only for 32-bit or smaller shift registers" severity warning;
+
+ a <= std_logic_vector(resize(unsigned(a_i), 5));
+
+ gen_srl32 : if(g_size <= 32) generate
+ U_SRLC32 : SRLC32E
+ port map (
+ Q => q_o,
+ A => a,
+ CE => en_i,
+ CLK => clk_i,
+ D => d_i);
+ end generate gen_srl32;
+
+ gen_inferred : if(g_size > 32) generate
+
+ p_srl : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if en_i = '1' then
+ sr <= sr(sr'left - 1 downto 0) & d_i;
+ end if;
+ end if;
+ end process;
+
+ q_o <= sr(TO_INTEGER(unsigned(a_i)));
+ end generate gen_inferred;
+
+
+end wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd
new file mode 100644
index 000000000..db5a42b04
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram.vhd
@@ -0,0 +1,235 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable dual-port synchronous RAM (Xilinx version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_dpram.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2012-03-16
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: True dual-port synchronous RAM for Xilinx FPGAs with:
+-- - configurable address and data bus width
+-- - byte-addressing mode (data bus width restricted to multiple of 8 bits)
+-- Todo:
+-- - loading initial contents from file
+-- - add support for read-first/write-first address conflict resulution (only
+-- supported by Xilinx in VHDL templates)
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-- 2012-03-13 1.1 wterpstra Added initial value as array
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use std.textio.all;
+
+library work;
+use work.genram_pkg.all;
+use work.memory_loader_pkg.all;
+
+entity generic_dpram is
+
+ generic (
+ -- standard parameters
+ g_data_width : natural := 32;
+ g_size : natural := 16384;
+
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "read_first";
+ g_init_file : string := "";
+ g_dual_clock : boolean := true;
+ g_fail_if_file_not_found : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1'; -- synchronous reset, active LO
+
+ -- Port A
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+ -- Port B
+
+ clkb_i : in std_logic;
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0)
+ );
+
+end generic_dpram;
+
+
+
+architecture syn of generic_dpram is
+
+ constant c_gen_split :boolean := (g_dual_clock = false and g_data_width=32 and
+ g_with_byte_enable=true and (g_addr_conflict_resolution="dont_care" or
+ g_addr_conflict_resolution="read_first"));
+ constant c_gen_sc :boolean := (not c_gen_split) and (not g_dual_clock);
+ constant c_gen_dc :boolean := g_dual_clock;
+
+ component generic_dpram_split
+ generic (
+ g_size : natural;
+ g_addr_conflict_resolution : string := "dont_care";
+ g_init_file : string := "none";
+ g_fail_if_file_not_found : boolean := true);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ bwea_i : in std_logic_vector(3 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(31 downto 0);
+ qa_o : out std_logic_vector(31 downto 0);
+ bweb_i : in std_logic_vector(3 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(31 downto 0);
+ qb_o : out std_logic_vector(31 downto 0));
+ end component;
+
+ component generic_dpram_sameclock
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_with_byte_enable : boolean;
+ g_addr_conflict_resolution : string;
+ g_init_file : string;
+ g_fail_if_file_not_found : boolean);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0));
+ end component;
+
+ component generic_dpram_dualclock
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_with_byte_enable : boolean;
+ g_addr_conflict_resolution : string;
+ g_init_file : string;
+ g_fail_if_file_not_found : boolean);
+ port (
+ rst_n_i : in std_logic := '1';
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+ clkb_i : in std_logic;
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0));
+ end component;
+
+begin
+
+ -- generic_dpram_split is like generic_dpram_sameclock, but hardcoded to
+ -- 32-bit data width and split into 4 BRAMs, each of them 8-bit wide. It's
+ -- better for Xilinx ISE, because it's unable to infer DPRAM with byte-write
+ -- enables without using huge number of LUTs.
+ -- Since it's hardcoded to 32-bits data width, we need to keep
+ -- generic_dpram_sameclock as well. For reasons why generic_dpram_split is
+ -- hardcoded to 32-bits please check the Note in generic_dpram_split.vhd.
+ gen_splitram: if c_gen_split generate
+ U_RAM_SPLIT: generic_dpram_split
+ generic map(
+ g_size => g_size,
+ g_addr_conflict_resolution => g_addr_conflict_resolution,
+ g_init_file => g_init_file,
+ g_fail_if_file_not_found => g_fail_if_file_not_found)
+ port map(
+ rst_n_i => rst_n_i,
+ clk_i => clka_i,
+ bwea_i => bwea_i,
+ wea_i => wea_i,
+ aa_i => aa_i,
+ da_i => da_i,
+ qa_o => qa_o,
+ bweb_i => bweb_i,
+ web_i => web_i,
+ ab_i => ab_i,
+ db_i => db_i,
+ qb_o => qb_o);
+ end generate gen_splitram;
+
+ gen_single_clk : if c_gen_sc generate
+ U_RAM_SC: generic_dpram_sameclock
+ generic map (
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_with_byte_enable => g_with_byte_enable,
+ g_addr_conflict_resolution => g_addr_conflict_resolution,
+ g_init_file => g_init_file,
+ g_fail_if_file_not_found => g_fail_if_file_not_found)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clka_i,
+ bwea_i => bwea_i,
+ wea_i => wea_i,
+ aa_i => aa_i,
+ da_i => da_i,
+ qa_o => qa_o,
+ bweb_i => bweb_i,
+ web_i => web_i,
+ ab_i => ab_i,
+ db_i => db_i,
+ qb_o => qb_o);
+
+
+ end generate gen_single_clk;
+
+ gen_dual_clk : if c_gen_dc generate
+ U_RAM_DC: generic_dpram_dualclock
+ generic map (
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_with_byte_enable => g_with_byte_enable,
+ g_addr_conflict_resolution => g_addr_conflict_resolution,
+ g_init_file => g_init_file,
+ g_fail_if_file_not_found => g_fail_if_file_not_found)
+ port map (
+ rst_n_i => rst_n_i,
+ clka_i => clka_i,
+ bwea_i => bwea_i,
+ wea_i => wea_i,
+ aa_i => aa_i,
+ da_i => da_i,
+ qa_o => qa_o,
+ clkb_i => clkb_i,
+ bweb_i => bweb_i,
+ web_i => web_i,
+ ab_i => ab_i,
+ db_i => db_i,
+ qb_o => qb_o);
+ end generate gen_dual_clk;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd
new file mode 100644
index 000000000..9f3318d42
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_dualclock.vhd
@@ -0,0 +1,268 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable dual-port synchronous RAM (Xilinx version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_dpram.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2012-03-28
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: True dual-port synchronous RAM for Xilinx FPGAs with:
+-- - configurable address and data bus width
+-- - byte-addressing mode (data bus width restricted to multiple of 8 bits)
+-- Todo:
+-- - loading initial contents from file
+-- - add support for read-first/write-first address conflict resulution (only
+-- supported by Xilinx in VHDL templates)
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use std.textio.all;
+
+library work;
+use work.genram_pkg.all;
+use work.memory_loader_pkg.all;
+
+entity generic_dpram_dualclock is
+
+ generic (
+ -- standard parameters
+ g_data_width : natural := 32;
+ g_size : natural := 16384;
+
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "read_first";
+ g_init_file : string := "";
+ g_fail_if_file_not_found : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1'; -- synchronous reset, active LO
+
+ -- Port A
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+ -- Port B
+
+ clkb_i : in std_logic;
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0)
+ );
+
+end generic_dpram_dualclock;
+
+
+
+architecture syn of generic_dpram_dualclock is
+
+ constant c_num_bytes : integer := (g_data_width+7)/8;
+
+
+ type t_ram_type is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0);
+
+ impure function f_file_to_ramtype return t_ram_type is
+ variable tmp : t_ram_type;
+ variable n, pos : integer;
+ variable mem32 : t_ram32_type(0 to g_size-1);
+ variable mem16 : t_ram16_type(0 to g_size-1);
+ variable mem8 : t_ram8_type(0 to g_size-1);
+ variable arr : t_meminit_array(0 to g_size-1, g_data_width-1 downto 0);
+ begin
+ -- If no file was given, there is nothing to convert, just return
+ if (g_init_file = "" or g_init_file = "none") then
+ tmp := (others=>(others=>'0'));
+ return tmp;
+ end if;
+
+ arr := f_load_mem_from_file(g_init_file, g_size, g_data_width, g_fail_if_file_not_found);
+ pos := 0;
+ while(pos < g_size)loop
+ n := 0;
+ -- avoid ISE loop iteration limit
+ while (pos < g_size and n < 4096) loop
+ for i in 0 to g_data_width-1 loop
+ tmp(pos)(i) := arr(pos, i);
+ end loop; -- i
+ n := n+1;
+ pos := pos + 1;
+ end loop;
+ end loop;
+ return tmp;
+ end f_file_to_ramtype;
+
+ function f_is_synthesis return boolean is
+ begin
+ -- synthesis translate_off
+ return false;
+ -- synthesis translate_on
+ return true;
+ end f_is_synthesis;
+
+ shared variable ram : t_ram_type := f_file_to_ramtype;
+
+ signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0);
+ signal s_ram_in_a : std_logic_vector(g_data_width-1 downto 0);
+ signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0);
+ signal s_ram_in_b : std_logic_vector(g_data_width-1 downto 0);
+
+ signal clka_int : std_logic;
+ signal clkb_int : std_logic;
+
+ signal wea_rep, web_rep : std_logic_vector(c_num_bytes-1 downto 0);
+
+begin
+
+ wea_rep <= (others => wea_i);
+ web_rep <= (others => web_i);
+
+ s_we_a <= bwea_i and wea_rep;
+ s_we_b <= bweb_i and web_rep;
+
+ gen_with_byte_enable_readfirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "read_first" or
+ g_addr_conflict_resolution = "dont_care")) generate
+
+
+ process (clka_i)
+ begin
+ if rising_edge(clka_i) then
+ if f_is_synthesis then
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size);
+ end if;
+ for i in 0 to c_num_bytes-1 loop
+ if s_we_a(i) = '1' then
+ ram(to_integer(unsigned(aa_i)))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+
+ process (clkb_i)
+ begin
+ if rising_edge(clkb_i) then
+ if f_is_synthesis then
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size);
+ end if;
+ for i in 0 to c_num_bytes-1 loop
+ if s_we_b(i) = '1' then
+ ram(to_integer(unsigned(ab_i)))((i+1)*8-1 downto i*8)
+ := db_i((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+
+
+
+ end generate gen_with_byte_enable_readfirst;
+
+
+
+ gen_without_byte_enable_readfirst : if(g_with_byte_enable = false and (g_addr_conflict_resolution = "read_first" or
+ g_addr_conflict_resolution = "dont_care")) generate
+
+ process(clka_i)
+ begin
+ if rising_edge(clka_i) then
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ end if;
+ end if;
+ end process;
+
+
+ process(clkb_i)
+ begin
+ if rising_edge(clkb_i) then
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ end if;
+ end if;
+ end process;
+
+ end generate gen_without_byte_enable_readfirst;
+
+
+ gen_without_byte_enable_writefirst : if(g_with_byte_enable = false and g_addr_conflict_resolution = "write_first") generate
+
+ process(clka_i)
+ begin
+ if rising_edge(clka_i) then
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ qa_o <= da_i;
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ end if;
+ end if;
+ end process;
+
+
+ process(clkb_i)
+ begin
+ if rising_edge(clkb_i) then
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ qb_o <= db_i;
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ end if;
+ end if;
+ end process;
+ end generate gen_without_byte_enable_writefirst;
+
+
+ gen_without_byte_enable_nochange : if(g_with_byte_enable = false and g_addr_conflict_resolution = "no_change") generate
+
+ process(clka_i)
+ begin
+ if rising_edge(clka_i) then
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ end if;
+ end if;
+ end process;
+
+
+ process(clkb_i)
+ begin
+ if rising_edge(clkb_i) then
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ end if;
+ end if;
+ end process;
+ end generate gen_without_byte_enable_nochange;
+
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd
new file mode 100644
index 000000000..49151486d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_sameclock.vhd
@@ -0,0 +1,304 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable dual-port synchronous RAM (Xilinx version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_dpram_sameclock.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-25
+-- Last update: 2015-03-30
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: True dual-port synchronous RAM for Xilinx FPGAs with:
+-- - configurable address and data bus width
+-- - byte-addressing mode (data bus width restricted to multiple of 8 bits)
+-- Todo:
+-- - loading initial contents from file
+-- - add support for read-first/write-first address conflict resulution (only
+-- supported by Xilinx in VHDL templates)
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-25 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use std.textio.all;
+
+library work;
+use work.genram_pkg.all;
+use work.memory_loader_pkg.all;
+
+entity generic_dpram_sameclock is
+
+ generic (
+ g_data_width : natural := 32;
+ g_size : natural := 16384;
+
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "read_first";
+ g_init_file : string := "";
+ g_fail_if_file_not_found : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1'; -- synchronous reset, active LO
+
+ -- Port A
+ clk_i : in std_logic;
+
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+ qa_o : out std_logic_vector(g_data_width-1 downto 0);
+
+ -- Port B
+ bweb_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(g_data_width-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0)
+ );
+
+end generic_dpram_sameclock;
+
+
+
+architecture syn of generic_dpram_sameclock is
+
+ constant c_num_bytes : integer := (g_data_width + 7)/8;
+
+
+ type t_ram_type is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0);
+
+ impure function f_file_to_ramtype return t_ram_type is
+ variable tmp : t_ram_type;
+ variable n, pos : integer;
+ variable mem32 : t_ram32_type(0 to g_size-1);
+ variable mem16 : t_ram16_type(0 to g_size-1);
+ variable mem8 : t_ram8_type(0 to g_size-1);
+ variable arr : t_meminit_array(0 to g_size-1, g_data_width-1 downto 0);
+ begin
+ -- If no file was given, there is nothing to convert, just return
+ if (g_init_file = "" or g_init_file = "none") then
+ tmp := (others=>(others=>'0'));
+ return tmp;
+ end if;
+
+ arr := f_load_mem_from_file(g_init_file, g_size, g_data_width, g_fail_if_file_not_found);
+ pos := 0;
+ while(pos < g_size)loop
+ n := 0;
+ -- avoid ISE loop iteration limit
+ while (pos < g_size and n < 4096) loop
+ for i in 0 to g_data_width-1 loop
+ tmp(pos)(i) := arr(pos, i);
+ end loop; -- i
+ n := n+1;
+ pos := pos + 1;
+ end loop;
+ end loop;
+ return tmp;
+ end f_file_to_ramtype;
+
+ function f_is_synthesis return boolean is
+ begin
+ -- synthesis translate_off
+ return false;
+ -- synthesis translate_on
+ return true;
+ end f_is_synthesis;
+
+
+ shared variable ram : t_ram_type := f_file_to_ramtype;
+
+ signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0);
+ signal s_ram_in_a : std_logic_vector(g_data_width-1 downto 0);
+ signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0);
+ signal s_ram_in_b : std_logic_vector(g_data_width-1 downto 0);
+
+ signal wea_rep, web_rep : std_logic_vector(c_num_bytes-1 downto 0);
+
+begin
+
+ wea_rep <= (others => wea_i);
+ web_rep <= (others => web_i);
+
+ s_we_a <= bwea_i and wea_rep;
+ s_we_b <= bweb_i and web_rep;
+
+ gen_with_byte_enable_readfirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "read_first" or
+ g_addr_conflict_resolution = "dont_care")) generate
+
+ Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qa_o <= ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1));
+ for i in 0 to c_num_bytes-1 loop
+ if s_we_a(i) = '1' then
+ ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+ Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qb_o <= ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1));
+ for i in 0 to c_num_bytes-1 loop
+ if(s_we_b(i) = '1') then
+ ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := db_i((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+ end generate gen_with_byte_enable_readfirst;
+
+
+
+ gen_without_byte_enable_readfirst : if(g_with_byte_enable = false and (g_addr_conflict_resolution = "read_first" or
+ g_addr_conflict_resolution = "dont_care")) generate
+
+ Port_A: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if f_is_synthesis then
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size);
+ end if;
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ end if;
+ end if;
+ end process;
+
+ Port_B: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if f_is_synthesis then
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size);
+ end if;
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ end if;
+ end if;
+ end process;
+ end generate gen_without_byte_enable_readfirst;
+
+ gen_without_byte_enable_writefirst : if(g_with_byte_enable = false and g_addr_conflict_resolution = "write_first") generate
+
+ Port_A: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ qa_o <= da_i;
+ else
+ if f_is_synthesis then
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ Port_B: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ qb_o <= db_i;
+ else
+ if f_is_synthesis then
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ end generate gen_without_byte_enable_writefirst;
+
+
+ gen_without_byte_enable_nochange : if(g_with_byte_enable = false and g_addr_conflict_resolution = "no_change") generate
+
+ Port_A: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(wea_i = '1') then
+ ram(to_integer(unsigned(aa_i))) := da_i;
+ else
+ if f_is_synthesis then
+ qa_o <= ram(to_integer(unsigned(aa_i)));
+ else
+ qa_o <= ram(to_integer(unsigned(aa_i)) mod g_size);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ Port_B: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(web_i = '1') then
+ ram(to_integer(unsigned(ab_i))) := db_i;
+ else
+ if f_is_synthesis then
+ qb_o <= ram(to_integer(unsigned(ab_i)));
+ else
+ qb_o <= ram(to_integer(unsigned(ab_i)) mod g_size);
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ end generate gen_without_byte_enable_nochange;
+
+ gen_with_byte_enable_writefirst : if(g_with_byte_enable = true and (g_addr_conflict_resolution = "write_first")) generate
+
+ Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ for i in 0 to c_num_bytes-1 loop
+ if s_we_a(i) = '1' then
+ ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := da_i((i+1)*8-1 downto i*8);
+ qa_o((i+1)*8-1 downto i*8) <= da_i((i+1)*8-1 downto i*8);
+ else
+ qa_o((i+1)*8-1 downto i*8) <= ram(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1))((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+ Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ for i in 0 to c_num_bytes-1 loop
+ if s_we_b(i) = '1' then
+ ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8) := db_i((i+1)*8-1 downto i*8);
+ qb_o((i+1)*8-1 downto i*8) <= db_i((i+1)*8-1 downto i*8);
+ else
+ qb_o((i+1)*8-1 downto i*8) <= ram(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1))((i+1)*8-1 downto i*8);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+ end generate gen_with_byte_enable_writefirst;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd
new file mode 100644
index 000000000..b6d692bb8
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_dpram_split.vhd
@@ -0,0 +1,233 @@
+-------------------------------------------------------------------------------
+-- Title : Dual-port synchronous RAM with byte-write for Xilinx
+-------------------------------------------------------------------------------
+-- File : generic_dpram_split.vhd
+-- Author : Grzegorz Daniluk
+-- Company : CERN BE-CO-HT
+-- Created : 2017-02-13
+-- Last update: 2017-02-13
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description:
+-- This module is 32-bit RAM with byte-write enables. It was created for Xilinx
+-- FPGAs, since Xilinx ISE is unable to infer dual-port block-RAM with
+-- byte-writes (e.g. based on generic_dpram_sameclock.vhd module). When
+-- synthesizing generic_dpram_sameclock with g_with_byte_enable, ISE uses a lot
+-- of LUTs to get the byte-write behavior (instead of using the features of BRAM
+-- blocks).
+--
+-- Note:
+-- This module is hardcoded to 32-bits and 4 ram modules (ram0-3). It would be
+-- much cleaner to have a generic code and using ram(0 to g_data_width/8-1).
+-- However, it looks that ISE is not able to initialize 3-d array that would be
+-- needed in this case.
+-- I.e. this works:
+-- shared variable ram0 : t_split_ram := f_file_to_ramtype(0);
+-- shared variable ram1 : t_split_ram := f_file_to_ramtype(1);
+-- shared variable ram2 : t_split_ram := f_file_to_ramtype(2);
+-- shared variable ram3 : t_split_ram := f_file_to_ramtype(3);
+--
+-- but this doesn't:
+-- type t_split_ram_array is array(0 to 3) of t_split_ram;
+-- shared variable ram : t_split_ram_array := (f_file_to_ramtype(0),
+-- f_file_to_ramtype(1),f_file_to_ramtype(2),
+-- f_file_to_ramtype(3));
+--
+-- By "doesn't work" I mean that ISE does not fail during the synthesis, but RAM
+-- does not get initialized.
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.genram_pkg.all;
+use work.memory_loader_pkg.all;
+
+entity generic_dpram_split is
+ generic (
+ g_size : natural := 16384;
+ g_addr_conflict_resolution : string := "read_first";
+ g_init_file : string := "";
+ g_fail_if_file_not_found : boolean := true);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+
+ -- Port A
+ bwea_i : in std_logic_vector(3 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(31 downto 0);
+ qa_o : out std_logic_vector(31 downto 0);
+
+ -- Port B
+ bweb_i : in std_logic_vector(3 downto 0);
+ web_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ db_i : in std_logic_vector(31 downto 0);
+ qb_o : out std_logic_vector(31 downto 0));
+end generic_dpram_split;
+
+architecture syn of generic_dpram_split is
+
+ constant c_data_width : integer := 32;
+ constant c_num_bytes : integer := (c_data_width+7)/8;
+
+ type t_split_ram is array(0 to g_size-1) of std_logic_vector(7 downto 0);
+
+ impure function f_file_to_ramtype(idx : integer) return t_split_ram is
+ variable tmp : t_split_ram;
+ variable mem8 : t_ram8_type(0 to g_size-1);
+ begin
+ -- If no file was given, there is nothing to convert, just return
+ if (g_init_file = "" or g_init_file = "none") then
+ tmp := (others=>(others=>'0'));
+ return tmp;
+ end if;
+
+ mem8 := f_load_mem32_from_file_split(g_init_file, g_size, g_fail_if_file_not_found, idx);
+ return t_split_ram(mem8);
+ end f_file_to_ramtype;
+
+ impure function f_file_contents return t_meminit_array is
+ begin
+ return f_load_mem_from_file(g_init_file, g_size, c_data_width, g_fail_if_file_not_found);
+ end f_file_contents;
+
+ shared variable ram0 : t_split_ram := f_file_to_ramtype(0);
+ shared variable ram1 : t_split_ram := f_file_to_ramtype(1);
+ shared variable ram2 : t_split_ram := f_file_to_ramtype(2);
+ shared variable ram3 : t_split_ram := f_file_to_ramtype(3);
+
+ signal s_we_a : std_logic_vector(c_num_bytes-1 downto 0);
+ signal s_we_b : std_logic_vector(c_num_bytes-1 downto 0);
+ signal wea_rep : std_logic_vector(c_num_bytes-1 downto 0);
+ signal web_rep : std_logic_vector(c_num_bytes-1 downto 0);
+
+begin
+
+ assert (g_addr_conflict_resolution = "read_first" or g_addr_conflict_resolution = "dont_care")
+ report "generic_dpram_split: only read_first and dont_care supported for now" severity failure;
+
+ -- combine byte-write enable with write signals
+ wea_rep <= (others => wea_i);
+ web_rep <= (others => web_i);
+ s_we_a <= bwea_i and wea_rep;
+ s_we_b <= bweb_i and web_rep;
+
+ --------------------------------------------------
+ -- yes, I know this is 4 times exactly the same code for ram0,1,2,3,
+ -- but ISE fails to initialize BRAM when ram is an array (check Note
+ -- in the header of this file).
+ GEN_RAM0_Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qa_o(7 downto 0) <= ram0(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1));
+ if s_we_a(0) = '1' then
+ ram0(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(7 downto 0);
+ end if;
+ end if;
+ end process;
+
+ GEN_RAM0_Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qb_o(7 downto 0) <= ram0(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1));
+ if s_we_b(0) = '1' then
+ ram0(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(7 downto 0);
+ end if;
+ end if;
+ end process;
+
+ --------------------------------------------------
+
+ GEN_RAM1_Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qa_o(15 downto 8) <= ram1(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1));
+ if s_we_a(1) = '1' then
+ ram1(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(15 downto 8);
+ end if;
+ end if;
+ end process;
+
+ GEN_RAM1_Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qb_o(15 downto 8) <= ram1(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1));
+ if s_we_b(1) = '1' then
+ ram1(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(15 downto 8);
+ end if;
+ end if;
+ end process;
+
+ --------------------------------------------------
+
+ GEN_RAM2_Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qa_o(23 downto 16) <= ram2(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1));
+ if s_we_a(2) = '1' then
+ ram2(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(23 downto 16);
+ end if;
+ end if;
+ end process;
+
+ GEN_RAM2_Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qb_o(23 downto 16) <= ram2(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1));
+ if s_we_b(2) = '1' then
+ ram2(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(23 downto 16);
+ end if;
+ end if;
+ end process;
+
+ --------------------------------------------------
+
+ GEN_RAM3_Port_A: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qa_o(31 downto 24) <= ram3(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1));
+ if s_we_a(3) = '1' then
+ ram3(f_check_bounds(to_integer(unsigned(aa_i)), 0, g_size-1)) := da_i(31 downto 24);
+ end if;
+ end if;
+ end process;
+
+ GEN_RAM3_Port_B: process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ qb_o(31 downto 24) <= ram3(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1));
+ if s_we_b(3) = '1' then
+ ram3(f_check_bounds(to_integer(unsigned(ab_i)), 0, g_size-1)) := db_i(31 downto 24);
+ end if;
+ end if;
+ end process;
+
+ --------------------------------------------------
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd
new file mode 100644
index 000000000..5eb14729a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/genrams/xilinx/generic_simple_dpram.vhd
@@ -0,0 +1,100 @@
+-------------------------------------------------------------------------------
+-- Title : Parametrizable dual-port synchronous RAM (Xilinx version)
+-- Project : Generics RAMs and FIFOs collection
+-------------------------------------------------------------------------------
+-- File : generic_simple_dpram.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2013-03-04
+-- Last update: 2013-10-30
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: True dual-port synchronous RAM for Xilinx FPGAs with:
+-- - configurable address and data bus width
+-- - byte-addressing mode (data bus width restricted to multiple of 8 bits)
+-- Todo:
+-- - loading initial contents from file
+-- - add support for read-first/write-first address conflict resulution (only
+-- supported by Xilinx in VHDL templates)
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-03-04 1.0 wterpstra Initial version: wrapper to generic_dpram
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use std.textio.all;
+
+library work;
+use work.genram_pkg.all;
+use work.memory_loader_pkg.all;
+
+entity generic_simple_dpram is
+
+ generic (
+ -- standard parameters
+ g_data_width : natural := 32;
+ g_size : natural := 16384;
+
+ g_with_byte_enable : boolean := false;
+ g_addr_conflict_resolution : string := "read_first";
+ g_init_file : string := "";
+ g_dual_clock : boolean := true;
+ g_fail_if_file_not_found : boolean := true
+ );
+
+ port (
+ rst_n_i : in std_logic := '1'; -- synchronous reset, active LO
+
+ -- Port A
+ clka_i : in std_logic;
+ bwea_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ wea_i : in std_logic;
+ aa_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ da_i : in std_logic_vector(g_data_width-1 downto 0);
+
+ -- Port B
+ clkb_i : in std_logic;
+ ab_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ qb_o : out std_logic_vector(g_data_width-1 downto 0)
+ );
+
+end generic_simple_dpram;
+
+
+
+architecture syn of generic_simple_dpram is
+
+begin
+
+ -- Works well enough until a Xilinx guru can optimize it.
+ true_dp : generic_dpram
+ generic map(
+ g_data_width => g_data_width,
+ g_size => g_size,
+ g_with_byte_enable => g_with_byte_enable,
+ g_addr_conflict_resolution => g_addr_conflict_resolution,
+ g_init_file => g_init_file,
+ g_dual_clock => g_dual_clock)
+ port map(
+ rst_n_i => rst_n_i,
+ clka_i => clka_i,
+ bwea_i => bwea_i,
+ wea_i => wea_i,
+ aa_i => aa_i,
+ da_i => da_i,
+ qa_o => open,
+ clkb_i => clkb_i,
+ bweb_i => f_zeros((g_data_width+7)/8),
+ web_i => '0',
+ ab_i => ab_i,
+ db_i => f_zeros(g_data_width),
+ qb_o => qb_o);
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd
new file mode 100644
index 000000000..cde1f31bb
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/axi4_pkg.vhd
@@ -0,0 +1,253 @@
+-------------------------------------------------------------------------------
+-- Title : AXI4Lite-to-WB bridge package
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : axi4_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.wishbone_pkg.all;
+
+package axi4_pkg is
+
+ -- AXI4-Full interface, master output ports, 32 bits
+ type t_axi4_full_master_out_32 is record
+ ARVALID : std_logic;
+ AWVALID : std_logic;
+ BREADY : std_logic;
+ RREADY : std_logic;
+ WLAST : std_logic;
+ WVALID : std_logic;
+ ARID : std_logic_vector (11 downto 0);
+ AWID : std_logic_vector (11 downto 0);
+ WID : std_logic_vector (11 downto 0);
+ ARBURST : std_logic_vector (1 downto 0);
+ ARLOCK : std_logic_vector (1 downto 0);
+ ARSIZE : std_logic_vector (2 downto 0);
+ AWBURST : std_logic_vector (1 downto 0);
+ AWLOCK : std_logic_vector (1 downto 0);
+ AWSIZE : std_logic_vector (2 downto 0);
+ ARPROT : std_logic_vector (2 downto 0);
+ AWPROT : std_logic_vector (2 downto 0);
+ ARADDR : std_logic_vector (31 downto 0);
+ AWADDR : std_logic_vector (31 downto 0);
+ WDATA : std_logic_vector (31 downto 0);
+ ARCACHE : std_logic_vector (3 downto 0);
+ ARLEN : std_logic_vector (3 downto 0);
+ ARQOS : std_logic_vector (3 downto 0);
+ AWCACHE : std_logic_vector (3 downto 0);
+ AWLEN : std_logic_vector (3 downto 0);
+ AWQOS : std_logic_vector (3 downto 0);
+ WSTRB : std_logic_vector (3 downto 0);
+ end record;
+
+ -- AXI4-Full interface, master input ports, 32 bits
+ type t_axi4_full_master_in_32 is record
+ ARREADY : std_logic;
+ AWREADY : std_logic;
+ BVALID : std_logic;
+ RLAST : std_logic;
+ RVALID : std_logic;
+ WREADY : std_logic;
+ BID : std_logic_vector (11 downto 0);
+ RID : std_logic_vector (11 downto 0);
+ BRESP : std_logic_vector (1 downto 0);
+ RRESP : std_logic_vector (1 downto 0);
+ RDATA : std_logic_vector (31 downto 0);
+ end record;
+
+ -- AXI4-Lite interface, master output ports, 32 bits
+ type t_axi4_lite_master_out_32 is record
+ ARVALID : std_logic;
+ AWVALID : std_logic;
+ BREADY : std_logic;
+ RREADY : std_logic;
+ WLAST : std_logic;
+ WVALID : std_logic;
+ ARADDR : std_logic_vector (31 downto 0);
+ AWADDR : std_logic_vector (31 downto 0);
+ WDATA : std_logic_vector (31 downto 0);
+ WSTRB : std_logic_vector (3 downto 0);
+ end record;
+
+ -- AXI4-Lite interface, master input ports, 32 bits
+ type t_axi4_lite_master_in_32 is record
+ ARREADY : std_logic;
+ AWREADY : std_logic;
+ BVALID : std_logic;
+ RLAST : std_logic;
+ RVALID : std_logic;
+ WREADY : std_logic;
+ BRESP : std_logic_vector (1 downto 0);
+ RRESP : std_logic_vector (1 downto 0);
+ RDATA : std_logic_vector (31 downto 0);
+ end record;
+
+ constant c_axi4_lite_default_master_in_32 : t_axi4_lite_master_in_32 :=
+ (
+ AWREADY => '0',
+ ARREADY => '0',
+ BVALID => '0',
+ RLAST => '0',
+ RVALID => '0',
+ WREADY => '0',
+ BRESP => "00",
+ RRESP => "00",
+ RDATA => (others => '0')
+ );
+
+
+ constant c_axi4_lite_default_master_out_32 : t_axi4_lite_master_out_32 :=
+ (
+ ARVALID => '0',
+ AWVALID => '0',
+ BREADY => '0',
+ RREADY => '0',
+ WLAST => '0',
+ WVALID => '0',
+ ARADDR => (others => '0'),
+ AWADDR => (others => '0'),
+ WDATA => (others => '0'),
+ WSTRB => (others => '0')
+ );
+
+
+
+ subtype t_axi4_lite_slave_in_32 is t_axi4_lite_master_out_32;
+ subtype t_axi4_lite_slave_out_32 is t_axi4_lite_master_in_32;
+
+ constant c_AXI4_RESP_OKAY : std_logic_vector(1 downto 0) := "00";
+ constant c_AXI4_RESP_EXOKAY : std_logic_vector(1 downto 0) := "01";
+ constant c_AXI4_RESP_SLVERR : std_logic_vector(1 downto 0) := "10";
+ constant c_AXI4_RESP_DECERR : std_logic_vector(1 downto 0) := "11";
+
+ function f_axi4_full_to_lite (
+ f : t_axi4_full_master_out_32
+ ) return t_axi4_lite_master_out_32;
+
+ function f_axi4_lite_to_full (
+ l : t_axi4_lite_master_in_32
+ ) return t_axi4_full_master_in_32;
+
+ component xwb_axi4lite_bridge is
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ axi4_slave_i : in t_axi4_lite_slave_in_32;
+ axi4_slave_o : out t_axi4_lite_slave_out_32;
+ wb_master_o : out t_wishbone_master_out;
+ wb_master_i : in t_wishbone_master_in);
+ end component xwb_axi4lite_bridge;
+
+ component wb_axi4lite_bridge is
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ ARVALID : in std_logic;
+ AWVALID : in std_logic;
+ BREADY : in std_logic;
+ RREADY : in std_logic;
+ WLAST : in std_logic;
+ WVALID : in std_logic;
+ ARADDR : in std_logic_vector (31 downto 0);
+ AWADDR : in std_logic_vector (31 downto 0);
+ WDATA : in std_logic_vector (31 downto 0);
+ WSTRB : in std_logic_vector (3 downto 0);
+ ARREADY : out std_logic;
+ AWREADY : out std_logic;
+ BVALID : out std_logic;
+ RLAST : out std_logic;
+ RVALID : out std_logic;
+ WREADY : out std_logic;
+ BRESP : out std_logic_vector (1 downto 0);
+ RRESP : out std_logic_vector (1 downto 0);
+ RDATA : out std_logic_vector (31 downto 0);
+
+ wb_adr : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_m2s : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_sel : out std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_cyc : out std_logic;
+ wb_stb : out std_logic;
+ wb_we : out std_logic;
+
+ wb_dat_s2m : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_err : in std_logic := '0';
+ wb_rty : in std_logic := '0';
+ wb_ack : in std_logic;
+ wb_stall : in std_logic
+ );
+ end component;
+
+end package;
+
+package body axi4_pkg is
+
+ function f_axi4_full_to_lite (
+ f : t_axi4_full_master_out_32
+ ) return t_axi4_lite_master_out_32 is
+ variable l : t_axi4_lite_master_out_32;
+ begin
+
+ l.ARVALID := f.ARVALID;
+ l.AWVALID := f.AWVALID;
+ l.BREADY := f.BREADY;
+ l.RREADY := f.RREADY;
+ l.WLAST := f.WLAST;
+ l.WVALID := f.WVALID;
+ l.ARADDR := f.ARADDR;
+ l.AWADDR := f.AWADDR;
+ l.WDATA := f.WDATA;
+ l.WSTRB := f.WSTRB;
+
+ return l;
+
+ end f_axi4_full_to_lite;
+
+ function f_axi4_lite_to_full (
+ l : t_axi4_lite_master_in_32
+ ) return t_axi4_full_master_in_32 is
+ variable f : t_axi4_full_master_in_32;
+ begin
+ f.ARREADY := l.ARREADY;
+ f.AWREADY := l.AWREADY;
+ f.BVALID := l.BVALID;
+ f.RLAST := l.RLAST;
+ f.RVALID := l.RVALID;
+ f.WREADY := l.WREADY;
+ f.BID := (others => '0');
+ f.RID := (others => '0');
+ f.BRESP := l.BRESP;
+ f.RRESP := l.RRESP;
+ f.RDATA := l.RDATA;
+
+ return f;
+
+ end f_axi4_lite_to_full;
+
+
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd
new file mode 100644
index 000000000..b8e63eca3
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/wb_axi4lite_bridge.vhd
@@ -0,0 +1,131 @@
+-------------------------------------------------------------------------------
+-- Title : AXI4Lite-to-WB bridge
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wb_axi4lite_bridge.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.axi4_pkg.all;
+use work.wishbone_pkg.all;
+
+entity wb_axi4lite_bridge is
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ ARVALID : in std_logic;
+ AWVALID : in std_logic;
+ BREADY : in std_logic;
+ RREADY : in std_logic;
+ WLAST : in std_logic;
+ WVALID : in std_logic;
+ ARADDR : in std_logic_vector (31 downto 0);
+ AWADDR : in std_logic_vector (31 downto 0);
+ WDATA : in std_logic_vector (31 downto 0);
+ WSTRB : in std_logic_vector (3 downto 0);
+ ARREADY : out std_logic;
+ AWREADY : out std_logic;
+ BVALID : out std_logic;
+ RLAST : out std_logic;
+ RVALID : out std_logic;
+ WREADY : out std_logic;
+ BRESP : out std_logic_vector (1 downto 0);
+ RRESP : out std_logic_vector (1 downto 0);
+ RDATA : out std_logic_vector (31 downto 0);
+
+ wb_adr : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_m2s : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_sel : out std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_cyc : out std_logic;
+ wb_stb : out std_logic;
+ wb_we : out std_logic;
+
+ wb_dat_s2m : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_err : in std_logic := '0';
+ wb_rty : in std_logic := '0';
+ wb_ack : in std_logic;
+ wb_stall : in std_logic
+ );
+
+end wb_axi4lite_bridge;
+
+architecture rtl of wb_axi4lite_bridge is
+
+ signal axi_in : t_axi4_lite_master_out_32;
+ signal axi_out : t_axi4_lite_master_in_32;
+ signal wb_in : t_wishbone_master_in;
+ signal wb_out : t_wishbone_master_out;
+
+begin
+
+ axi_in.ARVALID <= ARVALID;
+ axi_in.AWVALID <= AWVALID;
+ axi_in.BREADY <= BREADY;
+ axi_in.RREADY <= RREADY;
+ axi_in.WLAST <= WLAST;
+ axi_in.WVALID <= WVALID;
+ axi_in.ARADDR <= ARADDR;
+ axi_in.AWADDR <= AWADDR;
+ axi_in.WDATA <= WDATA;
+ axi_in.WSTRB <= WSTRB;
+ ARREADY <= axi_out.ARREADY;
+ AWREADY <= axi_out.AWREADY;
+ BVALID <= axi_out.BVALID;
+ RLAST <= axi_out.RLAST;
+ RVALID <= axi_out.RVALID;
+ WREADY <= axi_out.WREADY;
+ BRESP <= axi_out.BRESP;
+ RRESP <= axi_out.RRESP;
+ RDATA <= axi_out.RDATA;
+
+ wb_adr <= wb_out.adr;
+ wb_dat_m2s <= wb_out.dat;
+ wb_stb <= wb_out.stb;
+ wb_sel <= wb_out.sel;
+ wb_cyc <= wb_out.cyc;
+ wb_we <= wb_out.we;
+
+ wb_in.err <= wb_err;
+ wb_in.rty <= wb_rty;
+ wb_in.ack <= wb_ack;
+ wb_in.int <= '0';
+ wb_in.stall <= wb_stall;
+ wb_in.dat <= wb_dat_s2m;
+
+ U_Wrapped_Bridge : xwb_axi4lite_bridge
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ axi4_slave_i => axi_in,
+ axi4_slave_o => axi_out,
+ wb_master_o => wb_out,
+ wb_master_i => wb_in);
+
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd
new file mode 100644
index 000000000..51838931a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_axi4lite_bridge/xwb_axi4lite_bridge.vhd
@@ -0,0 +1,196 @@
+-------------------------------------------------------------------------------
+-- Title : AXI4Lite-to-WB bridge wrapper
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : xwb_axi4lite_bridge.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.axi4_pkg.all;
+use work.wishbone_pkg.all;
+
+entity xwb_axi4lite_bridge is
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ axi4_slave_i : in t_axi4_lite_slave_in_32;
+ axi4_slave_o : out t_axi4_lite_slave_out_32;
+
+ wb_master_o : out t_wishbone_master_out;
+ wb_master_i : in t_wishbone_master_in
+
+ );
+
+end xwb_axi4lite_bridge;
+
+architecture rtl of xwb_axi4lite_bridge is
+
+ constant c_timeout : integer := 256;
+
+ type t_state is
+ (IDLE, ISSUE_WRITE, ISSUE_READ, COMPLETE_WRITE, COMPLETE_READ, WAIT_ACK_READ, WAIT_ACK_WRITE, RESPONSE_READ, RESPONSE_WRITE);
+
+ signal state : t_state;
+
+ signal count : unsigned(10 downto 0);
+
+begin
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ axi4_slave_o <= c_axi4_lite_default_master_in_32;
+ wb_master_o.cyc <= '0';
+ state <= IDLE;
+ else
+ case state is
+ when IDLE =>
+ wb_master_o.cyc <= '0';
+ axi4_slave_o.ARREADY <= '1';
+ axi4_slave_o.AWREADY <= '1';
+ axi4_slave_o.WREADY <= '0';
+ axi4_slave_o.BVALID <= '0';
+ axi4_slave_o.BRESP <= (others => 'X');
+ axi4_slave_o.RDATA <= (others => 'X');
+ axi4_slave_o.RRESP <= (others => 'X');
+ axi4_slave_o.RVALID <= '0';
+ axi4_slave_o.RLAST <= '0';
+
+ if(axi4_slave_i.AWVALID = '1') then
+ state <= ISSUE_WRITE;
+ wb_master_o.adr <= axi4_slave_i.AWADDR;
+ elsif (axi4_slave_i.ARVALID = '1') then
+ state <= ISSUE_READ;
+ wb_master_o.adr <= axi4_slave_i.ARADDR;
+ end if;
+
+ when ISSUE_WRITE =>
+ axi4_slave_o.WREADY <= '1';
+
+ wb_master_o.cyc <= '1';
+ wb_master_o.we <= '1';
+
+ if(axi4_slave_i.WVALID = '1') then
+ wb_master_o.stb <= '1';
+ wb_master_o.sel <= axi4_slave_i.WSTRB;
+ wb_master_o.dat <= axi4_slave_i.WDATA;
+ state <= COMPLETE_WRITE;
+ end if;
+
+ when ISSUE_READ =>
+
+ wb_master_o.cyc <= '1';
+ wb_master_o.stb <= '1';
+ wb_master_o.we <= '0';
+ axi4_slave_o.RVALID <= '0';
+ axi4_slave_o.RLAST <= '0';
+ state <= COMPLETE_READ;
+
+ when COMPLETE_READ =>
+ if(wb_master_i.stall = '0') then
+ wb_master_o.stb <= '0';
+ if(wb_master_i.ack = '1') then
+ state <= IDLE;
+ axi4_slave_o.RRESP <= c_AXI4_RESP_EXOKAY;
+ axi4_slave_o.RDATA <= wb_master_i.dat;
+ axi4_slave_o.RVALID <= '1';
+ axi4_slave_o.RLAST <= '1';
+ wb_master_o.cyc <= '0';
+ else
+ state <= WAIT_ACK_READ;
+ count <= (others => '0');
+ end if;
+ end if;
+
+
+ when COMPLETE_WRITE =>
+ if(wb_master_i.stall = '0') then
+ wb_master_o.stb <= '0';
+ if(wb_master_i.ack = '1') then
+ state <= RESPONSE_WRITE;
+ axi4_slave_o.BRESP <= c_AXI4_RESP_EXOKAY;
+ wb_master_o.cyc <= '0';
+ else
+ state <= WAIT_ACK_WRITE;
+ count <= (others => '0');
+ end if;
+ end if;
+
+
+ when WAIT_ACK_WRITE =>
+ if(wb_master_i.ack = '1') then
+ state <= RESPONSE_WRITE;
+ axi4_slave_o.BRESP <= c_AXI4_RESP_EXOKAY;
+ wb_master_o.cyc <= '0';
+ elsif count = c_timeout then
+ state <= RESPONSE_WRITE;
+ axi4_slave_o.BRESP <= c_AXI4_RESP_SLVERR;
+ wb_master_o.cyc <= '0';
+ end if;
+ count <= count + 1;
+
+ when WAIT_ACK_READ =>
+ if(wb_master_i.ack = '1') then
+ state <= IDLE;
+ axi4_slave_o.RRESP <= c_AXI4_RESP_EXOKAY;
+ axi4_slave_o.RVALID <= '1';
+ axi4_slave_o.RLAST <= '1';
+ axi4_slave_o.RDATA <= wb_master_i.dat;
+ wb_master_o.cyc <= '0';
+ elsif count = c_timeout then
+ state <= IDLE;
+ axi4_slave_o.RRESP <= c_AXI4_RESP_SLVERR;
+ axi4_slave_o.RVALID <= '1';
+ axi4_slave_o.RLAST <= '1';
+ axi4_slave_o.RDATA <= (others => 'X');
+ wb_master_o.cyc <= '0';
+ end if;
+ count <= count + 1;
+
+
+ when RESPONSE_WRITE =>
+ if (axi4_slave_i.BREADY = '1') then
+ axi4_slave_o.BVALID <= '1';
+ state <= IDLE;
+ end if;
+
+ when RESPONSE_READ => null;
+
+
+ end case;
+
+
+
+ end if;
+ end if;
+ end process;
+
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd
new file mode 100644
index 000000000..9ca049b71
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/sdb_rom.vhd
@@ -0,0 +1,160 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wishbone_pkg.all;
+
+entity sdb_rom is
+ generic(
+ g_layout : t_sdb_record_array;
+ g_masters : natural;
+ g_bus_end : unsigned(63 downto 0);
+ g_sdb_name : string := "WB4-Crossbar-GSI ");
+ port(
+ clk_sys_i : in std_logic;
+ master_i : in std_logic_vector(g_masters-1 downto 0);
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out);
+end sdb_rom;
+
+architecture rtl of sdb_rom is
+ alias c_layout : t_sdb_record_array(g_layout'length downto 1) is g_layout;
+
+ -- The ROM must describe all slaves, the crossbar itself and the optional information records
+ constant c_used_entries : natural := c_layout'high + 1;
+ constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2
+ constant c_sdb_words : natural := c_sdb_device_length / c_wishbone_data_width;
+ constant c_rom_words : natural := c_rom_entries * c_sdb_words;
+ constant c_rom_depth : natural := f_ceil_log2(c_rom_words);
+ constant c_rom_lowbits : natural := f_ceil_log2(c_wishbone_data_width / 8);
+ constant c_sdb_name : string := f_string_fix_len(g_sdb_name , 19, ' ', false);
+
+ -- Index of the MSI entry in SDB
+ type t_nat_array is array(g_masters-1 downto 0) of natural;
+ function f_master_positions return t_nat_array is
+ variable typ : std_logic_vector(7 downto 0);
+ variable result : t_nat_array;
+ variable master : natural := 0;
+ begin
+ for rec in c_layout'low to c_layout'high loop
+ typ := c_layout(rec)(7 downto 0);
+ case typ is
+ when x"03" | x"f3" =>
+ assert master < g_masters
+ report "Too many msi records found"
+ severity failure;
+
+ result(master) := rec;
+ master := master + 1;
+
+ when others => null;
+ end case;
+ end loop;
+
+ if master = 0 then
+ result := (others => 0);
+ else
+ assert master = g_masters
+ report "Insufficient msi records found (" & Integer'image(master) & "/" & Integer'image(g_masters) & ")"
+ severity failure;
+ end if;
+ return result;
+ end f_master_positions;
+
+ constant c_master_positions : t_nat_array := f_master_positions;
+ constant c_msi : boolean := c_master_positions(0) /= 0;
+
+ function f_msi_flag_index(y : std_logic_vector) return std_logic_vector is
+ variable offset : unsigned(c_rom_depth-1 downto 0) := (others => '0');
+ variable result : std_logic_vector(c_rom_depth-1 downto 0) := (others => '0');
+ begin
+ for i in c_master_positions'range loop
+ if c_msi then
+ offset := to_unsigned(c_master_positions(i)*16, offset'length);
+ end if;
+ for b in result'range loop
+ result(b) := result(b) or (offset(b) and y(i));
+ end loop;
+ end loop;
+ return result;
+ end f_msi_flag_index;
+
+ type t_rom is array(c_rom_words-1 downto 0) of t_wishbone_data;
+
+ function f_build_rom
+ return t_rom
+ is
+ variable res : t_rom := (others => (others => '0'));
+ variable sdb_record : t_sdb_record;
+ variable sdb_component : t_sdb_component;
+ begin
+ sdb_record(511 downto 480) := x"5344422D" ; -- sdb_magic
+ sdb_record(479 downto 464) := std_logic_vector(to_unsigned(c_used_entries, 16)); -- sdb_records
+ sdb_record(463 downto 456) := x"01"; -- sdb_version
+ sdb_record(455 downto 448) := x"00"; -- sdb_bus_type = sdb_wishbone
+ sdb_record( 7 downto 0) := x"00"; -- record_type = sdb_interconnect
+
+ sdb_component.addr_first := (others => '0');
+ sdb_component.addr_last := std_logic_vector(g_bus_end);
+ sdb_component.product.vendor_id := x"0000000000000651"; -- GSI
+ sdb_component.product.device_id := x"e6a542c9";
+ sdb_component.product.version := x"00000003";
+ sdb_component.product.date := x"20120511";
+ sdb_component.product.name := c_sdb_name;
+ sdb_record(447 downto 8) := f_sdb_embed_component(sdb_component, (others => '0'));
+
+ for i in 0 to c_sdb_words-1 loop
+ res(c_sdb_words-1-i) :=
+ sdb_record((i+1)*c_wishbone_data_width-1 downto i*c_wishbone_data_width);
+ end loop;
+
+ for idx in c_layout'range loop
+ sdb_record := c_layout(idx);
+
+ -- All local/temporary types => empty record
+ if sdb_record(7 downto 4) = x"f" then
+ sdb_record(3 downto 0) := x"f";
+ end if;
+
+ for i in 0 to c_sdb_words-1 loop
+ res((idx+1)*c_sdb_words-1-i) :=
+ sdb_record((i+1)*c_wishbone_data_width-1 downto i*c_wishbone_data_width);
+ end loop;
+ end loop;
+
+ return res;
+ end f_build_rom;
+
+ signal rom : t_rom := f_build_rom;
+
+ signal s_adr : unsigned(c_rom_depth-1 downto 0);
+ signal s_sel : unsigned(c_rom_depth-1 downto 0);
+
+ signal r_rom : t_wishbone_data;
+ signal r_flag : t_wishbone_data;
+ signal r_ack : std_logic;
+
+begin
+
+ slave_o.dat <= r_rom or r_flag;
+ slave_o.ack <= r_ack;
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+ slave_o.stall <= '0';
+ slave_o.int <= '0'; -- Tom sucks! This should not be here.
+
+ s_adr <= unsigned(slave_i.adr(c_rom_depth+c_rom_lowbits-1 downto c_rom_lowbits));
+ s_sel <= unsigned(f_msi_flag_index(master_i));
+
+ slave_clk : process(clk_sys_i)
+ begin
+ if (rising_edge(clk_sys_i)) then
+ r_ack <= slave_i.cyc and slave_i.stb;
+ r_rom <= rom(to_integer(s_adr));
+ r_flag <= (others => '0');
+ if s_adr = s_sel and c_msi then
+ r_flag(r_flag'high) <= '1';
+ end if;
+ end if;
+ end process;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd
new file mode 100644
index 000000000..265e3495b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_crossbar.vhd
@@ -0,0 +1,427 @@
+-------------------------------------------------------------------------------
+-- Title : An MxS Wishbone crossbar switch
+-- Project : General Cores Library (gencores)
+-------------------------------------------------------------------------------
+-- File : xwb_crossbar.vhd
+-- Author : Wesley W. Terpstra
+-- Company : GSI
+-- Created : 2011-06-08
+-- Last update: 2011-09-22
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- An MxS Wishbone crossbar switch
+--
+-- All masters, slaves, and the crossbar itself must share the same WB clock.
+-- All participants must support the same data bus width.
+--
+-- If a master raises STB_O with an address not mapped by the crossbar,
+-- ERR_I will be raised. If two masters address the same slave
+-- simultaneously, the lowest numbered master is granted access.
+--
+-- The implementation of this crossbar locks a master to a slave so long as
+-- CYC_O is held high.
+--
+-- Synthesis/timing relevant facts:
+-- (m)asters, (s)laves, masked (a)ddress bits
+--
+-- Area required = O(ms log(ma))
+-- Arbitration depth = O(log(msa))
+-- Master->Slave depth = O(log(m))
+-- Slave->Master depth = O(log(s))
+--
+-- If g_registered = false, arbitration depth is added to M->S and S->M.
+--
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 GSI / Wesley W. Terpstra
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2012-03-05 3.0 wterpstra made address generic and check overlap
+-- 2011-11-04 2.0 wterpstra timing improvements
+-- 2011-06-08 1.0 wterpstra import from SVN
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wishbone_pkg.all;
+
+entity xwb_crossbar is
+ generic(
+ g_num_masters : integer := 2;
+ g_num_slaves : integer := 1;
+ g_registered : boolean := false;
+ -- Address of the slaves connected
+ g_address : t_wishbone_address_array;
+ g_mask : t_wishbone_address_array);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ -- Master connections (INTERCON is a slave)
+ slave_i : in t_wishbone_slave_in_array(g_num_masters-1 downto 0);
+ slave_o : out t_wishbone_slave_out_array(g_num_masters-1 downto 0);
+ -- Slave connections (INTERCON is a master)
+ master_i : in t_wishbone_master_in_array(g_num_slaves-1 downto 0);
+ master_o : out t_wishbone_master_out_array(g_num_slaves-1 downto 0);
+ -- Master granted access to SDB for use by MSI crossbar (please ignore it)
+ sdb_sel_o : out std_logic_vector(g_num_masters-1 downto 0));
+end xwb_crossbar;
+
+architecture rtl of xwb_crossbar is
+ alias c_address : t_wishbone_address_array(g_num_slaves-1 downto 0) is g_address;
+ alias c_mask : t_wishbone_address_array(g_num_slaves-1 downto 0) is g_mask;
+
+ -- Confirm that no address ranges overlap
+ function f_ranges_ok
+ return boolean
+ is
+ constant zero : t_wishbone_address := (others => '0');
+ constant align : std_logic_vector(f_ceil_log2(c_wishbone_data_width)-4 downto 0) := (others => '0');
+ begin
+ -- all (i,j) with 0 <= i < j < n
+ if g_num_slaves > 1 then
+ for i in 0 to g_num_slaves-2 loop
+ for j in i+1 to g_num_slaves-1 loop
+ assert not (((c_mask(i) and c_mask(j)) and (c_address(i) xor c_address(j))) = zero) or
+ ((c_mask(i) or not c_address(i)) = zero) or -- disconnected slave?
+ ((c_mask(j) or not c_address(j)) = zero) -- disconnected slave?
+ report "Address ranges must be distinct (slaves " &
+ Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" &
+ f_bits2string(c_mask(i)) & "] & " &
+ Integer'image(j) & "[" & f_bits2string(c_address(j)) & "/" &
+ f_bits2string(c_mask(j)) & "])"
+ severity Failure;
+ end loop;
+ end loop;
+ end if;
+ for i in 0 to g_num_slaves-1 loop
+ assert (c_address(i) and not c_mask(i)) = zero or -- at least 1 bit outside mask
+ (not c_address(i) or c_mask(i)) = zero -- all bits outside mask (= disconnected)
+ report "Address bits not in mask; slave #" &
+ Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" &
+ f_bits2string(c_mask(i)) & "]"
+ severity Failure;
+
+ assert c_mask(i)(align'range) = align
+ report "Address space smaller than a wishbone register; slave #" &
+ Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" &
+ f_bits2string(c_mask(i)) & "]"
+ severity Failure;
+
+ -- Working case
+ report "Mapping slave #" &
+ Integer'image(i) & "[" & f_bits2string(c_address(i)) & "/" &
+ f_bits2string(c_mask(i)) & "]"
+ severity Note;
+ end loop;
+ return true;
+ end f_ranges_ok;
+ constant c_ok : boolean := f_ranges_ok;
+
+ -- Crossbar connection matrix
+ type matrix is array (g_num_masters-1 downto 0, g_num_slaves downto 0) of std_logic;
+
+ -- Add an 'error' device to the list of slaves
+ signal master_ie : t_wishbone_master_in_array(g_num_slaves downto 0);
+ signal master_oe : t_wishbone_master_out_array(g_num_slaves downto 0);
+ signal virtual_ERR : std_logic;
+
+ signal matrix_old : matrix; -- Registered connection matrix
+ signal matrix_new : matrix; -- The new values of the matrix
+
+ -- Either matrix_old or matrix_new, depending on g_registered
+ signal granted : matrix;
+
+ -- 1 => 0 2 => 1 3..4 => 2 5..8 => 3
+ function log2(i : natural) return natural is
+ begin
+ if i <= 1
+ then return 0;
+ else return log2((i+1)/2) + 1;
+ end if;
+ end log2;
+
+ -- 0 => 1 1 => 2 2 => 4 3 => 8
+ function pow2(i : natural) return natural is
+ begin
+ if i = 0
+ then return 1;
+ else return pow2(i-1)*2;
+ end if;
+ end pow2;
+
+ -- If any of the bits are '1', the whole thing is '1'
+ -- This function makes the check explicitly have logarithmic depth.
+ function vector_OR(x : std_logic_vector)
+ return std_logic
+ is
+ constant len : integer := x'length;
+ constant mid : integer := len / 2;
+ alias y : std_logic_vector(len-1 downto 0) is x;
+ begin
+ if len = 1
+ then return y(0);
+ else return vector_OR(y(len-1 downto mid)) or
+ vector_OR(y(mid-1 downto 0));
+ end if;
+ end vector_OR;
+
+ -- Kogge-Stone network of ORs.
+ -- A log(n) deep, n-wide circuit where:
+ -- output(i) = OR_{j<=i} input(j)
+ function ks_OR(input : std_logic_vector)
+ return std_logic_vector
+ is
+ constant width : natural := input'length;
+ constant stages : natural := log2(width);
+ variable prev : std_logic_vector(width-1 downto 0);
+ variable output : std_logic_vector(width-1 downto 0);
+ begin
+ prev := input;
+ if stages = 0 then
+ output := prev;
+ else
+ for l in 0 to stages-1 loop
+ for i in 0 to width-1 loop
+ if i >= pow2(l)
+ then output(i) := prev(i) or prev(i-pow2(l));
+ else output(i) := prev(i);
+ end if;
+ end loop;
+ prev := output;
+ end loop;
+ end if;
+ return output;
+ end ks_OR;
+
+ -- Impure because it accesses c_{address, mask}
+ function matrix_logic(
+ matrix_old : matrix;
+ slave_i : t_wishbone_slave_in_array(g_num_masters-1 downto 0))
+ return matrix
+ is
+ subtype row is std_logic_vector(g_num_masters-1 downto 0);
+ subtype column is std_logic_vector(g_num_slaves downto 0);
+
+ variable tmp : std_logic;
+ variable tmp_column : column;
+ variable tmp_row : row;
+
+ variable request : matrix; -- Which slaves do the masters address log(S)
+ variable selected : matrix; -- Which master wins arbitration log(M) request
+ variable sbusy : column; -- Does the slave's previous connection persist?
+ variable mbusy : row; -- Does the master's previous connection persist?
+ variable matrix_new : matrix;
+ begin
+ -- A slave is busy iff it services an in-progress cycle
+ for slave in g_num_slaves downto 0 loop
+ for master in g_num_masters-1 downto 0 loop
+ tmp_row(master) := matrix_old(master, slave) and slave_i(master).CYC;
+ end loop;
+ sbusy(slave) := vector_OR(tmp_row);
+ end loop;
+
+ -- A master is busy iff it services an in-progress cycle
+ for master in g_num_masters-1 downto 0 loop
+ for slave in g_num_slaves downto 0 loop
+ tmp_column(slave) := matrix_old(master, slave);
+ end loop;
+ mbusy(master) := vector_OR(tmp_column) and slave_i(master).CYC;
+ end loop;
+
+ -- Decode the request address to see if master wants access
+ for master in g_num_masters-1 downto 0 loop
+ for slave in g_num_slaves-1 downto 0 loop
+ tmp := not vector_OR((slave_i(master).ADR and c_mask(slave)) xor c_address(slave));
+ tmp_column(slave) := tmp;
+ request(master, slave) := slave_i(master).CYC and slave_i(master).STB and tmp;
+ end loop;
+ tmp_column(g_num_slaves) := '0';
+ -- If no slaves match request, bind to 'error device'
+ request(master, g_num_slaves) := slave_i(master).CYC and slave_i(master).STB and not vector_OR(tmp_column);
+ end loop;
+
+ -- Arbitrate among the requesting masters
+ -- Policy: lowest numbered master first
+ for slave in g_num_slaves downto 0 loop
+ -- OR together all the requests by higher priority masters
+ for master in 0 to g_num_masters-1 loop
+ tmp_row(master) := request(master, slave);
+ end loop;
+ tmp_row := ks_OR(tmp_row);
+
+ -- Grant to highest priority master
+ selected(0, slave) := request(0, slave); -- master 0 always wins
+ if g_num_masters > 1 then
+ for master in 1 to g_num_masters-1 loop
+ selected(master, slave) := -- only if requested and no lower requests
+ not tmp_row(master-1) and request(master, slave);
+ end loop;
+ end if;
+ end loop;
+
+ -- Determine the master granted access
+ -- Policy: if cycle still in progress, preserve the previous choice
+ for slave in g_num_slaves downto 0 loop
+ for master in g_num_masters-1 downto 0 loop
+ if sbusy(slave) = '1' or mbusy(master) = '1' then
+ matrix_new(master, slave) := matrix_old(master, slave);
+ else
+ matrix_new(master, slave) := selected(master, slave);
+ end if;
+ end loop;
+ end loop;
+
+ return matrix_new;
+ end matrix_logic;
+
+ subtype slave_row is std_logic_vector(g_num_masters-1 downto 0);
+ type slave_matrix is array (natural range <>) of slave_row;
+
+ function slave_matrix_OR(x : slave_matrix)
+ return std_logic_vector is
+ variable result : std_logic_vector(x'LENGTH-1 downto 0);
+ begin
+ for i in x'LENGTH-1 downto 0 loop
+ result(i) := vector_OR(x(i));
+ end loop;
+ return result;
+ end slave_matrix_OR;
+
+ -- Select the master pins the slave will receive
+ function slave_logic(slave : integer;
+ granted : matrix;
+ slave_i : t_wishbone_slave_in_array(g_num_masters-1 downto 0))
+ return t_wishbone_master_out
+ is
+ variable CYC_row : slave_row;
+ variable STB_row : slave_row;
+ variable ADR_matrix : slave_matrix(c_wishbone_address_width-1 downto 0);
+ variable SEL_matrix : slave_matrix((c_wishbone_address_width/8)-1 downto 0);
+ variable WE_row : slave_row;
+ variable DAT_matrix : slave_matrix(c_wishbone_data_width-1 downto 0);
+ begin
+ -- Rename all the signals ready for big_or
+ for master in g_num_masters-1 downto 0 loop
+ CYC_row(master) := slave_i(master).CYC and granted(master, slave);
+ STB_row(master) := slave_i(master).STB and granted(master, slave);
+ for bit in c_wishbone_address_width-1 downto 0 loop
+ ADR_matrix(bit)(master) := slave_i(master).ADR(bit) and granted(master, slave);
+ end loop;
+ for bit in (c_wishbone_address_width/8)-1 downto 0 loop
+ SEL_matrix(bit)(master) := slave_i(master).SEL(bit) and granted(master, slave);
+ end loop;
+ WE_row(master) := slave_i(master).WE and granted(master, slave);
+ for bit in c_wishbone_data_width-1 downto 0 loop
+ DAT_matrix(bit)(master) := slave_i(master).DAT(bit) and granted(master, slave);
+ end loop;
+ end loop;
+
+ return (
+ CYC => vector_OR(CYC_row),
+ STB => vector_OR(STB_row),
+ ADR => slave_matrix_OR(ADR_matrix),
+ SEL => slave_matrix_OR(SEL_matrix),
+ WE => vector_OR(WE_row),
+ DAT => slave_matrix_OR(DAT_matrix));
+ end slave_logic;
+
+ subtype master_row is std_logic_vector(g_num_slaves downto 0);
+ type master_matrix is array (natural range <>) of master_row;
+
+ function master_matrix_OR(x : master_matrix)
+ return std_logic_vector is
+ variable result : std_logic_vector(x'LENGTH-1 downto 0);
+ begin
+ for i in x'LENGTH-1 downto 0 loop
+ result(i) := vector_OR(x(i));
+ end loop;
+ return result;
+ end master_matrix_OR;
+
+ -- Select the slave pins the master will receive
+ function master_logic(master : integer;
+ granted : matrix;
+ master_ie : t_wishbone_master_in_array(g_num_slaves downto 0))
+ return t_wishbone_slave_out
+ is
+ variable ACK_row : master_row;
+ variable ERR_row : master_row;
+ variable RTY_row : master_row;
+ variable STALL_row : master_row;
+ variable DAT_matrix : master_matrix(c_wishbone_data_width-1 downto 0);
+ begin
+ -- We use inverted logic on STALL so that if no slave granted => stall
+ for slave in g_num_slaves downto 0 loop
+ ACK_row(slave) := master_ie(slave).ACK and granted(master, slave);
+ ERR_row(slave) := master_ie(slave).ERR and granted(master, slave);
+ RTY_row(slave) := master_ie(slave).RTY and granted(master, slave);
+ STALL_row(slave) := not master_ie(slave).STALL and granted(master, slave);
+ for bit in c_wishbone_data_width-1 downto 0 loop
+ DAT_matrix(bit)(slave) := master_ie(slave).DAT(bit) and granted(master, slave);
+ end loop;
+ end loop;
+
+ return (
+ ACK => vector_OR(ACK_row),
+ ERR => vector_OR(ERR_row),
+ RTY => vector_OR(RTY_row),
+ STALL => not vector_OR(STALL_row),
+ DAT => master_matrix_OR(DAT_matrix),
+ INT => '0');
+ end master_logic;
+begin
+ -- The virtual error slave is pretty straight-forward:
+ master_o <= master_oe(g_num_slaves-1 downto 0);
+ master_ie(g_num_slaves-1 downto 0) <= master_i;
+
+ master_ie(g_num_slaves) <= (
+ ACK => '0',
+ ERR => virtual_ERR,
+ RTY => '0',
+ STALL => '0',
+ DAT => (others => '0'),
+ INT => '0');
+ virtual_error_slave : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ virtual_ERR <= master_oe(g_num_slaves).CYC and master_oe(g_num_slaves).STB;
+ end if;
+ end process virtual_error_slave;
+
+ -- Copy the matrix to a register:
+ matrix_new <= matrix_logic(matrix_old, slave_i);
+ main : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ matrix_old <= (others => (others => '0'));
+ else
+ matrix_old <= matrix_new;
+ end if;
+ end if;
+ end process main;
+
+ -- Is the crossbar combinatorial or registered
+ granted <= matrix_old when g_registered else matrix_new;
+
+ -- Make the slave connections
+ slave_matrixs : for slave in g_num_slaves downto 0 generate
+ master_oe(slave) <= slave_logic(slave, granted, slave_i);
+ end generate;
+
+ -- Make the master connections
+ master_matrixs : for master in g_num_masters-1 downto 0 generate
+ slave_o(master) <= master_logic(master, granted, master_ie);
+ end generate;
+
+ -- Tell SDB which master is accessing it (SDB is last slave)
+ sdb_masters : for master in g_num_masters-1 downto 0 generate
+ sdb_sel_o(master) <= granted(master, g_num_slaves-1);
+ end generate;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd
new file mode 100644
index 000000000..010fe078a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd
@@ -0,0 +1,232 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wishbone_pkg.all;
+
+entity xwb_sdb_crossbar is
+ generic(
+ g_num_masters : natural := 1;
+ g_num_slaves : natural := 1;
+ g_registered : boolean := false;
+ g_wraparound : boolean := true;
+ g_layout : t_sdb_record_array;
+ g_sdb_addr : t_wishbone_address;
+ g_sdb_name : string := "WB4-Crossbar-GSI ");
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ -- Master connections (INTERCON is a slave)
+ slave_i : in t_wishbone_slave_in_array (g_num_masters-1 downto 0);
+ slave_o : out t_wishbone_slave_out_array (g_num_masters-1 downto 0);
+ msi_master_i : in t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in);
+ msi_master_o : out t_wishbone_master_out_array(g_num_masters-1 downto 0);
+ -- Slave connections (INTERCON is a master)
+ master_i : in t_wishbone_master_in_array (g_num_slaves -1 downto 0);
+ master_o : out t_wishbone_master_out_array(g_num_slaves -1 downto 0);
+ msi_slave_i : in t_wishbone_slave_in_array (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in);
+ msi_slave_o : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0));
+end xwb_sdb_crossbar;
+
+architecture rtl of xwb_sdb_crossbar is
+ alias c_layout : t_sdb_record_array(g_layout'length-1 downto 0) is g_layout;
+
+ -- Pretty print device name
+ function f_trim(s : string) return string is
+ variable cut : natural;
+ begin
+ byte : for i in s'length downto 1 loop
+ cut := i;
+ exit byte when s(i) /= ' ';
+ end loop;
+ return s(1 to cut);
+ end f_trim;
+
+ -- Step 1. Place the SDB ROM on the bus
+ -- How much space does the ROM need?
+ constant c_used_entries : natural := c_layout'length + 1;
+ constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2
+ constant c_sdb_bytes : natural := c_sdb_device_length / 8;
+ constant c_rom_bytes : natural := c_rom_entries * c_sdb_bytes;
+
+ constant c_bus_last : unsigned := f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, false);
+ constant c_msi_last : unsigned := f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, true);
+
+ type t_addresses is record
+ bus_address : t_wishbone_address_array(g_num_slaves -1 downto 0);
+ bus_mask : t_wishbone_address_array(g_num_slaves -1 downto 0);
+ msi_address : t_wishbone_address_array(g_num_masters-1 downto 0);
+ msi_mask : t_wishbone_address_array(g_num_masters-1 downto 0);
+ end record t_addresses;
+
+ -- Step 3. Map device address begin values
+ function f_addresses return t_addresses is
+ variable result : t_addresses;
+
+ variable typ : std_logic_vector(7 downto 0);
+ variable sdb_component : t_sdb_component;
+
+ variable address : t_wishbone_address;
+ variable extend : std_logic_vector(63 downto 0) := (others => '0');
+ variable size : unsigned(63 downto 0);
+
+ variable bus_index : natural := 0;
+ variable msi_index : natural := 0;
+ begin
+ for i in c_layout'low to c_layout'high loop
+ typ := c_layout(i)(7 downto 0);
+ sdb_component := f_sdb_extract_component(c_layout(i)(447 downto 8));
+
+ if (typ(7) = '0') then --only do address checks on non-meta record types (typ >= 0x80)
+ -- Range must be valid
+ assert unsigned(sdb_component.addr_first) <= unsigned(sdb_component.addr_last)
+ report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & ") must precede sdb_component.addr_last address (" & f_bits2string(sdb_component.addr_last) & ")."
+ severity Failure;
+
+ -- Address must fit within Wishbone address width
+ address := sdb_component.addr_first(address'range);
+ extend(address'range) := address;
+ assert sdb_component.addr_first = extend
+ report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & " does not fit in t_wishbone_address."
+ severity Failure;
+
+ size := unsigned(sdb_component.addr_last) - unsigned(sdb_component.addr_first);
+ -- size must be of the form 000000...00001111...1
+ assert (size and (size + 1)) = 0
+ report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") has an address range that is not a power of 2 minus one (" & f_bits2string(std_logic_vector(size)) & "). This is not supported by the crossbar."
+ severity Warning;
+
+ -- fix the size up to the form 000...0001111...11
+ for j in c_wishbone_address_width-2 downto 0 loop
+ size(j) := size(j) or size(j+1);
+ end loop;
+
+ -- the base address must be aligned to the size
+ assert (unsigned(sdb_component.addr_first) and size) = 0
+ report "Wishbone slave device #" & Integer'image(i) & " (" & f_trim(sdb_component.product.name) & ") sdb_component.addr_first (" & f_bits2string(sdb_component.addr_first) & ") is not aligned. This is not supported by the crossbar."
+ severity Failure;
+
+ end if;
+
+ -- Record the address for posterity
+ case typ is
+ when x"01" | x"02" =>
+ assert bus_index < g_num_slaves
+ report "Too many device and bridge records found in g_layout"
+ severity Failure;
+
+ size := c_bus_last - size;
+ result.bus_address(bus_index) := address;
+ result.bus_mask (bus_index) := std_logic_vector(size(address'range));
+ bus_index := bus_index + 1;
+
+ when x"03" =>
+ assert msi_index < g_num_masters
+ report "Too many msi records found in g_layout"
+ severity Failure;
+
+ size := c_msi_last - size;
+ result.msi_address(msi_index) := address;
+ result.msi_mask (msi_index) := std_logic_vector(size(address'range));
+ msi_index := msi_index + 1;
+
+ when x"f1" | x"f2" =>
+ result.bus_address(bus_index) := (others => '1');
+ result.bus_mask (bus_index) := (others => '0');
+ bus_index := bus_index + 1;
+
+ when x"f3" =>
+ result.msi_address(msi_index) := (others => '1');
+ result.msi_mask (msi_index) := (others => '0');
+ msi_index := msi_index + 1;
+
+ when others => null;
+ end case;
+ end loop;
+
+ -- There must be exactly the right number of slave SDB records
+ assert bus_index = g_num_slaves
+ report "Too few device and bridge records found in g_layout. Did you accidentally include meta records in the supplied number of slaves?"
+ severity Failure;
+
+ -- It is OK to have no master records (backwards compat)
+ if msi_index = 0 then
+ result.msi_address := (others => (others => '1'));
+ result.msi_mask := (others => (others => '0'));
+ else
+ assert msi_index = g_num_masters
+ report "Too few msi records found in g_layout"
+ severity Failure;
+ end if;
+
+ return result;
+ end f_addresses;
+
+ constant c_addresses : t_addresses := f_addresses;
+
+ -- Figure out the mask for the SDB slave
+ constant c_rom_mask : unsigned(63 downto 0) :=
+ c_bus_last - to_unsigned(c_rom_bytes-1, 64);
+ constant c_sdb_mask : t_wishbone_address :=
+ std_logic_vector(c_rom_mask(c_wishbone_address_width-1 downto 0));
+
+ -- Fill bus crossbar parameters
+ constant c_address : t_wishbone_address_array(g_num_slaves downto 0) :=
+ g_sdb_addr & c_addresses.bus_address;
+ constant c_mask : t_wishbone_address_array(g_num_slaves downto 0) :=
+ c_sdb_mask & c_addresses.bus_mask;
+
+ signal master_i_1 : t_wishbone_master_in_array(g_num_slaves downto 0);
+ signal master_o_1 : t_wishbone_master_out_array(g_num_slaves downto 0);
+ signal sdb_sel : std_logic_vector(g_num_masters-1 downto 0);
+
+begin
+
+ -- Pass-through all slave ports except SDB
+ master_i_1(g_num_slaves-1 downto 0) <= master_i;
+ master_o <= master_o_1(g_num_slaves-1 downto 0);
+
+ rom : sdb_rom
+ generic map(
+ g_layout => c_layout,
+ g_masters => g_num_masters,
+ g_bus_end => c_bus_last,
+ g_sdb_name => g_sdb_name)
+ port map(
+ clk_sys_i => clk_sys_i,
+ master_i => sdb_sel,
+ slave_i => master_o_1(g_num_slaves),
+ slave_o => master_i_1(g_num_slaves));
+
+ crossbar : xwb_crossbar
+ generic map(
+ g_num_masters => g_num_masters,
+ g_num_slaves => g_num_slaves + 1,
+ g_registered => g_registered,
+ g_address => c_address,
+ g_mask => c_mask)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ slave_i => slave_i,
+ slave_o => slave_o,
+ master_i => master_i_1,
+ master_o => master_o_1,
+ sdb_sel_o => sdb_sel);
+
+ msi : xwb_crossbar
+ generic map(
+ g_num_masters => g_num_slaves,
+ g_num_slaves => g_num_masters,
+ g_registered => g_registered,
+ g_address => c_addresses.msi_address,
+ g_mask => c_addresses.msi_mask)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ slave_i => msi_slave_i,
+ slave_o => msi_slave_o,
+ master_i => msi_master_i,
+ master_o => msi_master_o,
+ sdb_sel_o => open);
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd
new file mode 100644
index 000000000..71c3f3840
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_dpram/xwb_dpram.vhd
@@ -0,0 +1,185 @@
+-------------------------------------------------------------------------------
+-- Title : Dual-port RAM for WR core
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : wrc_dpram.vhd
+-- Author : Grzegorz Daniluk
+-- Company : CERN
+-- Created : 2011-02-15
+-- Last update: 2017-02-03
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- Dual port RAM with wishbone interface
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-02-15 1.0 greg.d Created
+-- 2011-06-09 1.01 twlostow Removed unnecessary generics
+-- 2011-21-09 1.02 twlostow Struct-ized version
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+
+entity xwb_dpram is
+ generic(
+ g_size : natural := 16384;
+ g_init_file : string := "";
+ g_must_have_init_file : boolean := true;
+ g_slave1_interface_mode : t_wishbone_interface_mode;
+ g_slave2_interface_mode : t_wishbone_interface_mode;
+ g_slave1_granularity : t_wishbone_address_granularity;
+ g_slave2_granularity : t_wishbone_address_granularity
+ );
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ slave1_i : in t_wishbone_slave_in;
+ slave1_o : out t_wishbone_slave_out;
+ slave2_i : in t_wishbone_slave_in;
+ slave2_o : out t_wishbone_slave_out
+ );
+end xwb_dpram;
+
+architecture struct of xwb_dpram is
+
+ signal s_wea : std_logic;
+ signal s_web : std_logic;
+ signal s_bwea : std_logic_vector(3 downto 0);
+ signal s_bweb : std_logic_vector(3 downto 0);
+
+ signal slave1_in : t_wishbone_slave_in;
+ signal slave1_out : t_wishbone_slave_out;
+ signal slave2_in : t_wishbone_slave_in;
+ signal slave2_out : t_wishbone_slave_out;
+
+begin
+ U_Adapter1 : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => g_slave1_interface_mode,
+ g_master_granularity => WORD,
+ g_slave_use_struct => true,
+ g_slave_mode => g_slave1_interface_mode,
+ g_slave_granularity => g_slave1_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ slave_i => slave1_i,
+ slave_o => slave1_o,
+ master_i => slave1_out,
+ master_o => slave1_in);
+
+ U_Adapter2 : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => g_slave2_interface_mode,
+ g_master_granularity => WORD,
+ g_slave_use_struct => true,
+ g_slave_mode => g_slave2_interface_mode,
+ g_slave_granularity => g_slave2_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ slave_i => slave2_i,
+ slave_o => slave2_o,
+ master_i => slave2_out,
+ master_o => slave2_in);
+
+ U_DPRAM : generic_dpram
+ generic map(
+ -- standard parameters
+ g_data_width => 32,
+ g_size => g_size,
+ g_with_byte_enable => true,
+ g_addr_conflict_resolution => "dont_care",
+ g_init_file => g_init_file,
+ g_dual_clock => false
+ )
+ port map(
+ rst_n_i => rst_n_i,
+ -- Port A
+ clka_i => clk_sys_i,
+ bwea_i => s_bwea,
+ wea_i => s_wea,
+ aa_i => slave1_in.adr(f_log2_size(g_size)-1 downto 0),
+ da_i => slave1_in.dat,
+ qa_o => slave1_out.dat,
+ -- Port B
+ clkb_i => clk_sys_i,
+ bweb_i => s_bweb,
+ web_i => s_web,
+ ab_i => slave2_in.adr(f_log2_size(g_size)-1 downto 0),
+ db_i => slave2_in.dat,
+ qb_o => slave2_out.dat
+ );
+
+ -- I know this looks weird, but otherwise ISE generates distributed RAM instead of block
+ -- RAM
+ s_bwea <= slave1_in.sel when s_wea = '1' else f_zeros(c_wishbone_data_width/8);
+ s_bweb <= slave2_in.sel when s_web = '1' else f_zeros(c_wishbone_data_width/8);
+
+ s_wea <= slave1_in.we and slave1_in.stb and slave1_in.cyc;
+ s_web <= slave2_in.we and slave2_in.stb and slave2_in.cyc;
+
+ process(clk_sys_i)
+ begin
+ if(rising_edge(clk_sys_i)) then
+ if(rst_n_i = '0') then
+ slave1_out.ack <= '0';
+ slave2_out.ack <= '0';
+ else
+ if(slave1_out.ack = '1' and g_slave1_interface_mode = CLASSIC) then
+ slave1_out.ack <= '0';
+ else
+ slave1_out.ack <= slave1_in.cyc and slave1_in.stb;
+ end if;
+
+ if(slave2_out.ack = '1' and g_slave2_interface_mode = CLASSIC) then
+ slave2_out.ack <= '0';
+ else
+ slave2_out.ack <= slave2_in.cyc and slave2_in.stb;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ slave1_out.stall <= '0';
+ slave2_out.stall <= '0';
+ slave1_out.err <= '0';
+ slave2_out.err <= '0';
+ slave1_out.rty <= '0';
+ slave2_out.rty <= '0';
+ slave1_out.int <= '0';
+ slave2_out.int <= '0';
+
+end struct;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v
new file mode 100644
index 000000000..af57302c2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/lm32_allprofiles.v
@@ -0,0 +1,102181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_full (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_full
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_full (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+ divide_d,
+ modulus_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+ divide_by_zero_x,
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+input divide_d;
+input modulus_d;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+output divide_by_zero_x;
+reg divide_by_zero_x;
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+wire [32:0] t;
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+assign t = {p[ 32-2:0], a[ 32-1]} - b;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+ if (divide_d == 1'b1)
+ state <= 3'b011 ;
+ if (modulus_d == 1'b1)
+ state <= 3'b010 ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+ 3'b011 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= a;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+ 3'b010 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= p;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_full (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 256;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 32'h0;
+parameter icache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 256;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 32'h0;
+parameter dcache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+
+
+parameter watchpoints = 0;
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_a;
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+wire q_d;
+wire x_result_sel_mc_arith_d;
+reg x_result_sel_mc_arith_x;
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (4 -1):0] csr_d;
+reg [ (4 -1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+wire bus_error_d;
+reg bus_error_x;
+reg data_bus_error_exception_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] memop_pc_w;
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+wire divide_d;
+wire divide_q_d;
+wire modulus_d;
+wire modulus_q_d;
+wire divide_by_zero_x;
+
+
+
+
+
+
+wire mc_stall_request_x;
+wire [ (32-1):0] mc_result_x;
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+wire iflush;
+wire icache_stall_request;
+wire icache_restart_request;
+wire icache_refill_request;
+wire icache_refilling;
+
+
+
+
+
+
+wire dflush_x;
+reg dflush_m;
+wire dcache_stall_request;
+wire dcache_restart_request;
+wire dcache_refill_request;
+wire dcache_refilling;
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+wire branch_taken_x;
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] eba;
+
+
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire exception_x;
+reg exception_m;
+reg exception_w;
+wire exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+
+
+
+
+
+ reg [ (32-1):0] data_bus_error_addr;
+
+wire instruction_bus_error_exception;
+wire data_bus_error_exception;
+
+
+
+
+wire divide_by_zero_exception;
+
+
+wire system_call_exception;
+
+
+
+reg data_bus_error_seen;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_full #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+ .branch_taken_x (branch_taken_x),
+ .branch_target_x (branch_target_x),
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+ .iflush (iflush),
+
+
+
+
+ .dcache_restart_request (dcache_restart_request),
+ .dcache_refill_request (dcache_refill_request),
+ .dcache_refilling (dcache_refilling),
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+ .icache_stall_request (icache_stall_request),
+ .icache_restart_request (icache_restart_request),
+ .icache_refill_request (icache_refill_request),
+ .icache_refilling (icache_refilling),
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .bus_error_d (bus_error_d),
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_full decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+ .x_result_sel_mc_arith (x_result_sel_mc_arith_d),
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .divide (divide_d),
+ .modulus (modulus_d),
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_full #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+ .dflush (dflush_m),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+ .dcache_refill_request (dcache_refill_request),
+ .dcache_restart_request (dcache_restart_request),
+ .dcache_stall_request (dcache_stall_request),
+ .dcache_refilling (dcache_refilling),
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+lm32_mc_arithmetic_full mc_arithmetic (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_d (stall_d),
+ .kill_x (kill_x),
+
+
+ .divide_d (divide_q_d),
+ .modulus_d (modulus_q_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .operand_0_d (d_result_0),
+ .operand_1_d (d_result_1),
+
+ .result_x (mc_result_x),
+
+
+ .divide_by_zero_x (divide_by_zero_x),
+
+
+ .stall_request_x (mc_stall_request_x)
+ );
+
+
+
+
+
+
+lm32_interrupt_full interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+
+
+
+ .exception (exception_q_w),
+
+
+ .eret_q_x (eret_q_x),
+
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+ : x_result_sel_mc_arith_x ? mc_result_x
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+assign branch_taken_x = (stall_x == 1'b0)
+ && ( (branch_x == 1'b1)
+ && ((condition_x == 3'b000) || (condition_x == 3'b110))
+ && (valid_x == 1'b1)
+ && (branch_predict_x == 1'b0)
+ );
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+ || (branch_taken_x == 1'b1)
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+ || (branch_taken_x == 1'b1)
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_m = 1'b0
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_w = 1'b0
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_bus_error_exception = ( (bus_error_x == 1'b1)
+ && (valid_x == 1'b1)
+ );
+assign data_bus_error_exception = data_bus_error_seen == 1'b1;
+
+
+
+
+
+assign divide_by_zero_exception = divide_by_zero_x == 1'b1;
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+ && (valid_x == 1'b1)
+
+
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign exception_x = (system_call_exception == 1'b1)
+
+
+ || (instruction_bus_error_exception == 1'b1)
+ || (data_bus_error_exception == 1'b1)
+
+
+
+
+ || (divide_by_zero_exception == 1'b1)
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+
+
+
+
+ && (store_q_m == 1'b0)
+ && (D_CYC_O == 1'b0)
+
+
+ )
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (data_bus_error_exception == 1'b1)
+ eid_x = 3'h4;
+ else
+ if (instruction_bus_error_exception == 1'b1)
+ eid_x = 3'h2;
+ else
+
+
+
+
+
+
+
+
+
+
+ if (divide_by_zero_exception == 1'b1)
+ eid_x = 3'h5;
+ else
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+ || (bus_error_d == 1'b1)
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+ || ( (mc_stall_request_x == 1'b1)
+ && (kill_x == 1'b0)
+ )
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+ || (dcache_stall_request == 1'b1)
+
+
+
+
+ || (icache_stall_request == 1'b1)
+ || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+assign q_d = (valid_d == 1'b1) && (kill_d == 1'b0);
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign divide_q_d = (divide_d == 1'b1) && (q_d == 1'b1);
+assign modulus_q_d = (modulus_d == 1'b1) && (q_d == 1'b1);
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+
+
+
+assign exception_q_w = ((exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+assign iflush = ( (csr_write_enable_d == 1'b1)
+ && (csr_d == 4 'h3)
+ && (stall_d == 1'b0)
+ && (kill_d == 1'b0)
+ && (valid_d == 1'b1))
+
+
+
+
+
+
+
+ ;
+
+
+
+
+assign dflush_x = ( (csr_write_enable_q_x == 1'b1)
+ && (csr_x == 4 'h4))
+
+
+
+
+
+
+
+ ;
+
+
+
+
+assign csr_d = read_idx_0_d[ (4 -1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 4 'h0,
+ 4 'h1,
+ 4 'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 4 'h6: csr_read_data_x = cfg;
+ 4 'h7: csr_read_data_x = {eba, 8'h00};
+
+
+
+
+
+
+
+
+
+ 4 'ha: csr_read_data_x = cfg2;
+ 4 'hb: csr_read_data_x = sdb_address;
+
+
+ 4 'hc: csr_read_data_x = data_bus_error_addr;
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 4 'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ data_bus_error_seen <= 1'b0;
+ else
+ begin
+
+ if ((D_ERR_I == 1'b1) && (D_CYC_O == 1'b1)) begin
+ data_bus_error_seen <= 1'b1;
+ data_bus_error_addr <= D_ADR_O;
+ end
+
+ if ((exception_m == 1'b1) && (kill_m == 1'b0))
+ data_bus_error_seen <= 1'b0;
+ end
+end
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ if ( (icache_refill_request == 1'b1)
+ || (dcache_refill_request == 1'b1)
+ )
+ valid_a = 1'b0;
+ else if ( (icache_restart_request == 1'b1)
+ || (dcache_restart_request == 1'b1)
+ )
+ valid_a = 1'b1;
+ else
+ valid_a = !icache_refilling && !dcache_refilling;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+ valid_f <= valid_a;
+
+
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+ x_result_sel_mc_arith_x <= 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 4 {1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+
+
+
+
+ bus_error_x <= 1'b0;
+ data_bus_error_exception_m <= 1'b0;
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+ dflush_m <= 1'b0;
+
+
+
+
+
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+
+
+
+ exception_w <= 1'b0;
+
+
+
+
+ memop_pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+ x_result_sel_mc_arith_x <= x_result_sel_mc_arith_d;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+
+
+ scall_x <= scall_d;
+
+
+ bus_error_x <= bus_error_d;
+
+
+ eret_x <= eret_d;
+
+
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+ branch_m <= branch_x && !branch_taken_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else
+ write_idx_m <= write_idx_x;
+
+
+ condition_met_m <= condition_met_x;
+
+
+
+
+
+
+
+
+
+
+
+
+ branch_target_m <= exception_x == 1'b1 ? {eba, eid_x, {3{1'b0}}} : branch_target_x;
+
+
+
+
+
+
+
+
+
+ dflush_m <= dflush_x;
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+ data_bus_error_exception_m <= (data_bus_error_exception == 1'b1)
+
+
+
+
+ ;
+
+
+ end
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? (data_bus_error_exception_m ? {memop_pc_w, 2'b00} : {pc_m, 2'b00}) : m_result;
+
+
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+
+
+
+ exception_w <= exception_m;
+
+
+
+
+ if ( (stall_m == 1'b0)
+ && ( (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ )
+ )
+ memop_pc_w <= pc_m;
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_full
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+ dflush,
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+ dcache_refill_request,
+ dcache_restart_request,
+ dcache_stall_request,
+ dcache_refilling,
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+input dflush;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+output dcache_refill_request;
+wire dcache_refill_request;
+output dcache_restart_request;
+wire dcache_restart_request;
+output dcache_stall_request;
+wire dcache_stall_request;
+output dcache_refilling;
+wire dcache_refilling;
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+wire dcache_select_x;
+reg dcache_select_m;
+wire [ (32-1):0] dcache_data_m;
+wire [ (32-1):0] dcache_refill_address;
+reg dcache_refill_ready;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ (32-1):0] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_dcache_full #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) dcache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .address_x (load_store_address_x),
+ .address_m (load_store_address_m),
+ .load_q_m (load_q_m & dcache_select_m),
+ .store_q_m (store_q_m & dcache_select_m),
+ .store_data (store_data_m),
+ .store_byte_select (byte_enable_m & {4{dcache_select_m}}),
+ .refill_ready (dcache_refill_ready),
+ .refill_data (wb_data_m),
+ .dflush (dflush),
+
+ .stall_request (dcache_stall_request),
+ .restart_request (dcache_restart_request),
+ .refill_request (dcache_refill_request),
+ .refill_address (dcache_refill_address),
+ .refilling (dcache_refilling),
+ .load_data (dcache_data_m)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign dcache_select_x = (load_store_address_x >= 32'h0)
+ && (load_store_address_x <= 32'h7fffffff)
+
+
+
+
+
+
+
+
+ ;
+
+
+
+ assign wb_select_x = 1'b1
+
+
+ && !dcache_select_x
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_select_m == 1'b1
+ ? wb_data_m
+ : dcache_data_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:2], 2'b00};
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = d_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+ dcache_refill_ready <= 1'b0;
+
+
+ end
+ else
+ begin
+
+
+
+ dcache_refill_ready <= 1'b0;
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+ if ((dcache_refilling == 1'b1) && (!last_word))
+ begin
+
+ d_adr_o[addr_offset_msb:addr_offset_lsb] <= d_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ end
+ else
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+ d_cti_o <= next_cycle_type;
+
+ dcache_refill_ready <= dcache_refilling;
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+ if (dcache_refill_request == 1'b1)
+ begin
+
+ d_adr_o <= first_address;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= { 32/8{ 1'b1}};
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= first_cycle_type;
+
+ end
+ else
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+ dcache_select_m <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+ dcache_select_m <= dcache_select_x;
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_full (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+ x_result_sel_mc_arith,
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ divide,
+ modulus,
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+
+
+ scall,
+ eret,
+
+
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+output x_result_sel_mc_arith;
+reg x_result_sel_mc_arith;
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output divide;
+wire divide;
+output modulus;
+wire modulus;
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+wire op_divu;
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+wire op_modu;
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+assign op_divu = instruction[ 31:26] == 6'b100011;
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+assign op_modu = instruction[ 31:26] == 6'b110001;
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+assign divide = op_divu;
+assign modulus = op_modu;
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+ x_result_sel_mc_arith = 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+ else if (divide | modulus)
+ x_result_sel_mc_arith = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+ | divide
+ | modulus
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0])
+ : (branch_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_icache_full (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_f,
+ address_a,
+ address_f,
+ read_enable_f,
+ refill_ready,
+ refill_data,
+ iflush,
+
+
+
+
+ valid_d,
+ branch_predict_taken_d,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ inst
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+
+input valid_d;
+input branch_predict_taken_d;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_a;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_f;
+input read_enable_f;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input iflush;
+
+
+
+
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+wire refill_request;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] inst;
+wire [ (32-1):0] inst;
+
+
+
+
+
+wire enable;
+wire [0:associativity-1] way_mem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+
+reg [ 3:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+)
+ way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (enable),
+ .write_address (dmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i]),
+ .write_data (refill_data),
+
+ .read_data (way_data[i])
+ );
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ )
+ way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i] | flushing),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+
+ end
+endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_f[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : inst_1
+assign inst = way_match[0] ? way_data[0] : 32'b0;
+ end
+ else if (associativity == 2)
+ begin : inst_2
+assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset};
+ else
+assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb];
+endgenerate
+
+assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb];
+
+
+assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb];
+assign tmem_write_address = flushing
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign enable = (stall_a == 1'b0);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_mem_we[0] = (refill_ready == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
+assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = last_refill & !flushing;
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = |state[1:0];
+assign check = state[2];
+assign refill = state[3];
+
+assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
+assign stall_request = (check == 1'b0);
+assign refill_request = (refill == 1'b1);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (miss == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'b0001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 4'b0001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 4'b0100;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0010:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+
+
+
+
+
+
+ state <= 4'b0100;
+
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0100:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (iflush == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b0010;
+ end
+ else if (miss == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b1000;
+ end
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 4'b0100;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 4'b0100:
+ begin
+ if (iflush == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_dcache_full (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_x,
+ stall_m,
+ address_x,
+ address_m,
+ load_q_m,
+ store_q_m,
+ store_data,
+ store_byte_select,
+ refill_ready,
+ refill_data,
+ dflush,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ load_data
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+
+input [ (32-1):0] address_x;
+input [ (32-1):0] address_m;
+input load_q_m;
+input store_q_m;
+input [ (32-1):0] store_data;
+input [ (4-1):0] store_byte_select;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input dflush;
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+reg refill_request;
+output [ (32-1):0] refill_address;
+reg [ (32-1):0] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] load_data;
+wire [ (32-1):0] load_data;
+
+
+
+
+
+wire read_port_enable;
+wire write_port_enable;
+wire [0:associativity-1] way_tmem_we;
+wire [0:associativity-1] way_dmem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+reg [ (32-1):0] dmem_write_data;
+
+reg [ 2:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+wire valid_store;
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i, j;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ if ( (addr_offset_width+addr_set_width) < 11)
+ begin : data_memories
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+ ) way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (dmem_write_address),
+ .enable_write (write_port_enable),
+ .write_enable (way_dmem_we[i]),
+ .write_data (dmem_write_data),
+
+ .read_data (way_data[i])
+ );
+ end
+ else
+ begin
+ for (j = 0; j < 4; j = j + 1)
+ begin : byte_memories
+ lm32_ram
+ #(
+
+ .data_width (8),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+ ) way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (dmem_write_address),
+ .enable_write (write_port_enable),
+ .write_enable (way_dmem_we[i] & (store_byte_select[j] | refill)),
+ .write_data (dmem_write_data[(j+1)*8-1:j*8]),
+
+ .read_data (way_data[i][(j+1)*8-1:j*8])
+ );
+ end
+ end
+
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ ) way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_tmem_we[i]),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+ end
+
+ endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_m[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : data_1
+assign load_data = way_data[0];
+ end
+ else if (associativity == 2)
+ begin : data_2
+assign load_data = way_match[0] ? way_data[0] : way_data[1];
+ end
+endgenerate
+
+generate
+ if ( (addr_offset_width+addr_set_width) < 11)
+ begin
+
+always @(*)
+begin
+ if (refill == 1'b1)
+ dmem_write_data = refill_data;
+ else
+ begin
+ dmem_write_data[ 7:0] = store_byte_select[0] ? store_data[ 7:0] : load_data[ 7:0];
+ dmem_write_data[ 15:8] = store_byte_select[1] ? store_data[ 15:8] : load_data[ 15:8];
+ dmem_write_data[ 23:16] = store_byte_select[2] ? store_data[ 23:16] : load_data[ 23:16];
+ dmem_write_data[ 31:24] = store_byte_select[3] ? store_data[ 31:24] : load_data[ 31:24];
+ end
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ if (refill == 1'b1)
+ dmem_write_data = refill_data;
+ else
+ dmem_write_data = store_data;
+end
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = (refill == 1'b1)
+ ? {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}
+ : address_m[ addr_set_msb:addr_offset_lsb];
+ else
+assign dmem_write_address = (refill == 1'b1)
+ ? refill_address[ addr_set_msb:addr_set_lsb]
+ : address_m[ addr_set_msb:addr_offset_lsb];
+endgenerate
+assign dmem_read_address = address_x[ addr_set_msb:addr_offset_lsb];
+
+assign tmem_write_address = (flushing == 1'b1)
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+assign tmem_read_address = address_x[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign read_port_enable = (stall_x == 1'b0);
+assign write_port_enable = (refill_ready == 1'b1) || !stall_m;
+
+
+assign valid_store = (store_q_m == 1'b1) && (check == 1'b1);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_dmem_we[0] = (refill_ready == 1'b1) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
+assign way_tmem_we[0] = (refill_ready == 1'b1) || (flushing == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_dmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
+assign way_dmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || ((valid_store == 1'b1) && (way_match[1] == 1'b1));
+assign way_tmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || (flushing == 1'b1);
+assign way_tmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || (flushing == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = ((last_refill == 1'b1) || (valid_store == 1'b1)) && (flushing == 1'b0);
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = state[0];
+assign check = state[1];
+assign refill = state[2];
+
+assign miss = (~(|way_match)) && (load_q_m == 1'b1) && (stall_m == 1'b0);
+assign stall_request = (check == 1'b0);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (refill_request == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_request <= 1'b0;
+ refill_address <= { 32{1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 3'b001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 3'b010;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 3'b010:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (miss == 1'b1)
+ begin
+ refill_request <= 1'b1;
+ refill_address <= address_m;
+ state <= 3'b100;
+ end
+ else if (dflush == 1'b1)
+ state <= 3'b001;
+ end
+
+
+ 3'b100:
+ begin
+ refill_request <= 1'b0;
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 3'b010;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 3'b010:
+ begin
+ if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 3'b100:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_full (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+ branch_taken_x,
+ branch_target_x,
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+ iflush,
+
+
+
+
+ dcache_restart_request,
+ dcache_refill_request,
+ dcache_refilling,
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+ icache_stall_request,
+ icache_restart_request,
+ icache_refill_request,
+ icache_refilling,
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bus_error_d,
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+
+
+
+input branch_taken_x;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+
+
+
+input iflush;
+
+
+
+
+input dcache_restart_request;
+input dcache_refill_request;
+input dcache_refilling;
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+output icache_stall_request;
+wire icache_stall_request;
+output icache_restart_request;
+wire icache_restart_request;
+output icache_refill_request;
+wire icache_refill_request;
+output icache_refilling;
+wire icache_refilling;
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+
+
+wire [ (32-1):0] i_dat_o;
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+
+
+wire [ (4-1):0] i_sel_o;
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+
+
+wire i_we_o;
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+
+
+
+
+
+
+
+
+output bus_error_d;
+reg bus_error_d;
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address;
+
+
+
+
+
+wire icache_read_enable_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address;
+reg icache_refill_ready;
+reg [ (32-1):0] icache_refill_data;
+wire [ (32-1):0] icache_data_f;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg bus_error_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_icache_full #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) icache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .valid_d (valid_d),
+ .address_a (pc_a),
+ .address_f (pc_f),
+ .read_enable_f (icache_read_enable_f),
+ .refill_ready (icache_refill_ready),
+ .refill_data (icache_refill_data),
+ .iflush (iflush),
+
+ .stall_request (icache_stall_request),
+ .restart_request (icache_restart_request),
+ .refill_request (icache_refill_request),
+ .refill_address (icache_refill_address),
+ .refilling (icache_refilling),
+ .inst (icache_data_f)
+ );
+
+
+
+
+
+
+
+
+
+
+ assign icache_read_enable_f = (valid_f == 1'b1)
+ && (kill_f == 1'b0)
+
+
+ && (dcache_restart_request == 1'b0)
+
+
+
+
+
+
+ ;
+
+
+
+
+always @(*)
+begin
+
+
+
+ if (dcache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+ else if (branch_taken_x == 1'b1)
+ pc_a = branch_target_x;
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+ if (icache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = icache_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_dat_o = 32'd0;
+assign i_we_o = 1'b0;
+assign i_sel_o = 4'b1111;
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = icache_refill_address;
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = i_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 2'b11;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ pc_d <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ restart_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ else
+ begin
+
+
+
+
+
+ if (dcache_refill_request == 1'b1)
+ restart_address <= pc_w;
+ else if ((icache_refill_request == 1'b1) && (!dcache_refilling) && (!dcache_restart_request))
+ restart_address <= icache_refill_address;
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ icache_refill_data <= { 32{1'b0}};
+ icache_refill_ready <= 1'b0;
+
+
+ bus_error_f <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+ icache_refill_ready <= 1'b0;
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+
+
+ begin
+ if (last_word == 1'b1)
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_lock_o <= 1'b0;
+ end
+
+ i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ i_cti_o <= next_cycle_type;
+
+ icache_refill_ready <= 1'b1;
+ icache_refill_data <= i_dat_i;
+ end
+ end
+
+
+
+
+ if (i_err_i == 1'b1)
+ begin
+ bus_error_f <= 1'b1;
+ $display ("Instruction bus error. Address: %x", i_adr_o);
+ end
+
+
+
+
+ end
+ else
+ begin
+ if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
+ begin
+
+
+
+
+
+ i_adr_o <= {first_address, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_cti_o <= first_cycle_type;
+
+
+
+ bus_error_f <= 1'b0;
+
+
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (branch_taken_x == 1'b1)
+ bus_error_f <= 1'b0;
+
+
+ if (branch_taken_m == 1'b1)
+ bus_error_f <= 1'b0;
+
+
+ end
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+ bus_error_d <= 1'b0;
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+ bus_error_d <= bus_error_f;
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_full (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+
+
+
+ exception,
+
+
+ eret_q_x,
+
+
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+
+
+
+input exception;
+
+
+input eret_q_x;
+
+
+
+
+
+input [ (4 -1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ 4 'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_full_debug (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+wire [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_q;
+wire jtag_update;
+wire [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_q;
+wire jtck;
+wire jrstn;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_full_debug
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_clk (jtck),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+jtag_cores jtag_cores (
+
+ .reg_d (jtag_reg_d),
+ .reg_addr_d (jtag_reg_addr_d),
+
+ .reg_update (jtag_update),
+ .reg_q (jtag_reg_q),
+ .reg_addr_q (jtag_reg_addr_q),
+ .jtck (jtck),
+ .jrstn (jrstn)
+ );
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_full_debug (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+ divide_d,
+ modulus_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+ divide_by_zero_x,
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+input divide_d;
+input modulus_d;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+output divide_by_zero_x;
+reg divide_by_zero_x;
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+wire [32:0] t;
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+assign t = {p[ 32-2:0], a[ 32-1]} - b;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+ if (divide_d == 1'b1)
+ state <= 3'b011 ;
+ if (modulus_d == 1'b1)
+ state <= 3'b010 ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+ 3'b011 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= a;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+ 3'b010 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= p;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_full_debug (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+parameter deba_reset = 32'h10000000;
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 256;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 32'h0;
+parameter icache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 256;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 32'h0;
+parameter dcache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+parameter watchpoints = 32'h4;
+
+
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_a;
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+wire q_d;
+wire x_result_sel_mc_arith_d;
+reg x_result_sel_mc_arith_x;
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (5-1):0] csr_d;
+reg [ (5-1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+wire break_d;
+reg break_x;
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+wire bret_d;
+reg bret_x;
+wire bret_q_x;
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+wire bus_error_d;
+reg bus_error_x;
+reg data_bus_error_exception_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] memop_pc_w;
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+wire divide_d;
+wire divide_q_d;
+wire modulus_d;
+wire modulus_q_d;
+wire divide_by_zero_x;
+
+
+
+
+
+
+wire mc_stall_request_x;
+wire [ (32-1):0] mc_result_x;
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+wire iflush;
+wire icache_stall_request;
+wire icache_restart_request;
+wire icache_refill_request;
+wire icache_refilling;
+
+
+
+
+
+
+wire dflush_x;
+reg dflush_m;
+wire dcache_stall_request;
+wire dcache_restart_request;
+wire dcache_refill_request;
+wire dcache_refilling;
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+wire [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+wire jtag_csr_write_enable;
+wire [ (32-1):0] jtag_csr_write_data;
+wire [ (5-1):0] jtag_csr;
+wire jtag_read_enable;
+wire [ 7:0] jtag_read_data;
+wire jtag_write_enable;
+wire [ 7:0] jtag_write_data;
+wire [ (32-1):0] jtag_address;
+wire jtag_access_complete;
+
+
+
+
+wire jtag_break;
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+wire branch_taken_x;
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] eba;
+
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] deba;
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+wire dc_ss;
+
+
+wire dc_re;
+wire bp_match;
+wire wp_match;
+wire exception_x;
+reg exception_m;
+wire debug_exception_x;
+reg debug_exception_m;
+reg debug_exception_w;
+wire debug_exception_q_w;
+wire non_debug_exception_x;
+reg non_debug_exception_m;
+reg non_debug_exception_w;
+wire non_debug_exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+wire reset_exception;
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+wire breakpoint_exception;
+wire watchpoint_exception;
+
+
+
+
+ reg [ (32-1):0] data_bus_error_addr;
+
+wire instruction_bus_error_exception;
+wire data_bus_error_exception;
+
+
+
+
+wire divide_by_zero_exception;
+
+
+wire system_call_exception;
+
+
+
+reg data_bus_error_seen;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_full_debug #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+ .branch_taken_x (branch_taken_x),
+ .branch_target_x (branch_target_x),
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+ .iflush (iflush),
+
+
+
+
+ .dcache_restart_request (dcache_restart_request),
+ .dcache_refill_request (dcache_refill_request),
+ .dcache_refilling (dcache_refilling),
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+ .icache_stall_request (icache_stall_request),
+ .icache_restart_request (icache_restart_request),
+ .icache_refill_request (icache_refill_request),
+ .icache_refilling (icache_refilling),
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+ .bus_error_d (bus_error_d),
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_full_debug decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+ .x_result_sel_mc_arith (x_result_sel_mc_arith_d),
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .divide (divide_d),
+ .modulus (modulus_d),
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+ .break_opcode (break_d),
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+ .bret (bret_d),
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_full_debug #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+ .dflush (dflush_m),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+ .dcache_refill_request (dcache_refill_request),
+ .dcache_restart_request (dcache_restart_request),
+ .dcache_stall_request (dcache_stall_request),
+ .dcache_refilling (dcache_refilling),
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+lm32_mc_arithmetic_full_debug mc_arithmetic (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_d (stall_d),
+ .kill_x (kill_x),
+
+
+ .divide_d (divide_q_d),
+ .modulus_d (modulus_q_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .operand_0_d (d_result_0),
+ .operand_1_d (d_result_1),
+
+ .result_x (mc_result_x),
+
+
+ .divide_by_zero_x (divide_by_zero_x),
+
+
+ .stall_request_x (mc_stall_request_x)
+ );
+
+
+
+
+
+
+lm32_interrupt_full_debug interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+ .non_debug_exception (non_debug_exception_q_w),
+ .debug_exception (debug_exception_q_w),
+
+
+
+
+ .eret_q_x (eret_q_x),
+
+
+ .bret_q_x (bret_q_x),
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_jtag_full_debug jtag (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .jtag_clk (jtag_clk),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+ .stall_x (stall_x),
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+ .exception_q_w (debug_exception_q_w || non_debug_exception_q_w),
+
+
+
+
+
+
+ .jtx_csr_read_data (jtx_csr_read_data),
+ .jrx_csr_read_data (jrx_csr_read_data),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .jtag_break (jtag_break),
+ .jtag_reset (reset_exception),
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d)
+ );
+
+
+
+
+
+
+lm32_debug_full_debug #(
+ .breakpoints (breakpoints),
+ .watchpoints (watchpoints)
+ ) hw_debug (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .pc_x (pc_x),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_store_address_x (adder_result_x),
+ .csr_write_enable_x (csr_write_enable_q_x),
+ .csr_write_data (operand_1_x),
+ .csr_x (csr_x),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+
+
+
+
+
+
+
+
+
+
+
+
+ .eret_q_x (eret_q_x),
+ .bret_q_x (bret_q_x),
+ .stall_x (stall_x),
+ .exception_x (exception_x),
+ .q_x (q_x),
+
+
+ .dcache_refill_request (dcache_refill_request),
+
+
+
+
+
+
+
+ .dc_ss (dc_ss),
+
+
+ .dc_re (dc_re),
+ .bp_match (bp_match),
+ .wp_match (wp_match)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+ : x_result_sel_mc_arith_x ? mc_result_x
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+assign branch_taken_x = (stall_x == 1'b0)
+ && ( (branch_x == 1'b1)
+ && ((condition_x == 3'b000) || (condition_x == 3'b110))
+ && (valid_x == 1'b1)
+ && (branch_predict_x == 1'b0)
+ );
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+ || (branch_taken_x == 1'b1)
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+ || (branch_taken_x == 1'b1)
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_m = 1'b0
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+assign kill_w = 1'b0
+
+
+ || (dcache_refill_request == 1'b1)
+
+
+ ;
+
+
+
+
+
+assign breakpoint_exception = ( ( (break_x == 1'b1)
+ || (bp_match == 1'b1)
+ )
+ && (valid_x == 1'b1)
+ )
+
+
+ || (jtag_break == 1'b1)
+
+
+ ;
+
+
+
+
+
+assign watchpoint_exception = wp_match == 1'b1;
+
+
+
+
+
+assign instruction_bus_error_exception = ( (bus_error_x == 1'b1)
+ && (valid_x == 1'b1)
+ );
+assign data_bus_error_exception = data_bus_error_seen == 1'b1;
+
+
+
+
+
+assign divide_by_zero_exception = divide_by_zero_x == 1'b1;
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+ && (valid_x == 1'b1)
+
+
+ );
+
+
+
+assign debug_exception_x = (breakpoint_exception == 1'b1)
+ || (watchpoint_exception == 1'b1)
+ ;
+
+assign non_debug_exception_x = (system_call_exception == 1'b1)
+
+
+ || (reset_exception == 1'b1)
+
+
+
+
+ || (instruction_bus_error_exception == 1'b1)
+ || (data_bus_error_exception == 1'b1)
+
+
+
+
+ || (divide_by_zero_exception == 1'b1)
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+
+
+ && (store_q_m == 1'b0)
+ && (D_CYC_O == 1'b0)
+
+
+ )
+
+
+ ;
+
+assign exception_x = (debug_exception_x == 1'b1) || (non_debug_exception_x == 1'b1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+ if (reset_exception == 1'b1)
+ eid_x = 3'h0;
+ else
+
+
+
+
+ if (data_bus_error_exception == 1'b1)
+ eid_x = 3'h4;
+ else
+
+
+ if (breakpoint_exception == 1'b1)
+ eid_x = 3'd1;
+ else
+
+
+
+
+ if (data_bus_error_exception == 1'b1)
+ eid_x = 3'h4;
+ else
+ if (instruction_bus_error_exception == 1'b1)
+ eid_x = 3'h2;
+ else
+
+
+
+
+ if (watchpoint_exception == 1'b1)
+ eid_x = 3'd3;
+ else
+
+
+
+
+ if (divide_by_zero_exception == 1'b1)
+ eid_x = 3'h5;
+ else
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+ || (bus_error_d == 1'b1)
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( ( (break_d == 1'b1)
+ || (bret_d == 1'b1)
+ )
+ && ( (load_q_x == 1'b1)
+ || (store_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+ || ( (mc_stall_request_x == 1'b1)
+ && (kill_x == 1'b0)
+ )
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+ || (dcache_stall_request == 1'b1)
+
+
+
+
+ || (icache_stall_request == 1'b1)
+ || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+assign q_d = (valid_d == 1'b1) && (kill_d == 1'b0);
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign divide_q_d = (divide_d == 1'b1) && (q_d == 1'b1);
+assign modulus_q_d = (modulus_d == 1'b1) && (q_d == 1'b1);
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign bret_q_x = (bret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+assign debug_exception_q_w = ((debug_exception_w == 1'b1) && (valid_w == 1'b1));
+assign non_debug_exception_q_w = ((non_debug_exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+assign iflush = ( (csr_write_enable_d == 1'b1)
+ && (csr_d == 5'h3)
+ && (stall_d == 1'b0)
+ && (kill_d == 1'b0)
+ && (valid_d == 1'b1))
+
+
+
+ ||
+ ( (jtag_csr_write_enable == 1'b1)
+ && (jtag_csr == 5'h3))
+
+
+ ;
+
+
+
+
+assign dflush_x = ( (csr_write_enable_q_x == 1'b1)
+ && (csr_x == 5'h4))
+
+
+
+ ||
+ ( (jtag_csr_write_enable == 1'b1)
+ && (jtag_csr == 5'h4))
+
+
+ ;
+
+
+
+
+assign csr_d = read_idx_0_d[ (5-1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 5'h0,
+ 5'h1,
+ 5'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 5'h6: csr_read_data_x = cfg;
+ 5'h7: csr_read_data_x = {eba, 8'h00};
+
+
+ 5'h9: csr_read_data_x = {deba, 8'h00};
+
+
+
+
+ 5'he: csr_read_data_x = jtx_csr_read_data;
+ 5'hf: csr_read_data_x = jrx_csr_read_data;
+
+
+ 5'ha: csr_read_data_x = cfg2;
+ 5'hb: csr_read_data_x = sdb_address;
+
+
+ 5'hc: csr_read_data_x = data_bus_error_addr;
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h7))
+ eba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ deba <= deba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h9) && (stall_x == 1'b0))
+ deba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h9))
+ deba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ data_bus_error_seen <= 1'b0;
+ else
+ begin
+
+ if ((D_ERR_I == 1'b1) && (D_CYC_O == 1'b1)) begin
+ data_bus_error_seen <= 1'b1;
+ data_bus_error_addr <= D_ADR_O;
+ end
+
+ if ((exception_m == 1'b1) && (kill_m == 1'b0))
+ data_bus_error_seen <= 1'b0;
+ end
+end
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ if ( (icache_refill_request == 1'b1)
+ || (dcache_refill_request == 1'b1)
+ )
+ valid_a = 1'b0;
+ else if ( (icache_restart_request == 1'b1)
+ || (dcache_restart_request == 1'b1)
+ )
+ valid_a = 1'b1;
+ else
+ valid_a = !icache_refilling && !dcache_refilling;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+ valid_f <= valid_a;
+
+
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+ x_result_sel_mc_arith_x <= 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 5{1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+ break_x <= 1'b0;
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+ bret_x <= 1'b0;
+
+
+
+
+ bus_error_x <= 1'b0;
+ data_bus_error_exception_m <= 1'b0;
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+ dflush_m <= 1'b0;
+
+
+
+
+ debug_exception_m <= 1'b0;
+ non_debug_exception_m <= 1'b0;
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+ debug_exception_w <= 1'b0;
+ non_debug_exception_w <= 1'b0;
+
+
+
+
+
+
+ memop_pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+ x_result_sel_mc_arith_x <= x_result_sel_mc_arith_d;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+ break_x <= break_d;
+
+
+ scall_x <= scall_d;
+
+
+ bus_error_x <= bus_error_d;
+
+
+ eret_x <= eret_d;
+
+
+ bret_x <= bret_d;
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+ branch_m <= branch_x && !branch_taken_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (non_debug_exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else if (debug_exception_x == 1'b1)
+ write_idx_m <= 5'd31;
+ else
+ write_idx_m <= write_idx_x;
+
+
+
+
+
+
+
+ condition_met_m <= condition_met_x;
+
+
+ if (exception_x == 1'b1)
+ if ((dc_re == 1'b1)
+ || ((debug_exception_x == 1'b1)
+ && (non_debug_exception_x == 1'b0)))
+ branch_target_m <= {deba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= {eba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+ dflush_m <= dflush_x;
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+ debug_exception_m <= debug_exception_x;
+ non_debug_exception_m <= non_debug_exception_x;
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+ data_bus_error_exception_m <= (data_bus_error_exception == 1'b1)
+
+
+ && (reset_exception == 1'b0)
+
+
+ ;
+
+
+ end
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? (data_bus_error_exception_m ? {memop_pc_w, 2'b00} : {pc_m, 2'b00}) : m_result;
+
+
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+ debug_exception_w <= debug_exception_m;
+ non_debug_exception_w <= non_debug_exception_m;
+
+
+
+
+
+
+ if ( (stall_m == 1'b0)
+ && ( (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ )
+ )
+ memop_pc_w <= pc_m;
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_full_debug
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+ dflush,
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+ dcache_refill_request,
+ dcache_restart_request,
+ dcache_stall_request,
+ dcache_refilling,
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+input dflush;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+output dcache_refill_request;
+wire dcache_refill_request;
+output dcache_restart_request;
+wire dcache_restart_request;
+output dcache_stall_request;
+wire dcache_stall_request;
+output dcache_refilling;
+wire dcache_refilling;
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+wire dcache_select_x;
+reg dcache_select_m;
+wire [ (32-1):0] dcache_data_m;
+wire [ (32-1):0] dcache_refill_address;
+reg dcache_refill_ready;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ (32-1):0] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_dcache_full_debug #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) dcache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .address_x (load_store_address_x),
+ .address_m (load_store_address_m),
+ .load_q_m (load_q_m & dcache_select_m),
+ .store_q_m (store_q_m & dcache_select_m),
+ .store_data (store_data_m),
+ .store_byte_select (byte_enable_m & {4{dcache_select_m}}),
+ .refill_ready (dcache_refill_ready),
+ .refill_data (wb_data_m),
+ .dflush (dflush),
+
+ .stall_request (dcache_stall_request),
+ .restart_request (dcache_restart_request),
+ .refill_request (dcache_refill_request),
+ .refill_address (dcache_refill_address),
+ .refilling (dcache_refilling),
+ .load_data (dcache_data_m)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign dcache_select_x = (load_store_address_x >= 32'h0)
+ && (load_store_address_x <= 32'h7fffffff)
+
+
+
+
+
+
+
+
+ ;
+
+
+
+ assign wb_select_x = 1'b1
+
+
+ && !dcache_select_x
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_select_m == 1'b1
+ ? wb_data_m
+ : dcache_data_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:2], 2'b00};
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = d_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
+assign first_address = {dcache_refill_address[ 32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+ dcache_refill_ready <= 1'b0;
+
+
+ end
+ else
+ begin
+
+
+
+ dcache_refill_ready <= 1'b0;
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+ if ((dcache_refilling == 1'b1) && (!last_word))
+ begin
+
+ d_adr_o[addr_offset_msb:addr_offset_lsb] <= d_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ end
+ else
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+ d_cti_o <= next_cycle_type;
+
+ dcache_refill_ready <= dcache_refilling;
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+ if (dcache_refill_request == 1'b1)
+ begin
+
+ d_adr_o <= first_address;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= { 32/8{ 1'b1}};
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= first_cycle_type;
+
+ end
+ else
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+ dcache_select_m <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+ dcache_select_m <= dcache_select_x;
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_full_debug (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+ x_result_sel_mc_arith,
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ divide,
+ modulus,
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+ break_opcode,
+
+
+ scall,
+ eret,
+
+
+ bret,
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+output x_result_sel_mc_arith;
+reg x_result_sel_mc_arith;
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output divide;
+wire divide;
+output modulus;
+wire modulus;
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+output break_opcode;
+wire break_opcode;
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+output bret;
+wire bret;
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+wire op_divu;
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+wire op_modu;
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+assign op_divu = instruction[ 31:26] == 6'b100011;
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+assign op_modu = instruction[ 31:26] == 6'b110001;
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+assign divide = op_divu;
+assign modulus = op_modu;
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+ x_result_sel_mc_arith = 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+ else if (divide | modulus)
+ x_result_sel_mc_arith = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+ | divide
+ | modulus
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+assign break_opcode = op_raise & ~instruction[2];
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+assign bret = op_b & (instruction[25:21] == 5'd31);
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0])
+ : (branch_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_icache_full_debug (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_f,
+ address_a,
+ address_f,
+ read_enable_f,
+ refill_ready,
+ refill_data,
+ iflush,
+
+
+
+
+ valid_d,
+ branch_predict_taken_d,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ inst
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+
+input valid_d;
+input branch_predict_taken_d;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_a;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_f;
+input read_enable_f;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input iflush;
+
+
+
+
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+wire refill_request;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] inst;
+wire [ (32-1):0] inst;
+
+
+
+
+
+wire enable;
+wire [0:associativity-1] way_mem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+
+reg [ 3:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+)
+ way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (enable),
+ .write_address (dmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i]),
+ .write_data (refill_data),
+
+ .read_data (way_data[i])
+ );
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ )
+ way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i] | flushing),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+
+ end
+endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_f[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : inst_1
+assign inst = way_match[0] ? way_data[0] : 32'b0;
+ end
+ else if (associativity == 2)
+ begin : inst_2
+assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset};
+ else
+assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb];
+endgenerate
+
+assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb];
+
+
+assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb];
+assign tmem_write_address = flushing
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign enable = (stall_a == 1'b0);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_mem_we[0] = (refill_ready == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
+assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = last_refill & !flushing;
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = |state[1:0];
+assign check = state[2];
+assign refill = state[3];
+
+assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
+assign stall_request = (check == 1'b0);
+assign refill_request = (refill == 1'b1);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (miss == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'b0001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 4'b0001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 4'b0100;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0010:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+
+
+
+
+
+
+ state <= 4'b0100;
+
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0100:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (iflush == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b0010;
+ end
+ else if (miss == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b1000;
+ end
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 4'b0100;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 4'b0100:
+ begin
+ if (iflush == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_dcache_full_debug (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_x,
+ stall_m,
+ address_x,
+ address_m,
+ load_q_m,
+ store_q_m,
+ store_data,
+ store_byte_select,
+ refill_ready,
+ refill_data,
+ dflush,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ load_data
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+
+input [ (32-1):0] address_x;
+input [ (32-1):0] address_m;
+input load_q_m;
+input store_q_m;
+input [ (32-1):0] store_data;
+input [ (4-1):0] store_byte_select;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input dflush;
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+reg refill_request;
+output [ (32-1):0] refill_address;
+reg [ (32-1):0] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] load_data;
+wire [ (32-1):0] load_data;
+
+
+
+
+
+wire read_port_enable;
+wire write_port_enable;
+wire [0:associativity-1] way_tmem_we;
+wire [0:associativity-1] way_dmem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+reg [ (32-1):0] dmem_write_data;
+
+reg [ 2:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+wire valid_store;
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i, j;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ if ( (addr_offset_width+addr_set_width) < 11)
+ begin : data_memories
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+ ) way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (dmem_write_address),
+ .enable_write (write_port_enable),
+ .write_enable (way_dmem_we[i]),
+ .write_data (dmem_write_data),
+
+ .read_data (way_data[i])
+ );
+ end
+ else
+ begin
+ for (j = 0; j < 4; j = j + 1)
+ begin : byte_memories
+ lm32_ram
+ #(
+
+ .data_width (8),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+ ) way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (dmem_write_address),
+ .enable_write (write_port_enable),
+ .write_enable (way_dmem_we[i] & (store_byte_select[j] | refill)),
+ .write_data (dmem_write_data[(j+1)*8-1:j*8]),
+
+ .read_data (way_data[i][(j+1)*8-1:j*8])
+ );
+ end
+ end
+
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ ) way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (read_port_enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_tmem_we[i]),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+ end
+
+ endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_m[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : data_1
+assign load_data = way_data[0];
+ end
+ else if (associativity == 2)
+ begin : data_2
+assign load_data = way_match[0] ? way_data[0] : way_data[1];
+ end
+endgenerate
+
+generate
+ if ( (addr_offset_width+addr_set_width) < 11)
+ begin
+
+always @(*)
+begin
+ if (refill == 1'b1)
+ dmem_write_data = refill_data;
+ else
+ begin
+ dmem_write_data[ 7:0] = store_byte_select[0] ? store_data[ 7:0] : load_data[ 7:0];
+ dmem_write_data[ 15:8] = store_byte_select[1] ? store_data[ 15:8] : load_data[ 15:8];
+ dmem_write_data[ 23:16] = store_byte_select[2] ? store_data[ 23:16] : load_data[ 23:16];
+ dmem_write_data[ 31:24] = store_byte_select[3] ? store_data[ 31:24] : load_data[ 31:24];
+ end
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ if (refill == 1'b1)
+ dmem_write_data = refill_data;
+ else
+ dmem_write_data = store_data;
+end
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = (refill == 1'b1)
+ ? {refill_address[ addr_set_msb:addr_set_lsb], refill_offset}
+ : address_m[ addr_set_msb:addr_offset_lsb];
+ else
+assign dmem_write_address = (refill == 1'b1)
+ ? refill_address[ addr_set_msb:addr_set_lsb]
+ : address_m[ addr_set_msb:addr_offset_lsb];
+endgenerate
+assign dmem_read_address = address_x[ addr_set_msb:addr_offset_lsb];
+
+assign tmem_write_address = (flushing == 1'b1)
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+assign tmem_read_address = address_x[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign read_port_enable = (stall_x == 1'b0);
+assign write_port_enable = (refill_ready == 1'b1) || !stall_m;
+
+
+assign valid_store = (store_q_m == 1'b1) && (check == 1'b1);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_dmem_we[0] = (refill_ready == 1'b1) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
+assign way_tmem_we[0] = (refill_ready == 1'b1) || (flushing == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_dmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
+assign way_dmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || ((valid_store == 1'b1) && (way_match[1] == 1'b1));
+assign way_tmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || (flushing == 1'b1);
+assign way_tmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || (flushing == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = ((last_refill == 1'b1) || (valid_store == 1'b1)) && (flushing == 1'b0);
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = state[0];
+assign check = state[1];
+assign refill = state[2];
+
+assign miss = (~(|way_match)) && (load_q_m == 1'b1) && (stall_m == 1'b0);
+assign stall_request = (check == 1'b0);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (refill_request == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_request <= 1'b0;
+ refill_address <= { 32{1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 3'b001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 3'b010;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 3'b010:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (miss == 1'b1)
+ begin
+ refill_request <= 1'b1;
+ refill_address <= address_m;
+ state <= 3'b100;
+ end
+ else if (dflush == 1'b1)
+ state <= 3'b001;
+ end
+
+
+ 3'b100:
+ begin
+ refill_request <= 1'b0;
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 3'b010;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 3'b010:
+ begin
+ if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 3'b100:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_debug_full_debug (
+
+ clk_i,
+ rst_i,
+ pc_x,
+ load_x,
+ store_x,
+ load_store_address_x,
+ csr_write_enable_x,
+ csr_write_data,
+ csr_x,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ eret_q_x,
+ bret_q_x,
+ stall_x,
+ exception_x,
+ q_x,
+
+
+ dcache_refill_request,
+
+
+
+
+
+
+
+
+ dc_ss,
+
+
+ dc_re,
+ bp_match,
+ wp_match
+ );
+
+
+
+
+
+parameter breakpoints = 0;
+parameter watchpoints = 0;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+input load_x;
+input store_x;
+input [ (32-1):0] load_store_address_x;
+input csr_write_enable_x;
+input [ (32-1):0] csr_write_data;
+input [ (5-1):0] csr_x;
+
+
+
+
+input jtag_csr_write_enable;
+input [ (32-1):0] jtag_csr_write_data;
+input [ (5-1):0] jtag_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input eret_q_x;
+input bret_q_x;
+input stall_x;
+input exception_x;
+input q_x;
+
+
+input dcache_refill_request;
+
+
+
+
+
+
+
+
+
+
+
+output dc_ss;
+reg dc_ss;
+
+
+output dc_re;
+reg dc_re;
+output bp_match;
+wire bp_match;
+output wp_match;
+wire wp_match;
+
+
+
+
+
+genvar i;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1];
+reg bp_e[0:breakpoints-1];
+wire [0:breakpoints-1]bp_match_n;
+
+reg [ 1:0] wpc_c[0:watchpoints-1];
+reg [ (32-1):0] wp[0:watchpoints-1];
+wire [0:watchpoints-1]wp_match_n;
+
+wire debug_csr_write_enable;
+wire [ (32-1):0] debug_csr_write_data;
+wire [ (5-1):0] debug_csr;
+
+
+
+
+reg [ 2:0] state;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_comb
+assign bp_match_n[i] = ((bp_a[i] == pc_x) && (bp_e[i] == 1'b1));
+ end
+endgenerate
+generate
+
+
+ if (breakpoints > 0)
+assign bp_match = (|bp_match_n) || (state == 3'b011);
+ else
+assign bp_match = state == 3'b011;
+
+
+
+
+
+
+
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_comb
+assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1]));
+ end
+endgenerate
+generate
+ if (watchpoints > 0)
+assign wp_match = |wp_match_n;
+ else
+assign wp_match = 1'b0;
+endgenerate
+
+
+
+
+
+
+assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1);
+assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data;
+assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ bp_e[i] <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i))
+ begin
+ bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ bp_e[i] <= debug_csr_write_data[0];
+ end
+ end
+end
+ end
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ wp[i] <= { 32{1'bx}};
+ wpc_c[i] <= 2'b00;
+ end
+ else
+ begin
+ if (debug_csr_write_enable == 1'b1)
+ begin
+ if (debug_csr == 5'h8)
+ wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2];
+ if (debug_csr == 5'h18 + i)
+ wp[i] <= debug_csr_write_data;
+ end
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ dc_re <= 1'b0;
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ dc_re <= debug_csr_write_data[1];
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b000;
+ dc_ss <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ begin
+ dc_ss <= debug_csr_write_data[0];
+ if (debug_csr_write_data[0] == 1'b0)
+ state <= 3'b000;
+ else
+ state <= 3'b001;
+ end
+ case (state)
+ 3'b001:
+ begin
+
+ if ( ( (eret_q_x == 1'b1)
+ || (bret_q_x == 1'b1)
+ )
+ && (stall_x == 1'b0)
+ )
+ state <= 3'b010;
+ end
+ 3'b010:
+ begin
+
+ if ((q_x == 1'b1) && (stall_x == 1'b0))
+ state <= 3'b011;
+ end
+ 3'b011:
+ begin
+
+
+
+ if (dcache_refill_request == 1'b1)
+ state <= 3'b010;
+ else
+
+
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ begin
+ dc_ss <= 1'b0;
+ state <= 3'b100;
+ end
+ end
+ 3'b100:
+ begin
+
+
+
+ if (dcache_refill_request == 1'b1)
+ state <= 3'b010;
+ else
+
+
+ state <= 3'b000;
+ end
+ endcase
+ end
+end
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_full_debug (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+ branch_taken_x,
+ branch_target_x,
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+ iflush,
+
+
+
+
+ dcache_restart_request,
+ dcache_refill_request,
+ dcache_refilling,
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+ icache_stall_request,
+ icache_restart_request,
+ icache_refill_request,
+ icache_refilling,
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+ bus_error_d,
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+
+
+
+input branch_taken_x;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+
+
+
+input iflush;
+
+
+
+
+input dcache_restart_request;
+input dcache_refill_request;
+input dcache_refilling;
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+input jtag_read_enable;
+input jtag_write_enable;
+input [ 7:0] jtag_write_data;
+input [ (32-1):0] jtag_address;
+
+
+
+
+
+
+
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+output icache_stall_request;
+wire icache_stall_request;
+output icache_restart_request;
+wire icache_restart_request;
+output icache_refill_request;
+wire icache_refill_request;
+output icache_refilling;
+wire icache_refilling;
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+reg [ (32-1):0] i_dat_o;
+
+
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+reg [ (4-1):0] i_sel_o;
+
+
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+reg i_we_o;
+
+
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+output [ 7:0] jtag_read_data;
+reg [ 7:0] jtag_read_data;
+output jtag_access_complete;
+wire jtag_access_complete;
+
+
+
+
+
+output bus_error_d;
+reg bus_error_d;
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address;
+
+
+
+
+
+wire icache_read_enable_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address;
+reg icache_refill_ready;
+reg [ (32-1):0] icache_refill_data;
+wire [ (32-1):0] icache_data_f;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg bus_error_f;
+
+
+
+
+
+
+
+
+
+
+
+reg jtag_access;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_icache_full_debug #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) icache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .valid_d (valid_d),
+ .address_a (pc_a),
+ .address_f (pc_f),
+ .read_enable_f (icache_read_enable_f),
+ .refill_ready (icache_refill_ready),
+ .refill_data (icache_refill_data),
+ .iflush (iflush),
+
+ .stall_request (icache_stall_request),
+ .restart_request (icache_restart_request),
+ .refill_request (icache_refill_request),
+ .refill_address (icache_refill_address),
+ .refilling (icache_refilling),
+ .inst (icache_data_f)
+ );
+
+
+
+
+
+
+
+
+
+
+ assign icache_read_enable_f = (valid_f == 1'b1)
+ && (kill_f == 1'b0)
+
+
+ && (dcache_restart_request == 1'b0)
+
+
+
+
+
+
+ ;
+
+
+
+
+always @(*)
+begin
+
+
+
+ if (dcache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+ else if (branch_taken_x == 1'b1)
+ pc_a = branch_target_x;
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+ if (icache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = icache_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = icache_refill_address;
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = i_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 2'b11;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ pc_d <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ restart_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ else
+ begin
+
+
+
+
+
+ if (dcache_refill_request == 1'b1)
+ restart_address <= pc_w;
+ else if ((icache_refill_request == 1'b1) && (!dcache_refilling) && (!dcache_restart_request))
+ restart_address <= icache_refill_address;
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign jtag_access_complete = (i_cyc_o == 1'b1) && ((i_ack_i == 1'b1) || (i_err_i == 1'b1)) && (jtag_access == 1'b1);
+always @(*)
+begin
+ case (jtag_address[1:0])
+ 2'b00: jtag_read_data = i_dat_i[ 31:24];
+ 2'b01: jtag_read_data = i_dat_i[ 23:16];
+ 2'b10: jtag_read_data = i_dat_i[ 15:8];
+ 2'b11: jtag_read_data = i_dat_i[ 7:0];
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ icache_refill_data <= { 32{1'b0}};
+ icache_refill_ready <= 1'b0;
+
+
+ bus_error_f <= 1'b0;
+
+
+
+
+ i_we_o <= 1'b0;
+ i_sel_o <= 4'b1111;
+ jtag_access <= 1'b0;
+
+
+ end
+ else
+ begin
+ icache_refill_ready <= 1'b0;
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+
+ if (jtag_access == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_we_o <= 1'b0;
+ jtag_access <= 1'b0;
+ end
+ else
+
+
+ begin
+ if (last_word == 1'b1)
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_lock_o <= 1'b0;
+ end
+
+ i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ i_cti_o <= next_cycle_type;
+
+ icache_refill_ready <= 1'b1;
+ icache_refill_data <= i_dat_i;
+ end
+ end
+
+
+
+
+ if (i_err_i == 1'b1)
+ begin
+ bus_error_f <= 1'b1;
+ $display ("Instruction bus error. Address: %x", i_adr_o);
+ end
+
+
+
+
+ end
+ else
+ begin
+ if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
+ begin
+
+
+
+ i_sel_o <= 4'b1111;
+
+
+ i_adr_o <= {first_address, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_cti_o <= first_cycle_type;
+
+
+
+ bus_error_f <= 1'b0;
+
+
+ end
+
+
+ else
+ begin
+ if ((jtag_read_enable == 1'b1) || (jtag_write_enable == 1'b1))
+ begin
+ case (jtag_address[1:0])
+ 2'b00: i_sel_o <= 4'b1000;
+ 2'b01: i_sel_o <= 4'b0100;
+ 2'b10: i_sel_o <= 4'b0010;
+ 2'b11: i_sel_o <= 4'b0001;
+ endcase
+ i_adr_o <= jtag_address;
+ i_dat_o <= {4{jtag_write_data}};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_we_o <= jtag_write_enable;
+ i_cti_o <= 3'b111;
+ jtag_access <= 1'b1;
+ end
+ end
+
+
+
+
+
+
+
+
+ if (branch_taken_x == 1'b1)
+ bus_error_f <= 1'b0;
+
+
+ if (branch_taken_m == 1'b1)
+ bus_error_f <= 1'b0;
+
+
+ end
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+ bus_error_d <= 1'b0;
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+ bus_error_d <= bus_error_f;
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_jtag_full_debug (
+
+ clk_i,
+ rst_i,
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+ csr,
+ csr_write_enable,
+ csr_write_data,
+ stall_x,
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+ exception_q_w,
+
+
+
+
+
+ jtx_csr_read_data,
+ jrx_csr_read_data,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ jtag_break,
+ jtag_reset,
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+input [ (5-1):0] csr;
+input csr_write_enable;
+input [ (32-1):0] csr_write_data;
+input stall_x;
+
+
+
+
+input [ 7:0] jtag_read_data;
+input jtag_access_complete;
+
+
+
+
+input exception_q_w;
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jtx_csr_read_data;
+output [ (32-1):0] jrx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+output jtag_csr_write_enable;
+reg jtag_csr_write_enable;
+output [ (32-1):0] jtag_csr_write_data;
+wire [ (32-1):0] jtag_csr_write_data;
+output [ (5-1):0] jtag_csr;
+wire [ (5-1):0] jtag_csr;
+output jtag_read_enable;
+reg jtag_read_enable;
+output jtag_write_enable;
+reg jtag_write_enable;
+output [ 7:0] jtag_write_data;
+wire [ 7:0] jtag_write_data;
+output [ (32-1):0] jtag_address;
+wire [ (32-1):0] jtag_address;
+
+
+
+
+output jtag_break;
+reg jtag_break;
+output jtag_reset;
+reg jtag_reset;
+
+
+output [ 7:0] jtag_reg_d;
+reg [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+reg rx_update;
+reg rx_update_r;
+reg rx_update_r_r;
+reg rx_update_r_r_r;
+
+
+
+wire [ 7:0] rx_byte;
+wire [2:0] rx_addr;
+
+
+
+reg [ 7:0] uart_tx_byte;
+reg uart_tx_valid;
+reg [ 7:0] uart_rx_byte;
+reg uart_rx_valid;
+
+
+
+reg [ 3:0] command;
+
+
+reg [ 7:0] jtag_byte_0;
+reg [ 7:0] jtag_byte_1;
+reg [ 7:0] jtag_byte_2;
+reg [ 7:0] jtag_byte_3;
+reg [ 7:0] jtag_byte_4;
+reg processing;
+
+
+
+reg [ 3:0] state;
+
+
+
+
+
+
+
+assign jtag_csr_write_data = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_csr = jtag_byte_4[ (5-1):0];
+assign jtag_address = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_write_data = jtag_byte_4;
+
+
+
+
+
+
+assign jtag_reg_addr_d[1:0] = {uart_rx_valid, uart_tx_valid};
+
+
+
+
+
+
+assign jtag_reg_addr_d[2] = processing;
+
+
+
+
+
+
+
+assign jtx_csr_read_data = {{ 32-9{1'b0}}, uart_tx_valid, 8'h00};
+assign jrx_csr_read_data = {{ 32-9{1'b0}}, uart_rx_valid, uart_rx_byte};
+
+
+
+
+
+
+
+assign rx_byte = jtag_reg_q;
+assign rx_addr = jtag_reg_addr_q;
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ rx_update <= 1'b0;
+ rx_update_r <= 1'b0;
+ rx_update_r_r <= 1'b0;
+ rx_update_r_r_r <= 1'b0;
+ end
+ else
+ begin
+ rx_update <= jtag_update;
+ rx_update_r <= rx_update;
+ rx_update_r_r <= rx_update_r;
+ rx_update_r_r_r <= rx_update_r_r;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'h0;
+ command <= 4'b0000;
+ jtag_reg_d <= 8'h00;
+
+
+ processing <= 1'b0;
+ jtag_csr_write_enable <= 1'b0;
+ jtag_read_enable <= 1'b0;
+ jtag_write_enable <= 1'b0;
+
+
+
+
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+
+
+
+
+ uart_tx_byte <= 8'h00;
+ uart_tx_valid <= 1'b0;
+ uart_rx_byte <= 8'h00;
+ uart_rx_valid <= 1'b0;
+
+
+ end
+ else
+ begin
+
+
+ if ((csr_write_enable == 1'b1) && (stall_x == 1'b0))
+ begin
+ case (csr)
+ 5'he:
+ begin
+
+ uart_tx_byte <= csr_write_data[ 7:0];
+ uart_tx_valid <= 1'b1;
+ end
+ 5'hf:
+ begin
+
+ uart_rx_valid <= 1'b0;
+ end
+ endcase
+ end
+
+
+
+
+
+ if (exception_q_w == 1'b1)
+ begin
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+ end
+
+
+ case (state)
+ 4'h0:
+ begin
+
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ command <= rx_byte[7:4];
+ case (rx_addr)
+
+
+ 3'b000:
+ begin
+ case (rx_byte[7:4])
+
+
+ 4'b0001:
+ state <= 4'h1;
+ 4'b0011:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 4'h6;
+ end
+ 4'b0010:
+ state <= 4'h1;
+ 4'b0100:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 5;
+ end
+ 4'b0101:
+ state <= 4'h1;
+
+
+ 4'b0110:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_break <= 1'b1;
+ end
+ 4'b0111:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_reset <= 1'b1;
+ end
+ endcase
+ end
+
+
+
+
+ 3'b001:
+ begin
+ uart_rx_byte <= rx_byte;
+ uart_rx_valid <= 1'b1;
+ end
+ 3'b010:
+ begin
+ jtag_reg_d <= uart_tx_byte;
+ uart_tx_valid <= 1'b0;
+ end
+
+
+ default:
+ ;
+ endcase
+ end
+ end
+
+
+ 4'h1:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_0 <= rx_byte;
+ state <= 4'h2;
+ end
+ end
+ 4'h2:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_1 <= rx_byte;
+ state <= 4'h3;
+ end
+ end
+ 4'h3:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_2 <= rx_byte;
+ state <= 4'h4;
+ end
+ end
+ 4'h4:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_3 <= rx_byte;
+ if (command == 4'b0001)
+ state <= 4'h6;
+ else
+ state <= 4'h5;
+ end
+ end
+ 4'h5:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_4 <= rx_byte;
+ state <= 4'h6;
+ end
+ end
+ 4'h6:
+ begin
+ case (command)
+ 4'b0001,
+ 4'b0011:
+ begin
+ jtag_read_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0010,
+ 4'b0100:
+ begin
+ jtag_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0101:
+ begin
+ jtag_csr_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h8;
+ end
+ endcase
+ end
+ 4'h7:
+ begin
+ if (jtag_access_complete == 1'b1)
+ begin
+ jtag_read_enable <= 1'b0;
+ jtag_reg_d <= jtag_read_data;
+ jtag_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+ end
+ 4'h8:
+ begin
+ jtag_csr_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_full_debug (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+ non_debug_exception,
+ debug_exception,
+
+
+
+
+ eret_q_x,
+
+
+ bret_q_x,
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+input non_debug_exception;
+input debug_exception;
+
+
+
+
+input eret_q_x;
+
+
+input bret_q_x;
+
+
+
+input [ (5-1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+reg bie;
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ 5'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_medium (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_medium
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_medium (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_medium (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+
+
+
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 512;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 0;
+parameter icache_limit = 0;
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+
+
+parameter watchpoints = 0;
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((32-2)+2-1):2] branch_predict_address_d;
+wire [ ((32-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((32-2)+2-1):2] branch_offset_d;
+reg [ ((32-2)+2-1):2] branch_target_x;
+reg [ ((32-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (4 -1):0] csr_d;
+reg [ (4 -1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((32-2)+2-1):2] pc_f;
+wire [ ((32-2)+2-1):2] pc_d;
+wire [ ((32-2)+2-1):2] pc_x;
+wire [ ((32-2)+2-1):2] pc_m;
+wire [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (32-2)+2-1:8] eba;
+
+
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire exception_x;
+reg exception_m;
+reg exception_w;
+wire exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire system_call_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_medium #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+
+
+
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_medium decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_medium #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_interrupt_medium interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+
+
+
+ .exception (exception_q_w),
+
+
+ .eret_q_x (eret_q_x),
+
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+
+
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign exception_x = (system_call_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+ )
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || (I_CYC_O == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+
+
+
+assign exception_q_w = ((exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (4 -1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 4 'h0,
+ 4 'h1,
+ 4 'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 4 'h6: csr_read_data_x = cfg;
+ 4 'h7: csr_read_data_x = {eba, 8'h00};
+
+
+
+
+
+
+
+
+
+ 4 'ha: csr_read_data_x = cfg2;
+ 4 'hb: csr_read_data_x = sdb_address;
+
+
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (32-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 4 'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (32-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+
+
+ valid_f <= 1'b1;
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (32-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 4 {1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (32-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+
+
+
+ exception_w <= 1'b0;
+
+
+
+
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((32-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+
+
+ scall_x <= scall_d;
+
+
+
+
+ eret_x <= eret_d;
+
+
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else
+ write_idx_m <= write_idx_x;
+
+
+ condition_met_m <= condition_met_x;
+
+
+
+
+
+
+
+
+
+
+
+
+ branch_target_m <= exception_x == 1'b1 ? {eba, eid_x, {3{1'b0}}} : branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+
+
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? {pc_m, 2'b00} : m_result;
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+
+
+
+ exception_w <= exception_m;
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_medium
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_data_m;
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_medium (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+
+
+ scall,
+ eret,
+
+
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((32-2)+2-1):2] branch_offset;
+wire [ ((32-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (32-2)-1:0])
+ : (branch_immediate[ (32-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_medium (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+
+
+
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((32-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((32-2)+2-1):2] branch_target_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ ((32-2)+2-1):2] pc_f;
+reg [ ((32-2)+2-1):2] pc_f;
+output [ ((32-2)+2-1):2] pc_d;
+reg [ ((32-2)+2-1):2] pc_d;
+output [ ((32-2)+2-1):2] pc_x;
+reg [ ((32-2)+2-1):2] pc_x;
+output [ ((32-2)+2-1):2] pc_m;
+reg [ ((32-2)+2-1):2] pc_m;
+output [ ((32-2)+2-1):2] pc_w;
+reg [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+
+
+wire [ (32-1):0] i_dat_o;
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+
+
+wire [ (4-1):0] i_sel_o;
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+
+
+wire i_we_o;
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((32-2)+2-1):2] pc_a;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] wb_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+
+
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = wb_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_dat_o = 32'd0;
+assign i_we_o = 1'b0;
+assign i_sel_o = 4'b1111;
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((32-2)+2-1):2];
+ pc_d <= { (32-2){1'b0}};
+ pc_x <= { (32-2){1'b0}};
+ pc_m <= { (32-2){1'b0}};
+ pc_w <= { (32-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ wb_data_f <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+
+ wb_data_f <= i_dat_i;
+ end
+
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+
+ if ( (stall_a == 1'b0)
+
+
+
+
+ )
+ begin
+
+
+
+
+
+ i_adr_o <= {pc_a, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+
+
+
+
+ end
+ else
+ begin
+ if ( (stall_a == 1'b0)
+
+
+
+
+ )
+ begin
+
+
+
+
+ end
+ end
+ end
+ end
+ end
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_medium (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+
+
+
+ exception,
+
+
+ eret_q_x,
+
+
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+
+
+
+input exception;
+
+
+input eret_q_x;
+
+
+
+
+
+input [ (4 -1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ 4 'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_medium_debug (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+wire [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_q;
+wire jtag_update;
+wire [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_q;
+wire jtck;
+wire jrstn;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_medium_debug
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_clk (jtck),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+jtag_cores jtag_cores (
+
+ .reg_d (jtag_reg_d),
+ .reg_addr_d (jtag_reg_addr_d),
+
+ .reg_update (jtag_update),
+ .reg_q (jtag_reg_q),
+ .reg_addr_q (jtag_reg_addr_q),
+ .jtck (jtck),
+ .jrstn (jrstn)
+ );
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_medium_debug (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_medium_debug (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+parameter deba_reset = 32'h10000000;
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 256;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 32'h0;
+parameter icache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+parameter watchpoints = 32'h4;
+
+
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_a;
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (5-1):0] csr_d;
+reg [ (5-1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+wire break_d;
+reg break_x;
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+wire bret_d;
+reg bret_x;
+wire bret_q_x;
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+wire iflush;
+wire icache_stall_request;
+wire icache_restart_request;
+wire icache_refill_request;
+wire icache_refilling;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+wire [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+wire jtag_csr_write_enable;
+wire [ (32-1):0] jtag_csr_write_data;
+wire [ (5-1):0] jtag_csr;
+wire jtag_read_enable;
+wire [ 7:0] jtag_read_data;
+wire jtag_write_enable;
+wire [ 7:0] jtag_write_data;
+wire [ (32-1):0] jtag_address;
+wire jtag_access_complete;
+
+
+
+
+wire jtag_break;
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] eba;
+
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] deba;
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+wire dc_ss;
+
+
+wire dc_re;
+wire bp_match;
+wire wp_match;
+wire exception_x;
+reg exception_m;
+wire debug_exception_x;
+reg debug_exception_m;
+reg debug_exception_w;
+wire debug_exception_q_w;
+wire non_debug_exception_x;
+reg non_debug_exception_m;
+reg non_debug_exception_w;
+wire non_debug_exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+wire reset_exception;
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+wire breakpoint_exception;
+wire watchpoint_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire system_call_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_medium_debug #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+ .iflush (iflush),
+
+
+
+
+
+
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+ .icache_stall_request (icache_stall_request),
+ .icache_restart_request (icache_restart_request),
+ .icache_refill_request (icache_refill_request),
+ .icache_refilling (icache_refilling),
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_medium_debug decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+ .break_opcode (break_d),
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+ .bret (bret_d),
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_medium_debug #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_interrupt_medium_debug interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+ .non_debug_exception (non_debug_exception_q_w),
+ .debug_exception (debug_exception_q_w),
+
+
+
+
+ .eret_q_x (eret_q_x),
+
+
+ .bret_q_x (bret_q_x),
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_jtag_medium_debug jtag (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .jtag_clk (jtag_clk),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+ .stall_x (stall_x),
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+ .exception_q_w (debug_exception_q_w || non_debug_exception_q_w),
+
+
+
+
+
+
+ .jtx_csr_read_data (jtx_csr_read_data),
+ .jrx_csr_read_data (jrx_csr_read_data),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .jtag_break (jtag_break),
+ .jtag_reset (reset_exception),
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d)
+ );
+
+
+
+
+
+
+lm32_debug_medium_debug #(
+ .breakpoints (breakpoints),
+ .watchpoints (watchpoints)
+ ) hw_debug (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .pc_x (pc_x),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_store_address_x (adder_result_x),
+ .csr_write_enable_x (csr_write_enable_q_x),
+ .csr_write_data (operand_1_x),
+ .csr_x (csr_x),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+
+
+
+
+
+
+
+
+
+
+
+
+ .eret_q_x (eret_q_x),
+ .bret_q_x (bret_q_x),
+ .stall_x (stall_x),
+ .exception_x (exception_x),
+ .q_x (q_x),
+
+
+
+
+
+
+
+
+
+ .dc_ss (dc_ss),
+
+
+ .dc_re (dc_re),
+ .bp_match (bp_match),
+ .wp_match (wp_match)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+assign breakpoint_exception = ( ( (break_x == 1'b1)
+ || (bp_match == 1'b1)
+ )
+ && (valid_x == 1'b1)
+ )
+
+
+ || (jtag_break == 1'b1)
+
+
+ ;
+
+
+
+
+
+assign watchpoint_exception = wp_match == 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+
+
+ );
+
+
+
+assign debug_exception_x = (breakpoint_exception == 1'b1)
+ || (watchpoint_exception == 1'b1)
+ ;
+
+assign non_debug_exception_x = (system_call_exception == 1'b1)
+
+
+ || (reset_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+
+
+
+
+
+ )
+
+
+ ;
+
+assign exception_x = (debug_exception_x == 1'b1) || (non_debug_exception_x == 1'b1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+ if (reset_exception == 1'b1)
+ eid_x = 3'h0;
+ else
+
+
+
+
+
+
+
+
+ if (breakpoint_exception == 1'b1)
+ eid_x = 3'd1;
+ else
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (watchpoint_exception == 1'b1)
+ eid_x = 3'd3;
+ else
+
+
+
+
+
+
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( ( (break_d == 1'b1)
+ || (bret_d == 1'b1)
+ )
+ && ( (load_q_x == 1'b1)
+ || (store_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+ || (icache_stall_request == 1'b1)
+ || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign bret_q_x = (bret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+assign debug_exception_q_w = ((debug_exception_w == 1'b1) && (valid_w == 1'b1));
+assign non_debug_exception_q_w = ((non_debug_exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+assign iflush = ( (csr_write_enable_d == 1'b1)
+ && (csr_d == 5'h3)
+ && (stall_d == 1'b0)
+ && (kill_d == 1'b0)
+ && (valid_d == 1'b1))
+
+
+
+ ||
+ ( (jtag_csr_write_enable == 1'b1)
+ && (jtag_csr == 5'h3))
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (5-1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 5'h0,
+ 5'h1,
+ 5'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 5'h6: csr_read_data_x = cfg;
+ 5'h7: csr_read_data_x = {eba, 8'h00};
+
+
+ 5'h9: csr_read_data_x = {deba, 8'h00};
+
+
+
+
+ 5'he: csr_read_data_x = jtx_csr_read_data;
+ 5'hf: csr_read_data_x = jrx_csr_read_data;
+
+
+ 5'ha: csr_read_data_x = cfg2;
+ 5'hb: csr_read_data_x = sdb_address;
+
+
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h7))
+ eba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ deba <= deba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h9) && (stall_x == 1'b0))
+ deba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h9))
+ deba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ if (icache_refill_request == 1'b1)
+ valid_a = 1'b0;
+ else if (icache_restart_request == 1'b1)
+ valid_a = 1'b1;
+ else
+ valid_a = !icache_refilling;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+ valid_f <= valid_a;
+
+
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 5{1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+ break_x <= 1'b0;
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+ bret_x <= 1'b0;
+
+
+
+
+
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+ debug_exception_m <= 1'b0;
+ non_debug_exception_m <= 1'b0;
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+ debug_exception_w <= 1'b0;
+ non_debug_exception_w <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+ break_x <= break_d;
+
+
+ scall_x <= scall_d;
+
+
+
+
+ eret_x <= eret_d;
+
+
+ bret_x <= bret_d;
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+ if (non_debug_exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else if (debug_exception_x == 1'b1)
+ write_idx_m <= 5'd31;
+ else
+ write_idx_m <= write_idx_x;
+
+
+
+
+
+
+
+ condition_met_m <= condition_met_x;
+
+
+ if (exception_x == 1'b1)
+ if ((dc_re == 1'b1)
+ || ((debug_exception_x == 1'b1)
+ && (non_debug_exception_x == 1'b0)))
+ branch_target_m <= {deba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= {eba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+ debug_exception_m <= debug_exception_x;
+ non_debug_exception_m <= non_debug_exception_x;
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+
+
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? {pc_m, 2'b00} : m_result;
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+ debug_exception_w <= debug_exception_m;
+ non_debug_exception_w <= non_debug_exception_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_medium_debug
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_data_m;
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_medium_debug (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+ break_opcode,
+
+
+ scall,
+ eret,
+
+
+ bret,
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+output break_opcode;
+wire break_opcode;
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+output bret;
+wire bret;
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+assign break_opcode = op_raise & ~instruction[2];
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+assign bret = op_b & (instruction[25:21] == 5'd31);
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0])
+ : (branch_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_icache_medium_debug (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_f,
+ address_a,
+ address_f,
+ read_enable_f,
+ refill_ready,
+ refill_data,
+ iflush,
+
+
+
+
+ valid_d,
+ branch_predict_taken_d,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ inst
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+
+input valid_d;
+input branch_predict_taken_d;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_a;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_f;
+input read_enable_f;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input iflush;
+
+
+
+
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+wire refill_request;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] inst;
+wire [ (32-1):0] inst;
+
+
+
+
+
+wire enable;
+wire [0:associativity-1] way_mem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+
+reg [ 3:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+)
+ way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (enable),
+ .write_address (dmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i]),
+ .write_data (refill_data),
+
+ .read_data (way_data[i])
+ );
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ )
+ way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i] | flushing),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+
+ end
+endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_f[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : inst_1
+assign inst = way_match[0] ? way_data[0] : 32'b0;
+ end
+ else if (associativity == 2)
+ begin : inst_2
+assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset};
+ else
+assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb];
+endgenerate
+
+assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb];
+
+
+assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb];
+assign tmem_write_address = flushing
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign enable = (stall_a == 1'b0);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_mem_we[0] = (refill_ready == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
+assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = last_refill & !flushing;
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = |state[1:0];
+assign check = state[2];
+assign refill = state[3];
+
+assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
+assign stall_request = (check == 1'b0);
+assign refill_request = (refill == 1'b1);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (miss == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'b0001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 4'b0001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 4'b0100;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0010:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+
+
+
+
+
+
+ state <= 4'b0100;
+
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0100:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (iflush == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b0010;
+ end
+ else if (miss == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b1000;
+ end
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 4'b0100;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 4'b0100:
+ begin
+ if (iflush == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_debug_medium_debug (
+
+ clk_i,
+ rst_i,
+ pc_x,
+ load_x,
+ store_x,
+ load_store_address_x,
+ csr_write_enable_x,
+ csr_write_data,
+ csr_x,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ eret_q_x,
+ bret_q_x,
+ stall_x,
+ exception_x,
+ q_x,
+
+
+
+
+
+
+
+
+
+
+ dc_ss,
+
+
+ dc_re,
+ bp_match,
+ wp_match
+ );
+
+
+
+
+
+parameter breakpoints = 0;
+parameter watchpoints = 0;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+input load_x;
+input store_x;
+input [ (32-1):0] load_store_address_x;
+input csr_write_enable_x;
+input [ (32-1):0] csr_write_data;
+input [ (5-1):0] csr_x;
+
+
+
+
+input jtag_csr_write_enable;
+input [ (32-1):0] jtag_csr_write_data;
+input [ (5-1):0] jtag_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input eret_q_x;
+input bret_q_x;
+input stall_x;
+input exception_x;
+input q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+output dc_ss;
+reg dc_ss;
+
+
+output dc_re;
+reg dc_re;
+output bp_match;
+wire bp_match;
+output wp_match;
+wire wp_match;
+
+
+
+
+
+genvar i;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1];
+reg bp_e[0:breakpoints-1];
+wire [0:breakpoints-1]bp_match_n;
+
+reg [ 1:0] wpc_c[0:watchpoints-1];
+reg [ (32-1):0] wp[0:watchpoints-1];
+wire [0:watchpoints-1]wp_match_n;
+
+wire debug_csr_write_enable;
+wire [ (32-1):0] debug_csr_write_data;
+wire [ (5-1):0] debug_csr;
+
+
+
+
+reg [ 2:0] state;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_comb
+assign bp_match_n[i] = ((bp_a[i] == pc_x) && (bp_e[i] == 1'b1));
+ end
+endgenerate
+generate
+
+
+ if (breakpoints > 0)
+assign bp_match = (|bp_match_n) || (state == 3'b011);
+ else
+assign bp_match = state == 3'b011;
+
+
+
+
+
+
+
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_comb
+assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1]));
+ end
+endgenerate
+generate
+ if (watchpoints > 0)
+assign wp_match = |wp_match_n;
+ else
+assign wp_match = 1'b0;
+endgenerate
+
+
+
+
+
+
+assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1);
+assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data;
+assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ bp_e[i] <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i))
+ begin
+ bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ bp_e[i] <= debug_csr_write_data[0];
+ end
+ end
+end
+ end
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ wp[i] <= { 32{1'bx}};
+ wpc_c[i] <= 2'b00;
+ end
+ else
+ begin
+ if (debug_csr_write_enable == 1'b1)
+ begin
+ if (debug_csr == 5'h8)
+ wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2];
+ if (debug_csr == 5'h18 + i)
+ wp[i] <= debug_csr_write_data;
+ end
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ dc_re <= 1'b0;
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ dc_re <= debug_csr_write_data[1];
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b000;
+ dc_ss <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ begin
+ dc_ss <= debug_csr_write_data[0];
+ if (debug_csr_write_data[0] == 1'b0)
+ state <= 3'b000;
+ else
+ state <= 3'b001;
+ end
+ case (state)
+ 3'b001:
+ begin
+
+ if ( ( (eret_q_x == 1'b1)
+ || (bret_q_x == 1'b1)
+ )
+ && (stall_x == 1'b0)
+ )
+ state <= 3'b010;
+ end
+ 3'b010:
+ begin
+
+ if ((q_x == 1'b1) && (stall_x == 1'b0))
+ state <= 3'b011;
+ end
+ 3'b011:
+ begin
+
+
+
+
+
+
+
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ begin
+ dc_ss <= 1'b0;
+ state <= 3'b100;
+ end
+ end
+ 3'b100:
+ begin
+
+
+
+
+
+
+
+ state <= 3'b000;
+ end
+ endcase
+ end
+end
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_medium_debug (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+ iflush,
+
+
+
+
+
+
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+ icache_stall_request,
+ icache_restart_request,
+ icache_refill_request,
+ icache_refilling,
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+
+
+
+input iflush;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+input jtag_read_enable;
+input jtag_write_enable;
+input [ 7:0] jtag_write_data;
+input [ (32-1):0] jtag_address;
+
+
+
+
+
+
+
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+output icache_stall_request;
+wire icache_stall_request;
+output icache_restart_request;
+wire icache_restart_request;
+output icache_refill_request;
+wire icache_refill_request;
+output icache_refilling;
+wire icache_refilling;
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+reg [ (32-1):0] i_dat_o;
+
+
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+reg [ (4-1):0] i_sel_o;
+
+
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+reg i_we_o;
+
+
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+output [ 7:0] jtag_read_data;
+reg [ 7:0] jtag_read_data;
+output jtag_access_complete;
+wire jtag_access_complete;
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address;
+
+
+
+
+
+wire icache_read_enable_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address;
+reg icache_refill_ready;
+reg [ (32-1):0] icache_refill_data;
+wire [ (32-1):0] icache_data_f;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg jtag_access;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_icache_medium_debug #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) icache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .valid_d (valid_d),
+ .address_a (pc_a),
+ .address_f (pc_f),
+ .read_enable_f (icache_read_enable_f),
+ .refill_ready (icache_refill_ready),
+ .refill_data (icache_refill_data),
+ .iflush (iflush),
+
+ .stall_request (icache_stall_request),
+ .restart_request (icache_restart_request),
+ .refill_request (icache_refill_request),
+ .refill_address (icache_refill_address),
+ .refilling (icache_refilling),
+ .inst (icache_data_f)
+ );
+
+
+
+
+
+
+
+
+
+
+ assign icache_read_enable_f = (valid_f == 1'b1)
+ && (kill_f == 1'b0)
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+ if (icache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = icache_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = icache_refill_address;
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = i_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 2'b11;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ pc_d <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ restart_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (icache_refill_request == 1'b1)
+ restart_address <= icache_refill_address;
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign jtag_access_complete = (i_cyc_o == 1'b1) && ((i_ack_i == 1'b1) || (i_err_i == 1'b1)) && (jtag_access == 1'b1);
+always @(*)
+begin
+ case (jtag_address[1:0])
+ 2'b00: jtag_read_data = i_dat_i[ 31:24];
+ 2'b01: jtag_read_data = i_dat_i[ 23:16];
+ 2'b10: jtag_read_data = i_dat_i[ 15:8];
+ 2'b11: jtag_read_data = i_dat_i[ 7:0];
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ icache_refill_data <= { 32{1'b0}};
+ icache_refill_ready <= 1'b0;
+
+
+
+
+
+
+ i_we_o <= 1'b0;
+ i_sel_o <= 4'b1111;
+ jtag_access <= 1'b0;
+
+
+ end
+ else
+ begin
+ icache_refill_ready <= 1'b0;
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+
+ if (jtag_access == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_we_o <= 1'b0;
+ jtag_access <= 1'b0;
+ end
+ else
+
+
+ begin
+ if (last_word == 1'b1)
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_lock_o <= 1'b0;
+ end
+
+ i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ i_cti_o <= next_cycle_type;
+
+ icache_refill_ready <= 1'b1;
+ icache_refill_data <= i_dat_i;
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+ if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
+ begin
+
+
+
+ i_sel_o <= 4'b1111;
+
+
+ i_adr_o <= {first_address, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_cti_o <= first_cycle_type;
+
+
+
+
+
+ end
+
+
+ else
+ begin
+ if ((jtag_read_enable == 1'b1) || (jtag_write_enable == 1'b1))
+ begin
+ case (jtag_address[1:0])
+ 2'b00: i_sel_o <= 4'b1000;
+ 2'b01: i_sel_o <= 4'b0100;
+ 2'b10: i_sel_o <= 4'b0010;
+ 2'b11: i_sel_o <= 4'b0001;
+ endcase
+ i_adr_o <= jtag_address;
+ i_dat_o <= {4{jtag_write_data}};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_we_o <= jtag_write_enable;
+ i_cti_o <= 3'b111;
+ jtag_access <= 1'b1;
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_jtag_medium_debug (
+
+ clk_i,
+ rst_i,
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+ csr,
+ csr_write_enable,
+ csr_write_data,
+ stall_x,
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+ exception_q_w,
+
+
+
+
+
+ jtx_csr_read_data,
+ jrx_csr_read_data,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ jtag_break,
+ jtag_reset,
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+input [ (5-1):0] csr;
+input csr_write_enable;
+input [ (32-1):0] csr_write_data;
+input stall_x;
+
+
+
+
+input [ 7:0] jtag_read_data;
+input jtag_access_complete;
+
+
+
+
+input exception_q_w;
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jtx_csr_read_data;
+output [ (32-1):0] jrx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+output jtag_csr_write_enable;
+reg jtag_csr_write_enable;
+output [ (32-1):0] jtag_csr_write_data;
+wire [ (32-1):0] jtag_csr_write_data;
+output [ (5-1):0] jtag_csr;
+wire [ (5-1):0] jtag_csr;
+output jtag_read_enable;
+reg jtag_read_enable;
+output jtag_write_enable;
+reg jtag_write_enable;
+output [ 7:0] jtag_write_data;
+wire [ 7:0] jtag_write_data;
+output [ (32-1):0] jtag_address;
+wire [ (32-1):0] jtag_address;
+
+
+
+
+output jtag_break;
+reg jtag_break;
+output jtag_reset;
+reg jtag_reset;
+
+
+output [ 7:0] jtag_reg_d;
+reg [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+reg rx_update;
+reg rx_update_r;
+reg rx_update_r_r;
+reg rx_update_r_r_r;
+
+
+
+wire [ 7:0] rx_byte;
+wire [2:0] rx_addr;
+
+
+
+reg [ 7:0] uart_tx_byte;
+reg uart_tx_valid;
+reg [ 7:0] uart_rx_byte;
+reg uart_rx_valid;
+
+
+
+reg [ 3:0] command;
+
+
+reg [ 7:0] jtag_byte_0;
+reg [ 7:0] jtag_byte_1;
+reg [ 7:0] jtag_byte_2;
+reg [ 7:0] jtag_byte_3;
+reg [ 7:0] jtag_byte_4;
+reg processing;
+
+
+
+reg [ 3:0] state;
+
+
+
+
+
+
+
+assign jtag_csr_write_data = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_csr = jtag_byte_4[ (5-1):0];
+assign jtag_address = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_write_data = jtag_byte_4;
+
+
+
+
+
+
+assign jtag_reg_addr_d[1:0] = {uart_rx_valid, uart_tx_valid};
+
+
+
+
+
+
+assign jtag_reg_addr_d[2] = processing;
+
+
+
+
+
+
+
+assign jtx_csr_read_data = {{ 32-9{1'b0}}, uart_tx_valid, 8'h00};
+assign jrx_csr_read_data = {{ 32-9{1'b0}}, uart_rx_valid, uart_rx_byte};
+
+
+
+
+
+
+
+assign rx_byte = jtag_reg_q;
+assign rx_addr = jtag_reg_addr_q;
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ rx_update <= 1'b0;
+ rx_update_r <= 1'b0;
+ rx_update_r_r <= 1'b0;
+ rx_update_r_r_r <= 1'b0;
+ end
+ else
+ begin
+ rx_update <= jtag_update;
+ rx_update_r <= rx_update;
+ rx_update_r_r <= rx_update_r;
+ rx_update_r_r_r <= rx_update_r_r;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'h0;
+ command <= 4'b0000;
+ jtag_reg_d <= 8'h00;
+
+
+ processing <= 1'b0;
+ jtag_csr_write_enable <= 1'b0;
+ jtag_read_enable <= 1'b0;
+ jtag_write_enable <= 1'b0;
+
+
+
+
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+
+
+
+
+ uart_tx_byte <= 8'h00;
+ uart_tx_valid <= 1'b0;
+ uart_rx_byte <= 8'h00;
+ uart_rx_valid <= 1'b0;
+
+
+ end
+ else
+ begin
+
+
+ if ((csr_write_enable == 1'b1) && (stall_x == 1'b0))
+ begin
+ case (csr)
+ 5'he:
+ begin
+
+ uart_tx_byte <= csr_write_data[ 7:0];
+ uart_tx_valid <= 1'b1;
+ end
+ 5'hf:
+ begin
+
+ uart_rx_valid <= 1'b0;
+ end
+ endcase
+ end
+
+
+
+
+
+ if (exception_q_w == 1'b1)
+ begin
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+ end
+
+
+ case (state)
+ 4'h0:
+ begin
+
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ command <= rx_byte[7:4];
+ case (rx_addr)
+
+
+ 3'b000:
+ begin
+ case (rx_byte[7:4])
+
+
+ 4'b0001:
+ state <= 4'h1;
+ 4'b0011:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 4'h6;
+ end
+ 4'b0010:
+ state <= 4'h1;
+ 4'b0100:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 5;
+ end
+ 4'b0101:
+ state <= 4'h1;
+
+
+ 4'b0110:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_break <= 1'b1;
+ end
+ 4'b0111:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_reset <= 1'b1;
+ end
+ endcase
+ end
+
+
+
+
+ 3'b001:
+ begin
+ uart_rx_byte <= rx_byte;
+ uart_rx_valid <= 1'b1;
+ end
+ 3'b010:
+ begin
+ jtag_reg_d <= uart_tx_byte;
+ uart_tx_valid <= 1'b0;
+ end
+
+
+ default:
+ ;
+ endcase
+ end
+ end
+
+
+ 4'h1:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_0 <= rx_byte;
+ state <= 4'h2;
+ end
+ end
+ 4'h2:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_1 <= rx_byte;
+ state <= 4'h3;
+ end
+ end
+ 4'h3:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_2 <= rx_byte;
+ state <= 4'h4;
+ end
+ end
+ 4'h4:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_3 <= rx_byte;
+ if (command == 4'b0001)
+ state <= 4'h6;
+ else
+ state <= 4'h5;
+ end
+ end
+ 4'h5:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_4 <= rx_byte;
+ state <= 4'h6;
+ end
+ end
+ 4'h6:
+ begin
+ case (command)
+ 4'b0001,
+ 4'b0011:
+ begin
+ jtag_read_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0010,
+ 4'b0100:
+ begin
+ jtag_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0101:
+ begin
+ jtag_csr_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h8;
+ end
+ endcase
+ end
+ 4'h7:
+ begin
+ if (jtag_access_complete == 1'b1)
+ begin
+ jtag_read_enable <= 1'b0;
+ jtag_reg_d <= jtag_read_data;
+ jtag_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+ end
+ 4'h8:
+ begin
+ jtag_csr_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_medium_debug (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+ non_debug_exception,
+ debug_exception,
+
+
+
+
+ eret_q_x,
+
+
+ bret_q_x,
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+input non_debug_exception;
+input debug_exception;
+
+
+
+
+input eret_q_x;
+
+
+input bret_q_x;
+
+
+
+input [ (5-1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+reg bie;
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ 5'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_medium_icache (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_medium_icache
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_medium_icache (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_medium_icache (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 256;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 32'h0;
+parameter icache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+
+
+parameter watchpoints = 0;
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_a;
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (4 -1):0] csr_d;
+reg [ (4 -1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+wire iflush;
+wire icache_stall_request;
+wire icache_restart_request;
+wire icache_refill_request;
+wire icache_refilling;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] eba;
+
+
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire exception_x;
+reg exception_m;
+reg exception_w;
+wire exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire system_call_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_medium_icache #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+ .iflush (iflush),
+
+
+
+
+
+
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+ .icache_stall_request (icache_stall_request),
+ .icache_restart_request (icache_restart_request),
+ .icache_refill_request (icache_refill_request),
+ .icache_refilling (icache_refilling),
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_medium_icache decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_medium_icache #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_interrupt_medium_icache interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+
+
+
+ .exception (exception_q_w),
+
+
+ .eret_q_x (eret_q_x),
+
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+
+
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign exception_x = (system_call_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+ )
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+ || (icache_stall_request == 1'b1)
+ || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+
+
+
+assign exception_q_w = ((exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+assign iflush = ( (csr_write_enable_d == 1'b1)
+ && (csr_d == 4 'h3)
+ && (stall_d == 1'b0)
+ && (kill_d == 1'b0)
+ && (valid_d == 1'b1))
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (4 -1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 4 'h0,
+ 4 'h1,
+ 4 'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 4 'h6: csr_read_data_x = cfg;
+ 4 'h7: csr_read_data_x = {eba, 8'h00};
+
+
+
+
+
+
+
+
+
+ 4 'ha: csr_read_data_x = cfg2;
+ 4 'hb: csr_read_data_x = sdb_address;
+
+
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 4 'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ if (icache_refill_request == 1'b1)
+ valid_a = 1'b0;
+ else if (icache_restart_request == 1'b1)
+ valid_a = 1'b1;
+ else
+ valid_a = !icache_refilling;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+ valid_f <= valid_a;
+
+
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 4 {1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+
+
+
+ exception_w <= 1'b0;
+
+
+
+
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+
+
+ scall_x <= scall_d;
+
+
+
+
+ eret_x <= eret_d;
+
+
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else
+ write_idx_m <= write_idx_x;
+
+
+ condition_met_m <= condition_met_x;
+
+
+
+
+
+
+
+
+
+
+
+
+ branch_target_m <= exception_x == 1'b1 ? {eba, eid_x, {3{1'b0}}} : branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+
+
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? {pc_m, 2'b00} : m_result;
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+
+
+
+ exception_w <= exception_m;
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_medium_icache
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_data_m;
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_medium_icache (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+
+
+ scall,
+ eret,
+
+
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0])
+ : (branch_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_icache_medium_icache (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_f,
+ address_a,
+ address_f,
+ read_enable_f,
+ refill_ready,
+ refill_data,
+ iflush,
+
+
+
+
+ valid_d,
+ branch_predict_taken_d,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ inst
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+
+input valid_d;
+input branch_predict_taken_d;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_a;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_f;
+input read_enable_f;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input iflush;
+
+
+
+
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+wire refill_request;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] inst;
+wire [ (32-1):0] inst;
+
+
+
+
+
+wire enable;
+wire [0:associativity-1] way_mem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+
+reg [ 3:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+)
+ way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (enable),
+ .write_address (dmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i]),
+ .write_data (refill_data),
+
+ .read_data (way_data[i])
+ );
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ )
+ way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i] | flushing),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+
+ end
+endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_f[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : inst_1
+assign inst = way_match[0] ? way_data[0] : 32'b0;
+ end
+ else if (associativity == 2)
+ begin : inst_2
+assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset};
+ else
+assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb];
+endgenerate
+
+assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb];
+
+
+assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb];
+assign tmem_write_address = flushing
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign enable = (stall_a == 1'b0);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_mem_we[0] = (refill_ready == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
+assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = last_refill & !flushing;
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = |state[1:0];
+assign check = state[2];
+assign refill = state[3];
+
+assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
+assign stall_request = (check == 1'b0);
+assign refill_request = (refill == 1'b1);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (miss == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'b0001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 4'b0001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 4'b0100;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0010:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+
+
+
+
+
+
+ state <= 4'b0100;
+
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0100:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (iflush == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b0010;
+ end
+ else if (miss == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b1000;
+ end
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 4'b0100;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 4'b0100:
+ begin
+ if (iflush == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_medium_icache (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+ iflush,
+
+
+
+
+
+
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+ icache_stall_request,
+ icache_restart_request,
+ icache_refill_request,
+ icache_refilling,
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+
+
+
+input iflush;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+output icache_stall_request;
+wire icache_stall_request;
+output icache_restart_request;
+wire icache_restart_request;
+output icache_refill_request;
+wire icache_refill_request;
+output icache_refilling;
+wire icache_refilling;
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+
+
+wire [ (32-1):0] i_dat_o;
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+
+
+wire [ (4-1):0] i_sel_o;
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+
+
+wire i_we_o;
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address;
+
+
+
+
+
+wire icache_read_enable_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address;
+reg icache_refill_ready;
+reg [ (32-1):0] icache_refill_data;
+wire [ (32-1):0] icache_data_f;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_icache_medium_icache #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) icache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .valid_d (valid_d),
+ .address_a (pc_a),
+ .address_f (pc_f),
+ .read_enable_f (icache_read_enable_f),
+ .refill_ready (icache_refill_ready),
+ .refill_data (icache_refill_data),
+ .iflush (iflush),
+
+ .stall_request (icache_stall_request),
+ .restart_request (icache_restart_request),
+ .refill_request (icache_refill_request),
+ .refill_address (icache_refill_address),
+ .refilling (icache_refilling),
+ .inst (icache_data_f)
+ );
+
+
+
+
+
+
+
+
+
+
+ assign icache_read_enable_f = (valid_f == 1'b1)
+ && (kill_f == 1'b0)
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+ if (icache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = icache_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_dat_o = 32'd0;
+assign i_we_o = 1'b0;
+assign i_sel_o = 4'b1111;
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = icache_refill_address;
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = i_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 2'b11;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ pc_d <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ restart_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (icache_refill_request == 1'b1)
+ restart_address <= icache_refill_address;
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ icache_refill_data <= { 32{1'b0}};
+ icache_refill_ready <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+ icache_refill_ready <= 1'b0;
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+
+
+ begin
+ if (last_word == 1'b1)
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_lock_o <= 1'b0;
+ end
+
+ i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ i_cti_o <= next_cycle_type;
+
+ icache_refill_ready <= 1'b1;
+ icache_refill_data <= i_dat_i;
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+ if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
+ begin
+
+
+
+
+
+ i_adr_o <= {first_address, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_cti_o <= first_cycle_type;
+
+
+
+
+
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_medium_icache (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+
+
+
+ exception,
+
+
+ eret_q_x,
+
+
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+
+
+
+input exception;
+
+
+input eret_q_x;
+
+
+
+
+
+input [ (4 -1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ 4 'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+wire [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_q;
+wire jtag_update;
+wire [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_q;
+wire jtck;
+wire jrstn;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_medium_icache_debug
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_clk (jtck),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+jtag_cores jtag_cores (
+
+ .reg_d (jtag_reg_d),
+ .reg_addr_d (jtag_reg_addr_d),
+
+ .reg_update (jtag_update),
+ .reg_q (jtag_reg_q),
+ .reg_addr_q (jtag_reg_addr_q),
+ .jtck (jtck),
+ .jrstn (jrstn)
+ );
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_medium_icache_debug (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+parameter deba_reset = 32'h10000000;
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 256;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 32'h0;
+parameter icache_limit = 32'h7fffffff;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+parameter watchpoints = 32'h4;
+
+
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ 7:0] jtag_reg_d;
+wire [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_a;
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (5-1):0] csr_d;
+reg [ (5-1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+wire break_d;
+reg break_x;
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+wire bret_d;
+reg bret_x;
+wire bret_q_x;
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+wire iflush;
+wire icache_stall_request;
+wire icache_restart_request;
+wire icache_refill_request;
+wire icache_refilling;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+wire [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+wire jtag_csr_write_enable;
+wire [ (32-1):0] jtag_csr_write_data;
+wire [ (5-1):0] jtag_csr;
+wire jtag_read_enable;
+wire [ 7:0] jtag_read_data;
+wire jtag_write_enable;
+wire [ 7:0] jtag_write_data;
+wire [ (32-1):0] jtag_address;
+wire jtag_access_complete;
+
+
+
+
+wire jtag_break;
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] eba;
+
+
+reg [ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8] deba;
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+wire dc_ss;
+
+
+wire dc_re;
+wire bp_match;
+wire wp_match;
+wire exception_x;
+reg exception_m;
+wire debug_exception_x;
+reg debug_exception_m;
+reg debug_exception_w;
+wire debug_exception_q_w;
+wire non_debug_exception_x;
+reg non_debug_exception_m;
+reg non_debug_exception_w;
+wire non_debug_exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+wire reset_exception;
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+wire breakpoint_exception;
+wire watchpoint_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire system_call_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_medium_icache_debug #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+ .iflush (iflush),
+
+
+
+
+
+
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+ .icache_stall_request (icache_stall_request),
+ .icache_restart_request (icache_restart_request),
+ .icache_refill_request (icache_refill_request),
+ .icache_refilling (icache_refilling),
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_medium_icache_debug decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+ .break_opcode (break_d),
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+ .bret (bret_d),
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_medium_icache_debug #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_interrupt_medium_icache_debug interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+ .non_debug_exception (non_debug_exception_q_w),
+ .debug_exception (debug_exception_q_w),
+
+
+
+
+ .eret_q_x (eret_q_x),
+
+
+ .bret_q_x (bret_q_x),
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_jtag_medium_icache_debug jtag (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .jtag_clk (jtag_clk),
+ .jtag_update (jtag_update),
+ .jtag_reg_q (jtag_reg_q),
+ .jtag_reg_addr_q (jtag_reg_addr_q),
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+ .stall_x (stall_x),
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+ .exception_q_w (debug_exception_q_w || non_debug_exception_q_w),
+
+
+
+
+
+
+ .jtx_csr_read_data (jtx_csr_read_data),
+ .jrx_csr_read_data (jrx_csr_read_data),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .jtag_break (jtag_break),
+ .jtag_reset (reset_exception),
+
+
+
+ .jtag_reg_d (jtag_reg_d),
+ .jtag_reg_addr_d (jtag_reg_addr_d)
+ );
+
+
+
+
+
+
+lm32_debug_medium_icache_debug #(
+ .breakpoints (breakpoints),
+ .watchpoints (watchpoints)
+ ) hw_debug (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .pc_x (pc_x),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_store_address_x (adder_result_x),
+ .csr_write_enable_x (csr_write_enable_q_x),
+ .csr_write_data (operand_1_x),
+ .csr_x (csr_x),
+
+
+
+
+ .jtag_csr_write_enable (jtag_csr_write_enable),
+ .jtag_csr_write_data (jtag_csr_write_data),
+ .jtag_csr (jtag_csr),
+
+
+
+
+
+
+
+
+
+
+
+
+ .eret_q_x (eret_q_x),
+ .bret_q_x (bret_q_x),
+ .stall_x (stall_x),
+ .exception_x (exception_x),
+ .q_x (q_x),
+
+
+
+
+
+
+
+
+
+ .dc_ss (dc_ss),
+
+
+ .dc_re (dc_re),
+ .bp_match (bp_match),
+ .wp_match (wp_match)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+ || (icache_refill_request == 1'b1)
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+assign breakpoint_exception = ( ( (break_x == 1'b1)
+ || (bp_match == 1'b1)
+ )
+ && (valid_x == 1'b1)
+ )
+
+
+ || (jtag_break == 1'b1)
+
+
+ ;
+
+
+
+
+
+assign watchpoint_exception = wp_match == 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+
+
+ );
+
+
+
+assign debug_exception_x = (breakpoint_exception == 1'b1)
+ || (watchpoint_exception == 1'b1)
+ ;
+
+assign non_debug_exception_x = (system_call_exception == 1'b1)
+
+
+ || (reset_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+
+
+
+
+
+ )
+
+
+ ;
+
+assign exception_x = (debug_exception_x == 1'b1) || (non_debug_exception_x == 1'b1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+ if (reset_exception == 1'b1)
+ eid_x = 3'h0;
+ else
+
+
+
+
+
+
+
+
+ if (breakpoint_exception == 1'b1)
+ eid_x = 3'd1;
+ else
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (watchpoint_exception == 1'b1)
+ eid_x = 3'd3;
+ else
+
+
+
+
+
+
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( ( (break_d == 1'b1)
+ || (bret_d == 1'b1)
+ )
+ && ( (load_q_x == 1'b1)
+ || (store_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+ || (icache_stall_request == 1'b1)
+ || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign bret_q_x = (bret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+assign debug_exception_q_w = ((debug_exception_w == 1'b1) && (valid_w == 1'b1));
+assign non_debug_exception_q_w = ((non_debug_exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+assign iflush = ( (csr_write_enable_d == 1'b1)
+ && (csr_d == 5'h3)
+ && (stall_d == 1'b0)
+ && (kill_d == 1'b0)
+ && (valid_d == 1'b1))
+
+
+
+ ||
+ ( (jtag_csr_write_enable == 1'b1)
+ && (jtag_csr == 5'h3))
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (5-1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 5'h0,
+ 5'h1,
+ 5'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 5'h6: csr_read_data_x = cfg;
+ 5'h7: csr_read_data_x = {eba, 8'h00};
+
+
+ 5'h9: csr_read_data_x = {deba, 8'h00};
+
+
+
+
+ 5'he: csr_read_data_x = jtx_csr_read_data;
+ 5'hf: csr_read_data_x = jrx_csr_read_data;
+
+
+ 5'ha: csr_read_data_x = cfg2;
+ 5'hb: csr_read_data_x = sdb_address;
+
+
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h7))
+ eba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ deba <= deba_reset[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h9) && (stall_x == 1'b0))
+ deba <= operand_1_x[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+ if ((jtag_csr_write_enable == 1'b1) && (jtag_csr == 5'h9))
+ deba <= jtag_csr_write_data[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ if (icache_refill_request == 1'b1)
+ valid_a = 1'b0;
+ else if (icache_restart_request == 1'b1)
+ valid_a = 1'b1;
+ else
+ valid_a = !icache_refilling;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+ valid_f <= valid_a;
+
+
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 5{1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+ break_x <= 1'b0;
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+ bret_x <= 1'b0;
+
+
+
+
+
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+ debug_exception_m <= 1'b0;
+ non_debug_exception_m <= 1'b0;
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+ debug_exception_w <= 1'b0;
+ non_debug_exception_w <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+ break_x <= break_d;
+
+
+ scall_x <= scall_d;
+
+
+
+
+ eret_x <= eret_d;
+
+
+ bret_x <= bret_d;
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+ if (non_debug_exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else if (debug_exception_x == 1'b1)
+ write_idx_m <= 5'd31;
+ else
+ write_idx_m <= write_idx_x;
+
+
+
+
+
+
+
+ condition_met_m <= condition_met_x;
+
+
+ if (exception_x == 1'b1)
+ if ((dc_re == 1'b1)
+ || ((debug_exception_x == 1'b1)
+ && (non_debug_exception_x == 1'b0)))
+ branch_target_m <= {deba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= {eba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+ debug_exception_m <= debug_exception_x;
+ non_debug_exception_m <= non_debug_exception_x;
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+
+
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? {pc_m, 2'b00} : m_result;
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+ debug_exception_w <= debug_exception_m;
+ non_debug_exception_w <= non_debug_exception_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_medium_icache_debug
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_data_m;
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_medium_icache_debug (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+ break_opcode,
+
+
+ scall,
+ eret,
+
+
+ bret,
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+output break_opcode;
+wire break_opcode;
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+output bret;
+wire bret;
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+assign break_opcode = op_raise & ~instruction[2];
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+assign bret = op_b & (instruction[25:21] == 5'd31);
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0])
+ : (branch_immediate[ (clogb2(32'h7fffffff-32'h0)-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_icache_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+ stall_a,
+ stall_f,
+ address_a,
+ address_f,
+ read_enable_f,
+ refill_ready,
+ refill_data,
+ iflush,
+
+
+
+
+ valid_d,
+ branch_predict_taken_d,
+
+ stall_request,
+ restart_request,
+ refill_request,
+ refill_address,
+ refilling,
+ inst
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+localparam addr_offset_width = clogb2(bytes_per_line)-1-2;
+localparam addr_set_width = clogb2(sets)-1;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+localparam addr_set_lsb = (addr_offset_msb+1);
+localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
+localparam addr_tag_lsb = (addr_set_msb+1);
+localparam addr_tag_msb = clogb2( 32'h7fffffff- 32'h0)-1;
+localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+
+input valid_d;
+input branch_predict_taken_d;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_a;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] address_f;
+input read_enable_f;
+
+input refill_ready;
+input [ (32-1):0] refill_data;
+
+input iflush;
+
+
+
+
+
+
+
+
+
+output stall_request;
+wire stall_request;
+output restart_request;
+reg restart_request;
+output refill_request;
+wire refill_request;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] refill_address;
+output refilling;
+reg refilling;
+output [ (32-1):0] inst;
+wire [ (32-1):0] inst;
+
+
+
+
+
+wire enable;
+wire [0:associativity-1] way_mem_we;
+wire [ (32-1):0] way_data[0:associativity-1];
+wire [ ((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
+wire [0:associativity-1] way_valid;
+wire [0:associativity-1] way_match;
+wire miss;
+
+wire [ (addr_set_width-1):0] tmem_read_address;
+wire [ (addr_set_width-1):0] tmem_write_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
+wire [ ((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
+wire [ ((addr_tag_width+1)-1):0] tmem_write_data;
+
+reg [ 3:0] state;
+wire flushing;
+wire check;
+wire refill;
+
+reg [associativity-1:0] refill_way_select;
+reg [ addr_offset_msb:addr_offset_lsb] refill_offset;
+wire last_refill;
+reg [ (addr_set_width-1):0] flush_set;
+
+genvar i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+ generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : memories
+
+ lm32_ram
+ #(
+
+ .data_width (32),
+ .address_width ( (addr_offset_width+addr_set_width))
+
+)
+ way_0_data_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (dmem_read_address),
+ .enable_read (enable),
+ .write_address (dmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i]),
+ .write_data (refill_data),
+
+ .read_data (way_data[i])
+ );
+
+ lm32_ram
+ #(
+
+ .data_width ( (addr_tag_width+1)),
+ .address_width ( addr_set_width)
+
+ )
+ way_0_tag_ram
+ (
+
+ .read_clk (clk_i),
+ .write_clk (clk_i),
+ .reset (rst_i),
+ .read_address (tmem_read_address),
+ .enable_read (enable),
+ .write_address (tmem_write_address),
+ .enable_write ( 1'b1),
+ .write_enable (way_mem_we[i] | flushing),
+ .write_data (tmem_write_data),
+
+ .read_data ({way_tag[i], way_valid[i]})
+ );
+
+ end
+endgenerate
+
+
+
+
+
+
+generate
+ for (i = 0; i < associativity; i = i + 1)
+ begin : match
+assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_f[ addr_tag_msb:addr_tag_lsb], 1'b1});
+ end
+endgenerate
+
+
+generate
+ if (associativity == 1)
+ begin : inst_1
+assign inst = way_match[0] ? way_data[0] : 32'b0;
+ end
+ else if (associativity == 2)
+ begin : inst_2
+assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
+ end
+endgenerate
+
+
+generate
+ if (bytes_per_line > 4)
+assign dmem_write_address = {refill_address[ addr_set_msb:addr_set_lsb], refill_offset};
+ else
+assign dmem_write_address = refill_address[ addr_set_msb:addr_set_lsb];
+endgenerate
+
+assign dmem_read_address = address_a[ addr_set_msb:addr_offset_lsb];
+
+
+assign tmem_read_address = address_a[ addr_set_msb:addr_set_lsb];
+assign tmem_write_address = flushing
+ ? flush_set
+ : refill_address[ addr_set_msb:addr_set_lsb];
+
+
+generate
+ if (bytes_per_line > 4)
+assign last_refill = refill_offset == {addr_offset_width{1'b1}};
+ else
+assign last_refill = 1'b1;
+endgenerate
+
+
+assign enable = (stall_a == 1'b0);
+
+
+generate
+ if (associativity == 1)
+ begin : we_1
+assign way_mem_we[0] = (refill_ready == 1'b1);
+ end
+ else
+ begin : we_2
+assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
+assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
+ end
+endgenerate
+
+
+assign tmem_write_data[ 0] = last_refill & !flushing;
+assign tmem_write_data[ ((addr_tag_width+1)-1):1] = refill_address[ addr_tag_msb:addr_tag_lsb];
+
+
+assign flushing = |state[1:0];
+assign check = state[2];
+assign refill = state[3];
+
+assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
+assign stall_request = (check == 1'b0);
+assign refill_request = (refill == 1'b1);
+
+
+
+
+
+
+generate
+ if (associativity >= 2)
+ begin : way_select
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
+ else
+ begin
+ if (miss == 1'b1)
+ refill_way_select <= {refill_way_select[0], refill_way_select[1]};
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refilling <= 1'b0;
+ else
+ refilling <= refill;
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'b0001;
+ flush_set <= { addr_set_width{1'b1}};
+ refill_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ restart_request <= 1'b0;
+ end
+ else
+ begin
+ case (state)
+
+
+ 4'b0001:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+ state <= 4'b0100;
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0010:
+ begin
+ if (flush_set == { addr_set_width{1'b0}})
+
+
+
+
+
+
+ state <= 4'b0100;
+
+ flush_set <= flush_set - 1'b1;
+ end
+
+
+ 4'b0100:
+ begin
+ if (stall_a == 1'b0)
+ restart_request <= 1'b0;
+ if (iflush == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b0010;
+ end
+ else if (miss == 1'b1)
+ begin
+ refill_address <= address_f;
+ state <= 4'b1000;
+ end
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ begin
+ if (last_refill == 1'b1)
+ begin
+ restart_request <= 1'b1;
+ state <= 4'b0100;
+ end
+ end
+ end
+
+ endcase
+ end
+end
+
+generate
+ if (bytes_per_line > 4)
+ begin
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else
+ begin
+ case (state)
+
+
+ 4'b0100:
+ begin
+ if (iflush == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ else if (miss == 1'b1)
+ refill_offset <= {addr_offset_width{1'b0}};
+ end
+
+
+ 4'b1000:
+ begin
+ if (refill_ready == 1'b1)
+ refill_offset <= refill_offset + 1'b1;
+ end
+
+ endcase
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_debug_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+ pc_x,
+ load_x,
+ store_x,
+ load_store_address_x,
+ csr_write_enable_x,
+ csr_write_data,
+ csr_x,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ eret_q_x,
+ bret_q_x,
+ stall_x,
+ exception_x,
+ q_x,
+
+
+
+
+
+
+
+
+
+
+ dc_ss,
+
+
+ dc_re,
+ bp_match,
+ wp_match
+ );
+
+
+
+
+
+parameter breakpoints = 0;
+parameter watchpoints = 0;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+input load_x;
+input store_x;
+input [ (32-1):0] load_store_address_x;
+input csr_write_enable_x;
+input [ (32-1):0] csr_write_data;
+input [ (5-1):0] csr_x;
+
+
+
+
+input jtag_csr_write_enable;
+input [ (32-1):0] jtag_csr_write_data;
+input [ (5-1):0] jtag_csr;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input eret_q_x;
+input bret_q_x;
+input stall_x;
+input exception_x;
+input q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+output dc_ss;
+reg dc_ss;
+
+
+output dc_re;
+reg dc_re;
+output bp_match;
+wire bp_match;
+output wp_match;
+wire wp_match;
+
+
+
+
+
+genvar i;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] bp_a[0:breakpoints-1];
+reg bp_e[0:breakpoints-1];
+wire [0:breakpoints-1]bp_match_n;
+
+reg [ 1:0] wpc_c[0:watchpoints-1];
+reg [ (32-1):0] wp[0:watchpoints-1];
+wire [0:watchpoints-1]wp_match_n;
+
+wire debug_csr_write_enable;
+wire [ (32-1):0] debug_csr_write_data;
+wire [ (5-1):0] debug_csr;
+
+
+
+
+reg [ 2:0] state;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_comb
+assign bp_match_n[i] = ((bp_a[i] == pc_x) && (bp_e[i] == 1'b1));
+ end
+endgenerate
+generate
+
+
+ if (breakpoints > 0)
+assign bp_match = (|bp_match_n) || (state == 3'b011);
+ else
+assign bp_match = state == 3'b011;
+
+
+
+
+
+
+
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_comb
+assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1]));
+ end
+endgenerate
+generate
+ if (watchpoints > 0)
+assign wp_match = |wp_match_n;
+ else
+assign wp_match = 1'b0;
+endgenerate
+
+
+
+
+
+
+assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (jtag_csr_write_enable == 1'b1);
+assign debug_csr_write_data = jtag_csr_write_enable == 1'b1 ? jtag_csr_write_data : csr_write_data;
+assign debug_csr = jtag_csr_write_enable == 1'b1 ? jtag_csr : csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ bp_a[i] <= { (clogb2(32'h7fffffff-32'h0)-2){1'bx}};
+ bp_e[i] <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i))
+ begin
+ bp_a[i] <= debug_csr_write_data[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ bp_e[i] <= debug_csr_write_data[0];
+ end
+ end
+end
+ end
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ wp[i] <= { 32{1'bx}};
+ wpc_c[i] <= 2'b00;
+ end
+ else
+ begin
+ if (debug_csr_write_enable == 1'b1)
+ begin
+ if (debug_csr == 5'h8)
+ wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2];
+ if (debug_csr == 5'h18 + i)
+ wp[i] <= debug_csr_write_data;
+ end
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ dc_re <= 1'b0;
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ dc_re <= debug_csr_write_data[1];
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b000;
+ dc_ss <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ begin
+ dc_ss <= debug_csr_write_data[0];
+ if (debug_csr_write_data[0] == 1'b0)
+ state <= 3'b000;
+ else
+ state <= 3'b001;
+ end
+ case (state)
+ 3'b001:
+ begin
+
+ if ( ( (eret_q_x == 1'b1)
+ || (bret_q_x == 1'b1)
+ )
+ && (stall_x == 1'b0)
+ )
+ state <= 3'b010;
+ end
+ 3'b010:
+ begin
+
+ if ((q_x == 1'b1) && (stall_x == 1'b0))
+ state <= 3'b011;
+ end
+ 3'b011:
+ begin
+
+
+
+
+
+
+
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ begin
+ dc_ss <= 1'b0;
+ state <= 3'b100;
+ end
+ end
+ 3'b100:
+ begin
+
+
+
+
+
+
+
+ state <= 3'b000;
+ end
+ endcase
+ end
+end
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+ iflush,
+
+
+
+
+
+
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+ icache_stall_request,
+ icache_restart_request,
+ icache_refill_request,
+ icache_refilling,
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] branch_target_m;
+
+
+
+input iflush;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+input jtag_read_enable;
+input jtag_write_enable;
+input [ 7:0] jtag_write_data;
+input [ (32-1):0] jtag_address;
+
+
+
+
+
+
+
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_f;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_d;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_x;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_m;
+output [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_w;
+
+
+
+output icache_stall_request;
+wire icache_stall_request;
+output icache_restart_request;
+wire icache_restart_request;
+output icache_refill_request;
+wire icache_refill_request;
+output icache_refilling;
+wire icache_refilling;
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+reg [ (32-1):0] i_dat_o;
+
+
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+reg [ (4-1):0] i_sel_o;
+
+
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+reg i_we_o;
+
+
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+output [ 7:0] jtag_read_data;
+reg [ 7:0] jtag_read_data;
+output jtag_access_complete;
+wire jtag_access_complete;
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] pc_a;
+
+
+
+reg [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] restart_address;
+
+
+
+
+
+wire icache_read_enable_f;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] icache_refill_address;
+reg icache_refill_ready;
+reg [ (32-1):0] icache_refill_data;
+wire [ (32-1):0] icache_data_f;
+wire [ (3-1):0] first_cycle_type;
+wire [ (3-1):0] next_cycle_type;
+wire last_word;
+wire [ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2] first_address;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg jtag_access;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_icache_medium_icache_debug #(
+ .associativity (associativity),
+ .sets (sets),
+ .bytes_per_line (bytes_per_line),
+ .base_address (base_address),
+ .limit (limit)
+ ) icache (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .valid_d (valid_d),
+ .address_a (pc_a),
+ .address_f (pc_f),
+ .read_enable_f (icache_read_enable_f),
+ .refill_ready (icache_refill_ready),
+ .refill_data (icache_refill_data),
+ .iflush (iflush),
+
+ .stall_request (icache_stall_request),
+ .restart_request (icache_restart_request),
+ .refill_request (icache_refill_request),
+ .refill_address (icache_refill_address),
+ .refilling (icache_refilling),
+ .inst (icache_data_f)
+ );
+
+
+
+
+
+
+
+
+
+
+ assign icache_read_enable_f = (valid_f == 1'b1)
+ && (kill_f == 1'b0)
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+ if (icache_restart_request == 1'b1)
+ pc_a = restart_address;
+ else
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = icache_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+generate
+ case (bytes_per_line)
+ 4:
+ begin
+assign first_cycle_type = 3'b111;
+assign next_cycle_type = 3'b111;
+assign last_word = 1'b1;
+assign first_address = icache_refill_address;
+ end
+ 8:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = 3'b111;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ 16:
+ begin
+assign first_cycle_type = 3'b010;
+assign next_cycle_type = i_adr_o[addr_offset_msb] == 1'b1 ? 3'b111 : 3'b010;
+assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 2'b11;
+assign first_address = {icache_refill_address[ (clogb2(32'h7fffffff-32'h0)-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
+ end
+ endcase
+endgenerate
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((clogb2(32'h7fffffff-32'h0)-2)+2-1):2];
+ pc_d <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_x <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_m <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ pc_w <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ restart_address <= { (clogb2(32'h7fffffff-32'h0)-2){1'b0}};
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (icache_refill_request == 1'b1)
+ restart_address <= icache_refill_address;
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign jtag_access_complete = (i_cyc_o == 1'b1) && ((i_ack_i == 1'b1) || (i_err_i == 1'b1)) && (jtag_access == 1'b1);
+always @(*)
+begin
+ case (jtag_address[1:0])
+ 2'b00: jtag_read_data = i_dat_i[ 31:24];
+ 2'b01: jtag_read_data = i_dat_i[ 23:16];
+ 2'b10: jtag_read_data = i_dat_i[ 15:8];
+ 2'b11: jtag_read_data = i_dat_i[ 7:0];
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ icache_refill_data <= { 32{1'b0}};
+ icache_refill_ready <= 1'b0;
+
+
+
+
+
+
+ i_we_o <= 1'b0;
+ i_sel_o <= 4'b1111;
+ jtag_access <= 1'b0;
+
+
+ end
+ else
+ begin
+ icache_refill_ready <= 1'b0;
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+
+ if (jtag_access == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_we_o <= 1'b0;
+ jtag_access <= 1'b0;
+ end
+ else
+
+
+ begin
+ if (last_word == 1'b1)
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_lock_o <= 1'b0;
+ end
+
+ i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
+ i_cti_o <= next_cycle_type;
+
+ icache_refill_ready <= 1'b1;
+ icache_refill_data <= i_dat_i;
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+ if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
+ begin
+
+
+
+ i_sel_o <= 4'b1111;
+
+
+ i_adr_o <= {first_address, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_cti_o <= first_cycle_type;
+
+
+
+
+
+ end
+
+
+ else
+ begin
+ if ((jtag_read_enable == 1'b1) || (jtag_write_enable == 1'b1))
+ begin
+ case (jtag_address[1:0])
+ 2'b00: i_sel_o <= 4'b1000;
+ 2'b01: i_sel_o <= 4'b0100;
+ 2'b10: i_sel_o <= 4'b0010;
+ 2'b11: i_sel_o <= 4'b0001;
+ endcase
+ i_adr_o <= jtag_address;
+ i_dat_o <= {4{jtag_write_data}};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+ i_we_o <= jtag_write_enable;
+ i_cti_o <= 3'b111;
+ jtag_access <= 1'b1;
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_jtag_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+ jtag_clk,
+ jtag_update,
+ jtag_reg_q,
+ jtag_reg_addr_q,
+
+
+ csr,
+ csr_write_enable,
+ csr_write_data,
+ stall_x,
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+ exception_q_w,
+
+
+
+
+
+ jtx_csr_read_data,
+ jrx_csr_read_data,
+
+
+
+
+ jtag_csr_write_enable,
+ jtag_csr_write_data,
+ jtag_csr,
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ jtag_break,
+ jtag_reset,
+
+
+ jtag_reg_d,
+ jtag_reg_addr_d
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input jtag_clk;
+input jtag_update;
+input [ 7:0] jtag_reg_q;
+input [2:0] jtag_reg_addr_q;
+
+
+
+input [ (5-1):0] csr;
+input csr_write_enable;
+input [ (32-1):0] csr_write_data;
+input stall_x;
+
+
+
+
+input [ 7:0] jtag_read_data;
+input jtag_access_complete;
+
+
+
+
+input exception_q_w;
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] jtx_csr_read_data;
+wire [ (32-1):0] jtx_csr_read_data;
+output [ (32-1):0] jrx_csr_read_data;
+wire [ (32-1):0] jrx_csr_read_data;
+
+
+
+
+output jtag_csr_write_enable;
+reg jtag_csr_write_enable;
+output [ (32-1):0] jtag_csr_write_data;
+wire [ (32-1):0] jtag_csr_write_data;
+output [ (5-1):0] jtag_csr;
+wire [ (5-1):0] jtag_csr;
+output jtag_read_enable;
+reg jtag_read_enable;
+output jtag_write_enable;
+reg jtag_write_enable;
+output [ 7:0] jtag_write_data;
+wire [ 7:0] jtag_write_data;
+output [ (32-1):0] jtag_address;
+wire [ (32-1):0] jtag_address;
+
+
+
+
+output jtag_break;
+reg jtag_break;
+output jtag_reset;
+reg jtag_reset;
+
+
+output [ 7:0] jtag_reg_d;
+reg [ 7:0] jtag_reg_d;
+output [2:0] jtag_reg_addr_d;
+wire [2:0] jtag_reg_addr_d;
+
+
+
+
+
+reg rx_update;
+reg rx_update_r;
+reg rx_update_r_r;
+reg rx_update_r_r_r;
+
+
+
+wire [ 7:0] rx_byte;
+wire [2:0] rx_addr;
+
+
+
+reg [ 7:0] uart_tx_byte;
+reg uart_tx_valid;
+reg [ 7:0] uart_rx_byte;
+reg uart_rx_valid;
+
+
+
+reg [ 3:0] command;
+
+
+reg [ 7:0] jtag_byte_0;
+reg [ 7:0] jtag_byte_1;
+reg [ 7:0] jtag_byte_2;
+reg [ 7:0] jtag_byte_3;
+reg [ 7:0] jtag_byte_4;
+reg processing;
+
+
+
+reg [ 3:0] state;
+
+
+
+
+
+
+
+assign jtag_csr_write_data = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_csr = jtag_byte_4[ (5-1):0];
+assign jtag_address = {jtag_byte_0, jtag_byte_1, jtag_byte_2, jtag_byte_3};
+assign jtag_write_data = jtag_byte_4;
+
+
+
+
+
+
+assign jtag_reg_addr_d[1:0] = {uart_rx_valid, uart_tx_valid};
+
+
+
+
+
+
+assign jtag_reg_addr_d[2] = processing;
+
+
+
+
+
+
+
+assign jtx_csr_read_data = {{ 32-9{1'b0}}, uart_tx_valid, 8'h00};
+assign jrx_csr_read_data = {{ 32-9{1'b0}}, uart_rx_valid, uart_rx_byte};
+
+
+
+
+
+
+
+assign rx_byte = jtag_reg_q;
+assign rx_addr = jtag_reg_addr_q;
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ rx_update <= 1'b0;
+ rx_update_r <= 1'b0;
+ rx_update_r_r <= 1'b0;
+ rx_update_r_r_r <= 1'b0;
+ end
+ else
+ begin
+ rx_update <= jtag_update;
+ rx_update_r <= rx_update;
+ rx_update_r_r <= rx_update_r;
+ rx_update_r_r_r <= rx_update_r_r;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 4'h0;
+ command <= 4'b0000;
+ jtag_reg_d <= 8'h00;
+
+
+ processing <= 1'b0;
+ jtag_csr_write_enable <= 1'b0;
+ jtag_read_enable <= 1'b0;
+ jtag_write_enable <= 1'b0;
+
+
+
+
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+
+
+
+
+ uart_tx_byte <= 8'h00;
+ uart_tx_valid <= 1'b0;
+ uart_rx_byte <= 8'h00;
+ uart_rx_valid <= 1'b0;
+
+
+ end
+ else
+ begin
+
+
+ if ((csr_write_enable == 1'b1) && (stall_x == 1'b0))
+ begin
+ case (csr)
+ 5'he:
+ begin
+
+ uart_tx_byte <= csr_write_data[ 7:0];
+ uart_tx_valid <= 1'b1;
+ end
+ 5'hf:
+ begin
+
+ uart_rx_valid <= 1'b0;
+ end
+ endcase
+ end
+
+
+
+
+
+ if (exception_q_w == 1'b1)
+ begin
+ jtag_break <= 1'b0;
+ jtag_reset <= 1'b0;
+ end
+
+
+ case (state)
+ 4'h0:
+ begin
+
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ command <= rx_byte[7:4];
+ case (rx_addr)
+
+
+ 3'b000:
+ begin
+ case (rx_byte[7:4])
+
+
+ 4'b0001:
+ state <= 4'h1;
+ 4'b0011:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 4'h6;
+ end
+ 4'b0010:
+ state <= 4'h1;
+ 4'b0100:
+ begin
+ {jtag_byte_2, jtag_byte_3} <= {jtag_byte_2, jtag_byte_3} + 1'b1;
+ state <= 5;
+ end
+ 4'b0101:
+ state <= 4'h1;
+
+
+ 4'b0110:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_break <= 1'b1;
+ end
+ 4'b0111:
+ begin
+
+
+ uart_rx_valid <= 1'b0;
+ uart_tx_valid <= 1'b0;
+
+
+ jtag_reset <= 1'b1;
+ end
+ endcase
+ end
+
+
+
+
+ 3'b001:
+ begin
+ uart_rx_byte <= rx_byte;
+ uart_rx_valid <= 1'b1;
+ end
+ 3'b010:
+ begin
+ jtag_reg_d <= uart_tx_byte;
+ uart_tx_valid <= 1'b0;
+ end
+
+
+ default:
+ ;
+ endcase
+ end
+ end
+
+
+ 4'h1:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_0 <= rx_byte;
+ state <= 4'h2;
+ end
+ end
+ 4'h2:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_1 <= rx_byte;
+ state <= 4'h3;
+ end
+ end
+ 4'h3:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_2 <= rx_byte;
+ state <= 4'h4;
+ end
+ end
+ 4'h4:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_3 <= rx_byte;
+ if (command == 4'b0001)
+ state <= 4'h6;
+ else
+ state <= 4'h5;
+ end
+ end
+ 4'h5:
+ begin
+ if ((~rx_update_r_r_r & rx_update_r_r) == 1'b1)
+ begin
+ jtag_byte_4 <= rx_byte;
+ state <= 4'h6;
+ end
+ end
+ 4'h6:
+ begin
+ case (command)
+ 4'b0001,
+ 4'b0011:
+ begin
+ jtag_read_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0010,
+ 4'b0100:
+ begin
+ jtag_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h7;
+ end
+ 4'b0101:
+ begin
+ jtag_csr_write_enable <= 1'b1;
+ processing <= 1'b1;
+ state <= 4'h8;
+ end
+ endcase
+ end
+ 4'h7:
+ begin
+ if (jtag_access_complete == 1'b1)
+ begin
+ jtag_read_enable <= 1'b0;
+ jtag_reg_d <= jtag_read_data;
+ jtag_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+ end
+ 4'h8:
+ begin
+ jtag_csr_write_enable <= 1'b0;
+ processing <= 1'b0;
+ state <= 4'h0;
+ end
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_medium_icache_debug (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+ non_debug_exception,
+ debug_exception,
+
+
+
+
+ eret_q_x,
+
+
+ bret_q_x,
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+input non_debug_exception;
+input debug_exception;
+
+
+
+
+input eret_q_x;
+
+
+input bret_q_x;
+
+
+
+input [ (5-1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+reg bie;
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ 5'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_minimal (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_minimal
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_I (I_DAT_I),
+ .I_ACK_I (I_ACK_I),
+ .I_ERR_I (I_ERR_I),
+ .I_RTY_I (I_RTY_I),
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .I_DAT_O (I_DAT_O),
+ .I_ADR_O (I_ADR_O),
+ .I_CYC_O (I_CYC_O),
+ .I_SEL_O (I_SEL_O),
+ .I_STB_O (I_STB_O),
+ .I_WE_O (I_WE_O),
+ .I_CTI_O (I_CTI_O),
+ .I_LOCK_O (I_LOCK_O),
+ .I_BTE_O (I_BTE_O),
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_minimal (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_minimal (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_I,
+ I_ACK_I,
+ I_ERR_I,
+ I_RTY_I,
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ I_DAT_O,
+ I_ADR_O,
+ I_CYC_O,
+ I_SEL_O,
+ I_STB_O,
+ I_WE_O,
+ I_CTI_O,
+ I_LOCK_O,
+ I_BTE_O,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+
+
+
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 512;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 0;
+parameter icache_limit = 0;
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+
+
+parameter watchpoints = 0;
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] I_DAT_I;
+input I_ACK_I;
+input I_ERR_I;
+input I_RTY_I;
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] I_DAT_O;
+wire [ (32-1):0] I_DAT_O;
+output [ (32-1):0] I_ADR_O;
+wire [ (32-1):0] I_ADR_O;
+output I_CYC_O;
+wire I_CYC_O;
+output [ (4-1):0] I_SEL_O;
+wire [ (4-1):0] I_SEL_O;
+output I_STB_O;
+wire I_STB_O;
+output I_WE_O;
+wire I_WE_O;
+output [ (3-1):0] I_CTI_O;
+wire [ (3-1):0] I_CTI_O;
+output I_LOCK_O;
+wire I_LOCK_O;
+output [ (2-1):0] I_BTE_O;
+wire [ (2-1):0] I_BTE_O;
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((32-2)+2-1):2] branch_predict_address_d;
+wire [ ((32-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((32-2)+2-1):2] branch_offset_d;
+reg [ ((32-2)+2-1):2] branch_target_x;
+reg [ ((32-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+
+
+
+
+
+
+wire x_result_sel_shift_d;
+reg x_result_sel_shift_x;
+
+
+
+
+
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+
+
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+
+
+
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (4 -1):0] csr_d;
+reg [ (4 -1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] shifter_result_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((32-2)+2-1):2] pc_f;
+wire [ ((32-2)+2-1):2] pc_d;
+wire [ ((32-2)+2-1):2] pc_x;
+wire [ ((32-2)+2-1):2] pc_m;
+wire [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (32-2)+2-1:8] eba;
+
+
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire exception_x;
+reg exception_m;
+reg exception_w;
+wire exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire system_call_exception;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_minimal #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .i_dat_i (I_DAT_I),
+ .i_ack_i (I_ACK_I),
+ .i_err_i (I_ERR_I),
+ .i_rty_i (I_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+
+
+
+
+
+
+
+
+ .i_dat_o (I_DAT_O),
+ .i_adr_o (I_ADR_O),
+ .i_cyc_o (I_CYC_O),
+ .i_sel_o (I_SEL_O),
+ .i_stb_o (I_STB_O),
+ .i_we_o (I_WE_O),
+ .i_cti_o (I_CTI_O),
+ .i_lock_o (I_LOCK_O),
+ .i_bte_o (I_BTE_O),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_minimal decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+
+
+
+
+ .x_result_sel_shift (x_result_sel_shift_d),
+
+
+
+
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_minimal #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_interrupt_minimal interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+
+
+
+ .exception (exception_q_w),
+
+
+ .eret_q_x (eret_q_x),
+
+
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign shifter_result_x = {operand_0_x[ 32-1] & sign_extend_x, operand_0_x[ 32-1:1]};
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+
+
+
+
+
+
+
+
+ : x_result_sel_shift_x ? shifter_result_x
+
+
+
+
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+
+
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign exception_x = (system_call_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+
+
+
+
+
+
+
+ )
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+
+
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || (I_CYC_O == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+
+
+
+assign exception_q_w = ((exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (4 -1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 4 'h0,
+ 4 'h1,
+ 4 'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 4 'h6: csr_read_data_x = cfg;
+ 4 'h7: csr_read_data_x = {eba, 8'h00};
+
+
+
+
+
+
+
+
+
+ 4 'ha: csr_read_data_x = cfg2;
+ 4 'hb: csr_read_data_x = sdb_address;
+
+
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (32-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 4 'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (32-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+
+
+ valid_f <= 1'b1;
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (32-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_shift_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 4 {1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+
+
+
+
+
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (32-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+
+
+
+ exception_w <= 1'b0;
+
+
+
+
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((32-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+
+
+
+
+ x_result_sel_shift_x <= x_result_sel_shift_d;
+
+
+
+
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+
+
+ scall_x <= scall_d;
+
+
+
+
+ eret_x <= eret_d;
+
+
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else
+ write_idx_m <= write_idx_x;
+
+
+ condition_met_m <= condition_met_x;
+
+
+
+
+
+
+
+
+
+
+
+
+ branch_target_m <= exception_x == 1'b1 ? {eba, eid_x, {3{1'b0}}} : branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+
+
+
+
+
+
+ end
+
+
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? {pc_m, 2'b00} : m_result;
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+
+
+
+ exception_w <= exception_m;
+
+
+
+
+
+
+
+
+
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_minimal
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+
+
+
+
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_data_m;
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_minimal (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+
+
+
+
+ x_result_sel_shift,
+
+
+
+
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+
+
+ w_result_sel_load,
+
+
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+
+
+ scall,
+ eret,
+
+
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+
+
+
+
+
+output x_result_sel_shift;
+reg x_result_sel_shift;
+
+
+
+
+
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((32-2)+2-1):2] branch_offset;
+wire [ ((32-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+
+
+
+
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+
+
+
+wire op_sh;
+
+
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+
+
+
+
+wire shift;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+
+
+
+
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+
+
+
+
+assign shift = op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+
+
+
+
+ x_result_sel_shift = 1'b0;
+
+
+
+
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (shift)
+ x_result_sel_shift = 1'b1;
+
+
+
+
+
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+
+
+
+
+ w_result_sel_load = load;
+
+
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | shift
+
+
+
+
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (32-2)-1:0])
+ : (branch_immediate[ (32-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_minimal (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ i_dat_i,
+ i_ack_i,
+ i_err_i,
+ i_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+
+
+
+
+
+
+
+
+ i_dat_o,
+ i_adr_o,
+ i_cyc_o,
+ i_sel_o,
+ i_stb_o,
+ i_we_o,
+ i_cti_o,
+ i_lock_o,
+ i_bte_o,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((32-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((32-2)+2-1):2] branch_target_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] i_dat_i;
+input i_ack_i;
+input i_err_i;
+input i_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ ((32-2)+2-1):2] pc_f;
+reg [ ((32-2)+2-1):2] pc_f;
+output [ ((32-2)+2-1):2] pc_d;
+reg [ ((32-2)+2-1):2] pc_d;
+output [ ((32-2)+2-1):2] pc_x;
+reg [ ((32-2)+2-1):2] pc_x;
+output [ ((32-2)+2-1):2] pc_m;
+reg [ ((32-2)+2-1):2] pc_m;
+output [ ((32-2)+2-1):2] pc_w;
+reg [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] i_dat_o;
+
+
+
+
+wire [ (32-1):0] i_dat_o;
+
+
+output [ (32-1):0] i_adr_o;
+reg [ (32-1):0] i_adr_o;
+output i_cyc_o;
+reg i_cyc_o;
+output [ (4-1):0] i_sel_o;
+
+
+
+
+wire [ (4-1):0] i_sel_o;
+
+
+output i_stb_o;
+reg i_stb_o;
+output i_we_o;
+
+
+
+
+wire i_we_o;
+
+
+output [ (3-1):0] i_cti_o;
+reg [ (3-1):0] i_cti_o;
+output i_lock_o;
+reg i_lock_o;
+output [ (2-1):0] i_bte_o;
+wire [ (2-1):0] i_bte_o;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((32-2)+2-1):2] pc_a;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg [ (32-1):0] wb_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+
+
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign instruction_f = wb_data_f;
+
+
+
+
+
+
+
+
+
+
+
+
+assign i_dat_o = 32'd0;
+assign i_we_o = 1'b0;
+assign i_sel_o = 4'b1111;
+
+
+assign i_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((32-2)+2-1):2];
+ pc_d <= { (32-2){1'b0}};
+ pc_x <= { (32-2){1'b0}};
+ pc_m <= { (32-2){1'b0}};
+ pc_w <= { (32-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+ i_adr_o <= { 32{1'b0}};
+ i_cti_o <= 3'b111;
+ i_lock_o <= 1'b0;
+ wb_data_f <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+
+ if (i_cyc_o == 1'b1)
+ begin
+
+ if((i_ack_i == 1'b1) || (i_err_i == 1'b1))
+ begin
+
+ i_cyc_o <= 1'b0;
+ i_stb_o <= 1'b0;
+
+ wb_data_f <= i_dat_i;
+ end
+
+
+
+
+
+
+
+
+
+
+
+ end
+ else
+ begin
+
+ if ( (stall_a == 1'b0)
+
+
+
+
+ )
+ begin
+
+
+
+
+
+ i_adr_o <= {pc_a, 2'b00};
+ i_cyc_o <= 1'b1;
+ i_stb_o <= 1'b1;
+
+
+
+
+ end
+ else
+ begin
+ if ( (stall_a == 1'b0)
+
+
+
+
+ )
+ begin
+
+
+
+
+ end
+ end
+ end
+ end
+ end
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_minimal (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+
+
+
+ exception,
+
+
+ eret_q_x,
+
+
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+
+
+
+input exception;
+
+
+input eret_q_x;
+
+
+
+
+
+input [ (4 -1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ 4 'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 4 'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+
+
+ 1'b0,
+
+
+ eie,
+ ie
+ };
+ 4 'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 4 'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+
+
+ end
+ if (csr == 4 'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_top_wr_node (
+
+ clk_i,
+ rst_i,
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+ );
+
+parameter eba_reset = 32'h00000000;
+parameter sdb_address = 32'h00000000;
+
+
+
+
+input clk_i;
+input rst_i;
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+lm32_cpu_wr_node
+ #(
+ .eba_reset(eba_reset),
+ .sdb_address(sdb_address)
+ ) cpu (
+
+ .clk_i (clk_i),
+
+
+
+
+ .rst_i (rst_i),
+
+
+
+ .interrupt (interrupt),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .D_DAT_I (D_DAT_I),
+ .D_ACK_I (D_ACK_I),
+ .D_ERR_I (D_ERR_I),
+ .D_RTY_I (D_RTY_I),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .D_DAT_O (D_DAT_O),
+ .D_ADR_O (D_ADR_O),
+ .D_CYC_O (D_CYC_O),
+ .D_SEL_O (D_SEL_O),
+ .D_STB_O (D_STB_O),
+ .D_WE_O (D_WE_O),
+ .D_CTI_O (D_CTI_O),
+ .D_LOCK_O (D_LOCK_O),
+ .D_BTE_O (D_BTE_O)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_mc_arithmetic_wr_node (
+
+ clk_i,
+ rst_i,
+ stall_d,
+ kill_x,
+
+
+ divide_d,
+ modulus_d,
+
+
+
+
+
+
+
+
+
+
+
+
+ operand_0_d,
+ operand_1_d,
+
+ result_x,
+
+
+ divide_by_zero_x,
+
+
+ stall_request_x
+ );
+
+
+
+
+
+input clk_i;
+input rst_i;
+input stall_d;
+input kill_x;
+
+
+input divide_d;
+input modulus_d;
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] operand_0_d;
+input [ (32-1):0] operand_1_d;
+
+
+
+
+
+output [ (32-1):0] result_x;
+reg [ (32-1):0] result_x;
+
+
+output divide_by_zero_x;
+reg divide_by_zero_x;
+
+
+output stall_request_x;
+wire stall_request_x;
+
+
+
+
+
+reg [ (32-1):0] p;
+reg [ (32-1):0] a;
+reg [ (32-1):0] b;
+
+
+wire [32:0] t;
+
+
+
+reg [ 2:0] state;
+reg [5:0] cycles;
+
+
+
+
+
+
+
+
+
+
+
+
+assign stall_request_x = state != 3'b000;
+
+
+
+
+assign t = {p[ 32-2:0], a[ 32-1]} - b;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ cycles <= {6{1'b0}};
+ p <= { 32{1'b0}};
+ a <= { 32{1'b0}};
+ b <= { 32{1'b0}};
+
+
+
+
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ result_x <= { 32{1'b0}};
+ state <= 3'b000;
+ end
+ else
+ begin
+
+
+ divide_by_zero_x <= 1'b0;
+
+
+ case (state)
+ 3'b000:
+ begin
+ if (stall_d == 1'b0)
+ begin
+ cycles <= 32;
+ p <= 32'b0;
+ a <= operand_0_d;
+ b <= operand_1_d;
+
+
+ if (divide_d == 1'b1)
+ state <= 3'b011 ;
+ if (modulus_d == 1'b1)
+ state <= 3'b010 ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ end
+ end
+
+
+ 3'b011 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= a;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+ 3'b010 :
+ begin
+ if (t[32] == 1'b0)
+ begin
+ p <= t[31:0];
+ a <= {a[ 32-2:0], 1'b1};
+ end
+ else
+ begin
+ p <= {p[ 32-2:0], a[ 32-1]};
+ a <= {a[ 32-2:0], 1'b0};
+ end
+ result_x <= p;
+ if ((cycles == 32'd0) || (kill_x == 1'b1))
+ begin
+
+ divide_by_zero_x <= b == { 32{1'b0}};
+ state <= 3'b000;
+ end
+ cycles <= cycles - 1'b1;
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ endcase
+ end
+end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_cpu_wr_node (
+
+ clk_i,
+
+
+
+
+ rst_i,
+
+
+ enable_i,
+
+
+
+
+ dbg_exception_o,
+ dbg_csr_write_enable_i,
+ dbg_csr_write_data_i,
+ dbg_csr_addr_i,
+ dbg_break_i,
+ dbg_reset_i,
+
+
+
+
+
+
+ interrupt,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D_DAT_I,
+ D_ACK_I,
+ D_ERR_I,
+ D_RTY_I,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ iram_i_adr_o,
+ iram_i_dat_i,
+ iram_i_en_o,
+ iram_d_adr_o,
+ iram_d_dat_o,
+ iram_d_dat_i,
+ iram_d_sel_o,
+ iram_d_we_o,
+ iram_d_en_o,
+
+
+
+
+
+ D_DAT_O,
+ D_ADR_O,
+ D_CYC_O,
+ D_SEL_O,
+ D_STB_O,
+ D_WE_O,
+ D_CTI_O,
+ D_LOCK_O,
+ D_BTE_O
+
+
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+
+
+parameter deba_reset = 32'h10000000;
+
+
+parameter sdb_address = 32'h00000000;
+
+
+
+
+
+
+
+
+
+parameter icache_associativity = 1;
+parameter icache_sets = 512;
+parameter icache_bytes_per_line = 16;
+parameter icache_base_address = 0;
+parameter icache_limit = 0;
+
+
+
+
+
+
+
+
+
+
+
+parameter dcache_associativity = 1;
+parameter dcache_sets = 512;
+parameter dcache_bytes_per_line = 16;
+parameter dcache_base_address = 0;
+parameter dcache_limit = 0;
+
+
+
+
+
+parameter watchpoints = 32'h4;
+
+
+
+
+
+
+
+
+parameter breakpoints = 0;
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+
+
+
+
+input clk_i;
+
+
+
+
+input rst_i;
+
+
+
+input [ (32-1):0] interrupt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input [ (32-1):0] D_DAT_I;
+input D_ACK_I;
+input D_ERR_I;
+input D_RTY_I;
+
+
+
+
+
+
+
+ input enable_i;
+ wire enable_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] D_DAT_O;
+wire [ (32-1):0] D_DAT_O;
+output [ (32-1):0] D_ADR_O;
+wire [ (32-1):0] D_ADR_O;
+output D_CYC_O;
+wire D_CYC_O;
+output [ (4-1):0] D_SEL_O;
+wire [ (4-1):0] D_SEL_O;
+output D_STB_O;
+wire D_STB_O;
+output D_WE_O;
+wire D_WE_O;
+output [ (3-1):0] D_CTI_O;
+wire [ (3-1):0] D_CTI_O;
+output D_LOCK_O;
+wire D_LOCK_O;
+output [ (2-1):0] D_BTE_O;
+wire [ (2-1):0] D_BTE_O;
+
+
+
+ output [31:0] iram_i_adr_o, iram_d_adr_o;
+ output [31:0] iram_d_dat_o;
+ input [31:0] iram_i_dat_i, iram_d_dat_i;
+ output [3:0] iram_d_sel_o;
+ output iram_d_en_o, iram_i_en_o, iram_d_we_o;
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg valid_f;
+reg valid_d;
+reg valid_x;
+reg valid_m;
+reg valid_w;
+
+wire q_x;
+wire [ (32-1):0] immediate_d;
+wire load_d;
+reg load_x;
+reg load_m;
+wire load_q_x;
+wire store_q_x;
+wire q_m;
+wire load_q_m;
+wire store_q_m;
+wire store_d;
+reg store_x;
+reg store_m;
+wire [ 1:0] size_d;
+reg [ 1:0] size_x;
+wire branch_d;
+wire branch_predict_d;
+wire branch_predict_taken_d;
+wire [ ((32-2)+2-1):2] branch_predict_address_d;
+wire [ ((32-2)+2-1):2] branch_target_d;
+wire bi_unconditional;
+wire bi_conditional;
+reg branch_x;
+reg branch_predict_x;
+reg branch_predict_taken_x;
+reg branch_m;
+reg branch_predict_m;
+reg branch_predict_taken_m;
+wire branch_mispredict_taken_m;
+wire branch_flushX_m;
+wire branch_reg_d;
+wire [ ((32-2)+2-1):2] branch_offset_d;
+reg [ ((32-2)+2-1):2] branch_target_x;
+reg [ ((32-2)+2-1):2] branch_target_m;
+wire [ 0:0] d_result_sel_0_d;
+wire [ 1:0] d_result_sel_1_d;
+
+wire x_result_sel_csr_d;
+reg x_result_sel_csr_x;
+
+
+wire q_d;
+wire x_result_sel_mc_arith_d;
+reg x_result_sel_mc_arith_x;
+
+
+
+
+
+
+
+
+
+wire x_result_sel_sext_d;
+reg x_result_sel_sext_x;
+
+
+wire x_result_sel_logic_d;
+
+
+
+
+
+wire x_result_sel_add_d;
+reg x_result_sel_add_x;
+wire m_result_sel_compare_d;
+reg m_result_sel_compare_x;
+reg m_result_sel_compare_m;
+
+
+wire m_result_sel_shift_d;
+reg m_result_sel_shift_x;
+reg m_result_sel_shift_m;
+
+
+wire w_result_sel_load_d;
+reg w_result_sel_load_x;
+reg w_result_sel_load_m;
+reg w_result_sel_load_w;
+
+
+wire w_result_sel_mul_d;
+reg w_result_sel_mul_x;
+reg w_result_sel_mul_m;
+reg w_result_sel_mul_w;
+
+
+wire x_bypass_enable_d;
+reg x_bypass_enable_x;
+wire m_bypass_enable_d;
+reg m_bypass_enable_x;
+reg m_bypass_enable_m;
+wire sign_extend_d;
+reg sign_extend_x;
+wire write_enable_d;
+reg write_enable_x;
+wire write_enable_q_x;
+reg write_enable_m;
+wire write_enable_q_m;
+reg write_enable_w;
+wire write_enable_q_w;
+wire read_enable_0_d;
+wire [ (5-1):0] read_idx_0_d;
+wire read_enable_1_d;
+wire [ (5-1):0] read_idx_1_d;
+wire [ (5-1):0] write_idx_d;
+reg [ (5-1):0] write_idx_x;
+reg [ (5-1):0] write_idx_m;
+reg [ (5-1):0] write_idx_w;
+wire [ (5-1):0] csr_d;
+reg [ (5-1):0] csr_x;
+wire [ (3-1):0] condition_d;
+reg [ (3-1):0] condition_x;
+
+
+wire break_d;
+reg break_x;
+
+
+wire scall_d;
+reg scall_x;
+wire eret_d;
+reg eret_x;
+wire eret_q_x;
+
+
+
+
+
+
+
+wire bret_d;
+reg bret_x;
+wire bret_q_x;
+
+
+
+
+
+
+
+wire csr_write_enable_d;
+reg csr_write_enable_x;
+wire csr_write_enable_q_x;
+
+
+
+
+
+
+
+wire bus_error_d;
+reg bus_error_x;
+reg data_bus_error_exception_m;
+reg [ ((32-2)+2-1):2] memop_pc_w;
+
+
+
+reg [ (32-1):0] d_result_0;
+reg [ (32-1):0] d_result_1;
+reg [ (32-1):0] x_result;
+reg [ (32-1):0] m_result;
+reg [ (32-1):0] w_result;
+
+reg [ (32-1):0] operand_0_x;
+reg [ (32-1):0] operand_1_x;
+reg [ (32-1):0] store_operand_x;
+reg [ (32-1):0] operand_m;
+reg [ (32-1):0] operand_w;
+
+
+
+
+reg [ (32-1):0] reg_data_live_0;
+reg [ (32-1):0] reg_data_live_1;
+reg use_buf;
+reg [ (32-1):0] reg_data_buf_0;
+reg [ (32-1):0] reg_data_buf_1;
+
+
+
+
+
+
+
+
+wire [ (32-1):0] reg_data_0;
+wire [ (32-1):0] reg_data_1;
+reg [ (32-1):0] bypass_data_0;
+reg [ (32-1):0] bypass_data_1;
+wire reg_write_enable_q_w;
+
+reg interlock;
+
+wire stall_a;
+wire stall_f;
+wire stall_d;
+wire stall_x;
+wire stall_m;
+
+
+wire adder_op_d;
+reg adder_op_x;
+reg adder_op_x_n;
+wire [ (32-1):0] adder_result_x;
+wire adder_overflow_x;
+wire adder_carry_n_x;
+
+
+wire [ 3:0] logic_op_d;
+reg [ 3:0] logic_op_x;
+wire [ (32-1):0] logic_result_x;
+
+
+
+
+wire [ (32-1):0] sextb_result_x;
+wire [ (32-1):0] sexth_result_x;
+wire [ (32-1):0] sext_result_x;
+
+
+
+
+
+
+
+
+
+
+
+wire direction_d;
+reg direction_x;
+wire [ (32-1):0] shifter_result_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] multiplier_result_w;
+
+
+
+
+
+
+
+
+
+
+
+wire divide_d;
+wire divide_q_d;
+wire modulus_d;
+wire modulus_q_d;
+wire divide_by_zero_x;
+
+
+
+
+
+
+wire mc_stall_request_x;
+wire [ (32-1):0] mc_result_x;
+
+
+
+
+
+
+wire [ (32-1):0] interrupt_csr_read_data_x;
+
+
+wire [ (32-1):0] cfg;
+wire [ (32-1):0] cfg2;
+
+
+
+
+reg [ (32-1):0] csr_read_data_x;
+
+
+wire [ ((32-2)+2-1):2] pc_f;
+wire [ ((32-2)+2-1):2] pc_d;
+wire [ ((32-2)+2-1):2] pc_x;
+wire [ ((32-2)+2-1):2] pc_m;
+wire [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+wire [ (32-1):0] instruction_f;
+
+
+
+
+wire [ (32-1):0] instruction_d;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire [ (32-1):0] load_data_w;
+wire stall_wb_load;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire raw_x_0;
+wire raw_x_1;
+wire raw_m_0;
+wire raw_m_1;
+wire raw_w_0;
+wire raw_w_1;
+
+
+wire cmp_zero;
+wire cmp_negative;
+wire cmp_overflow;
+wire cmp_carry_n;
+reg condition_met_x;
+reg condition_met_m;
+
+
+
+
+wire branch_taken_m;
+
+wire kill_f;
+wire kill_d;
+wire kill_x;
+wire kill_m;
+wire kill_w;
+
+reg [ (32-2)+2-1:8] eba;
+
+
+reg [ (32-2)+2-1:8] deba;
+
+
+reg [ (3-1):0] eid_x;
+
+
+
+
+
+
+
+
+
+
+wire dc_ss;
+
+
+wire dc_re;
+wire bp_match;
+wire wp_match;
+wire exception_x;
+reg exception_m;
+wire debug_exception_x;
+reg debug_exception_m;
+reg debug_exception_w;
+wire debug_exception_q_w;
+wire non_debug_exception_x;
+reg non_debug_exception_m;
+reg non_debug_exception_w;
+wire non_debug_exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire reset_exception;
+
+
+
+
+
+
+wire interrupt_exception;
+
+
+
+
+wire breakpoint_exception;
+wire watchpoint_exception;
+
+
+
+
+ reg [ (32-1):0] data_bus_error_addr;
+
+wire instruction_bus_error_exception;
+wire data_bus_error_exception;
+
+
+
+
+wire divide_by_zero_exception;
+
+
+wire system_call_exception;
+
+
+
+reg data_bus_error_seen;
+
+
+
+
+
+ wire iram_stall_request_x;
+
+
+
+
+
+input dbg_csr_write_enable_i;
+wire dbg_csr_write_enable_i;
+input [ (32-1):0] dbg_csr_write_data_i;
+wire [ (32-1):0] dbg_csr_write_data_i;
+input [ (5-1):0] dbg_csr_addr_i;
+wire [ (5-1):0] dbg_csr_addr_i;
+
+ output dbg_exception_o;
+ wire dbg_exception_o;
+ input dbg_reset_i;
+ wire dbg_reset_i;
+ input dbg_break_i;
+ wire dbg_break_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+lm32_instruction_unit_wr_node #(
+ .eba_reset (eba_reset),
+ .associativity (icache_associativity),
+ .sets (icache_sets),
+ .bytes_per_line (icache_bytes_per_line),
+ .base_address (icache_base_address),
+ .limit (icache_limit)
+ ) instruction_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_f (stall_f),
+ .stall_d (stall_d),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .valid_f (valid_f),
+ .valid_d (valid_d),
+ .kill_f (kill_f),
+ .branch_predict_taken_d (branch_predict_taken_d),
+ .branch_predict_address_d (branch_predict_address_d),
+
+
+
+
+
+ .exception_m (exception_m),
+ .branch_taken_m (branch_taken_m),
+ .branch_mispredict_taken_m (branch_mispredict_taken_m),
+ .branch_target_m (branch_target_m),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .jtag_read_enable (jtag_read_enable),
+ .jtag_write_enable (jtag_write_enable),
+ .jtag_write_data (jtag_write_data),
+ .jtag_address (jtag_address),
+
+
+
+
+ .pc_f (pc_f),
+ .pc_d (pc_d),
+ .pc_x (pc_x),
+ .pc_m (pc_m),
+ .pc_w (pc_w),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .iram_i_adr_o(iram_i_adr_o),
+ .iram_i_dat_i(iram_i_dat_i),
+ .iram_i_en_o(iram_i_en_o),
+
+
+
+
+
+ .jtag_read_data (jtag_read_data),
+ .jtag_access_complete (jtag_access_complete),
+
+
+
+
+ .bus_error_d (bus_error_d),
+
+
+
+
+ .instruction_f (instruction_f),
+
+
+
+
+ .instruction_d (instruction_d)
+
+
+
+ );
+
+
+lm32_decoder_wr_node decoder (
+
+ .instruction (instruction_d),
+
+ .d_result_sel_0 (d_result_sel_0_d),
+ .d_result_sel_1 (d_result_sel_1_d),
+ .x_result_sel_csr (x_result_sel_csr_d),
+
+
+ .x_result_sel_mc_arith (x_result_sel_mc_arith_d),
+
+
+
+
+
+
+
+
+ .x_result_sel_sext (x_result_sel_sext_d),
+
+
+ .x_result_sel_logic (x_result_sel_logic_d),
+
+
+
+
+ .x_result_sel_add (x_result_sel_add_d),
+ .m_result_sel_compare (m_result_sel_compare_d),
+
+
+ .m_result_sel_shift (m_result_sel_shift_d),
+
+
+ .w_result_sel_load (w_result_sel_load_d),
+
+
+ .w_result_sel_mul (w_result_sel_mul_d),
+
+
+ .x_bypass_enable (x_bypass_enable_d),
+ .m_bypass_enable (m_bypass_enable_d),
+ .read_enable_0 (read_enable_0_d),
+ .read_idx_0 (read_idx_0_d),
+ .read_enable_1 (read_enable_1_d),
+ .read_idx_1 (read_idx_1_d),
+ .write_enable (write_enable_d),
+ .write_idx (write_idx_d),
+ .immediate (immediate_d),
+ .branch_offset (branch_offset_d),
+ .load (load_d),
+ .store (store_d),
+ .size (size_d),
+ .sign_extend (sign_extend_d),
+ .adder_op (adder_op_d),
+ .logic_op (logic_op_d),
+
+
+ .direction (direction_d),
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .divide (divide_d),
+ .modulus (modulus_d),
+
+
+ .branch (branch_d),
+ .bi_unconditional (bi_unconditional),
+ .bi_conditional (bi_conditional),
+ .branch_reg (branch_reg_d),
+ .condition (condition_d),
+
+
+ .break_opcode (break_d),
+
+
+ .scall (scall_d),
+ .eret (eret_d),
+
+
+ .bret (bret_d),
+
+
+
+
+
+
+ .csr_write_enable (csr_write_enable_d)
+ );
+
+
+lm32_load_store_unit_wr_node #(
+ .associativity (dcache_associativity),
+ .sets (dcache_sets),
+ .bytes_per_line (dcache_bytes_per_line),
+ .base_address (dcache_base_address),
+ .limit (dcache_limit)
+ ) load_store_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .stall_a (stall_a),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .kill_x (kill_x),
+ .kill_m (kill_m),
+ .exception_m (exception_m),
+ .store_operand_x (store_operand_x),
+ .load_store_address_x (adder_result_x),
+ .load_store_address_m (operand_m),
+ .load_store_address_w (operand_w[1:0]),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_q_x (load_q_x),
+ .store_q_x (store_q_x),
+ .load_q_m (load_q_m),
+ .store_q_m (store_q_m),
+ .sign_extend_x (sign_extend_x),
+ .size_x (size_x),
+
+
+
+
+
+
+
+ .iram_d_adr_o(iram_d_adr_o),
+ .iram_d_dat_o(iram_d_dat_o),
+ .iram_d_dat_i(iram_d_dat_i),
+ .iram_d_sel_o(iram_d_sel_o),
+ .iram_d_we_o(iram_d_we_o),
+ .iram_d_en_o(iram_d_en_o),
+ .iram_stall_request_x(iram_stall_request_x),
+
+
+
+
+ .d_dat_i (D_DAT_I),
+ .d_ack_i (D_ACK_I),
+ .d_err_i (D_ERR_I),
+ .d_rty_i (D_RTY_I),
+
+
+
+
+
+
+
+
+
+ .load_data_w (load_data_w),
+ .stall_wb_load (stall_wb_load),
+
+ .d_dat_o (D_DAT_O),
+ .d_adr_o (D_ADR_O),
+ .d_cyc_o (D_CYC_O),
+ .d_sel_o (D_SEL_O),
+ .d_stb_o (D_STB_O),
+ .d_we_o (D_WE_O),
+ .d_cti_o (D_CTI_O),
+ .d_lock_o (D_LOCK_O),
+ .d_bte_o (D_BTE_O)
+ );
+
+
+lm32_adder adder (
+
+ .adder_op_x (adder_op_x),
+ .adder_op_x_n (adder_op_x_n),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .adder_result_x (adder_result_x),
+ .adder_carry_n_x (adder_carry_n_x),
+ .adder_overflow_x (adder_overflow_x)
+ );
+
+
+lm32_logic_op logic_op (
+
+ .logic_op_x (logic_op_x),
+ .operand_0_x (operand_0_x),
+
+ .operand_1_x (operand_1_x),
+
+ .logic_result_x (logic_result_x)
+ );
+
+
+
+
+lm32_shifter shifter (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .direction_x (direction_x),
+ .sign_extend_x (sign_extend_x),
+ .operand_0_x (operand_0_x),
+ .operand_1_x (operand_1_x),
+
+ .shifter_result_m (shifter_result_m)
+ );
+
+
+
+
+
+
+lm32_multiplier multiplier (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_x (stall_x),
+ .stall_m (stall_m),
+ .operand_0 (d_result_0),
+ .operand_1 (d_result_1),
+
+ .result (multiplier_result_w)
+ );
+
+
+
+
+
+
+lm32_mc_arithmetic_wr_node mc_arithmetic (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .stall_d (stall_d),
+ .kill_x (kill_x),
+
+
+ .divide_d (divide_q_d),
+ .modulus_d (modulus_q_d),
+
+
+
+
+
+
+
+
+
+
+
+
+ .operand_0_d (d_result_0),
+ .operand_1_d (d_result_1),
+
+ .result_x (mc_result_x),
+
+
+ .divide_by_zero_x (divide_by_zero_x),
+
+
+ .stall_request_x (mc_stall_request_x)
+ );
+
+
+
+
+
+
+lm32_interrupt_wr_node interrupt_unit (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+
+ .interrupt (interrupt),
+
+ .stall_x (stall_x),
+
+
+ .non_debug_exception (non_debug_exception_q_w),
+ .debug_exception (debug_exception_q_w),
+
+
+
+
+ .eret_q_x (eret_q_x),
+
+
+ .bret_q_x (bret_q_x),
+
+
+ .csr (csr_x),
+ .csr_write_data (operand_1_x),
+ .csr_write_enable (csr_write_enable_q_x),
+
+ .interrupt_exception (interrupt_exception),
+
+ .csr_read_data (interrupt_csr_read_data_x)
+ );
+
+
+
+
+
+ assign jtag_break = dbg_break_i;
+ assign reset_exception = dbg_reset_i;
+ assign dbg_exception_o = debug_exception_q_w || non_debug_exception_q_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+lm32_debug_wr_node #(
+ .breakpoints (breakpoints),
+ .watchpoints (watchpoints)
+ ) hw_debug (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .pc_x (pc_x),
+ .load_x (load_x),
+ .store_x (store_x),
+ .load_store_address_x (adder_result_x),
+ .csr_write_enable_x (csr_write_enable_q_x),
+ .csr_write_data (operand_1_x),
+ .csr_x (csr_x),
+
+
+
+
+
+
+
+
+
+
+ .dbg_csr_write_enable_i (dbg_csr_write_enable_i),
+ .dbg_csr_write_data_i (dbg_csr_write_data_i),
+ .dbg_csr_addr_i (dbg_csr_addr_i),
+
+
+
+
+
+
+ .eret_q_x (eret_q_x),
+ .bret_q_x (bret_q_x),
+ .stall_x (stall_x),
+ .exception_x (exception_x),
+ .q_x (q_x),
+
+
+
+
+
+
+
+
+
+ .dc_ss (dc_ss),
+
+
+ .dc_re (dc_re),
+ .bp_match (bp_match),
+ .wp_match (wp_match)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire [31:0] regfile_data_0, regfile_data_1;
+ reg [31:0] w_result_d;
+ reg regfile_raw_0, regfile_raw_0_nxt;
+ reg regfile_raw_1, regfile_raw_1_nxt;
+
+
+
+
+
+ always @(reg_write_enable_q_w or write_idx_w or instruction_f)
+ begin
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[25:21]))
+ regfile_raw_0_nxt = 1'b1;
+ else
+ regfile_raw_0_nxt = 1'b0;
+
+ if (reg_write_enable_q_w
+ && (write_idx_w == instruction_f[20:16]))
+ regfile_raw_1_nxt = 1'b1;
+ else
+ regfile_raw_1_nxt = 1'b0;
+ end
+
+
+
+
+
+
+ always @(regfile_raw_0 or w_result_d or regfile_data_0)
+ if (regfile_raw_0)
+ reg_data_live_0 = w_result_d;
+ else
+ reg_data_live_0 = regfile_data_0;
+
+
+
+
+
+
+ always @(regfile_raw_1 or w_result_d or regfile_data_1)
+ if (regfile_raw_1)
+ reg_data_live_1 = w_result_d;
+ else
+ reg_data_live_1 = regfile_data_1;
+
+
+
+
+ always @(posedge clk_i )
+ if (rst_i == 1'b1)
+ begin
+ regfile_raw_0 <= 1'b0;
+ regfile_raw_1 <= 1'b0;
+ w_result_d <= 32'b0;
+ end
+ else
+ begin
+ regfile_raw_0 <= regfile_raw_0_nxt;
+ regfile_raw_1 <= regfile_raw_1_nxt;
+ w_result_d <= w_result;
+ end
+
+
+
+
+
+ lm32_dp_ram
+ #(
+
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_0
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[25:21]),
+
+ .rdata_o (regfile_data_0)
+ );
+
+ lm32_dp_ram
+ #(
+ .addr_depth(1<<5),
+ .addr_width(5),
+ .data_width(32)
+ )
+ reg_1
+ (
+
+ .clk_i (clk_i),
+ .rst_i (rst_i),
+ .we_i (reg_write_enable_q_w),
+ .wdata_i (w_result),
+ .waddr_i (write_idx_w),
+ .raddr_i (instruction_f[20:16]),
+
+ .rdata_o (regfile_data_1)
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
+assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
+
+
+
+
+
+
+
+
+
+
+
+
+assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
+assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
+assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
+assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
+assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
+assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
+
+
+always @(*)
+begin
+ if ( ( (x_bypass_enable_x == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
+ )
+ )
+ || ( (m_bypass_enable_m == 1'b0)
+ && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
+ || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
+ )
+ )
+ )
+ interlock = 1'b1;
+ else
+ interlock = 1'b0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_0 == 1'b1)
+ bypass_data_0 = x_result;
+ else if (raw_m_0 == 1'b1)
+ bypass_data_0 = m_result;
+ else if (raw_w_0 == 1'b1)
+ bypass_data_0 = w_result;
+ else
+ bypass_data_0 = reg_data_0;
+end
+
+
+always @(*)
+begin
+ if (raw_x_1 == 1'b1)
+ bypass_data_1 = x_result;
+ else if (raw_m_1 == 1'b1)
+ bypass_data_1 = m_result;
+ else if (raw_w_1 == 1'b1)
+ bypass_data_1 = w_result;
+ else
+ bypass_data_1 = reg_data_1;
+end
+
+
+
+
+
+
+
+ assign branch_predict_d = bi_unconditional | bi_conditional;
+ assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
+
+
+ assign branch_target_d = pc_d + branch_offset_d;
+
+
+
+
+ assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
+
+
+always @(*)
+begin
+ d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
+ case (d_result_sel_1_d)
+ 2'b00: d_result_1 = { 32{1'b0}};
+ 2'b01: d_result_1 = bypass_data_1;
+ 2'b10: d_result_1 = immediate_d;
+ default: d_result_1 = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+
+
+
+
+
+assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
+assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
+assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
+
+
+
+
+
+
+
+
+
+
+assign cmp_zero = operand_0_x == operand_1_x;
+assign cmp_negative = adder_result_x[ 32-1];
+assign cmp_overflow = adder_overflow_x;
+assign cmp_carry_n = adder_carry_n_x;
+always @(*)
+begin
+ case (condition_x)
+ 3'b000: condition_met_x = 1'b1;
+ 3'b110: condition_met_x = 1'b1;
+ 3'b001: condition_met_x = cmp_zero;
+ 3'b111: condition_met_x = !cmp_zero;
+ 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
+ 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
+ 3'b011: condition_met_x = cmp_negative == cmp_overflow;
+ 3'b100: condition_met_x = cmp_carry_n;
+ default: condition_met_x = 1'bx;
+ endcase
+end
+
+
+always @(*)
+begin
+ x_result = x_result_sel_add_x ? adder_result_x
+ : x_result_sel_csr_x ? csr_read_data_x
+
+
+ : x_result_sel_sext_x ? sext_result_x
+
+
+
+
+
+
+
+
+
+
+
+
+ : x_result_sel_mc_arith_x ? mc_result_x
+
+
+ : logic_result_x;
+end
+
+
+always @(*)
+begin
+ m_result = m_result_sel_compare_m ? {{ 32-1{1'b0}}, condition_met_m}
+
+
+ : m_result_sel_shift_m ? shifter_result_m
+
+
+ : operand_m;
+end
+
+
+always @(*)
+begin
+ w_result = w_result_sel_load_w ? load_data_w
+
+
+ : w_result_sel_mul_w ? multiplier_result_w
+
+
+ : operand_w;
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign branch_taken_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( ( (condition_met_m == 1'b1)
+ && (branch_predict_taken_m == 1'b0)
+ )
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1);
+
+
+assign branch_flushX_m = (stall_m == 1'b0)
+ && ( ( (branch_m == 1'b1)
+ && (valid_m == 1'b1)
+ && ( (condition_met_m == 1'b1)
+ || ( (condition_met_m == 1'b0)
+ && (branch_predict_m == 1'b1)
+ && (branch_predict_taken_m == 1'b1)
+ )
+ )
+ )
+ || (exception_m == 1'b1)
+ );
+
+
+assign kill_f = ( (valid_d == 1'b1)
+ && (branch_predict_taken_d == 1'b1)
+ )
+ || (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_d = (branch_taken_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+ ;
+assign kill_x = (branch_flushX_m == 1'b1)
+
+
+
+
+ ;
+assign kill_m = 1'b0
+
+
+
+
+ ;
+assign kill_w = 1'b0
+
+
+
+
+ ;
+
+
+
+
+
+assign breakpoint_exception = ( ( (break_x == 1'b1)
+ || (bp_match == 1'b1)
+ )
+ && (valid_x == 1'b1)
+ )
+
+
+
+
+ ;
+
+
+
+
+
+assign watchpoint_exception = wp_match == 1'b1;
+
+
+
+
+
+assign instruction_bus_error_exception = ( (bus_error_x == 1'b1)
+ && (valid_x == 1'b1)
+ );
+assign data_bus_error_exception = data_bus_error_seen == 1'b1;
+
+
+
+
+
+assign divide_by_zero_exception = divide_by_zero_x == 1'b1;
+
+
+
+assign system_call_exception = ( (scall_x == 1'b1)
+
+
+ && (valid_x == 1'b1)
+
+
+ );
+
+
+
+assign debug_exception_x = (breakpoint_exception == 1'b1)
+ || (watchpoint_exception == 1'b1)
+ ;
+
+assign non_debug_exception_x = (system_call_exception == 1'b1)
+
+
+
+
+
+
+ || (instruction_bus_error_exception == 1'b1)
+ || (data_bus_error_exception == 1'b1)
+
+
+
+
+ || (divide_by_zero_exception == 1'b1)
+
+
+
+
+ || ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+
+
+ && (store_q_m == 1'b0)
+ && (D_CYC_O == 1'b0)
+
+
+ )
+
+
+ ;
+
+assign exception_x = (debug_exception_x == 1'b1) || (non_debug_exception_x == 1'b1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reg user_stall;
+
+always@(posedge clk_i)
+ if(rst_i)
+ user_stall <= 0;
+ else if(!D_CYC_O)
+ user_stall <= ~enable_i;
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+
+
+
+ if (data_bus_error_exception == 1'b1)
+ eid_x = 3'h4;
+ else
+
+
+ if (breakpoint_exception == 1'b1)
+ eid_x = 3'd1;
+ else
+
+
+
+
+ if (data_bus_error_exception == 1'b1)
+ eid_x = 3'h4;
+ else
+ if (instruction_bus_error_exception == 1'b1)
+ eid_x = 3'h2;
+ else
+
+
+
+
+ if (watchpoint_exception == 1'b1)
+ eid_x = 3'd3;
+ else
+
+
+
+
+ if (divide_by_zero_exception == 1'b1)
+ eid_x = 3'h5;
+ else
+
+
+
+
+ if ( (interrupt_exception == 1'b1)
+
+
+ && (dc_ss == 1'b0)
+
+
+ )
+ eid_x = 3'h6;
+ else
+
+
+ eid_x = 3'h7;
+end
+
+
+
+assign stall_a = (stall_f == 1'b1);
+
+assign stall_f = (stall_d == 1'b1);
+
+assign stall_d = (stall_x == 1'b1)
+ || ( (interlock == 1'b1)
+ && (kill_d == 1'b0)
+ )
+ || ( ( (eret_d == 1'b1)
+ || (scall_d == 1'b1)
+
+
+ || (bus_error_d == 1'b1)
+
+
+ )
+ && ( (load_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_x == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( ( (break_d == 1'b1)
+ || (bret_d == 1'b1)
+ )
+ && ( (load_q_x == 1'b1)
+ || (store_q_x == 1'b1)
+ || (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ || (D_CYC_O == 1'b1)
+ )
+ && (kill_d == 1'b0)
+ )
+
+
+ || ( (csr_write_enable_d == 1'b1)
+ && (load_q_x == 1'b1)
+ )
+
+
+
+
+ || ( (iram_stall_request_x == 1'b1)
+ && ( (load_d == 1'b1)
+
+ )
+ )
+
+
+ ;
+
+assign stall_x = (stall_m == 1'b1)
+
+
+ || ( (mc_stall_request_x == 1'b1)
+ && (kill_x == 1'b0)
+ )
+
+
+
+
+ ;
+
+assign stall_m = (stall_wb_load == 1'b1)
+
+
+
+
+ || ( (D_CYC_O == 1'b1)
+ && ( (store_m == 1'b1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
+
+
+ || (load_m == 1'b1)
+ || (load_x == 1'b1)
+ )
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ || (user_stall)
+
+
+ ;
+
+
+
+
+
+
+assign q_d = (valid_d == 1'b1) && (kill_d == 1'b0);
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign divide_q_d = (divide_d == 1'b1) && (q_d == 1'b1);
+assign modulus_q_d = (modulus_d == 1'b1) && (q_d == 1'b1);
+
+
+assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
+assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
+assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign bret_q_x = (bret_x == 1'b1) && (q_x == 1'b1);
+
+
+assign load_q_x = (load_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+assign store_q_x = (store_x == 1'b1)
+ && (q_x == 1'b1)
+
+
+ && (bp_match == 1'b0)
+
+
+ ;
+
+
+
+
+assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
+assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
+assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
+
+
+assign debug_exception_q_w = ((debug_exception_w == 1'b1) && (valid_w == 1'b1));
+assign non_debug_exception_q_w = ((non_debug_exception_w == 1'b1) && (valid_w == 1'b1));
+
+
+
+
+
+assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
+assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
+assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
+
+assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1);
+
+
+assign cfg = {
+ 6'h02,
+ watchpoints[3:0],
+ breakpoints[3:0],
+ interrupts[5:0],
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+
+
+ 1'b0,
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1,
+
+
+
+
+
+
+ 1'b1
+
+
+
+
+ };
+
+assign cfg2 = {
+ 30'b0,
+
+
+ 1'b1,
+
+
+
+
+
+
+
+
+ 1'b0
+
+
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign csr_d = read_idx_0_d[ (5-1):0];
+
+
+always @(*)
+begin
+ case (csr_x)
+
+
+ 5'h0,
+ 5'h1,
+ 5'h2: csr_read_data_x = interrupt_csr_read_data_x;
+
+
+
+
+
+
+ 5'h6: csr_read_data_x = cfg;
+ 5'h7: csr_read_data_x = {eba, 8'h00};
+
+
+ 5'h9: csr_read_data_x = {deba, 8'h00};
+
+
+
+
+
+
+
+ 5'ha: csr_read_data_x = cfg2;
+ 5'hb: csr_read_data_x = sdb_address;
+
+
+ 5'hc: csr_read_data_x = data_bus_error_addr;
+
+
+
+
+ default: csr_read_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ eba <= eba_reset[ (32-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h7) && (stall_x == 1'b0))
+ eba <= operand_1_x[ (32-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ if ((dbg_csr_write_enable_i == 1'b1) && (dbg_csr_addr_i == 5'h7))
+ eba <= dbg_csr_write_data_i[ (32-2)+2-1:8];
+
+
+
+
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ deba <= deba_reset[ (32-2)+2-1:8];
+ else
+ begin
+ if ((csr_write_enable_q_x == 1'b1) && (csr_x == 5'h9) && (stall_x == 1'b0))
+ deba <= operand_1_x[ (32-2)+2-1:8];
+
+
+
+
+
+
+
+
+
+ if ((dbg_csr_write_enable_i == 1'b1) && (dbg_csr_addr_i == 5'h9))
+ deba <= dbg_csr_write_data_i[ (32-2)+2-1:8];
+
+
+
+
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ data_bus_error_seen <= 1'b0;
+ else
+ begin
+
+ if ((D_ERR_I == 1'b1) && (D_CYC_O == 1'b1)) begin
+ data_bus_error_seen <= 1'b1;
+ data_bus_error_addr <= D_ADR_O;
+ end
+
+ if ((exception_m == 1'b1) && (kill_m == 1'b0))
+ data_bus_error_seen <= 1'b0;
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ valid_f <= 1'b0;
+ valid_d <= 1'b0;
+ valid_x <= 1'b0;
+ valid_m <= 1'b0;
+ valid_w <= 1'b0;
+ end
+ else
+ begin
+ if ((kill_f == 1'b1) || (stall_a == 1'b0))
+
+
+
+
+ valid_f <= 1'b1;
+
+
+ else if (stall_f == 1'b0)
+ valid_f <= 1'b0;
+
+ if (kill_d == 1'b1)
+ valid_d <= 1'b0;
+ else if (stall_f == 1'b0)
+ valid_d <= valid_f & !kill_f;
+ else if (stall_d == 1'b0)
+ valid_d <= 1'b0;
+
+ if (stall_d == 1'b0)
+ valid_x <= valid_d & !kill_d;
+ else if (kill_x == 1'b1)
+ valid_x <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_x <= 1'b0;
+
+ if (kill_m == 1'b1)
+ valid_m <= 1'b0;
+ else if (stall_x == 1'b0)
+ valid_m <= valid_x & !kill_x;
+ else if (stall_m == 1'b0)
+ valid_m <= 1'b0;
+
+ if (stall_m == 1'b0)
+ valid_w <= valid_m & !kill_m;
+ else
+ valid_w <= 1'b0;
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+
+
+
+
+ operand_0_x <= { 32{1'b0}};
+ operand_1_x <= { 32{1'b0}};
+ store_operand_x <= { 32{1'b0}};
+ branch_target_x <= { (32-2){1'b0}};
+ x_result_sel_csr_x <= 1'b0;
+
+
+ x_result_sel_mc_arith_x <= 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= 1'b0;
+
+
+
+
+
+
+ x_result_sel_add_x <= 1'b0;
+ m_result_sel_compare_x <= 1'b0;
+
+
+ m_result_sel_shift_x <= 1'b0;
+
+
+ w_result_sel_load_x <= 1'b0;
+
+
+ w_result_sel_mul_x <= 1'b0;
+
+
+ x_bypass_enable_x <= 1'b0;
+ m_bypass_enable_x <= 1'b0;
+ write_enable_x <= 1'b0;
+ write_idx_x <= { 5{1'b0}};
+ csr_x <= { 5{1'b0}};
+ load_x <= 1'b0;
+ store_x <= 1'b0;
+ size_x <= { 2{1'b0}};
+ sign_extend_x <= 1'b0;
+ adder_op_x <= 1'b0;
+ adder_op_x_n <= 1'b0;
+ logic_op_x <= 4'h0;
+
+
+ direction_x <= 1'b0;
+
+
+
+
+
+
+
+ branch_x <= 1'b0;
+ branch_predict_x <= 1'b0;
+ branch_predict_taken_x <= 1'b0;
+ condition_x <= 3'b000;
+
+
+ break_x <= 1'b0;
+
+
+ scall_x <= 1'b0;
+ eret_x <= 1'b0;
+
+
+ bret_x <= 1'b0;
+
+
+
+
+ bus_error_x <= 1'b0;
+ data_bus_error_exception_m <= 1'b0;
+
+
+ csr_write_enable_x <= 1'b0;
+ operand_m <= { 32{1'b0}};
+ branch_target_m <= { (32-2){1'b0}};
+ m_result_sel_compare_m <= 1'b0;
+
+
+ m_result_sel_shift_m <= 1'b0;
+
+
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ m_bypass_enable_m <= 1'b0;
+ branch_m <= 1'b0;
+ branch_predict_m <= 1'b0;
+ branch_predict_taken_m <= 1'b0;
+ exception_m <= 1'b0;
+ load_m <= 1'b0;
+ store_m <= 1'b0;
+ write_enable_m <= 1'b0;
+ write_idx_m <= { 5{1'b0}};
+ condition_met_m <= 1'b0;
+
+
+
+
+
+
+ debug_exception_m <= 1'b0;
+ non_debug_exception_m <= 1'b0;
+
+
+ operand_w <= { 32{1'b0}};
+ w_result_sel_load_w <= 1'b0;
+
+
+ w_result_sel_mul_w <= 1'b0;
+
+
+ write_idx_w <= { 5{1'b0}};
+ write_enable_w <= 1'b0;
+
+
+ debug_exception_w <= 1'b0;
+ non_debug_exception_w <= 1'b0;
+
+
+
+
+
+
+ memop_pc_w <= { (32-2){1'b0}};
+
+
+ end
+ else
+ begin
+
+
+ if (stall_x == 1'b0)
+ begin
+
+
+
+
+ operand_0_x <= d_result_0;
+ operand_1_x <= d_result_1;
+ store_operand_x <= bypass_data_1;
+ branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[ ((32-2)+2-1):2] : branch_target_d;
+ x_result_sel_csr_x <= x_result_sel_csr_d;
+
+
+ x_result_sel_mc_arith_x <= x_result_sel_mc_arith_d;
+
+
+
+
+
+
+
+
+ x_result_sel_sext_x <= x_result_sel_sext_d;
+
+
+
+
+
+
+ x_result_sel_add_x <= x_result_sel_add_d;
+ m_result_sel_compare_x <= m_result_sel_compare_d;
+
+
+ m_result_sel_shift_x <= m_result_sel_shift_d;
+
+
+ w_result_sel_load_x <= w_result_sel_load_d;
+
+
+ w_result_sel_mul_x <= w_result_sel_mul_d;
+
+
+ x_bypass_enable_x <= x_bypass_enable_d;
+ m_bypass_enable_x <= m_bypass_enable_d;
+ load_x <= load_d;
+ store_x <= store_d;
+ branch_x <= branch_d;
+ branch_predict_x <= branch_predict_d;
+ branch_predict_taken_x <= branch_predict_taken_d;
+ write_idx_x <= write_idx_d;
+ csr_x <= csr_d;
+ size_x <= size_d;
+ sign_extend_x <= sign_extend_d;
+ adder_op_x <= adder_op_d;
+ adder_op_x_n <= ~adder_op_d;
+ logic_op_x <= logic_op_d;
+
+
+ direction_x <= direction_d;
+
+
+
+
+
+
+ condition_x <= condition_d;
+ csr_write_enable_x <= csr_write_enable_d;
+
+
+ break_x <= break_d;
+
+
+ scall_x <= scall_d;
+
+
+ bus_error_x <= bus_error_d;
+
+
+ eret_x <= eret_d;
+
+
+ bret_x <= bret_d;
+
+
+ write_enable_x <= write_enable_d;
+ end
+
+
+
+ if (stall_m == 1'b0)
+ begin
+ operand_m <= x_result;
+ m_result_sel_compare_m <= m_result_sel_compare_x;
+
+
+ m_result_sel_shift_m <= m_result_sel_shift_x;
+
+
+ if (exception_x == 1'b1)
+ begin
+ w_result_sel_load_m <= 1'b0;
+
+
+ w_result_sel_mul_m <= 1'b0;
+
+
+ end
+ else
+ begin
+ w_result_sel_load_m <= w_result_sel_load_x;
+
+
+ w_result_sel_mul_m <= w_result_sel_mul_x;
+
+
+ end
+ m_bypass_enable_m <= m_bypass_enable_x;
+ load_m <= load_x;
+ store_m <= store_x;
+
+
+
+
+ branch_m <= branch_x;
+ branch_predict_m <= branch_predict_x;
+ branch_predict_taken_m <= branch_predict_taken_x;
+
+
+
+
+
+
+
+
+
+ if (non_debug_exception_x == 1'b1)
+ write_idx_m <= 5'd30;
+ else if (debug_exception_x == 1'b1)
+ write_idx_m <= 5'd31;
+ else
+ write_idx_m <= write_idx_x;
+
+
+
+
+
+
+
+ condition_met_m <= condition_met_x;
+
+
+ if (exception_x == 1'b1)
+ if ((dc_re == 1'b1)
+ || ((debug_exception_x == 1'b1)
+ && (non_debug_exception_x == 1'b0)))
+ branch_target_m <= {deba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= {eba, eid_x, {3{1'b0}}};
+ else
+ branch_target_m <= branch_target_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
+
+
+ debug_exception_m <= debug_exception_x;
+ non_debug_exception_m <= non_debug_exception_x;
+
+
+ end
+
+
+ if (stall_m == 1'b0)
+ begin
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ exception_m <= 1'b1;
+ else
+ exception_m <= 1'b0;
+
+
+ data_bus_error_exception_m <= (data_bus_error_exception == 1'b1)
+
+
+ && (reset_exception == 1'b0)
+
+
+ ;
+
+
+ end
+
+
+
+
+ operand_w <= exception_m == 1'b1 ? (data_bus_error_exception_m ? {memop_pc_w, 2'b00} : {pc_m, 2'b00}) : m_result;
+
+
+
+
+ w_result_sel_load_w <= w_result_sel_load_m;
+
+
+ w_result_sel_mul_w <= w_result_sel_mul_m;
+
+
+ write_idx_w <= write_idx_m;
+
+
+
+
+
+
+
+
+ write_enable_w <= write_enable_m;
+
+
+ debug_exception_w <= debug_exception_m;
+ non_debug_exception_w <= non_debug_exception_m;
+
+
+
+
+
+
+ if ( (stall_m == 1'b0)
+ && ( (load_q_m == 1'b1)
+ || (store_q_m == 1'b1)
+ )
+ )
+ memop_pc_w <= pc_m;
+
+
+ end
+end
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ use_buf <= 1'b0;
+ reg_data_buf_0 <= { 32{1'b0}};
+ reg_data_buf_1 <= { 32{1'b0}};
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ use_buf <= 1'b0;
+ else if (use_buf == 1'b0)
+ begin
+ reg_data_buf_0 <= reg_data_live_0;
+ reg_data_buf_1 <= reg_data_live_1;
+ use_buf <= 1'b1;
+ end
+ if (reg_write_enable_q_w == 1'b1)
+ begin
+ if (write_idx_w == read_idx_0_d)
+ reg_data_buf_0 <= w_result;
+ if (write_idx_w == read_idx_1_d)
+ reg_data_buf_1 <= w_result;
+ end
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_load_store_unit_wr_node
+(
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_x,
+ stall_m,
+ kill_x,
+ kill_m,
+ exception_m,
+ store_operand_x,
+ load_store_address_x,
+ load_store_address_m,
+ load_store_address_w,
+ load_x,
+ store_x,
+ load_q_x,
+ store_q_x,
+ load_q_m,
+ store_q_m,
+ sign_extend_x,
+ size_x,
+
+
+
+
+
+ d_dat_i,
+ d_ack_i,
+ d_err_i,
+ d_rty_i,
+
+
+
+
+
+
+
+
+
+
+
+ iram_d_adr_o,
+ iram_d_dat_o,
+ iram_d_dat_i,
+ iram_d_sel_o,
+ iram_d_we_o,
+ iram_d_en_o,
+ iram_stall_request_x,
+
+
+ load_data_w,
+ stall_wb_load,
+
+ d_dat_o,
+ d_adr_o,
+ d_cyc_o,
+ d_sel_o,
+ d_stb_o,
+ d_we_o,
+ d_cti_o,
+ d_lock_o,
+ d_bte_o
+ );
+
+
+
+
+
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+ input clk_i;
+
+input rst_i;
+
+input stall_a;
+input stall_x;
+input stall_m;
+input kill_x;
+input kill_m;
+input exception_m;
+
+input [ (32-1):0] store_operand_x;
+input [ (32-1):0] load_store_address_x;
+input [ (32-1):0] load_store_address_m;
+input [1:0] load_store_address_w;
+input load_x;
+input store_x;
+input load_q_x;
+input store_q_x;
+input load_q_m;
+input store_q_m;
+input sign_extend_x;
+input [ 1:0] size_x;
+
+
+
+
+
+
+
+
+ output [31:0] iram_d_adr_o;
+ output [31:0] iram_d_dat_o;
+ input [31:0] iram_d_dat_i;
+ output [3:0] iram_d_sel_o;
+ output iram_d_en_o, iram_d_we_o;
+ output iram_stall_request_x;
+
+
+
+
+ reg [31:0] iram_dat_d0;
+ reg iram_en_d0;
+ wire iram_en;
+ wire [31:0] iram_data;
+
+
+
+input [ (32-1):0] d_dat_i;
+input d_ack_i;
+input d_err_i;
+input d_rty_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ (32-1):0] load_data_w;
+reg [ (32-1):0] load_data_w;
+output stall_wb_load;
+reg stall_wb_load;
+
+output [ (32-1):0] d_dat_o;
+reg [ (32-1):0] d_dat_o;
+output [ (32-1):0] d_adr_o;
+reg [ (32-1):0] d_adr_o;
+output d_cyc_o;
+reg d_cyc_o;
+output [ (4-1):0] d_sel_o;
+reg [ (4-1):0] d_sel_o;
+output d_stb_o;
+reg d_stb_o;
+output d_we_o;
+reg d_we_o;
+output [ (3-1):0] d_cti_o;
+reg [ (3-1):0] d_cti_o;
+output d_lock_o;
+reg d_lock_o;
+output [ (2-1):0] d_bte_o;
+wire [ (2-1):0] d_bte_o;
+
+
+
+
+
+
+reg [ 1:0] size_m;
+reg [ 1:0] size_w;
+reg sign_extend_m;
+reg sign_extend_w;
+reg [ (32-1):0] store_data_x;
+reg [ (32-1):0] store_data_m;
+reg [ (4-1):0] byte_enable_x;
+reg [ (4-1):0] byte_enable_m;
+wire [ (32-1):0] data_m;
+reg [ (32-1):0] data_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire wb_select_x;
+
+
+wire iram_select_x;
+
+reg iram_enable_m;
+ reg iram_select_m;
+ reg iram_d_en_d0;
+
+
+
+
+reg wb_select_m;
+reg [ (32-1):0] wb_data_m;
+reg wb_load_complete;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign iram_select_x = (load_store_address_x >= 0)
+ && (load_store_address_x <= 32'h000fffff);
+
+ assign iram_d_sel_o = byte_enable_m;
+ assign iram_en = !stall_x || !stall_m;
+
+ always@(posedge clk_i)
+ iram_en_d0 <= iram_en;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign wb_select_x = 1'b1
+
+
+
+
+
+
+
+
+
+
+ && !iram_select_x
+
+
+ ;
+
+
+always @(*)
+begin
+ case (size_x)
+ 2'b00: store_data_x = {4{store_operand_x[7:0]}};
+ 2'b11: store_data_x = {2{store_operand_x[15:0]}};
+ 2'b10: store_data_x = store_operand_x;
+ default: store_data_x = { 32{1'bx}};
+ endcase
+end
+
+
+always @(*)
+begin
+ casez ({size_x, load_store_address_x[1:0]})
+ { 2'b00, 2'b11}: byte_enable_x = 4'b0001;
+ { 2'b00, 2'b10}: byte_enable_x = 4'b0010;
+ { 2'b00, 2'b01}: byte_enable_x = 4'b0100;
+ { 2'b00, 2'b00}: byte_enable_x = 4'b1000;
+ { 2'b11, 2'b1?}: byte_enable_x = 4'b0011;
+ { 2'b11, 2'b0?}: byte_enable_x = 4'b1100;
+ { 2'b10, 2'b??}: byte_enable_x = 4'b1111;
+ default: byte_enable_x = 4'bxxxx;
+ endcase
+end
+
+
+
+ assign iram_d_dat_o = store_data_m;
+ assign iram_d_adr_o = (iram_enable_m && store_q_m) ? load_store_address_m : load_store_address_x;
+
+ assign iram_stall_request_x = (iram_select_x == 1'b1)
+ && (store_q_x == 1'b1);
+
+
+ assign iram_d_we_o = (iram_enable_m == 1'b1) && (store_q_m == 1'b1);
+ assign iram_d_en_o = !stall_m || !stall_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ assign data_m = wb_select_m == 1'b1
+ ? wb_data_m
+ : iram_d_dat_i;
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+ casez ({size_w, load_store_address_w[1:0]})
+ { 2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
+ { 2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
+ { 2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
+ { 2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
+ { 2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
+ { 2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
+ { 2'b10, 2'b??}: load_data_w = data_w;
+ default: load_data_w = { 32{1'bx}};
+ endcase
+end
+
+
+assign d_bte_o = 2'b00;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_dat_o <= { 32{1'b0}};
+ d_adr_o <= { 32{1'b0}};
+ d_sel_o <= { 4{ 1'b0}};
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ d_lock_o <= 1'b0;
+ wb_data_m <= { 32{1'b0}};
+ wb_load_complete <= 1'b0;
+ stall_wb_load <= 1'b0;
+
+
+
+
+ end
+ else
+ begin
+
+
+
+
+
+
+ if (d_cyc_o == 1'b1)
+ begin
+
+ if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
+ begin
+
+
+
+
+
+
+
+
+
+ begin
+
+ d_cyc_o <= 1'b0;
+ d_stb_o <= 1'b0;
+ d_lock_o <= 1'b0;
+ end
+
+
+
+
+
+
+
+ wb_data_m <= d_dat_i;
+
+ wb_load_complete <= !d_we_o;
+ end
+
+ end
+ else
+ begin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if ( (store_q_m == 1'b1)
+ && (stall_m == 1'b0)
+
+
+
+
+
+
+ && (iram_enable_m == 1'b0)
+
+
+ )
+ begin
+
+ d_dat_o <= store_data_m;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b1;
+ d_cti_o <= 3'b111;
+ end
+ else if ( (load_q_m == 1'b1)
+ && (wb_select_m == 1'b1)
+ && (wb_load_complete == 1'b0)
+
+ )
+ begin
+
+ stall_wb_load <= 1'b0;
+ d_adr_o <= load_store_address_m;
+ d_cyc_o <= 1'b1;
+ d_sel_o <= byte_enable_m;
+ d_stb_o <= 1'b1;
+ d_we_o <= 1'b0;
+ d_cti_o <= 3'b111;
+ end
+ end
+
+ if (stall_m == 1'b0)
+ wb_load_complete <= 1'b0;
+
+ if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
+ stall_wb_load <= 1'b1;
+
+ if ((kill_m == 1'b1) || (exception_m == 1'b1))
+ stall_wb_load <= 1'b0;
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ sign_extend_m <= 1'b0;
+ size_m <= 2'b00;
+ byte_enable_m <= 1'b0;
+ store_data_m <= { 32{1'b0}};
+
+
+
+
+
+
+
+
+
+
+ iram_enable_m <= 1'b0;
+ iram_select_m <= 1'b0;
+
+
+ wb_select_m <= 1'b0;
+ end
+ else
+ begin
+ if (stall_m == 1'b0)
+ begin
+ sign_extend_m <= sign_extend_x;
+ size_m <= size_x;
+ byte_enable_m <= byte_enable_x;
+ store_data_m <= store_data_x;
+
+
+
+
+
+
+
+
+
+
+ iram_enable_m <= iram_select_x;
+ iram_select_m <= iram_select_x;
+
+
+ wb_select_m <= wb_select_x;
+ end
+ end
+end
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ size_w <= 2'b00;
+ data_w <= { 32{1'b0}};
+ sign_extend_w <= 1'b0;
+ end
+ else
+ begin
+ size_w <= size_m;
+
+
+
+ if(!iram_select_m || iram_en_d0)
+
+
+ data_w <= data_m;
+
+ sign_extend_w <= sign_extend_m;
+ end
+end
+
+
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_decoder_wr_node (
+
+ instruction,
+
+ d_result_sel_0,
+ d_result_sel_1,
+ x_result_sel_csr,
+
+
+ x_result_sel_mc_arith,
+
+
+
+
+
+
+
+
+ x_result_sel_sext,
+
+
+ x_result_sel_logic,
+
+
+
+
+ x_result_sel_add,
+ m_result_sel_compare,
+
+
+ m_result_sel_shift,
+
+
+ w_result_sel_load,
+
+
+ w_result_sel_mul,
+
+
+ x_bypass_enable,
+ m_bypass_enable,
+ read_enable_0,
+ read_idx_0,
+ read_enable_1,
+ read_idx_1,
+ write_enable,
+ write_idx,
+ immediate,
+ branch_offset,
+ load,
+ store,
+ size,
+ sign_extend,
+ adder_op,
+ logic_op,
+
+
+ direction,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ divide,
+ modulus,
+
+
+ branch,
+ branch_reg,
+ condition,
+ bi_conditional,
+ bi_unconditional,
+
+
+ break_opcode,
+
+
+ scall,
+ eret,
+
+
+ bret,
+
+
+
+
+
+
+ csr_write_enable
+ );
+
+
+
+
+
+input [ (32-1):0] instruction;
+
+
+
+
+
+output [ 0:0] d_result_sel_0;
+reg [ 0:0] d_result_sel_0;
+output [ 1:0] d_result_sel_1;
+reg [ 1:0] d_result_sel_1;
+output x_result_sel_csr;
+reg x_result_sel_csr;
+
+
+output x_result_sel_mc_arith;
+reg x_result_sel_mc_arith;
+
+
+
+
+
+
+
+
+
+output x_result_sel_sext;
+reg x_result_sel_sext;
+
+
+output x_result_sel_logic;
+reg x_result_sel_logic;
+
+
+
+
+
+output x_result_sel_add;
+reg x_result_sel_add;
+output m_result_sel_compare;
+reg m_result_sel_compare;
+
+
+output m_result_sel_shift;
+reg m_result_sel_shift;
+
+
+output w_result_sel_load;
+reg w_result_sel_load;
+
+
+output w_result_sel_mul;
+reg w_result_sel_mul;
+
+
+output x_bypass_enable;
+wire x_bypass_enable;
+output m_bypass_enable;
+wire m_bypass_enable;
+output read_enable_0;
+wire read_enable_0;
+output [ (5-1):0] read_idx_0;
+wire [ (5-1):0] read_idx_0;
+output read_enable_1;
+wire read_enable_1;
+output [ (5-1):0] read_idx_1;
+wire [ (5-1):0] read_idx_1;
+output write_enable;
+wire write_enable;
+output [ (5-1):0] write_idx;
+wire [ (5-1):0] write_idx;
+output [ (32-1):0] immediate;
+wire [ (32-1):0] immediate;
+output [ ((32-2)+2-1):2] branch_offset;
+wire [ ((32-2)+2-1):2] branch_offset;
+output load;
+wire load;
+output store;
+wire store;
+output [ 1:0] size;
+wire [ 1:0] size;
+output sign_extend;
+wire sign_extend;
+output adder_op;
+wire adder_op;
+output [ 3:0] logic_op;
+wire [ 3:0] logic_op;
+
+
+output direction;
+wire direction;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output divide;
+wire divide;
+output modulus;
+wire modulus;
+
+
+output branch;
+wire branch;
+output branch_reg;
+wire branch_reg;
+output [ (3-1):0] condition;
+wire [ (3-1):0] condition;
+output bi_conditional;
+wire bi_conditional;
+output bi_unconditional;
+wire bi_unconditional;
+
+
+output break_opcode;
+wire break_opcode;
+
+
+output scall;
+wire scall;
+output eret;
+wire eret;
+
+
+output bret;
+wire bret;
+
+
+
+
+
+
+
+output csr_write_enable;
+wire csr_write_enable;
+
+
+
+
+
+wire [ (32-1):0] extended_immediate;
+wire [ (32-1):0] high_immediate;
+wire [ (32-1):0] call_immediate;
+wire [ (32-1):0] branch_immediate;
+wire sign_extend_immediate;
+wire select_high_immediate;
+wire select_call_immediate;
+
+wire op_add;
+wire op_and;
+wire op_andhi;
+wire op_b;
+wire op_bi;
+wire op_be;
+wire op_bg;
+wire op_bge;
+wire op_bgeu;
+wire op_bgu;
+wire op_bne;
+wire op_call;
+wire op_calli;
+wire op_cmpe;
+wire op_cmpg;
+wire op_cmpge;
+wire op_cmpgeu;
+wire op_cmpgu;
+wire op_cmpne;
+
+
+wire op_divu;
+
+
+wire op_lb;
+wire op_lbu;
+wire op_lh;
+wire op_lhu;
+wire op_lw;
+
+
+wire op_modu;
+
+
+
+
+wire op_mul;
+
+
+wire op_nor;
+wire op_or;
+wire op_orhi;
+wire op_raise;
+wire op_rcsr;
+wire op_sb;
+
+
+wire op_sextb;
+wire op_sexth;
+
+
+wire op_sh;
+
+
+wire op_sl;
+
+
+wire op_sr;
+wire op_sru;
+wire op_sub;
+wire op_sw;
+
+
+
+
+wire op_wcsr;
+wire op_xnor;
+wire op_xor;
+
+wire arith;
+wire logical;
+wire cmp;
+wire bra;
+wire call;
+
+
+wire shift;
+
+
+
+
+
+
+
+
+wire sext;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+assign op_add = instruction[ 30:26] == 5'b01101;
+assign op_and = instruction[ 30:26] == 5'b01000;
+assign op_andhi = instruction[ 31:26] == 6'b011000;
+assign op_b = instruction[ 31:26] == 6'b110000;
+assign op_bi = instruction[ 31:26] == 6'b111000;
+assign op_be = instruction[ 31:26] == 6'b010001;
+assign op_bg = instruction[ 31:26] == 6'b010010;
+assign op_bge = instruction[ 31:26] == 6'b010011;
+assign op_bgeu = instruction[ 31:26] == 6'b010100;
+assign op_bgu = instruction[ 31:26] == 6'b010101;
+assign op_bne = instruction[ 31:26] == 6'b010111;
+assign op_call = instruction[ 31:26] == 6'b110110;
+assign op_calli = instruction[ 31:26] == 6'b111110;
+assign op_cmpe = instruction[ 30:26] == 5'b11001;
+assign op_cmpg = instruction[ 30:26] == 5'b11010;
+assign op_cmpge = instruction[ 30:26] == 5'b11011;
+assign op_cmpgeu = instruction[ 30:26] == 5'b11100;
+assign op_cmpgu = instruction[ 30:26] == 5'b11101;
+assign op_cmpne = instruction[ 30:26] == 5'b11111;
+
+
+assign op_divu = instruction[ 31:26] == 6'b100011;
+
+
+assign op_lb = instruction[ 31:26] == 6'b000100;
+assign op_lbu = instruction[ 31:26] == 6'b010000;
+assign op_lh = instruction[ 31:26] == 6'b000111;
+assign op_lhu = instruction[ 31:26] == 6'b001011;
+assign op_lw = instruction[ 31:26] == 6'b001010;
+
+
+assign op_modu = instruction[ 31:26] == 6'b110001;
+
+
+
+
+assign op_mul = instruction[ 30:26] == 5'b00010;
+
+
+assign op_nor = instruction[ 30:26] == 5'b00001;
+assign op_or = instruction[ 30:26] == 5'b01110;
+assign op_orhi = instruction[ 31:26] == 6'b011110;
+assign op_raise = instruction[ 31:26] == 6'b101011;
+assign op_rcsr = instruction[ 31:26] == 6'b100100;
+assign op_sb = instruction[ 31:26] == 6'b001100;
+
+
+assign op_sextb = instruction[ 31:26] == 6'b101100;
+assign op_sexth = instruction[ 31:26] == 6'b110111;
+
+
+assign op_sh = instruction[ 31:26] == 6'b000011;
+
+
+assign op_sl = instruction[ 30:26] == 5'b01111;
+
+
+assign op_sr = instruction[ 30:26] == 5'b00101;
+assign op_sru = instruction[ 30:26] == 5'b00000;
+assign op_sub = instruction[ 31:26] == 6'b110010;
+assign op_sw = instruction[ 31:26] == 6'b010110;
+
+
+
+
+assign op_wcsr = instruction[ 31:26] == 6'b110100;
+assign op_xnor = instruction[ 30:26] == 5'b01001;
+assign op_xor = instruction[ 30:26] == 5'b00110;
+
+
+assign arith = op_add | op_sub;
+assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
+assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
+assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
+assign bi_unconditional = op_bi;
+assign bra = op_b | bi_unconditional | bi_conditional;
+assign call = op_call | op_calli;
+
+
+assign shift = op_sl | op_sr | op_sru;
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign sext = op_sextb | op_sexth;
+
+
+
+
+
+
+
+
+assign divide = op_divu;
+assign modulus = op_modu;
+
+
+assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
+assign store = op_sb | op_sh | op_sw;
+
+
+always @(*)
+begin
+
+ if (call)
+ d_result_sel_0 = 1'b1;
+ else
+ d_result_sel_0 = 1'b0;
+ if (call)
+ d_result_sel_1 = 2'b00;
+ else if ((instruction[31] == 1'b0) && !bra)
+ d_result_sel_1 = 2'b10;
+ else
+ d_result_sel_1 = 2'b01;
+
+ x_result_sel_csr = 1'b0;
+
+
+ x_result_sel_mc_arith = 1'b0;
+
+
+
+
+
+
+
+
+ x_result_sel_sext = 1'b0;
+
+
+ x_result_sel_logic = 1'b0;
+
+
+
+
+ x_result_sel_add = 1'b0;
+ if (op_rcsr)
+ x_result_sel_csr = 1'b1;
+
+
+
+
+
+
+
+
+
+ else if (divide | modulus)
+ x_result_sel_mc_arith = 1'b1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ else if (sext)
+ x_result_sel_sext = 1'b1;
+
+
+ else if (logical)
+ x_result_sel_logic = 1'b1;
+
+
+
+
+
+ else
+ x_result_sel_add = 1'b1;
+
+
+
+ m_result_sel_compare = cmp;
+
+
+ m_result_sel_shift = shift;
+
+
+
+
+ w_result_sel_load = load;
+
+
+ w_result_sel_mul = op_mul;
+
+
+end
+
+
+assign x_bypass_enable = arith
+ | logical
+
+
+
+
+
+
+
+
+
+
+
+ | divide
+ | modulus
+
+
+
+
+
+
+
+
+ | sext
+
+
+
+
+
+
+ | op_rcsr
+ ;
+
+assign m_bypass_enable = x_bypass_enable
+
+
+ | shift
+
+
+ | cmp
+ ;
+
+assign read_enable_0 = ~(op_bi | op_calli);
+assign read_idx_0 = instruction[25:21];
+
+assign read_enable_1 = ~(op_bi | op_calli | load);
+assign read_idx_1 = instruction[20:16];
+
+assign write_enable = ~(bra | op_raise | store | op_wcsr);
+assign write_idx = call
+ ? 5'd29
+ : instruction[31] == 1'b0
+ ? instruction[20:16]
+ : instruction[15:11];
+
+
+assign size = instruction[27:26];
+
+assign sign_extend = instruction[28];
+
+assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
+
+assign logic_op = instruction[29:26];
+
+
+
+assign direction = instruction[29];
+
+
+
+assign branch = bra | call;
+assign branch_reg = op_call | op_b;
+assign condition = instruction[28:26];
+
+
+assign break_opcode = op_raise & ~instruction[2];
+
+
+assign scall = op_raise & instruction[2];
+assign eret = op_b & (instruction[25:21] == 5'd30);
+
+
+assign bret = op_b & (instruction[25:21] == 5'd31);
+
+
+
+
+
+
+
+
+assign csr_write_enable = op_wcsr;
+
+
+
+assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
+assign select_high_immediate = op_andhi | op_orhi;
+assign select_call_immediate = instruction[31];
+
+assign high_immediate = {instruction[15:0], 16'h0000};
+assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
+assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
+assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
+
+assign immediate = select_high_immediate == 1'b1
+ ? high_immediate
+ : extended_immediate;
+
+assign branch_offset = select_call_immediate == 1'b1
+ ? (call_immediate[ (32-2)-1:0])
+ : (branch_immediate[ (32-2)-1:0]);
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_debug_wr_node (
+
+ clk_i,
+ rst_i,
+ pc_x,
+ load_x,
+ store_x,
+ load_store_address_x,
+ csr_write_enable_x,
+ csr_write_data,
+ csr_x,
+
+
+
+
+
+
+
+
+
+
+ dbg_csr_write_enable_i,
+ dbg_csr_write_data_i,
+ dbg_csr_addr_i,
+
+
+
+
+
+
+
+
+ eret_q_x,
+ bret_q_x,
+ stall_x,
+ exception_x,
+ q_x,
+
+
+
+
+
+
+
+
+
+
+ dc_ss,
+
+
+ dc_re,
+ bp_match,
+ wp_match
+ );
+
+
+
+
+
+parameter breakpoints = 0;
+parameter watchpoints = 0;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [ ((32-2)+2-1):2] pc_x;
+input load_x;
+input store_x;
+input [ (32-1):0] load_store_address_x;
+input csr_write_enable_x;
+input [ (32-1):0] csr_write_data;
+input [ (5-1):0] csr_x;
+
+
+
+
+
+
+
+
+
+
+input dbg_csr_write_enable_i;
+input [ (32-1):0] dbg_csr_write_data_i;
+input [ (5-1):0] dbg_csr_addr_i;
+
+
+
+
+
+
+
+
+input eret_q_x;
+input bret_q_x;
+input stall_x;
+input exception_x;
+input q_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+output dc_ss;
+reg dc_ss;
+
+
+output dc_re;
+reg dc_re;
+output bp_match;
+wire bp_match;
+output wp_match;
+wire wp_match;
+
+
+
+
+
+genvar i;
+
+
+
+reg [ ((32-2)+2-1):2] bp_a[0:breakpoints-1];
+reg bp_e[0:breakpoints-1];
+wire [0:breakpoints-1]bp_match_n;
+
+reg [ 1:0] wpc_c[0:watchpoints-1];
+reg [ (32-1):0] wp[0:watchpoints-1];
+wire [0:watchpoints-1]wp_match_n;
+
+wire debug_csr_write_enable;
+wire [ (32-1):0] debug_csr_write_data;
+wire [ (5-1):0] debug_csr;
+
+
+
+
+reg [ 2:0] state;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_comb
+assign bp_match_n[i] = ((bp_a[i] == pc_x) && (bp_e[i] == 1'b1));
+ end
+endgenerate
+generate
+
+
+ if (breakpoints > 0)
+assign bp_match = (|bp_match_n) || (state == 3'b011);
+ else
+assign bp_match = state == 3'b011;
+
+
+
+
+
+
+
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_comb
+assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1]));
+ end
+endgenerate
+generate
+ if (watchpoints > 0)
+assign wp_match = |wp_match_n;
+ else
+assign wp_match = 1'b0;
+endgenerate
+
+
+
+
+
+
+
+
+
+
+
+
+
+assign debug_csr_write_enable = (csr_write_enable_x == 1'b1) || (dbg_csr_write_enable_i == 1'b1);
+assign debug_csr_write_data = dbg_csr_write_data_i == 1'b1 ? dbg_csr_write_data_i : csr_write_data;
+assign debug_csr = dbg_csr_write_enable_i == 1'b1 ? dbg_csr_addr_i : csr_x;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+generate
+ for (i = 0; i < breakpoints; i = i + 1)
+ begin : bp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ bp_a[i] <= { (32-2){1'bx}};
+ bp_e[i] <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i))
+ begin
+ bp_a[i] <= debug_csr_write_data[ ((32-2)+2-1):2];
+ bp_e[i] <= debug_csr_write_data[0];
+ end
+ end
+end
+ end
+endgenerate
+
+
+generate
+ for (i = 0; i < watchpoints; i = i + 1)
+ begin : wp_seq
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ wp[i] <= { 32{1'bx}};
+ wpc_c[i] <= 2'b00;
+ end
+ else
+ begin
+ if (debug_csr_write_enable == 1'b1)
+ begin
+ if (debug_csr == 5'h8)
+ wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2];
+ if (debug_csr == 5'h18 + i)
+ wp[i] <= debug_csr_write_data;
+ end
+ end
+end
+ end
+endgenerate
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ dc_re <= 1'b0;
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ dc_re <= debug_csr_write_data[1];
+ end
+end
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ state <= 3'b000;
+ dc_ss <= 1'b0;
+ end
+ else
+ begin
+ if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
+ begin
+ dc_ss <= debug_csr_write_data[0];
+ if (debug_csr_write_data[0] == 1'b0)
+ state <= 3'b000;
+ else
+ state <= 3'b001;
+ end
+ case (state)
+ 3'b001:
+ begin
+
+ if ( ( (eret_q_x == 1'b1)
+ || (bret_q_x == 1'b1)
+ )
+ && (stall_x == 1'b0)
+ )
+ state <= 3'b010;
+ end
+ 3'b010:
+ begin
+
+ if ((q_x == 1'b1) && (stall_x == 1'b0))
+ state <= 3'b011;
+ end
+ 3'b011:
+ begin
+
+
+
+
+
+
+
+ if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
+ begin
+ dc_ss <= 1'b0;
+ state <= 3'b100;
+ end
+ end
+ 3'b100:
+ begin
+
+
+
+
+
+
+
+ state <= 3'b000;
+ end
+ endcase
+ end
+end
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_instruction_unit_wr_node (
+
+ clk_i,
+ rst_i,
+
+ stall_a,
+ stall_f,
+ stall_d,
+ stall_x,
+ stall_m,
+ valid_f,
+ valid_d,
+ kill_f,
+ branch_predict_taken_d,
+ branch_predict_address_d,
+
+
+
+
+
+ exception_m,
+ branch_taken_m,
+ branch_mispredict_taken_m,
+ branch_target_m,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jtag_read_enable,
+ jtag_write_enable,
+ jtag_write_data,
+ jtag_address,
+
+
+
+
+ pc_f,
+ pc_d,
+ pc_x,
+ pc_m,
+ pc_w,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ iram_i_adr_o,
+ iram_i_dat_i,
+ iram_i_en_o,
+
+
+
+
+ jtag_read_data,
+ jtag_access_complete,
+
+
+
+
+ bus_error_d,
+
+
+
+
+ instruction_f,
+
+
+ instruction_d
+ );
+
+
+
+
+
+parameter eba_reset = 32'h00000000;
+parameter associativity = 1;
+parameter sets = 512;
+parameter bytes_per_line = 16;
+parameter base_address = 0;
+parameter limit = 0;
+
+
+localparam eba_reset_minus_4 = eba_reset - 4;
+localparam addr_offset_width = bytes_per_line == 4 ? 1 : clogb2(bytes_per_line)-1-2;
+localparam addr_offset_lsb = 2;
+localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
+
+
+
+
+
+
+output [31:0] iram_i_adr_o;
+input [31:0] iram_i_dat_i;
+ output iram_i_en_o;
+
+
+
+
+input clk_i;
+input rst_i;
+
+input stall_a;
+input stall_f;
+input stall_d;
+input stall_x;
+input stall_m;
+input valid_f;
+input valid_d;
+input kill_f;
+
+input branch_predict_taken_d;
+input [ ((32-2)+2-1):2] branch_predict_address_d;
+
+
+
+
+
+
+input exception_m;
+input branch_taken_m;
+input branch_mispredict_taken_m;
+input [ ((32-2)+2-1):2] branch_target_m;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+input jtag_read_enable;
+input jtag_write_enable;
+input [ 7:0] jtag_write_data;
+input [ (32-1):0] jtag_address;
+
+
+
+
+
+
+
+output [ ((32-2)+2-1):2] pc_f;
+reg [ ((32-2)+2-1):2] pc_f;
+output [ ((32-2)+2-1):2] pc_d;
+reg [ ((32-2)+2-1):2] pc_d;
+output [ ((32-2)+2-1):2] pc_x;
+reg [ ((32-2)+2-1):2] pc_x;
+output [ ((32-2)+2-1):2] pc_m;
+reg [ ((32-2)+2-1):2] pc_m;
+output [ ((32-2)+2-1):2] pc_w;
+reg [ ((32-2)+2-1):2] pc_w;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+output [ 7:0] jtag_read_data;
+reg [ 7:0] jtag_read_data;
+output jtag_access_complete;
+wire jtag_access_complete;
+
+
+
+
+
+output bus_error_d;
+reg bus_error_d;
+
+
+
+
+output [ (32-1):0] instruction_f;
+wire [ (32-1):0] instruction_f;
+
+
+output [ (32-1):0] instruction_d;
+reg [ (32-1):0] instruction_d;
+
+
+
+
+
+reg [ ((32-2)+2-1):2] pc_a;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+wire iram_select_a;
+ reg iram_select_f;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ wire bus_error_f = 0;
+
+
+
+
+
+reg jtag_access;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+function integer clogb2_v1;
+input [31:0] value;
+reg [31:0] i;
+reg [31:0] temp;
+begin
+ temp = 0;
+ i = 0;
+ for (i = 0; temp < value; i = i + 1)
+ temp = 1<<i;
+ clogb2_v1 = i-1;
+end
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(*)
+begin
+
+
+
+
+
+
+
+ if (branch_taken_m == 1'b1)
+ if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
+ pc_a = pc_x;
+ else
+ pc_a = branch_target_m;
+
+
+
+
+
+ else
+ if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
+ pc_a = branch_predict_address_d;
+ else
+
+
+
+
+
+
+ pc_a = pc_f + 1'b1;
+end
+
+
+
+
+ assign iram_select_a = 1'b1;
+ assign iram_i_en_o = !stall_a;
+ assign iram_i_adr_o = {pc_a, 2'b00};
+
+
+
+
+
+
+ reg [31:0] prev_instruction_f;
+ reg iram_i_en_d0;
+
+ always@(posedge clk_i)
+ if(rst_i) begin
+ iram_i_en_d0 <= 0;
+ end else begin
+ iram_i_en_d0 <= !stall_a;
+ if(iram_i_en_d0)
+ prev_instruction_f <= iram_i_dat_i;
+ end
+
+
+ assign instruction_f = (!iram_i_en_d0) ? prev_instruction_f : iram_i_dat_i;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ begin
+ pc_f <= eba_reset_minus_4[ ((32-2)+2-1):2];
+ pc_d <= { (32-2){1'b0}};
+ pc_x <= { (32-2){1'b0}};
+ pc_m <= { (32-2){1'b0}};
+ pc_w <= { (32-2){1'b0}};
+ end
+ else
+ begin
+ if (stall_f == 1'b0)
+ pc_f <= pc_a;
+ if (stall_d == 1'b0)
+ pc_d <= pc_f;
+ if (stall_x == 1'b0)
+ pc_x <= pc_d;
+ if (stall_m == 1'b0)
+ pc_m <= pc_x;
+ pc_w <= pc_m;
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+always @(posedge clk_i )
+begin
+ if (rst_i == 1'b1)
+ iram_select_f <= 1'b0;
+ else
+ begin
+ if (stall_f == 1'b0)
+ iram_select_f <= iram_select_a;
+ end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ instruction_d <= { 32{1'b0}};
+
+
+ bus_error_d <= 1'b0;
+
+
+ end
+ else
+ begin
+ if (stall_d == 1'b0)
+ begin
+ instruction_d <= instruction_f;
+
+
+ bus_error_d <= bus_error_f;
+
+
+ end
+ end
+ end
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module lm32_interrupt_wr_node (
+
+ clk_i,
+ rst_i,
+
+ interrupt,
+
+ stall_x,
+
+
+ non_debug_exception,
+ debug_exception,
+
+
+
+
+ eret_q_x,
+
+
+ bret_q_x,
+
+
+ csr,
+ csr_write_data,
+ csr_write_enable,
+
+ interrupt_exception,
+
+ csr_read_data
+ );
+
+
+
+
+
+parameter interrupts = 32;
+
+
+
+
+
+input clk_i;
+input rst_i;
+
+input [interrupts-1:0] interrupt;
+
+input stall_x;
+
+
+
+input non_debug_exception;
+input debug_exception;
+
+
+
+
+input eret_q_x;
+
+
+input bret_q_x;
+
+
+
+input [ (5-1):0] csr;
+input [ (32-1):0] csr_write_data;
+input csr_write_enable;
+
+
+
+
+
+output interrupt_exception;
+wire interrupt_exception;
+
+output [ (32-1):0] csr_read_data;
+reg [ (32-1):0] csr_read_data;
+
+
+
+
+
+wire [interrupts-1:0] asserted;
+
+wire [interrupts-1:0] interrupt_n_exception;
+
+
+
+reg ie;
+reg eie;
+
+
+reg bie;
+
+
+reg [interrupts-1:0] ip;
+reg [interrupts-1:0] im;
+
+
+
+
+
+
+assign interrupt_n_exception = ip & im;
+
+
+assign interrupt_exception = (|interrupt_n_exception) & ie;
+
+
+assign asserted = ip | interrupt;
+
+generate
+ if (interrupts > 1)
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ 5'h1: csr_read_data = im;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+ else
+ begin
+
+always @(*)
+begin
+ case (csr)
+ 5'h0: csr_read_data = {{ 32-3{1'b0}},
+
+
+ bie,
+
+
+
+
+ eie,
+ ie
+ };
+ 5'h2: csr_read_data = ip;
+ default: csr_read_data = { 32{1'bx}};
+ endcase
+end
+ end
+endgenerate
+
+
+
+
+
+
+
+ reg [ 10:0] eie_delay = 0;
+
+
+generate
+
+
+ if (interrupts > 1)
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ im <= {interrupts{1'b0}};
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h1)
+ im <= csr_write_data[interrupts-1:0];
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+else
+ begin
+
+always @(posedge clk_i )
+ begin
+ if (rst_i == 1'b1)
+ begin
+ ie <= 1'b0;
+ eie <= 1'b0;
+
+
+ bie <= 1'b0;
+
+
+ ip <= {interrupts{1'b0}};
+ eie_delay <= 0;
+ end
+ else
+ begin
+
+ ip <= asserted;
+
+
+ if (non_debug_exception == 1'b1)
+ begin
+
+ eie <= ie;
+ ie <= 1'b0;
+ end
+ else if (debug_exception == 1'b1)
+ begin
+
+ bie <= ie;
+ ie <= 1'b0;
+ end
+
+
+
+
+
+
+
+
+
+ else if (stall_x == 1'b0)
+ begin
+
+ if(eie_delay[0])
+ ie <= eie;
+
+ eie_delay <= {1'b0, eie_delay[ 10:1]};
+
+ if (eret_q_x == 1'b1) begin
+
+ eie_delay[ 10] <= 1'b1;
+ eie_delay[ 10-1:0] <= 0;
+ end
+
+
+
+ else if (bret_q_x == 1'b1)
+
+ ie <= bie;
+
+
+ else if (csr_write_enable == 1'b1)
+ begin
+
+ if (csr == 5'h0)
+ begin
+ ie <= csr_write_data[0];
+ eie <= csr_write_data[1];
+
+
+ bie <= csr_write_data[2];
+
+
+ end
+ if (csr == 5'h2)
+ ip <= asserted & ~csr_write_data[interrupts-1:0];
+ end
+ end
+ end
+end
+ end
+endgenerate
+
+endmodule
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd
new file mode 100644
index 000000000..d57c9b7ab
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/generated/xwb_lm32.vhd
@@ -0,0 +1,825 @@
+--auto-generated by gen_lmcores.py. Don't hand-edit please
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wishbone_pkg.all;
+entity xwb_lm32 is
+generic(g_profile: string;
+g_reset_vector: std_logic_vector(31 downto 0) := x"00000000";
+g_sdb_address: std_logic_vector(31 downto 0) := x"00000000");
+port(
+clk_sys_i : in std_logic;
+rst_n_i : in std_logic;
+irq_i : in std_logic_vector(31 downto 0);
+dwb_o : out t_wishbone_master_out;
+dwb_i : in t_wishbone_master_in;
+iwb_o : out t_wishbone_master_out;
+iwb_i : in t_wishbone_master_in);
+end xwb_lm32;
+architecture rtl of xwb_lm32 is
+function f_eval_i_burst_length(profile_name:string) return natural is
+begin
+if profile_name = "minimal" then return 1; end if;
+if profile_name = "medium" then return 1; end if;
+if profile_name = "medium_icache" then return 4; end if;
+if profile_name = "medium_debug" then return 4; end if;
+if profile_name = "medium_icache_debug" then return 4; end if;
+if profile_name = "full" then return 4; end if;
+if profile_name = "full_debug" then return 4; end if;
+if profile_name = "wr_node" then return 1; end if;
+return 0;
+end function;
+function f_eval_d_burst_length(profile_name:string) return natural is
+begin
+if profile_name = "minimal" then return 1; end if;
+if profile_name = "medium" then return 1; end if;
+if profile_name = "medium_icache" then return 1; end if;
+if profile_name = "medium_debug" then return 1; end if;
+if profile_name = "medium_icache_debug" then return 1; end if;
+if profile_name = "full" then return 4; end if;
+if profile_name = "full_debug" then return 4; end if;
+if profile_name = "wr_node" then return 1; end if;
+return 0;
+end function;
+component lm32_top_minimal is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_medium is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_medium_icache is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_medium_debug is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_medium_icache_debug is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_full is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_full_debug is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+component lm32_top_wr_node is
+generic ( eba_reset: std_logic_vector(31 downto 0);
+ sdb_address: std_logic_vector(31 downto 0));
+port (
+
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ interrupt : in std_logic_vector(31 downto 0);
+ I_DAT_I : in std_logic_vector(31 downto 0);
+ I_ACK_I : in std_logic;
+ I_ERR_I : in std_logic;
+ I_RTY_I : in std_logic;
+ D_DAT_I : in std_logic_vector(31 downto 0);
+ D_ACK_I : in std_logic;
+ D_ERR_I : in std_logic;
+ D_RTY_I : in std_logic;
+ I_DAT_O : out std_logic_vector(31 downto 0);
+ I_ADR_O : out std_logic_vector(31 downto 0);
+ I_CYC_O : out std_logic;
+ I_SEL_O : out std_logic_vector(3 downto 0);
+ I_STB_O : out std_logic;
+ I_WE_O : out std_logic;
+ I_CTI_O : out std_logic_vector(2 downto 0);
+ I_LOCK_O : out std_logic;
+ I_BTE_O : out std_logic_vector(1 downto 0);
+ D_DAT_O : out std_logic_vector(31 downto 0);
+ D_ADR_O : out std_logic_vector(31 downto 0);
+ D_CYC_O : out std_logic;
+ D_SEL_O : out std_logic_vector(3 downto 0);
+ D_STB_O : out std_logic;
+ D_WE_O : out std_logic;
+ D_CTI_O : out std_logic_vector(2 downto 0);
+ D_LOCK_O : out std_logic;
+ D_BTE_O : out std_logic_vector(1 downto 0));
+end component;
+
+ function pick(first : boolean;
+ a, b : t_wishbone_address)
+ return t_wishbone_address is
+ begin
+ if first then
+ return a;
+ else
+ return b;
+ end if;
+ end pick;
+
+ function b2l(val : boolean)
+ return std_logic is
+ begin
+ if val then
+ return '1';
+ else
+ return '0';
+ end if;
+ end b2l;
+
+ function strip_undefined
+ (x : std_logic_vector) return std_logic_vector is
+ variable tmp : std_logic_vector(x'left downto 0);
+ begin
+ for i in 0 to x'left loop
+ if(x(i)='1') then
+ tmp(i) := '1';
+ else
+ tmp(i) := '0';
+ end if;
+ end loop; -- i
+ return tmp;
+ end strip_undefined;
+
+ constant dcache_burst_length : natural := f_eval_d_burst_length(g_profile);
+ constant icache_burst_length : natural := f_eval_i_burst_length(g_profile);
+
+ -- Control pins from the LM32
+ signal I_ADR : t_wishbone_address;
+ signal D_ADR : t_wishbone_address;
+ signal I_CYC : std_logic;
+ signal D_CYC : std_logic;
+ signal I_CTI : t_wishbone_cycle_type;
+ signal D_CTI : t_wishbone_cycle_type;
+ -- We also watch the STALL lines from the v4 slaves
+
+ -- Registered logic:
+ signal inst_was_busy : std_logic;
+ signal data_was_busy : std_logic;
+ signal inst_addr_reg : t_wishbone_address;
+ signal data_addr_reg : t_wishbone_address;
+ signal inst_remaining : natural range 0 to icache_burst_length;
+ signal data_remaining : natural range 0 to dcache_burst_length;
+
+ -- Asynchronous logic:
+ signal I_STB_O : std_logic;
+ signal D_STB_O : std_logic;
+ signal rst:std_logic;
+begin
+ rst <= not rst_n_i;
+gen_profile_minimal: if (g_profile = "minimal") generate
+U_Wrapped_LM32: lm32_top_minimal
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_minimal;
+gen_profile_medium: if (g_profile = "medium") generate
+U_Wrapped_LM32: lm32_top_medium
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_medium;
+gen_profile_medium_icache: if (g_profile = "medium_icache") generate
+U_Wrapped_LM32: lm32_top_medium_icache
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_medium_icache;
+gen_profile_medium_debug: if (g_profile = "medium_debug") generate
+U_Wrapped_LM32: lm32_top_medium_debug
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_medium_debug;
+gen_profile_medium_icache_debug: if (g_profile = "medium_icache_debug") generate
+U_Wrapped_LM32: lm32_top_medium_icache_debug
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_medium_icache_debug;
+gen_profile_full: if (g_profile = "full") generate
+U_Wrapped_LM32: lm32_top_full
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_full;
+gen_profile_full_debug: if (g_profile = "full_debug") generate
+U_Wrapped_LM32: lm32_top_full_debug
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_full_debug;
+gen_profile_wr_node: if (g_profile = "wr_node") generate
+U_Wrapped_LM32: lm32_top_wr_node
+
+generic map (
+ eba_reset => g_reset_vector,
+ sdb_address => g_sdb_address)
+port map(
+ clk_i => clk_sys_i,
+ rst_i => rst,
+ interrupt => irq_i,
+ -- Pass slave responses through unmodified
+ I_DAT_I => strip_undefined(iwb_i.DAT),
+ I_ACK_I => iwb_i.ACK,
+ I_ERR_I => iwb_i.ERR,
+ I_RTY_I => iwb_i.RTY,
+ D_DAT_I => strip_undefined(dwb_i.DAT),
+ D_ACK_I => dwb_i.ACK,
+ D_ERR_I => dwb_i.ERR,
+ D_RTY_I => dwb_i.RTY,
+ -- Writes can only happen as a single cycle
+ I_DAT_O => iwb_o.DAT,
+ D_DAT_O => dwb_o.DAT,
+ I_WE_O => iwb_o.WE,
+ D_WE_O => dwb_o.WE,
+ -- SEL /= 1111 only for single cycles
+ I_SEL_O => iwb_o.SEL,
+ D_SEL_O => dwb_o.SEL,
+ -- We can ignore BTE as we know it's always linear burst mode
+ I_BTE_O => open,
+ D_BTE_O => open,
+ -- Lock is never flagged by LM32. Besides, WBv4 locks intercon on CYC.
+ I_LOCK_O => open,
+ D_LOCK_O => open,
+ -- The LM32 has STB=CYC always
+ I_STB_O => open,
+ D_STB_O => open,
+ -- We monitor these pins to direct the adapter's logic
+ I_ADR_O => I_ADR,
+ I_CYC_O => I_CYC,
+ I_CTI_O => I_CTI,
+ D_ADR_O => D_ADR,
+ D_CYC_O => D_CYC,
+ D_CTI_O => D_CTI);
+end generate gen_profile_wr_node;
+
+ -- Cycle durations always match in our adapter
+ iwb_o.CYC <= I_CYC;
+ dwb_o.CYC <= D_CYC;
+
+ iwb_o.STB <= I_STB_O;
+ dwb_o.STB <= D_STB_O;
+
+ I_STB_O <= (I_CYC and not inst_was_busy) or b2l(inst_remaining /= 0);
+ inst : process(clk_sys_i)
+ variable inst_addr : t_wishbone_address;
+ variable inst_length : natural;
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst = '1' then
+ inst_was_busy <= '0';
+ inst_remaining <= 0;
+ inst_addr_reg <= (others => '0');
+ else
+ inst_was_busy <= I_CYC;
+
+ -- Is this the start of a new WB cycle?
+ if I_CYC = '1' and inst_was_busy = '0' then
+ inst_addr := I_ADR;
+ if I_CTI = "010" then
+ inst_length := icache_burst_length;
+ else
+ inst_length := 1;
+ end if;
+ else
+ inst_addr := inst_addr_reg;
+ inst_length := inst_remaining;
+ end if;
+
+ -- When stalled, we cannot advance the address
+ if iwb_i.STALL = '0' and I_STB_O = '1' then
+ inst_addr_reg <= std_logic_vector(unsigned(inst_addr) + 4);
+ inst_remaining <= inst_length - 1;
+ else
+ inst_addr_reg <= inst_addr;
+ inst_remaining <= inst_length;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ D_STB_O <= (D_CYC and not data_was_busy) or b2l(data_remaining /= 0);
+ data : process(clk_sys_i)
+ variable data_addr : t_wishbone_address;
+ variable data_length : natural;
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst = '1' then
+ data_was_busy <= '0';
+ data_remaining <= 0;
+ data_addr_reg <= (others => '0');
+ else
+ data_was_busy <= D_CYC;
+
+ -- Is this the start of a new WB cycle?
+ if D_CYC = '1' and data_was_busy = '0' then
+ data_addr := D_ADR;
+ if D_CTI = "010" then
+ data_length := dcache_burst_length;
+ else
+ data_length := 1;
+ end if;
+ else
+ data_addr := data_addr_reg;
+ data_length := data_remaining;
+ end if;
+
+ -- When stalled, we cannot advance the address
+ if dwb_i.STALL = '0' and D_STB_O = '1' then
+ data_addr_reg <= std_logic_vector(unsigned(data_addr) + 4);
+ data_remaining <= data_length - 1;
+ else
+ data_addr_reg <= data_addr;
+ data_remaining <= data_length;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- The first request uses the WBv3 address, thereafter an incrementing one.
+ dwb_o.ADR <= pick(data_was_busy = '0', D_ADR, data_addr_reg);
+ iwb_o.ADR <= pick(inst_was_busy = '0', I_ADR, inst_addr_reg);
+ end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v
new file mode 100644
index 000000000..1821c3f6d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/jtag_tap.v
@@ -0,0 +1,20 @@
+module jtag_tap(
+ output tck,
+ output tdi,
+ input tdo,
+ output capture,
+ output shift,
+ output e1dr,
+ output update,
+ output reset
+);
+
+ assign tck = 1;
+ assign tdi = 1;
+ assign capture = 0;
+ assign shift = 0;
+ assign e1dr = 0;
+ assign update = 0;
+ assign reset = 0;
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v
new file mode 100644
index 000000000..ea3e0cb0d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/platform/generic/lm32_multiplier.v
@@ -0,0 +1,119 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// =============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_multiplier.v
+// Title : Pipelined multiplier.
+// Dependencies : lm32_include.v
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// =============================================================================
+
+`include "../../src/lm32_include.v"
+
+/////////////////////////////////////////////////////
+// Module interface
+/////////////////////////////////////////////////////
+
+module lm32_multiplier (
+ // ----- Inputs -----
+ clk_i,
+ rst_i,
+ stall_x,
+ stall_m,
+ operand_0,
+ operand_1,
+ // ----- Ouputs -----
+ result
+ );
+
+/////////////////////////////////////////////////////
+// Inputs
+/////////////////////////////////////////////////////
+
+input clk_i; // Clock
+input rst_i; // Reset
+input stall_x; // Stall instruction in X stage
+input stall_m; // Stall instruction in M stage
+input [`LM32_WORD_RNG] operand_0; // Muliplicand
+input [`LM32_WORD_RNG] operand_1; // Multiplier
+
+/////////////////////////////////////////////////////
+// Outputs
+/////////////////////////////////////////////////////
+
+output [`LM32_WORD_RNG] result; // Product of multiplication
+wire [`LM32_WORD_RNG] result;
+
+/////////////////////////////////////////////////////
+// Internal nets and registers
+/////////////////////////////////////////////////////
+
+// Divide multiplicands into high and low
+`define HALF_WORD_WIDTH (`LM32_WORD_WIDTH/2)
+`define HALF_WORD_RNG (`HALF_WORD_WIDTH-1):0
+
+// Result = c+d+e = a*b
+reg [`HALF_WORD_RNG] a0, a1, b0, b1;
+reg [`HALF_WORD_RNG] c0, c1;
+reg [`HALF_WORD_RNG] d1, e1;
+reg [`HALF_WORD_RNG] result0, result1;
+
+assign result = {result1, result0};
+
+/////////////////////////////////////////////////////
+// Sequential logic
+/////////////////////////////////////////////////////
+
+always @(posedge clk_i `CFG_RESET_SENSITIVITY)
+begin
+ if (rst_i == `TRUE)
+ begin
+ a0 <= {`HALF_WORD_WIDTH{1'b0}};
+ a1 <= {`HALF_WORD_WIDTH{1'b0}};
+ b0 <= {`HALF_WORD_WIDTH{1'b0}};
+ b1 <= {`HALF_WORD_WIDTH{1'b0}};
+ c0 <= {`HALF_WORD_WIDTH{1'b0}};
+ c1 <= {`HALF_WORD_WIDTH{1'b0}};
+ d1 <= {`HALF_WORD_WIDTH{1'b0}};
+ e1 <= {`HALF_WORD_WIDTH{1'b0}};
+ result0 <= {`HALF_WORD_WIDTH{1'b0}};
+ result1 <= {`HALF_WORD_WIDTH{1'b0}};
+ end
+ else
+ begin
+ if (stall_x == `FALSE)
+ begin
+ {a1, a0} <= operand_0;
+ {b1, b0} <= operand_1;
+ end
+ if (stall_m == `FALSE)
+ begin
+ {c1, c0} <= a0 * b0;
+ d1 <= a0 * b1;
+ e1 <= a1 * b0;
+ end
+
+ result0 <= c0;
+ result1 <= c1 + d1 + e1;
+ end
+end
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v
new file mode 100644
index 000000000..78dbf0293
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/jtag_cores.v
@@ -0,0 +1,66 @@
+// Modified by GSI to use simple positive edge clocking and the JTAG capture state
+
+module jtag_cores (
+ input [7:0] reg_d,
+ input [2:0] reg_addr_d,
+ output reg_update,
+ output [7:0] reg_q,
+ output [2:0] reg_addr_q,
+ output jtck,
+ output jrstn
+);
+
+wire tck;
+wire tdi;
+wire tdo;
+wire capture;
+wire shift;
+wire update;
+wire e1dr;
+wire reset;
+
+jtag_tap jtag_tap (
+ .tck(tck),
+ .tdi(tdi),
+ .tdo(tdo),
+ .capture(capture),
+ .shift(shift),
+ .e1dr(e1dr),
+ .update(update),
+ .reset(reset)
+);
+
+reg [10:0] jtag_shift;
+reg [10:0] jtag_latched;
+
+always @(posedge tck)
+begin
+ if(reset)
+ jtag_shift <= 11'b0;
+ else begin
+ if (shift)
+ jtag_shift <= {tdi, jtag_shift[10:1]};
+ else if (capture)
+ jtag_shift <= {reg_d, reg_addr_d};
+ end
+end
+
+assign tdo = jtag_shift[0];
+
+always @(posedge tck)
+begin
+ if(reset)
+ jtag_latched <= 11'b0;
+ else begin
+ if (e1dr)
+ jtag_latched <= jtag_shift;
+ end
+end
+
+assign reg_update = update;
+assign reg_q = jtag_latched[10:3];
+assign reg_addr_q = jtag_latched[2:0];
+assign jtck = tck;
+assign jrstn = ~reset;
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v
new file mode 100644
index 000000000..b0d2d79ce
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_adder.v
@@ -0,0 +1,115 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// ============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_adder.v
+// Title : Integer adder / subtractor with comparison flag generation
+// Dependencies : lm32_include.v
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// =============================================================================
+
+`include "lm32_include.v"
+
+/////////////////////////////////////////////////////
+// Module interface
+/////////////////////////////////////////////////////
+
+module lm32_adder (
+ // ----- Inputs -------
+ adder_op_x,
+ adder_op_x_n,
+ operand_0_x,
+ operand_1_x,
+ // ----- Outputs -------
+ adder_result_x,
+ adder_carry_n_x,
+ adder_overflow_x
+ );
+
+/////////////////////////////////////////////////////
+// Inputs
+/////////////////////////////////////////////////////
+
+input adder_op_x; // Operating to perform, 0 for addition, 1 for subtraction
+input adder_op_x_n; // Inverted version of adder_op_x
+input [`LM32_WORD_RNG] operand_0_x; // Operand to add, or subtract from
+input [`LM32_WORD_RNG] operand_1_x; // Opearnd to add, or subtract by
+
+/////////////////////////////////////////////////////
+// Outputs
+/////////////////////////////////////////////////////
+
+output [`LM32_WORD_RNG] adder_result_x; // Result of addition or subtraction
+wire [`LM32_WORD_RNG] adder_result_x;
+output adder_carry_n_x; // Inverted carry
+wire adder_carry_n_x;
+output adder_overflow_x; // Indicates if overflow occured, only valid for subtractions
+reg adder_overflow_x;
+
+/////////////////////////////////////////////////////
+// Internal nets and registers
+/////////////////////////////////////////////////////
+
+wire a_sign; // Sign (i.e. positive or negative) of operand 0
+wire b_sign; // Sign of operand 1
+wire result_sign; // Sign of result
+
+/////////////////////////////////////////////////////
+// Instantiations
+/////////////////////////////////////////////////////
+
+lm32_addsub addsub (
+ // ----- Inputs -----
+ .DataA (operand_0_x),
+ .DataB (operand_1_x),
+ .Cin (adder_op_x),
+ .Add_Sub (adder_op_x_n),
+ // ----- Ouputs -----
+ .Result (adder_result_x),
+ .Cout (adder_carry_n_x)
+ );
+
+/////////////////////////////////////////////////////
+// Combinational Logic
+/////////////////////////////////////////////////////
+
+// Extract signs of operands and result
+
+assign a_sign = operand_0_x[`LM32_WORD_WIDTH-1];
+assign b_sign = operand_1_x[`LM32_WORD_WIDTH-1];
+assign result_sign = adder_result_x[`LM32_WORD_WIDTH-1];
+
+// Determine whether an overflow occured when performing a subtraction
+
+always @(*)
+begin
+ // +ve - -ve = -ve -> overflow
+ // -ve - +ve = +ve -> overflow
+ if ( (!a_sign & b_sign & result_sign)
+ || (a_sign & !b_sign & !result_sign)
+ )
+ adder_overflow_x = `TRUE;
+ else
+ adder_overflow_x = `FALSE;
+end
+
+endmodule
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v
new file mode 100644
index 000000000..8861cbe2d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_addsub.v
@@ -0,0 +1,74 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// =============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_addsub.v
+// Title : PMI adder/subtractor.
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// =============================================================================
+
+`include "lm32_include.v"
+
+/////////////////////////////////////////////////////
+// Module interface
+/////////////////////////////////////////////////////
+
+module lm32_addsub (
+ // ----- Inputs -------
+ DataA,
+ DataB,
+ Cin,
+ Add_Sub,
+ // ----- Outputs -------
+ Result,
+ Cout
+ );
+
+/////////////////////////////////////////////////////
+// Inputs
+/////////////////////////////////////////////////////
+
+input [31:0] DataA;
+input [31:0] DataB;
+input Cin;
+input Add_Sub;
+
+/////////////////////////////////////////////////////
+// Outputs
+/////////////////////////////////////////////////////
+
+output [31:0] Result;
+wire [31:0] Result;
+output Cout;
+wire Cout;
+
+/////////////////////////////////////////////////////
+// Instantiations
+/////////////////////////////////////////////////////
+
+// Modified for Milkymist: removed non-portable instantiated block
+ wire [32:0] tmp_addResult = DataA + DataB + Cin;
+ wire [32:0] tmp_subResult = DataA - DataB - !Cin;
+
+ assign Result = (Add_Sub == 1) ? tmp_addResult[31:0] : tmp_subResult[31:0];
+ assign Cout = (Add_Sub == 1) ? tmp_addResult[32] : !tmp_subResult[32];
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd
new file mode 100644
index 000000000..7f416bb95
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_dp_ram.vhd
@@ -0,0 +1,46 @@
+-- Work-alike to lm32_dp_ram.v, but using generic_simple_dpram
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.genram_pkg.all;
+
+entity lm32_dp_ram is
+ generic(
+ addr_width : natural := 32;
+ addr_depth : natural := 1024;
+ data_width : natural := 8);
+ port(
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+ we_i : in std_logic;
+ waddr_i : in std_logic_vector(addr_width-1 downto 0);
+ wdata_i : in std_logic_vector(data_width-1 downto 0);
+ raddr_i : in std_logic_vector(addr_width-1 downto 0);
+ rdata_o : out std_logic_vector(data_width-1 downto 0));
+end lm32_dp_ram;
+
+architecture syn of lm32_dp_ram is
+
+ constant c_addr_width : natural := f_log2_size(addr_depth);
+
+begin
+
+ ram : generic_simple_dpram
+ generic map(
+ g_data_width => data_width,
+ g_size => addr_depth,
+ g_with_byte_enable => false,
+ g_addr_conflict_resolution => "write_first",
+ g_dual_clock => false)
+ port map(
+ clka_i => clk_i,
+ wea_i => we_i,
+ aa_i => waddr_i(c_addr_width-1 downto 0),
+ da_i => wdata_i,
+ clkb_i => clk_i,
+ ab_i => raddr_i(c_addr_width-1 downto 0),
+ qb_o => rdata_o);
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v
new file mode 100644
index 000000000..5adff9d86
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_include.v
@@ -0,0 +1,320 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// =============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_include.v
+// Title : CPU global macros
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// Version : 3.2
+// : No Change
+// Version : 3.3
+// : Support for extended configuration register
+// =============================================================================
+
+`ifdef LM32_INCLUDE_V
+`else
+`define LM32_INCLUDE_V
+
+// Configuration options
+//`include "system_conf.v"
+
+`ifdef TRUE
+`else
+`define TRUE 1'b1
+`define FALSE 1'b0
+`define TRUE_N 1'b0
+`define FALSE_N 1'b1
+`endif
+
+// Wishbone configuration
+`ifndef CFG_IRAM_ENABLED
+`define CFG_IWB_ENABLED
+`endif
+
+`define CFG_DWB_ENABLED
+
+// Data-path width
+`define LM32_WORD_WIDTH 32
+`define LM32_WORD_RNG (`LM32_WORD_WIDTH-1):0
+`define LM32_SHIFT_WIDTH 5
+`define LM32_SHIFT_RNG (`LM32_SHIFT_WIDTH-1):0
+`define LM32_BYTE_SELECT_WIDTH 4
+`define LM32_BYTE_SELECT_RNG (`LM32_BYTE_SELECT_WIDTH-1):0
+
+// Register file size
+`define LM32_REGISTERS 32
+`define LM32_REG_IDX_WIDTH 5
+`define LM32_REG_IDX_RNG (`LM32_REG_IDX_WIDTH-1):0
+
+// Standard register numbers
+`define LM32_RA_REG `LM32_REG_IDX_WIDTH'd29
+`define LM32_EA_REG `LM32_REG_IDX_WIDTH'd30
+`define LM32_BA_REG `LM32_REG_IDX_WIDTH'd31
+
+// Range of Program Counter. Two LSBs are always 0.
+`ifdef CFG_ICACHE_ENABLED
+`define LM32_PC_WIDTH (clogb2(`CFG_ICACHE_LIMIT-`CFG_ICACHE_BASE_ADDRESS)-2)
+`else
+`ifdef CFG_IWB_ENABLED
+`define LM32_PC_WIDTH (`LM32_WORD_WIDTH-2)
+`else
+`define LM32_IRAM_ADDRESS_WIDTH 32
+`define LM32_PC_WIDTH (`LM32_IRAM_ADDRESS_WIDTH-2)
+`endif
+`endif
+`define LM32_PC_RNG (`LM32_PC_WIDTH+2-1):2
+
+// Range of an instruction
+`define LM32_INSTRUCTION_WIDTH 32
+`define LM32_INSTRUCTION_RNG (`LM32_INSTRUCTION_WIDTH-1):0
+
+// Adder operation
+`define LM32_ADDER_OP_ADD 1'b0
+`define LM32_ADDER_OP_SUBTRACT 1'b1
+
+// Shift direction
+`define LM32_SHIFT_OP_RIGHT 1'b0
+`define LM32_SHIFT_OP_LEFT 1'b1
+
+// Derive macro that indicates whether we have single-stepping or not
+`ifdef CFG_ROM_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`else
+`ifdef CFG_HW_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`endif
+`endif
+
+// Derive macro that indicates whether JTAG interface is required
+`ifdef CFG_JTAG_UART_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`endif
+`endif
+
+// Derive macro that indicates whether we have a barrel-shifter or not
+`ifdef CFG_PL_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else // CFG_PL_BARREL_SHIFT_ENABLED
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else
+`define LM32_NO_BARREL_SHIFT
+`endif
+`endif // CFG_PL_BARREL_SHIFT_ENABLED
+
+// Derive macro that indicates whether we have a multiplier or not
+`ifdef CFG_PL_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`else
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`endif
+`endif
+
+// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
+`ifdef CFG_MC_DIVIDE_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+
+// Derive macro that indicates if we are using an EBR register file
+`ifdef CFG_EBR_POSEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+`ifdef CFG_EBR_NEGEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+
+// Revision number
+`define LM32_REVISION 6'h02
+
+// Logical operations - Function encoded directly in instruction
+`define LM32_LOGIC_OP_RNG 3:0
+
+// Conditions for conditional branches
+`define LM32_CONDITION_WIDTH 3
+`define LM32_CONDITION_RNG (`LM32_CONDITION_WIDTH-1):0
+`define LM32_CONDITION_E 3'b001
+`define LM32_CONDITION_G 3'b010
+`define LM32_CONDITION_GE 3'b011
+`define LM32_CONDITION_GEU 3'b100
+`define LM32_CONDITION_GU 3'b101
+`define LM32_CONDITION_NE 3'b111
+`define LM32_CONDITION_U1 3'b000
+`define LM32_CONDITION_U2 3'b110
+
+// Size of load or store instruction - Encoding corresponds to opcode
+`define LM32_SIZE_WIDTH 2
+`define LM32_SIZE_RNG 1:0
+`define LM32_SIZE_BYTE 2'b00
+`define LM32_SIZE_HWORD 2'b11
+`define LM32_SIZE_WORD 2'b10
+`define LM32_ADDRESS_LSBS_WIDTH 2
+
+// Width and range of a CSR index
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_WIDTH 5
+`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0
+`else
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_WIDTH 4
+`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0
+`else
+`define LM32_CSR_WIDTH 4 // CFG2 is "a"
+`define LM32_CSR_RNG (`LM32_CSR_WIDTH-1):0
+`endif
+`endif
+
+// CSR indices
+`define LM32_CSR_IE `LM32_CSR_WIDTH'h0
+`define LM32_CSR_IM `LM32_CSR_WIDTH'h1
+`define LM32_CSR_IP `LM32_CSR_WIDTH'h2
+`define LM32_CSR_ICC `LM32_CSR_WIDTH'h3
+`define LM32_CSR_DCC `LM32_CSR_WIDTH'h4
+`define LM32_CSR_CC `LM32_CSR_WIDTH'h5
+`define LM32_CSR_CFG `LM32_CSR_WIDTH'h6
+`define LM32_CSR_EBA `LM32_CSR_WIDTH'h7
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_DC `LM32_CSR_WIDTH'h8
+`define LM32_CSR_DEBA `LM32_CSR_WIDTH'h9
+`endif
+`define LM32_CSR_CFG2 `LM32_CSR_WIDTH'ha
+`define LM32_CSR_SDB `LM32_CSR_WIDTH'hb
+`define LM32_CSR_ERR_ADDR `LM32_CSR_WIDTH'hc
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_JTX `LM32_CSR_WIDTH'he
+`define LM32_CSR_JRX `LM32_CSR_WIDTH'hf
+`endif
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_BP0 `LM32_CSR_WIDTH'h10
+`define LM32_CSR_BP1 `LM32_CSR_WIDTH'h11
+`define LM32_CSR_BP2 `LM32_CSR_WIDTH'h12
+`define LM32_CSR_BP3 `LM32_CSR_WIDTH'h13
+`define LM32_CSR_WP0 `LM32_CSR_WIDTH'h18
+`define LM32_CSR_WP1 `LM32_CSR_WIDTH'h19
+`define LM32_CSR_WP2 `LM32_CSR_WIDTH'h1a
+`define LM32_CSR_WP3 `LM32_CSR_WIDTH'h1b
+`endif
+
+// Values for WPC CSR
+`define LM32_WPC_C_RNG 1:0
+`define LM32_WPC_C_DISABLED 2'b00
+`define LM32_WPC_C_READ 2'b01
+`define LM32_WPC_C_WRITE 2'b10
+`define LM32_WPC_C_READ_WRITE 2'b11
+
+// Exception IDs
+`define LM32_EID_WIDTH 3
+`define LM32_EID_RNG (`LM32_EID_WIDTH-1):0
+`define LM32_EID_RESET 3'h0
+`define LM32_EID_BREAKPOINT 3'd1
+`define LM32_EID_INST_BUS_ERROR 3'h2
+`define LM32_EID_WATCHPOINT 3'd3
+`define LM32_EID_DATA_BUS_ERROR 3'h4
+`define LM32_EID_DIVIDE_BY_ZERO 3'h5
+`define LM32_EID_INTERRUPT 3'h6
+`define LM32_EID_SCALL 3'h7
+
+// Pipeline result selection mux controls
+
+`define LM32_D_RESULT_SEL_0_RNG 0:0
+`define LM32_D_RESULT_SEL_0_REG_0 1'b0
+`define LM32_D_RESULT_SEL_0_NEXT_PC 1'b1
+
+`define LM32_D_RESULT_SEL_1_RNG 1:0
+`define LM32_D_RESULT_SEL_1_ZERO 2'b00
+`define LM32_D_RESULT_SEL_1_REG_1 2'b01
+`define LM32_D_RESULT_SEL_1_IMMEDIATE 2'b10
+
+`define LM32_USER_OPCODE_WIDTH 11
+`define LM32_USER_OPCODE_RNG (`LM32_USER_OPCODE_WIDTH-1):0
+
+// Derive a macro to indicate if either of the caches are implemented
+`ifdef CFG_ICACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`else
+`ifdef CFG_DCACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`endif
+`endif
+
+/////////////////////////////////////////////////////
+// Interrupts
+/////////////////////////////////////////////////////
+
+// Currently this is fixed to 32 and should not be changed
+`define CFG_INTERRUPTS 32
+`define LM32_INTERRUPT_WIDTH `CFG_INTERRUPTS
+`define LM32_INTERRUPT_RNG (`LM32_INTERRUPT_WIDTH-1):0
+
+/////////////////////////////////////////////////////
+// General
+/////////////////////////////////////////////////////
+
+// Sub-word range types
+`define LM32_BYTE_WIDTH 8
+`define LM32_BYTE_RNG 7:0
+`define LM32_HWORD_WIDTH 16
+`define LM32_HWORD_RNG 15:0
+
+// Word sub-byte indicies
+`define LM32_BYTE_0_RNG 7:0
+`define LM32_BYTE_1_RNG 15:8
+`define LM32_BYTE_2_RNG 23:16
+`define LM32_BYTE_3_RNG 31:24
+
+// Word sub-halfword indices
+`define LM32_HWORD_0_RNG 15:0
+`define LM32_HWORD_1_RNG 31:16
+
+// Use a synchronous reset
+`define CFG_RESET_SENSITIVITY
+
+// Wishbone defines
+// Refer to Wishbone System-on-Chip Interconnection Architecture
+// These should probably be moved to a Wishbone common file
+
+// Wishbone cycle types
+`define LM32_CTYPE_WIDTH 3
+`define LM32_CTYPE_RNG (`LM32_CTYPE_WIDTH-1):0
+`define LM32_CTYPE_CLASSIC 3'b000
+`define LM32_CTYPE_CONSTANT 3'b001
+`define LM32_CTYPE_INCREMENTING 3'b010
+`define LM32_CTYPE_END 3'b111
+
+// Wishbone burst types
+`define LM32_BTYPE_WIDTH 2
+`define LM32_BTYPE_RNG (`LM32_BTYPE_WIDTH-1):0
+`define LM32_BTYPE_LINEAR 2'b00
+`define LM32_BTYPE_4_BEAT 2'b01
+`define LM32_BTYPE_8_BEAT 2'b10
+`define LM32_BTYPE_16_BEAT 2'b11
+
+`endif
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v
new file mode 100644
index 000000000..af1b752be
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_logic_op.v
@@ -0,0 +1,76 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// =============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_logic_op.v
+// Title : Logic operations (and / or / not etc)
+// Dependencies : lm32_include.v
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// =============================================================================
+
+`include "lm32_include.v"
+
+/////////////////////////////////////////////////////
+// Module interface
+/////////////////////////////////////////////////////
+
+module lm32_logic_op (
+ // ----- Inputs -------
+ logic_op_x,
+ operand_0_x,
+ operand_1_x,
+ // ----- Outputs -------
+ logic_result_x
+ );
+
+/////////////////////////////////////////////////////
+// Inputs
+/////////////////////////////////////////////////////
+
+input [`LM32_LOGIC_OP_RNG] logic_op_x;
+input [`LM32_WORD_RNG] operand_0_x;
+input [`LM32_WORD_RNG] operand_1_x;
+
+/////////////////////////////////////////////////////
+// Outputs
+/////////////////////////////////////////////////////
+
+output [`LM32_WORD_RNG] logic_result_x;
+reg [`LM32_WORD_RNG] logic_result_x;
+
+/////////////////////////////////////////////////////
+// Internal nets and registers
+/////////////////////////////////////////////////////
+
+integer logic_idx;
+
+/////////////////////////////////////////////////////
+// Combinational Logic
+/////////////////////////////////////////////////////
+
+always @(*)
+begin
+ for(logic_idx = 0; logic_idx < `LM32_WORD_WIDTH; logic_idx = logic_idx + 1)
+ logic_result_x[logic_idx] = logic_op_x[{operand_1_x[logic_idx], operand_0_x[logic_idx]}];
+end
+
+endmodule
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd
new file mode 100644
index 000000000..e39dbb999
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_ram.vhd
@@ -0,0 +1,66 @@
+-- Work-alike to lm32_ram.v, but using generic_simple_dpram
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.genram_pkg.all;
+
+entity lm32_ram is
+ generic(
+ data_width : natural := 1;
+ address_width : natural := 1);
+ port(
+ read_clk : in std_logic;
+ write_clk : in std_logic;
+ reset : in std_logic;
+ enable_read : in std_logic;
+ read_address : in std_logic_vector(address_width-1 downto 0);
+ enable_write : in std_logic;
+ write_address : in std_logic_vector(address_width-1 downto 0);
+ write_data : in std_logic_vector(data_width -1 downto 0);
+ write_enable : in std_logic;
+ read_data : out std_logic_vector(data_width -1 downto 0));
+end lm32_ram;
+
+architecture syn of lm32_ram is
+
+ signal wea : std_logic;
+ signal reb : std_logic;
+
+ -- Emulate read-enable using another bypass
+ signal old_data : std_logic_vector(data_width-1 downto 0);
+ signal new_data : std_logic_vector(data_width-1 downto 0);
+ signal data : std_logic_vector(data_width-1 downto 0);
+
+begin
+
+ wea <= enable_write and write_enable;
+ ram : generic_simple_dpram
+ generic map(
+ g_data_width => data_width,
+ g_size => 2**address_width,
+ g_with_byte_enable => false,
+ g_addr_conflict_resolution => "write_first",
+ g_dual_clock => false) -- read_clk always = write_clk in LM32
+ port map(
+ clka_i => read_clk,
+ wea_i => wea,
+ aa_i => write_address,
+ da_i => write_data,
+ clkb_i => write_clk,
+ ab_i => read_address,
+ qb_o => new_data);
+
+ data <= old_data when reb='0' else new_data;
+ read_data <= data;
+
+ main : process(read_clk) is
+ begin
+ if rising_edge(read_clk) then
+ old_data <= data;
+ reb <= enable_read;
+ end if;
+ end process;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v
new file mode 100644
index 000000000..a9f0892b9
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_lm32/src/lm32_shifter.v
@@ -0,0 +1,138 @@
+// =============================================================================
+// COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court 408-826-6000 (other locations)
+// Hillsboro, OR 97124 web : http://www.latticesemi.com/
+// U.S.A email: techsupport@latticesemi.com
+// =============================================================================/
+// FILE DETAILS
+// Project : LatticeMico32
+// File : lm32_shifter.v
+// Title : Barrel shifter
+// Dependencies : lm32_include.v
+// Version : 6.1.17
+// : Initial Release
+// Version : 7.0SP2, 3.0
+// : No Change
+// Version : 3.1
+// : No Change
+// =============================================================================
+
+`include "lm32_include.v"
+
+/////////////////////////////////////////////////////
+// Module interface
+/////////////////////////////////////////////////////
+
+module lm32_shifter (
+ // ----- Inputs -------
+ clk_i,
+ rst_i,
+ stall_x,
+ direction_x,
+ sign_extend_x,
+ operand_0_x,
+ operand_1_x,
+ // ----- Outputs -------
+ shifter_result_m
+ );
+
+/////////////////////////////////////////////////////
+// Inputs
+/////////////////////////////////////////////////////
+
+input clk_i; // Clock
+input rst_i; // Reset
+input stall_x; // Stall instruction in X stage
+input direction_x; // Direction to shift
+input sign_extend_x; // Whether shift is arithmetic (1'b1) or logical (1'b0)
+input [`LM32_WORD_RNG] operand_0_x; // Operand to shift
+input [`LM32_WORD_RNG] operand_1_x; // Operand that specifies how many bits to shift by
+
+/////////////////////////////////////////////////////
+// Outputs
+/////////////////////////////////////////////////////
+
+output [`LM32_WORD_RNG] shifter_result_m; // Result of shift
+wire [`LM32_WORD_RNG] shifter_result_m;
+
+/////////////////////////////////////////////////////
+// Internal nets and registers
+/////////////////////////////////////////////////////
+
+reg direction_m;
+wire [`LM32_WORD_WIDTH*2-1:0] right_shift_result_x;
+reg [`LM32_WORD_RNG] left_shift_result;
+reg [`LM32_WORD_RNG] right_shift_result_m;
+reg [`LM32_WORD_RNG] left_shift_operand;
+wire [`LM32_WORD_RNG] right_shift_operand;
+wire fill_value;
+wire [`LM32_WORD_RNG] right_shift_in;
+
+integer shift_idx_0;
+integer shift_idx_1;
+
+/////////////////////////////////////////////////////
+// Combinational Logic
+/////////////////////////////////////////////////////
+
+// Select operands - To perform a left shift, we reverse the bits and perform a right shift
+always @(*)
+begin
+ for (shift_idx_0 = 0; shift_idx_0 < `LM32_WORD_WIDTH; shift_idx_0 = shift_idx_0 + 1)
+ left_shift_operand[`LM32_WORD_WIDTH-1-shift_idx_0] = operand_0_x[shift_idx_0];
+end
+assign right_shift_operand = direction_x == `LM32_SHIFT_OP_LEFT ? left_shift_operand : operand_0_x;
+
+// Determine fill value for right shift - Sign bit for arithmetic shift, or zero for logical shift
+assign fill_value = (sign_extend_x == `TRUE) && (direction_x == `LM32_SHIFT_OP_RIGHT)
+ ? operand_0_x[`LM32_WORD_WIDTH-1]
+ : 1'b0;
+
+// Determine bits to shift in for right shift or rotate
+assign right_shift_in = {`LM32_WORD_WIDTH{fill_value}};
+
+// Determine the result of the shifter
+assign right_shift_result_x = {right_shift_in, right_shift_operand} >> operand_1_x[`LM32_SHIFT_RNG];
+
+// Reverse bits to get left shift result
+always @(*)
+begin
+ for (shift_idx_1 = 0; shift_idx_1 < `LM32_WORD_WIDTH; shift_idx_1 = shift_idx_1 + 1)
+ left_shift_result[`LM32_WORD_WIDTH-1-shift_idx_1] = right_shift_result_m[shift_idx_1];
+end
+
+// Select result
+assign shifter_result_m = direction_m == `LM32_SHIFT_OP_LEFT ? left_shift_result : right_shift_result_m;
+
+/////////////////////////////////////////////////////
+// Sequential Logic
+/////////////////////////////////////////////////////
+
+// Perform right shift
+always @(posedge clk_i `CFG_RESET_SENSITIVITY)
+begin
+ if (rst_i == `TRUE)
+ begin
+ right_shift_result_m <= {`LM32_WORD_WIDTH{1'b0}};
+ direction_m <= `FALSE;
+ end
+ else
+ begin
+ if (stall_x == `FALSE)
+ begin
+ right_shift_result_m <= right_shift_result_x[`LM32_WORD_RNG];
+ direction_m <= direction_x;
+ end
+ end
+end
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v
new file mode 100644
index 000000000..b7d0abba9
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/sockit_owm.v
@@ -0,0 +1,432 @@
+//////////////////////////////////////////////////////////////////////////////
+// //
+// Minimalistic 1-wire (onewire) master with Avalon MM bus interface //
+// //
+// Copyright (C) 2010 Iztok Jeras //
+// //
+//////////////////////////////////////////////////////////////////////////////
+// //
+// This RTL is free hardware: you can redistribute it and/or modify //
+// it under the terms of the GNU Lesser General Public License //
+// as published by the Free Software Foundation, either //
+// version 3 of the License, or (at your option) any later version. //
+// //
+// This RTL 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, see <http://www.gnu.org/licenses/>. //
+// //
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// Modifications:
+// 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch)
+// * added default values; typos
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// //
+// The clock divider parameter is computed with the next formula: //
+// //
+// CDR_N = f_CLK * BTP_N - 1 (example: CDR_N = 1MHz * 5.0us - 1 = 5-1) //
+// CDR_O = f_CLK * BTP_O - 1 (example: CDR_O = 1MHz * 1.0us - 1 = 1-1) //
+// //
+// If the dividing factor is not a round integer, than the timing of the //
+// controller will be slightly off, and would support only a subset of //
+// 1-wire devices with timing closer to the typical 30us slot. //
+// //
+// Base time periods BTP_N = "5.0" and BTP_O = "1.0" are optimized for //
+// onewire timing. The default timing restricts the range of available //
+// frequences to multiples of 1MHz. //
+// //
+// If even this restrictions are too strict use timing BTP_N = "6.0" and //
+// BTP_O = "0.5", where the actual periods can be in the range: //
+// 6.0us <= BTP_N <= 7.5us //
+// 0.5us <= BTP_O <= 0.66us //
+// //
+// A third timing option is available for normal mode BTP_N = "7.5", this //
+// option is optimized for logic size. //
+// //
+//////////////////////////////////////////////////////////////////////////////
+
+module sockit_owm #(
+ // enable implementation of optional functionality
+ parameter OVD_E = 1, // overdrive functionality is implemented by default
+ parameter CDR_E = 1, // clock divider register is implemented by default
+ // interface parameters
+ parameter BDW = 32, // bus data width
+ parameter OWN = 1, // number of 1-wire ports
+ // computed bus address port width
+`ifdef __ICARUS__
+ parameter BAW = (BDW==32) ? 1 : 2,
+`else
+ parameter BAW = 1, // TODO, the above is correct, but does not work well with Altera SOPC Builder
+`endif
+ // base time period
+ parameter BTP_N = "5.0", // normal mode (5.0us, options are "7.5", "5.0" and "6.0")
+ parameter BTP_O = "0.5", // overdrive mode (1.0us, options are "1.0", and "0.5")
+ // normal mode timing
+ parameter T_RSTH_N = (BTP_N == "7.5") ? 64 : (BTP_N == "5.0") ? 96 : 80, // reset high
+ parameter T_RSTL_N = (BTP_N == "7.5") ? 64 : (BTP_N == "5.0") ? 96 : 80, // reset low
+ parameter T_RSTP_N = (BTP_N == "7.5") ? 10 : (BTP_N == "5.0") ? 15 : 10, // reset presence pulse
+ parameter T_DAT0_N = (BTP_N == "7.5") ? 8 : (BTP_N == "5.0") ? 12 : 10, // bit 0 low
+ parameter T_DAT1_N = (BTP_N == "7.5") ? 1 : (BTP_N == "5.0") ? 1 : 1, // bit 1 low
+ parameter T_BITS_N = (BTP_N == "7.5") ? 2 : (BTP_N == "5.0") ? 3 : 2, // bit sample
+ parameter T_RCVR_N = (BTP_N == "7.5") ? 1 : (BTP_N == "5.0") ? 1 : 1, // recovery
+ parameter T_IDLE_N = (BTP_N == "7.5") ? 128 : (BTP_N == "5.0") ? 200 : 160, // idle timer
+ // overdrive mode timing
+ parameter T_RSTH_O = (BTP_O == "1.0") ? 48 : 96, // reset high
+ parameter T_RSTL_O = (BTP_O == "1.0") ? 48 : 96, // reset low
+ parameter T_RSTP_O = (BTP_O == "1.0") ? 10 : 15, // reset presence pulse
+ parameter T_DAT0_O = (BTP_O == "1.0") ? 6 : 12, // bit 0 low
+ parameter T_DAT1_O = (BTP_O == "1.0") ? 1 : 2, // bit 1 low
+ parameter T_BITS_O = (BTP_O == "1.0") ? 2 : 3, // bit sample
+ parameter T_RCVR_O = (BTP_O == "1.0") ? 2 : 4, // recovery
+ parameter T_IDLE_O = (BTP_O == "1.0") ? 96 : 192, // idle timer
+ // clock divider ratios (defaults are for a 1MHz clock)
+ parameter CDR_N = 5-1, // normal mode
+ parameter CDR_O = 1-1 // overdrive mode
+)(
+ // system signals
+ input clk,
+ input rst,
+ // CPU bus interface
+ input bus_ren, // read enable
+ input bus_wen, // write enable
+ input [BAW-1:0] bus_adr, // address
+ input [BDW-1:0] bus_wdt, // write data
+ output [BDW-1:0] bus_rdt, // read data
+ output bus_irq, // interrupt request
+ // 1-wire interface
+ output [OWN-1:0] owr_p, // output power enable
+ output [OWN-1:0] owr_e, // output pull down enable
+ input [OWN-1:0] owr_i // input from bidirectional wire
+);
+
+//////////////////////////////////////////////////////////////////////////////
+// local parameters
+//////////////////////////////////////////////////////////////////////////////
+
+function integer clogb2;
+input [31:0] value;
+begin
+ for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
+ value = value >> 1;
+end
+endfunction
+
+// size of combined power and select registers
+localparam PDW = (BDW==32) ? 24 : 8;
+
+// size of boudrate generator counter (divider for normal mode is largest)
+localparam CDW = CDR_E ? ((BDW==32) ? 16 : 8) : clogb2(CDR_N);
+
+// size of port select signal
+localparam SDW = clogb2(OWN);
+
+// size of cycle timing counter
+localparam TDW = (T_RSTH_O+T_RSTL_O) > (T_RSTH_N+T_RSTL_N)
+ ? clogb2(T_RSTH_O+T_RSTL_O) : clogb2(T_RSTH_N+T_RSTL_N);
+
+//////////////////////////////////////////////////////////////////////////////
+// local signals
+//////////////////////////////////////////////////////////////////////////////
+
+// address dependent write enable
+wire bus_ren_ctl_sts;
+wire bus_wen_ctl_sts;
+wire bus_wen_pwr_sel;
+wire bus_wen_cdr_n;
+wire bus_wen_cdr_o;
+
+// read data bus segments
+wire [7:0] bus_rdt_ctl_sts;
+wire [PDW-1:0] bus_rdt_pwr_sel;
+
+// clock divider
+reg [CDW-1:0] div;
+reg [CDW-1:0] cdr_n = CDR_N[CDW-1:0];
+reg [CDW-1:0] cdr_o = CDR_O[CDW-1:0];
+wire pls;
+
+// cycle control and status
+reg owr_cyc; // cycle status
+reg [TDW-1:0] cnt; // cycle counter
+
+// port select
+//generate if (OWN>1) begin : sel_declaration
+reg [SDW-1:0] owr_sel;
+//end endgenerate
+
+// modified input data for overdrive
+wire req_ovd;
+
+// onewire signals
+reg [OWN-1:0] owr_pwr; // power
+reg owr_ovd; // overdrive
+reg owr_rst; // reset
+reg owr_dat; // data bit
+reg owr_smp; // sample bit
+
+reg owr_oen; // output enable
+wire owr_iln; // input line
+
+// interrupt signals
+reg irq_ena; // interrupt enable
+reg irq_sts; // interrupt status
+
+// timing signals
+wire [TDW-1:0] t_idl ; // idle cycle time
+wire [TDW-1:0] t_rst ; // reset cycle time
+wire [TDW-1:0] t_bit ; // data bit cycle time
+wire [TDW-1:0] t_rstp; // reset presence pulse sampling time
+wire [TDW-1:0] t_rsth; // reset release time
+wire [TDW-1:0] t_dat0; // data bit 0 release time
+wire [TDW-1:0] t_dat1; // data bit 1 release time
+wire [TDW-1:0] t_bits; // data bit sampling time
+wire [TDW-1:0] t_zero; // end of cycle time
+
+//////////////////////////////////////////////////////////////////////////////
+// cycle timing
+//////////////////////////////////////////////////////////////////////////////
+
+// idle time
+assign t_idl = req_ovd ? T_IDLE_O[TDW-1:0] : T_IDLE_N[TDW-1:0];
+// reset cycle time (reset low + reset hight)
+assign t_rst = req_ovd ? T_RSTL_O[TDW-1:0] + T_RSTH_O[TDW-1:0] : T_RSTL_N[TDW-1:0] + T_RSTH_N[TDW-1:0];
+// data bit cycle time (write 0 + recovery)
+assign t_bit = req_ovd ? T_DAT0_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] + T_RCVR_N[TDW-1:0];
+
+// reset presence pulse sampling time (reset high - reset presence)
+assign t_rstp = owr_ovd ? T_RSTH_O[TDW-1:0] - T_RSTP_O[TDW-1:0] : T_RSTH_N[TDW-1:0] - T_RSTP_N[TDW-1:0];
+// reset release time (reset high)
+assign t_rsth = owr_ovd ? T_RSTH_O[TDW-1:0] : T_RSTH_N[TDW-1:0];
+
+// data bit 0 release time (write bit 0 - write bit 0 + recovery)
+assign t_dat0 = owr_ovd ? T_DAT0_O[TDW-1:0] - T_DAT0_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_DAT0_N[TDW-1:0] + T_RCVR_N[TDW-1:0];
+// data bit 1 release time (write bit 0 - write bit 1 + recovery)
+assign t_dat1 = owr_ovd ? T_DAT0_O[TDW-1:0] - T_DAT1_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_DAT1_N[TDW-1:0] + T_RCVR_N[TDW-1:0];
+// data bit sampling time (write bit 0 - write bit 1 + recovery)
+assign t_bits = owr_ovd ? T_DAT0_O[TDW-1:0] - T_BITS_O[TDW-1:0] + T_RCVR_O[TDW-1:0] : T_DAT0_N[TDW-1:0] - T_BITS_N[TDW-1:0] + T_RCVR_N[TDW-1:0];
+
+// end of cycle time
+assign t_zero = 'd0;
+
+//////////////////////////////////////////////////////////////////////////////
+// bus read
+//////////////////////////////////////////////////////////////////////////////
+
+// bus segnemt - controll/status register
+assign bus_rdt_ctl_sts = {irq_ena, irq_sts, 1'b0, owr_pwr[0], owr_cyc, owr_ovd, owr_rst, owr_dat};
+
+// bus segnemt - power and select register
+generate
+ if (BDW==32) begin
+ if (OWN>1) begin
+ assign bus_rdt_pwr_sel = {{16-OWN{1'b0}}, owr_pwr, 4'h0, {4-SDW{1'b0}}, owr_sel};
+ end else begin
+ assign bus_rdt_pwr_sel = 24'h0000_00;
+ end
+ end else if (BDW==8) begin
+ if (OWN>1) begin
+ assign bus_rdt_pwr_sel = {{ 4-OWN{1'b0}}, owr_pwr, {4-SDW{1'b0}}, owr_sel};
+ end else begin
+ assign bus_rdt_pwr_sel = 8'hxx;
+ end
+ end
+endgenerate
+
+// bus read data
+generate if (BDW==32) begin
+ assign bus_rdt = (bus_adr[0]==1'b0) ? {bus_rdt_pwr_sel, bus_rdt_ctl_sts} : (cdr_o << 16 | cdr_n);
+end else if (BDW==8) begin
+ assign bus_rdt = (bus_adr[1]==1'b0) ? ((bus_adr[0]==1'b0) ? bus_rdt_ctl_sts
+ : bus_rdt_pwr_sel)
+ : ((bus_adr[0]==1'b0) ? cdr_n
+ : cdr_o );
+end endgenerate
+
+//////////////////////////////////////////////////////////////////////////////
+// bus write
+//////////////////////////////////////////////////////////////////////////////
+
+// combined write/read enable and address decoder
+generate if (BDW==32) begin
+ assign bus_ren_ctl_sts = bus_ren & bus_adr[0] == 1'b0;
+ assign bus_wen_ctl_sts = bus_wen & bus_adr[0] == 1'b0;
+ assign bus_wen_pwr_sel = bus_wen & bus_adr[0] == 1'b0;
+ assign bus_wen_cdr_n = bus_wen & bus_adr[0] == 1'b1;
+ assign bus_wen_cdr_o = bus_wen & bus_adr[0] == 1'b1;
+end else if (BDW==8) begin
+ assign bus_ren_ctl_sts = bus_ren & bus_adr[1:0] == 2'b00;
+ assign bus_wen_ctl_sts = bus_wen & bus_adr[1:0] == 2'b00;
+ assign bus_wen_pwr_sel = bus_wen & bus_adr[1:0] == 2'b01;
+ assign bus_wen_cdr_n = bus_wen & bus_adr[1:0] == 2'b10;
+ assign bus_wen_cdr_o = bus_wen & bus_adr[1:0] == 2'b11;
+end endgenerate
+
+//////////////////////////////////////////////////////////////////////////////
+// clock divider
+//////////////////////////////////////////////////////////////////////////////
+
+// clock divider ratio registers
+generate
+ if (CDR_E) begin
+ if (BDW==32) begin
+ always @ (posedge clk, posedge rst)
+ if (rst) begin
+ cdr_n <= CDR_N[CDW-1:0];
+ cdr_o <= CDR_O[CDW-1:0];
+ end else begin
+ if (bus_wen_cdr_n) cdr_n <= bus_wdt[15: 0];
+ if (bus_wen_cdr_o) cdr_o <= bus_wdt[31:16];
+ end
+ end else if (BDW==8) begin
+ always @ (posedge clk, posedge rst)
+ if (rst) begin
+ cdr_n <= CDR_N[CDW-1:0];
+ cdr_o <= CDR_O[CDW-1:0];
+ end else begin
+ if (bus_wen_cdr_n) cdr_n <= bus_wdt;
+ if (bus_wen_cdr_o) cdr_o <= bus_wdt;
+ end
+ end
+ end else begin
+ initial begin
+ cdr_n = CDR_N[CDW-1:0];
+ cdr_o = CDR_O[CDW-1:0];
+ end
+ end
+endgenerate
+
+// clock divider
+always @ (posedge clk, posedge rst)
+if (rst) div <= {CDW{1'd0}};
+else begin
+ if (bus_wen) div <= {CDW{1'd0}};
+ else div <= pls ? {CDW{1'd0}} : div + owr_cyc;
+end
+
+// divided clock pulse
+assign pls = (div == (owr_ovd ? cdr_o : cdr_n));
+
+//////////////////////////////////////////////////////////////////////////////
+// power and select register
+//////////////////////////////////////////////////////////////////////////////
+
+// select and power register implementation
+generate if (OWN>1) begin : sel_implementation
+ // port select
+ always @ (posedge clk, posedge rst)
+ if (rst) owr_sel <= {SDW{1'b0}};
+ else if (bus_wen_pwr_sel) owr_sel <= bus_wdt[(BDW==32 ? 8 : 0)+:SDW];
+
+ // power delivery
+ always @ (posedge clk, posedge rst)
+ if (rst) owr_pwr <= {OWN{1'b0}};
+ else if (bus_wen_pwr_sel) owr_pwr <= bus_wdt[(BDW==32 ? 16 : 4)+:OWN];
+end else begin
+ // port select
+ initial owr_sel <= 'd0;
+ // power delivery
+ always @ (posedge clk, posedge rst)
+ if (rst) owr_pwr <= 1'b0;
+ else if (bus_wen_ctl_sts) owr_pwr <= bus_wdt[4];
+end endgenerate
+
+//////////////////////////////////////////////////////////////////////////////
+// interrupt logic
+//////////////////////////////////////////////////////////////////////////////
+
+// bus interrupt
+assign bus_irq = irq_ena & irq_sts;
+
+// interrupt enable
+always @ (posedge clk, posedge rst)
+if (rst) irq_ena <= 1'b0;
+else if (bus_wen_ctl_sts) irq_ena <= bus_wdt[7];
+
+// transmit status (active after onewire cycle ends)
+always @ (posedge clk, posedge rst)
+if (rst) irq_sts <= 1'b0;
+else begin
+ if (bus_wen_ctl_sts) irq_sts <= 1'b0;
+ else if (pls & (cnt == t_zero)) irq_sts <= 1'b1;
+ else if (bus_ren_ctl_sts) irq_sts <= 1'b0;
+end
+
+//////////////////////////////////////////////////////////////////////////////
+// onewire state machine
+//////////////////////////////////////////////////////////////////////////////
+
+assign req_ovd = OVD_E ? bus_wen_ctl_sts & bus_wdt[2] : 1'b0;
+
+// overdrive
+always @ (posedge clk, posedge rst)
+if (rst) owr_ovd <= 1'b0;
+else if (bus_wen_ctl_sts) owr_ovd <= req_ovd;
+
+// reset
+always @ (posedge clk, posedge rst)
+if (rst) owr_rst <= 1'b0;
+else if (bus_wen_ctl_sts) owr_rst <= bus_wdt[1];
+
+// transmit data, reset, overdrive
+always @ (posedge clk, posedge rst)
+if (rst) owr_dat <= 1'b0;
+else begin
+ if (bus_wen_ctl_sts) owr_dat <= bus_wdt[0];
+ else if (pls & (cnt == t_zero)) owr_dat <= owr_smp;
+end
+
+// onewire cycle status
+always @ (posedge clk, posedge rst)
+if (rst) owr_cyc <= 1'b0;
+else begin
+ if (bus_wen_ctl_sts) owr_cyc <= bus_wdt[3] & ~&bus_wdt[2:0];
+ else if (pls & (cnt == t_zero)) owr_cyc <= 1'b0;
+end
+
+// state counter (initial value depends whether the cycle is reset or data)
+always @ (posedge clk, posedge rst)
+if (rst) cnt <= 0;
+else begin
+ if (bus_wen_ctl_sts) cnt <= (&bus_wdt[1:0] ? t_idl : bus_wdt[1] ? t_rst : t_bit) - 1'd1;
+ else if (pls) cnt <= cnt - 1'd1;
+end
+
+// receive data (sampling point depends whether the cycle is reset or data)
+always @ (posedge clk)
+if (pls) begin
+ if ( owr_rst & (cnt == t_rstp)) owr_smp <= owr_iln; // presence detect
+ else if (~owr_rst & (cnt == t_bits)) owr_smp <= owr_iln; // read data bit
+end
+
+// output register (switch point depends whether the cycle is reset or data)
+always @ (posedge clk, posedge rst)
+if (rst) owr_oen <= 1'b0;
+else begin
+ if (bus_wen_ctl_sts) owr_oen <= ~&bus_wdt[1:0];
+ else if (pls) begin
+ if (owr_rst & (cnt == t_rsth)) owr_oen <= 1'b0; // reset
+ else if (owr_dat & (cnt == t_dat1)) owr_oen <= 1'b0; // write 1, read
+ else if ( (cnt == t_dat0)) owr_oen <= 1'b0; // write 0
+ end
+end
+
+//////////////////////////////////////////////////////////////////////////////
+// IO
+//////////////////////////////////////////////////////////////////////////////
+
+// only one 1-wire line can be accessed at the same time
+assign owr_e = owr_oen << owr_sel;
+// all 1-wire lines can be powered independently
+assign owr_p = owr_pwr;
+
+// 1-wire line status read multiplexer
+assign owr_iln = owr_i [owr_sel];
+
+endmodule
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd
new file mode 100644
index 000000000..b1f5d60b7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/wb_onewire_master.vhd
@@ -0,0 +1,184 @@
+------------------------------------------------------------------------------
+-- Title : Wishbone 1-Wire Master
+-- Project : General Cores Library (gencores)
+------------------------------------------------------------------------------
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-05-18
+-- Last update: 2012-02-23
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Wishbone Dallas/Maxim Semiconductor 1-Wire master.
+-------------------------------------------------------------------------------
+--
+-- Based on sockit_owm project Copyright (c) 2010 Iztok Jeras.
+-- http://opencores.org/project,sockit_owm
+--
+-- sockit_owm RTL is licensed under LGPL 3.
+
+-- wb_onewire_master.vhd copyright (c) 2011 CERN
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-09-18 1.0 twlostow Created
+-- 2016-08-24 1.1 jpospisi propagated CDR_N/O generics up the
+-- hierarchy; added assignments to (new)
+-- unspecified WB signals
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.STD_LOGIC_1164.all;
+
+use work.gencores_pkg.all;
+use work.wishbone_pkg.all;
+
+entity wb_onewire_master is
+
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_ports : integer := 1;
+ g_ow_btp_normal : string := "5.0";
+ g_ow_btp_overdrive : string := "1.0";
+ g_CDR_N : integer := 4; -- normal mode
+ g_CDR_O : integer := 0 -- overdrive mode
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_int_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_en_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_i : in std_logic_vector(g_num_ports -1 downto 0)
+ );
+
+end wb_onewire_master;
+
+
+architecture rtl of wb_onewire_master is
+
+ component sockit_owm
+ generic(
+ BTP_N : string;
+ BTP_O : string;
+ OWN : integer;
+ CDR_N : integer;
+ CDR_O : integer);
+
+ port(
+ clk : in std_logic;
+ rst : in std_logic;
+ bus_ren : in std_logic;
+ bus_wen : in std_logic;
+ bus_adr : in std_logic_vector(0 downto 0);
+ bus_wdt : in std_logic_vector(31 downto 0);
+ bus_rdt : out std_logic_vector(31 downto 0);
+ bus_irq : out std_logic;
+ owr_p : out std_logic_vector(OWN-1 downto 0);
+ owr_e : out std_logic_vector(OWN-1 downto 0);
+ owr_i : in std_logic_vector(OWN-1 downto 0)
+ );
+ end component;
+
+ signal bus_wen : std_logic;
+ signal bus_ren : std_logic;
+ signal rst : std_logic;
+
+ signal slave_in : t_wishbone_slave_in;
+ signal slave_out : t_wishbone_slave_out;
+
+ signal adp_out : t_wishbone_master_out;
+ signal adp_in : t_wishbone_master_in;
+
+ signal rdat_int : std_logic_vector(31 downto 0);
+
+begin -- rtl
+
+ slave_in.adr(2 downto 0) <= wb_adr_i;
+ slave_in.adr(c_wishbone_address_width-1 downto 3) <= (others => '0');
+ slave_in.cyc <= wb_cyc_i;
+ slave_in.stb <= wb_stb_i;
+ slave_in.sel <= wb_sel_i;
+ slave_in.dat <= wb_dat_i;
+ slave_in.we <= wb_we_i;
+
+ wb_int_o <= slave_out.int;
+ wb_dat_o <= slave_out.dat;
+ wb_stall_o <= slave_out.stall;
+ wb_ack_o <= slave_out.ack;
+
+
+ U_Slave_adapter : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => true,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+
+ slave_i => slave_in,
+ slave_o => slave_out,
+ master_i => adp_in,
+ master_o => adp_out);
+
+
+ bus_wen <= adp_out.cyc and adp_out.stb and adp_out.we and not adp_in.ack;
+ bus_ren <= adp_out.cyc and adp_out.stb and not (adp_out.we or adp_in.ack);
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ adp_in.ack <= '0';
+ else
+ adp_in.ack <= adp_out.stb and adp_out.cyc and not adp_in.ack;
+ adp_in.dat <= rdat_int;
+ end if;
+ end if;
+ end process;
+
+ rst <= not rst_n_i;
+
+ Wrapped_1wire : sockit_owm
+ generic map (
+ BTP_N => g_ow_btp_normal,
+ BTP_O => g_ow_btp_overdrive,
+ OWN => g_num_ports,
+ CDR_N => g_CDR_N,
+ CDR_O => g_CDR_O)
+ port map (
+ clk => clk_sys_i,
+ rst => rst,
+ bus_ren => bus_ren,
+ bus_wen => bus_wen,
+ bus_adr => adp_out.adr(0 downto 0),
+ bus_wdt => adp_out.dat,
+ bus_rdt => rdat_int,
+ bus_irq => adp_in.int,
+ owr_p => owr_pwren_o,
+ owr_e => owr_en_o,
+ owr_i => owr_i);
+
+ adp_in.err <= '0';
+ adp_in.rty <= '0';
+ adp_in.stall <= '0';
+
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd
new file mode 100644
index 000000000..3920efd20
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_onewire_master/xwb_onewire_master.vhd
@@ -0,0 +1,105 @@
+--------------------------------------------------------------------------------
+-- Modifications:
+-- 2016-08-24: by Jan Pospisil (j.pospisil@cern.ch)
+-- * propagated CDR_N/O generics up the hierarchy; added assignments
+-- to (new) unspecified WB signals
+--------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.wishbone_pkg.all;
+
+entity xwb_onewire_master is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_ports : integer := 1;
+ g_ow_btp_normal : string := "5.0";
+ g_ow_btp_overdrive : string := "1.0";
+ g_CDR_N : integer := 4; -- normal mode
+ g_CDR_O : integer := 0 -- overdrive mode
+ );
+
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+
+ owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_en_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_i : in std_logic_vector(g_num_ports -1 downto 0)
+
+ );
+
+end xwb_onewire_master;
+
+architecture rtl of xwb_onewire_master is
+
+ component wb_onewire_master
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_ports : integer;
+ g_ow_btp_normal : string;
+ g_ow_btp_overdrive : string;
+ g_CDR_N : integer;
+ g_CDR_O : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_int_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_en_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_i : in std_logic_vector(g_num_ports -1 downto 0));
+ end component;
+
+begin -- rtl
+
+ U_Wrapped_1W : wb_onewire_master
+ generic map (
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_num_ports => g_num_ports,
+ g_ow_btp_normal => g_ow_btp_normal,
+ g_ow_btp_overdrive => g_ow_btp_overdrive,
+ g_CDR_N => g_CDR_N,
+ g_CDR_O => g_CDR_O)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ wb_cyc_i => slave_i.cyc,
+ wb_sel_i => slave_i.sel,
+ wb_stb_i => slave_i.stb,
+ wb_we_i => slave_i.we,
+ wb_adr_i => slave_i.adr(2 downto 0),
+ wb_dat_i => slave_i.dat,
+ wb_dat_o => slave_o.dat,
+ wb_ack_o => slave_o.ack,
+ wb_int_o => slave_o.int,
+ wb_stall_o => slave_o.stall,
+ owr_pwren_o => owr_pwren_o,
+ owr_en_o => owr_en_o,
+ owr_i => owr_i);
+
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+
+ desc_o <= (others => '0');
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd
new file mode 100644
index 000000000..193fc3dc3
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_slave_adapter/wb_slave_adapter.vhd
@@ -0,0 +1,232 @@
+-------------------------------------------------------------------------------
+-- Title : Wishbone Slave Adapter
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wb_slave_adapter.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- universal "adapter"
+-- pipelined <> classic
+-- word-aligned/byte-aligned address
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wishbone_pkg.all;
+
+entity wb_slave_adapter is
+
+ generic (
+ g_master_use_struct : boolean;
+ g_master_mode : t_wishbone_interface_mode;
+ g_master_granularity : t_wishbone_address_granularity;
+ g_slave_use_struct : boolean;
+ g_slave_mode : t_wishbone_interface_mode;
+ g_slave_granularity : t_wishbone_address_granularity
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+-- slave port (i.e. wb_slave_adapter is slave)
+ sl_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ sl_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ sl_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ sl_cyc_i : in std_logic;
+ sl_stb_i : in std_logic;
+ sl_we_i : in std_logic;
+
+
+ sl_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ sl_err_o : out std_logic;
+ sl_rty_o : out std_logic;
+ sl_ack_o : out std_logic;
+ sl_stall_o : out std_logic;
+ sl_int_o : out std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+-- master port (i.e. wb_slave_adapter is master)
+ ma_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ ma_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ ma_sel_o : out std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ ma_cyc_o : out std_logic;
+ ma_stb_o : out std_logic;
+ ma_we_o : out std_logic;
+
+ ma_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ ma_err_i : in std_logic;
+ ma_rty_i : in std_logic;
+ ma_ack_i : in std_logic;
+ ma_stall_i : in std_logic;
+ ma_int_i : in std_logic;
+
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out
+ );
+end wb_slave_adapter;
+
+architecture rtl of wb_slave_adapter is
+
+ function f_num_byte_address_bits
+ return integer is
+ begin
+ case c_wishbone_data_width is
+ when 8 => return 0;
+ when 16 => return 1;
+ when 32 => return 2;
+ when 64 => return 3;
+ when others =>
+ report "wb_slave_adapter: invalid c_wishbone_data_width (we support 8, 16, 32 and 64)" severity failure;
+ end case;
+ return 0;
+ end f_num_byte_address_bits;
+
+ function f_zeros(size : integer)
+ return std_logic_vector is
+ begin
+ return std_logic_vector(to_unsigned(0, size));
+ end f_zeros;
+
+ type t_fsm_state is (IDLE, WAIT4ACK);
+
+ signal fsm_state : t_fsm_state := IDLE;
+
+ signal master_in : t_wishbone_master_in;
+ signal master_out : t_wishbone_master_out;
+ signal slave_in : t_wishbone_slave_in;
+ signal slave_out : t_wishbone_slave_out;
+ signal stored_we : std_logic;
+
+begin -- rtl
+
+ gen_slave_use_struct : if (g_slave_use_struct) generate
+ slave_in <= slave_i;
+ end generate gen_slave_use_struct;
+
+ gen_slave_use_slv : if (not g_slave_use_struct) generate
+ slave_in.cyc <= sl_cyc_i;
+ slave_in.stb <= sl_stb_i;
+ slave_in.we <= sl_we_i;
+ slave_in.dat <= sl_dat_i;
+ slave_in.sel <= sl_sel_i;
+ slave_in.adr <= sl_adr_i;
+ end generate gen_slave_use_slv;
+
+ slave_o <= slave_out;
+ sl_ack_o <= slave_out.ack;
+ sl_rty_o <= slave_out.rty;
+ sl_err_o <= slave_out.err;
+ sl_stall_o <= slave_out.stall;
+ sl_dat_o <= slave_out.dat;
+ sl_int_o <= slave_out.int;
+
+
+ gen_master_use_struct : if (g_master_use_struct) generate
+ master_in <= master_i;
+ end generate gen_master_use_struct;
+
+ gen_master_use_slv : if (not g_master_use_struct) generate
+ master_in <= (
+ ack => ma_ack_i,
+ rty => ma_rty_i,
+ err => ma_err_i,
+ dat => ma_dat_i,
+ stall => ma_stall_i,
+ int => ma_int_i);
+ end generate gen_master_use_slv;
+
+ master_o <= master_out;
+ ma_adr_o <= master_out.adr;
+ ma_dat_o <= master_out.dat;
+ ma_sel_o <= master_out.sel;
+ ma_cyc_o <= master_out.cyc;
+ ma_stb_o <= master_out.stb;
+ ma_we_o <= master_out.we;
+
+ p_gen_address : process(slave_in, master_out)
+ begin
+ if(g_master_granularity = g_slave_granularity) then
+ master_out.adr <= slave_in.adr;
+ elsif(g_master_granularity = BYTE) then -- byte->word
+ master_out.adr <= slave_in.adr(c_wishbone_address_width-f_num_byte_address_bits-1 downto 0)
+ & f_zeros(f_num_byte_address_bits);
+ else
+ master_out.adr <= f_zeros(f_num_byte_address_bits)
+ & slave_in.adr(c_wishbone_address_width-1 downto f_num_byte_address_bits);
+ end if;
+ end process;
+
+ P2C : if (g_slave_mode = PIPELINED and g_master_mode = CLASSIC) generate
+ master_out.stb <= slave_in.stb;
+ slave_out.stall <= not master_in.ack;
+ end generate;
+
+ C2P : if (g_slave_mode = CLASSIC and g_master_mode = PIPELINED) generate
+ master_out.stb <= slave_in.stb when fsm_state=IDLE else '0';
+ slave_out.stall <= '0'; -- classic will ignore this anyway
+
+ state_machine : process(clk_sys_i) is
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ fsm_state <= IDLE;
+ else
+ case fsm_state is
+ when IDLE =>
+ if slave_in.stb ='1' and slave_in.cyc = '1' and master_in.stall='0' and master_in.ack='0' then
+ fsm_state <= WAIT4ACK;
+ end if;
+ when WAIT4ACK =>
+ if (slave_in.stb = '0' and slave_in.cyc = '0') or master_in.ack='1' or master_in.err='1' then
+ fsm_state <= IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+ end generate;
+
+ X2X : if (g_slave_mode = g_master_mode) generate
+ master_out.stb <= slave_in.stb;
+ slave_out.stall <= master_in.stall;
+ end generate;
+
+ master_out.dat <= slave_in.dat;
+ master_out.cyc <= slave_in.cyc;
+ master_out.sel <= slave_in.sel;
+ master_out.we <= slave_in.we;
+
+ slave_out.ack <= master_in.ack;
+ slave_out.err <= master_in.err;
+ slave_out.rty <= master_in.rty;
+ slave_out.dat <= master_in.dat;
+ slave_out.int <= master_in.int;
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v
new file mode 100644
index 000000000..f9afa0f47
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/spi_defines.v
@@ -0,0 +1,167 @@
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// spi_define.v ////
+//// ////
+//// This file is part of the SPI IP core project ////
+//// http://www.opencores.org/projects/spi/ ////
+//// ////
+//// Author(s): ////
+//// - Simon Srot (simons@opencores.org) ////
+//// ////
+//// All additional information is avaliable in the Readme.txt ////
+//// file. ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2002 Authors ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source 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 Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+//
+// Modified to use parameters in spi_top instead of constants in this
+// file for divider length, max char length and number of slaves,
+// G.Daniluk, CERN 2013
+//
+//////////////////////////////////////////////////////////////////////
+
+//
+// Number of bits used for devider register. If used in system with
+// low frequency of system clock this can be reduced.
+// Use SPI_DIVIDER_LEN for fine tuning theexact number.
+//
+//`define SPI_DIVIDER_LEN_8
+//`define SPI_DIVIDER_LEN_16
+//`define SPI_DIVIDER_LEN_24
+//`define SPI_DIVIDER_LEN_32
+//
+//`ifdef SPI_DIVIDER_LEN_8
+// `define SPI_DIVIDER_LEN 8 // Can be set from 1 to 8
+//`endif
+//`ifdef SPI_DIVIDER_LEN_16
+// `define SPI_DIVIDER_LEN 16 // Can be set from 9 to 16
+//`endif
+//`ifdef SPI_DIVIDER_LEN_24
+// `define SPI_DIVIDER_LEN 24 // Can be set from 17 to 24
+//`endif
+//`ifdef SPI_DIVIDER_LEN_32
+// `define SPI_DIVIDER_LEN 32 // Can be set from 25 to 32
+//`endif
+
+//
+// Maximum nuber of bits that can be send/received at once.
+// Use SPI_MAX_CHAR for fine tuning the exact number, when using
+// SPI_MAX_CHAR_32, SPI_MAX_CHAR_24, SPI_MAX_CHAR_16, SPI_MAX_CHAR_8.
+//
+//`define SPI_MAX_CHAR_128
+//`define SPI_MAX_CHAR_64
+//`define SPI_MAX_CHAR_32
+//`define SPI_MAX_CHAR_24
+//`define SPI_MAX_CHAR_16
+//`define SPI_MAX_CHAR_8
+//
+//`ifdef SPI_MAX_CHAR_128
+// `define SPI_MAX_CHAR 128 // Can only be set to 128
+// `define SPI_CHAR_LEN_BITS 7
+//`endif
+//`ifdef SPI_MAX_CHAR_64
+// `define SPI_MAX_CHAR 64 // Can only be set to 64
+// `define SPI_CHAR_LEN_BITS 6
+//`endif
+//`ifdef SPI_MAX_CHAR_32
+// `define SPI_MAX_CHAR 32 // Can be set from 25 to 32
+// `define SPI_CHAR_LEN_BITS 5
+//`endif
+//`ifdef SPI_MAX_CHAR_24
+// `define SPI_MAX_CHAR 24 // Can be set from 17 to 24
+// `define SPI_CHAR_LEN_BITS 5
+//`endif
+//`ifdef SPI_MAX_CHAR_16
+// `define SPI_MAX_CHAR 16 // Can be set from 9 to 16
+// `define SPI_CHAR_LEN_BITS 4
+//`endif
+//`ifdef SPI_MAX_CHAR_8
+// `define SPI_MAX_CHAR 8 // Can be set from 1 to 8
+// `define SPI_CHAR_LEN_BITS 3
+//`endif
+
+//
+// Number of device select signals. Use SPI_SS_NB for fine tuning the
+// exact number.
+//
+//`define SPI_SS_NB_8
+//`define SPI_SS_NB_16
+//`define SPI_SS_NB_24
+//`define SPI_SS_NB_32
+//
+//`ifdef SPI_SS_NB_8
+// `define SPI_SS_NB 8 // Can be set from 1 to 8
+//`endif
+//`ifdef SPI_SS_NB_16
+// `define SPI_SS_NB 16 // Can be set from 9 to 16
+//`endif
+//`ifdef SPI_SS_NB_24
+// `define SPI_SS_NB 24 // Can be set from 17 to 24
+//`endif
+//`ifdef SPI_SS_NB_32
+// `define SPI_SS_NB 32 // Can be set from 25 to 32
+//`endif
+
+//
+// Bits of WISHBONE address used for partial decoding of SPI registers.
+//
+`define SPI_OFS_BITS 4:2
+
+//
+// Register offset
+//
+`define SPI_RX_0 0
+`define SPI_RX_1 1
+`define SPI_RX_2 2
+`define SPI_RX_3 3
+`define SPI_TX_0 0
+`define SPI_TX_1 1
+`define SPI_TX_2 2
+`define SPI_TX_3 3
+`define SPI_CTRL 4
+`define SPI_DEVIDE 5
+`define SPI_SS 6
+
+//
+// Number of bits in ctrl register
+//
+`define SPI_CTRL_BIT_NB 14
+
+//
+// Control register bit position
+//
+`define SPI_CTRL_ASS 13
+`define SPI_CTRL_IE 12
+`define SPI_CTRL_LSB 11
+`define SPI_CTRL_TX_NEGEDGE 10
+`define SPI_CTRL_RX_NEGEDGE 9
+`define SPI_CTRL_GO 8
+`define SPI_CTRL_RES_1 7
+`define SPI_CTRL_CHAR_LEN 6:0
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v
new file mode 100644
index 000000000..60d4ecbd1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_spi/timescale.v
@@ -0,0 +1,2 @@
+`timescale 1ns / 10ps
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd
new file mode 100644
index 000000000..c2bb19ea4
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_pkg.vhd
@@ -0,0 +1,99 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for Simple Wishbone UART
+---------------------------------------------------------------------------------------
+-- File : simple_uart_pkg.vhd
+-- Author : auto-generated by wbgen2 from simple_uart_wb.wb
+-- Created : Tue Aug 15 10:16:30 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE simple_uart_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package uart_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_uart_in_registers is record
+ sr_tx_busy_i : std_logic;
+ sr_rx_rdy_i : std_logic;
+ rdr_rx_data_i : std_logic_vector(7 downto 0);
+ host_tdr_rdy_i : std_logic;
+ host_rdr_data_i : std_logic_vector(7 downto 0);
+ host_rdr_rdy_i : std_logic;
+ host_rdr_count_i : std_logic_vector(15 downto 0);
+ end record;
+
+ constant c_uart_in_registers_init_value: t_uart_in_registers := (
+ sr_tx_busy_i => '0',
+ sr_rx_rdy_i => '0',
+ rdr_rx_data_i => (others => '0'),
+ host_tdr_rdy_i => '0',
+ host_rdr_data_i => (others => '0'),
+ host_rdr_rdy_i => '0',
+ host_rdr_count_i => (others => '0')
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_uart_out_registers is record
+ bcr_o : std_logic_vector(31 downto 0);
+ bcr_wr_o : std_logic;
+ tdr_tx_data_o : std_logic_vector(7 downto 0);
+ tdr_tx_data_wr_o : std_logic;
+ host_tdr_data_o : std_logic_vector(7 downto 0);
+ host_tdr_data_wr_o : std_logic;
+ end record;
+
+ constant c_uart_out_registers_init_value: t_uart_out_registers := (
+ bcr_o => (others => '0'),
+ bcr_wr_o => '0',
+ tdr_tx_data_o => (others => '0'),
+ tdr_tx_data_wr_o => '0',
+ host_tdr_data_o => (others => '0'),
+ host_tdr_data_wr_o => '0'
+ );
+ function "or" (left, right: t_uart_in_registers) return t_uart_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body uart_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_uart_in_registers) return t_uart_in_registers is
+variable tmp: t_uart_in_registers;
+begin
+tmp.sr_tx_busy_i := f_x_to_zero(left.sr_tx_busy_i) or f_x_to_zero(right.sr_tx_busy_i);
+tmp.sr_rx_rdy_i := f_x_to_zero(left.sr_rx_rdy_i) or f_x_to_zero(right.sr_rx_rdy_i);
+tmp.rdr_rx_data_i := f_x_to_zero(left.rdr_rx_data_i) or f_x_to_zero(right.rdr_rx_data_i);
+tmp.host_tdr_rdy_i := f_x_to_zero(left.host_tdr_rdy_i) or f_x_to_zero(right.host_tdr_rdy_i);
+tmp.host_rdr_data_i := f_x_to_zero(left.host_rdr_data_i) or f_x_to_zero(right.host_rdr_data_i);
+tmp.host_rdr_rdy_i := f_x_to_zero(left.host_rdr_rdy_i) or f_x_to_zero(right.host_rdr_rdy_i);
+tmp.host_rdr_count_i := f_x_to_zero(left.host_rdr_count_i) or f_x_to_zero(right.host_rdr_count_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd
new file mode 100644
index 000000000..62d09a5c1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/simple_uart_wb.vhd
@@ -0,0 +1,315 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for Simple Wishbone UART
+---------------------------------------------------------------------------------------
+-- File : simple_uart_wb.vhd
+-- Author : auto-generated by wbgen2 from simple_uart_wb.wb
+-- Created : Tue Aug 15 10:16:30 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE simple_uart_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.uart_wbgen2_pkg.all;
+
+
+entity simple_uart_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ rdr_rack_o : out std_logic;
+ host_rack_o : out std_logic;
+ regs_i : in t_uart_in_registers;
+ regs_o : out t_uart_out_registers
+ );
+end simple_uart_wb;
+
+architecture syn of simple_uart_wb is
+
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(2 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ regs_o.bcr_wr_o <= '0';
+ regs_o.tdr_tx_data_wr_o <= '0';
+ rdr_rack_o <= '0';
+ regs_o.host_tdr_data_wr_o <= '0';
+ host_rack_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ regs_o.bcr_wr_o <= '0';
+ regs_o.tdr_tx_data_wr_o <= '0';
+ rdr_rack_o <= '0';
+ regs_o.host_tdr_data_wr_o <= '0';
+ host_rack_o <= '0';
+ ack_in_progress <= '0';
+ else
+ regs_o.bcr_wr_o <= '0';
+ regs_o.tdr_tx_data_wr_o <= '0';
+ regs_o.host_tdr_data_wr_o <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(2 downto 0) is
+ when "000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= regs_i.sr_tx_busy_i;
+ rddata_reg(1) <= regs_i.sr_rx_rdy_i;
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001" =>
+ if (wb_we_i = '1') then
+ regs_o.bcr_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010" =>
+ if (wb_we_i = '1') then
+ regs_o.tdr_tx_data_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.rdr_rx_data_i;
+ rdr_rack_o <= '1';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "100" =>
+ if (wb_we_i = '1') then
+ regs_o.host_tdr_data_wr_o <= '1';
+ end if;
+ rddata_reg(8) <= regs_i.host_tdr_rdy_i;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.host_rdr_data_i;
+ host_rack_o <= '1';
+ rddata_reg(8) <= regs_i.host_rdr_rdy_i;
+ rddata_reg(24 downto 9) <= regs_i.host_rdr_count_i;
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- TX busy
+-- RX ready
+-- Baudrate divider setting
+-- pass-through field: Baudrate divider setting in register: Baudrate control register
+ regs_o.bcr_o <= wrdata_reg(31 downto 0);
+-- Transmit data
+-- pass-through field: Transmit data in register: Transmit data regsiter
+ regs_o.tdr_tx_data_o <= wrdata_reg(7 downto 0);
+-- Received data
+-- TX Data
+-- pass-through field: TX Data in register: Host VUART Tx register
+ regs_o.host_tdr_data_o <= wrdata_reg(7 downto 0);
+-- TX Ready
+-- RX Data
+-- RX Ready
+-- RX FIFO Count
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd
new file mode 100644
index 000000000..ea996e08e
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_rx.vhd
@@ -0,0 +1,229 @@
+------------------------------------------------------------------------------
+-- Title : Simple Wishbone UART - receiver
+-- Project : General Cores Collection (gencores) library
+------------------------------------------------------------------------------
+-- File : uart_async_rx.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity uart_async_rx is
+
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ baud8_tick_i: in std_logic;
+
+ rxd_i : in std_logic;
+ rx_ready_o : out std_logic;
+ rx_error_o : out std_logic;
+ rx_data_o : out std_logic_vector(7 downto 0)
+
+ );
+
+end uart_async_rx;
+
+
+architecture behavioral of uart_async_rx is
+
+ signal Baud8Tick : std_logic;
+
+ signal RxD_sync_inv : std_logic_vector(1 downto 0);
+ signal RxD_cnt_inv : unsigned(1 downto 0);
+ signal RxD_bit_inv : std_logic;
+
+ signal state : std_logic_vector(3 downto 0);
+ signal bit_spacing : std_logic_vector(3 downto 0);
+ signal next_bit : std_logic;
+
+ signal RxD_data : std_logic_vector(7 downto 0);
+ signal RxD_data_ready : std_logic;
+ signal RxD_data_error : std_logic;
+
+
+
+begin -- behavioral
+
+ Baud8Tick <= baud8_tick_i;
+
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ RxD_sync_inv <= (others => '0');
+ else
+ if(Baud8Tick = '1') then
+ RxD_sync_inv <= RxD_sync_inv(0) & (not rxd_i);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ RxD_bit_inv <= '0';
+ RxD_cnt_inv <= (others => '0');
+ else
+ if(Baud8Tick = '1') then
+ if(RxD_sync_inv(1) = '1' and RxD_cnt_inv /= "11") then
+ RxD_cnt_inv <= RxD_cnt_inv + 1;
+ elsif (RxD_sync_inv(1) = '0' and RxD_cnt_inv /= "00") then
+ RxD_cnt_inv <= RxD_cnt_inv - 1;
+ end if;
+
+ if(RxD_cnt_inv = "00") then
+ RxD_bit_inv <= '0';
+ elsif(RxD_cnt_inv = "11") then
+ RxD_bit_inv <= '1';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ next_bit <= '1' when (bit_spacing = x"a") else '0';
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ bit_spacing <= (others => '0');
+ else
+ if(state = x"0") then
+ bit_spacing <= "0000";
+ elsif(Baud8Tick = '1') then
+-- bit_spacing <= std_logic_vector(resize((unsigned(bit_spacing(2 downto 0)) + 1), 4))
+ bit_spacing <= std_logic_vector(unsigned('0' & bit_spacing(2 downto 0)) + 1)
+ or (bit_spacing(3) & "000");
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= (others => '0');
+ else
+ if(Baud8Tick = '1') then
+ case state is
+ when "0000" =>
+ if(RxD_bit_inv = '1') then -- start bit
+ state <= "1000";
+ end if;
+ when "1000" =>
+ if(next_bit = '1') then
+ state <= "1001"; -- bit 0
+ end if;
+ when "1001" =>
+ if(next_bit = '1') then
+ state <= "1010"; -- bit 1
+ end if;
+ when "1010" =>
+ if(next_bit = '1') then
+ state <= "1011"; -- bit 2
+ end if;
+ when "1011" =>
+ if(next_bit = '1') then
+ state <= "1100"; -- bit 3
+ end if;
+ when "1100" =>
+ if(next_bit = '1') then
+ state <= "1101"; -- bit 4
+ end if;
+ when "1101" =>
+ if(next_bit = '1') then
+ state <= "1110"; -- bit 5
+ end if;
+ when "1110" =>
+ if(next_bit = '1') then
+ state <= "1111"; -- bit 6
+ end if;
+ when "1111" =>
+ if(next_bit = '1') then
+ state <= "0001"; -- bit 7
+ end if;
+ when "0001" =>
+ if(next_bit = '1') then
+ state <= "0000"; -- bit stop
+ end if;
+ when others => state <= "0000";
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ RxD_data <= (others => '0');
+ else
+ if(Baud8Tick = '1' and next_bit = '1' and state(3) = '1') then
+ RxD_data <= (not RxD_bit_inv) & RxD_data(7 downto 1);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ RxD_data_error <= '0';
+ RxD_data_ready <= '0';
+ else
+ if(Baud8Tick = '1' and next_bit = '1' and state = "0001" and RxD_bit_inv = '0') then
+ RxD_data_ready <= '1';
+ else
+ RxD_data_ready <= '0';
+ end if;
+
+ if(Baud8Tick = '1' and next_bit = '1' and state = "0001" and RxD_bit_inv = '1') then
+ RxD_data_error <= '1';
+ else
+ RxD_data_error <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ rx_data_o <= RxD_data;
+ rx_ready_o <= RxD_data_ready;
+ rx_error_o <= RxD_data_error;
+
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd
new file mode 100644
index 000000000..d0a743f39
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_async_tx.vhd
@@ -0,0 +1,190 @@
+------------------------------------------------------------------------------
+-- Title : Simple Wishbone UART - tranmitter
+-- Project : General Cores Collection (gencores) library
+------------------------------------------------------------------------------
+-- File : uart_async_tx.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity uart_async_tx is
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ baud_tick_i: in std_logic;
+
+ txd_o : out std_logic;
+ tx_start_p_i : in std_logic;
+ tx_data_i : in std_logic_vector(7 downto 0);
+ tx_busy_o : out std_logic
+
+ );
+
+end uart_async_tx;
+
+architecture behavioral of uart_async_tx is
+
+signal BaudTick : std_logic;
+ signal TxD_busy : std_logic;
+ signal TxD_ready : std_logic;
+ signal state : std_logic_vector(3 downto 0);
+
+ signal TxD_dataReg : std_logic_vector(7 downto 0);
+ signal TxD_dataD : std_logic_vector(7 downto 0);
+ signal muxbit : std_logic;
+ signal TxD : std_logic;
+
+begin -- behavioral
+
+
+
+
+ TxD_ready <= '1' when state = "0000" else '0';
+ TxD_busy <= not TxD_ready;
+ BaudTick <= baud_tick_i;
+
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ TxD_dataReg <= (others => '0');
+ elsif TxD_ready = '1' and tx_start_p_i = '1' then
+ TxD_dataReg <= tx_data_i;
+ end if;
+ end if;
+ end process;
+
+ TxD_dataD <= TxD_dataReg;
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= "0000";
+ else
+ case state is
+ when "0000" =>
+ if (tx_start_p_i = '1') then
+ state <= "0001";
+ end if;
+
+ when "0001" =>
+ if (BaudTick = '1') then
+ state <= "0100";
+ end if;
+ when "0100" =>
+ if (BaudTick = '1') then
+ state <= "1000";
+ end if;
+ when "1000" =>
+ if (BaudTick = '1') then
+ state <= "1001";
+ end if;
+ when "1001" =>
+ if (BaudTick = '1') then
+ state <= "1010";
+ end if;
+
+ when "1010" =>
+ if (BaudTick = '1') then
+ state <= "1011";
+ end if;
+ when "1011" =>
+ if (BaudTick = '1') then
+ state <= "1100";
+ end if;
+ when "1100" =>
+ if (BaudTick = '1') then
+ state <= "1101";
+ end if;
+ when "1101" =>
+ if (BaudTick = '1') then
+ state <= "1110";
+ end if;
+ when "1110" =>
+ if (BaudTick = '1') then
+ state <= "1111";
+ end if;
+
+ when "1111" =>
+ if (BaudTick = '1') then
+ state <= "0010";
+ end if;
+ when "0010" =>
+ if (BaudTick = '1') then
+ state <= "0011";
+ end if;
+
+ when "0011" =>
+ if (BaudTick = '1') then
+ state <= "0000";
+ end if;
+ when others =>
+ state <= "0000";
+ end case;
+ end if;
+ end if;
+ end process;
+
+
+ process(TxD_dataD, state)
+ begin
+ case state(2 downto 0) is
+ when "000" => muxbit <= TxD_dataD(0);
+ when "001" => muxbit <= TxD_dataD(1);
+ when "010" => muxbit <= TxD_dataD(2);
+ when "011" => muxbit <= TxD_dataD(3);
+ when "100" => muxbit <= TxD_dataD(4);
+ when "101" => muxbit <= TxD_dataD(5);
+ when "110" => muxbit <= TxD_dataD(6);
+ when "111" => muxbit <= TxD_dataD(7);
+ when others => null;
+ end case;
+ end process;
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ TxD <= '1';
+ else
+ if(unsigned(state) < to_unsigned(4, state'length) or (state(3) = '1' and muxbit = '1')) then
+ TxD <= '1';
+ else
+ TxD <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ txd_o <= TxD;
+ tx_busy_o <= TxD_busy;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd
new file mode 100644
index 000000000..a565c5c20
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/uart_baud_gen.vhd
@@ -0,0 +1,89 @@
+------------------------------------------------------------------------------
+-- Title : Simple Wishbone UART - baud generator
+-- Project : General Cores Collection (gencores) library
+------------------------------------------------------------------------------
+-- File : uart_baud_gen.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity uart_baud_gen is
+
+ generic (
+ g_baud_acc_width : integer := 16);
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ baudrate_i : in std_logic_vector(g_baud_acc_width downto 0);
+
+ baud_tick_o : out std_logic;
+ baud8_tick_o : out std_logic);
+
+end uart_baud_gen;
+
+architecture behavioral of uart_baud_gen is
+
+ signal Baud8GeneratorInc : unsigned(g_baud_acc_width downto 0);
+ signal Baud8GeneratorAcc : unsigned(g_baud_acc_width downto 0);
+ signal Baud8Tick : std_logic;
+ signal Baud_sreg : std_logic_vector(7 downto 0) := "10000000";
+
+
+begin -- behavioral
+
+ Baud8GeneratorInc <= unsigned(baudrate_i);
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ Baud8GeneratorAcc <= (others => '0');
+ else
+ Baud8GeneratorAcc <= ('0' & Baud8GeneratorAcc(Baud8GeneratorAcc'high-1 downto 0)) + Baud8GeneratorInc;
+ end if;
+ end if;
+ end process;
+
+ Baud8Tick <= std_logic(Baud8GeneratorAcc(g_baud_acc_width));
+
+ process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ Baud_sreg <= "10000000";
+ elsif Baud8Tick = '1' then
+ Baud_sreg <= Baud_sreg(0) & Baud_sreg(7 downto 1);
+ end if;
+ end if;
+ end process;
+
+ baud_tick_o <= Baud_sreg(0) and Baud8Tick;
+ baud8_tick_o <= Baud8Tick;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd
new file mode 100644
index 000000000..75379bf69
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/wb_simple_uart.vhd
@@ -0,0 +1,323 @@
+-------------------------------------------------------------------------------
+-- Title : Simple Wishbone UART
+-- Project : General Cores Collection (gencores) library
+-------------------------------------------------------------------------------
+-- File : wb_simple_uart.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2011-02-21
+-- Last update: 2017-02-03
+-- Platform : FPGA-generics
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A simple UART controller, providing two modes of operation
+-- (both can be used simultenously):
+-- - physical UART (encoding fixed to 8 data bits, no parity and one stop bit)
+-- - virtual UART: TXed data is passed via a FIFO to the Wishbone host (and
+-- vice versa).
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-02-21 1.0 twlostow Created
+-- 2011-10-04 1.1 twlostow merged with VUART, added adapter
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+use work.UART_wbgen2_pkg.all;
+
+entity wb_simple_uart is
+ generic(
+ g_with_virtual_uart : boolean;
+ g_with_physical_uart : boolean;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_vuart_fifo_size : integer := 1024
+ );
+ port (
+
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic
+ );
+end wb_simple_uart;
+
+architecture syn of wb_simple_uart is
+
+ constant c_baud_acc_width : integer := 16;
+
+ component uart_baud_gen
+ generic (
+ g_baud_acc_width : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ baudrate_i : in std_logic_vector(g_baud_acc_width downto 0);
+ baud_tick_o : out std_logic;
+ baud8_tick_o : out std_logic);
+ end component;
+
+ component uart_async_rx
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ baud8_tick_i : in std_logic;
+ rxd_i : in std_logic;
+ rx_ready_o : out std_logic;
+ rx_error_o : out std_logic;
+ rx_data_o : out std_logic_vector(7 downto 0));
+ end component;
+
+ component uart_async_tx
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ baud_tick_i : in std_logic;
+ txd_o : out std_logic;
+ tx_start_p_i : in std_logic;
+ tx_data_i : in std_logic_vector(7 downto 0);
+ tx_busy_o : out std_logic);
+ end component;
+
+ component simple_uart_wb
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ rdr_rack_o : out std_logic;
+ host_rack_o : out std_logic;
+ regs_i : in t_uart_in_registers;
+ regs_o : out t_uart_out_registers
+ );
+ end component;
+
+ signal rx_ready_reg : std_logic;
+ signal rx_ready : std_logic;
+ signal uart_bcr : std_logic_vector(31 downto 0);
+
+ signal rdr_rack : std_logic;
+ signal host_rack : std_logic;
+
+ signal baud_tick : std_logic;
+ signal baud_tick8 : std_logic;
+
+ signal resized_addr : std_logic_vector(c_wishbone_address_width-1 downto 0);
+
+ signal wb_in : t_wishbone_slave_in;
+ signal wb_out : t_wishbone_slave_out;
+
+ signal regs_in : t_UART_in_registers;
+ signal regs_out : t_UART_out_registers;
+
+ signal fifo_empty, fifo_full, fifo_rd, fifo_wr : std_logic;
+ signal fifo_count : std_logic_vector(f_log2_size(g_vuart_fifo_size)-1 downto 0);
+
+ signal phys_rx_ready, phys_tx_busy : std_logic;
+
+ signal phys_rx_data : std_logic_vector(7 downto 0);
+
+
+begin -- syn
+
+ gen_check_generics : if(not g_with_physical_uart and not g_with_virtual_uart) generate
+ assert false report "wb_simple_uart: dummy configuration (use virtual, physical or both uarts)" severity failure;
+ end generate gen_check_generics;
+
+ resized_addr(4 downto 0) <= wb_adr_i;
+ resized_addr(c_wishbone_address_width-1 downto 5) <= (others => '0');
+
+ U_Adapter : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ master_i => wb_out,
+ master_o => wb_in,
+ sl_adr_i => resized_addr,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_stall_o => wb_stall_o);
+
+ U_WB_SLAVE : simple_uart_wb
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_in.adr(2 downto 0),
+ wb_dat_i => wb_in.dat,
+ wb_dat_o => wb_out.dat,
+ wb_cyc_i => wb_in.cyc,
+ wb_sel_i => wb_in.sel,
+ wb_stb_i => wb_in.stb,
+ wb_we_i => wb_in.we,
+ wb_ack_o => wb_out.ack,
+ wb_stall_o => wb_out.stall,
+
+ rdr_rack_o => rdr_rack,
+ host_rack_o => host_rack,
+ regs_o => regs_out,
+ regs_i => regs_in);
+
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+ wb_out.int <= '0';
+
+ gen_phys_uart : if(g_with_physical_uart) generate
+
+ p_bcr_reg : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ uart_bcr <= (others => '0');
+ elsif(regs_out.bcr_wr_o = '1')then
+ uart_bcr <= regs_out.bcr_o;
+ end if;
+ end if;
+ end process;
+
+ U_BAUD_GEN : uart_baud_gen
+ generic map (
+ g_baud_acc_width => c_baud_acc_width)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ baudrate_i => uart_bcr(c_baud_acc_width downto 0),
+ baud_tick_o => baud_tick,
+ baud8_tick_o => baud_tick8);
+
+ U_TX : uart_async_tx
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ baud_tick_i => baud_tick,
+ txd_o => uart_txd_o,
+ tx_start_p_i => regs_out.tdr_tx_data_wr_o,
+ tx_data_i => regs_out.tdr_tx_data_o,
+ tx_busy_o => phys_tx_busy);
+
+ U_RX : uart_async_rx
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ baud8_tick_i => baud_tick8,
+ rxd_i => uart_rxd_i,
+ rx_ready_o => phys_rx_ready,
+ rx_error_o => open,
+ rx_data_o => phys_rx_data);
+
+ end generate gen_phys_uart;
+
+ gen_vuart : if(g_with_virtual_uart) generate
+
+ fifo_wr <= not fifo_full and regs_out.tdr_tx_data_wr_o;
+ fifo_rd <= not fifo_empty and not regs_in.host_rdr_rdy_i;
+
+ U_VUART_FIFO : generic_sync_fifo
+ generic map (
+ g_data_width => 8,
+ g_size => g_vuart_fifo_size,
+ g_with_count => true)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_sys_i,
+ d_i => regs_out.tdr_tx_data_o,
+ we_i => fifo_wr,
+ q_o => regs_in.host_rdr_data_i,
+ rd_i => fifo_rd,
+ empty_o => fifo_empty,
+ full_o => fifo_full,
+ count_o => fifo_count);
+
+ regs_in.host_rdr_count_i(fifo_count'left downto 0) <= fifo_count;
+ regs_in.host_rdr_count_i(15 downto fifo_count'length) <= (others => '0');
+
+ p_vuart_rx_ready : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ regs_in.host_rdr_rdy_i <= '0';
+ elsif(fifo_rd = '1') then
+ regs_in.host_rdr_rdy_i <= '1';
+ elsif(host_rack = '1') then
+ regs_in.host_rdr_rdy_i <= '0';
+ end if;
+ end if;
+ end process;
+
+ end generate gen_vuart;
+
+ p_drive_rx_ready : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ regs_in.sr_rx_rdy_i <= '0';
+ regs_in.rdr_rx_data_i <= (others => '0');
+ else
+ if(rdr_rack = '1' and phys_rx_ready = '0' and regs_out.host_tdr_data_wr_o = '0') then
+ regs_in.sr_rx_rdy_i <= '0';
+ elsif(phys_rx_ready = '1' and g_with_physical_uart) then
+ regs_in.sr_rx_rdy_i <= '1';
+ regs_in.rdr_rx_data_i <= phys_rx_data;
+ elsif(regs_out.host_tdr_data_wr_o = '1' and g_with_virtual_uart) then
+ regs_in.sr_rx_rdy_i <= '1';
+ regs_in.rdr_rx_data_i <= regs_out.host_tdr_data_o;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ regs_in.sr_tx_busy_i <= phys_tx_busy when (g_with_physical_uart) else '0';
+ regs_in.host_tdr_rdy_i <= not regs_in.sr_rx_rdy_i;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd
new file mode 100644
index 000000000..5914773d2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wb_uart/xwb_simple_uart.vhd
@@ -0,0 +1,129 @@
+------------------------------------------------------------------------------
+-- Title : Simple Wishbone UART
+-- Project : General Cores Collection (gencores) library
+------------------------------------------------------------------------------
+-- File : xwb_simple_uart.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-05-18
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A simple UART controller, providing two modes of operation
+-- (both can be used simultenously):
+-- - physical UART (encoding fixed to 8 data bits, no parity and one stop bit)
+-- - virtual UART: TXed data is passed via a FIFO to the Wishbone host (and
+-- vice versa).
+-------------------------------------------------------------------------------
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-05-18 1.0 twlostow Created
+-- 2011-10-04 1.1 twlostow xwb module
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.wishbone_pkg.all;
+
+entity xwb_simple_uart is
+ generic(
+ g_with_virtual_uart : boolean := true;
+ g_with_physical_uart : boolean := true;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_vuart_fifo_size : integer := 1024
+ );
+
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+
+ uart_rxd_i: in std_logic;
+ uart_txd_o: out std_logic
+
+ );
+
+end xwb_simple_uart;
+
+architecture rtl of xwb_simple_uart is
+
+ component wb_simple_uart
+ generic (
+ g_with_virtual_uart : boolean;
+ g_with_physical_uart : boolean;
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_vuart_fifo_size : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic);
+ end component;
+
+begin -- rtl
+
+ U_Wrapped_UART: wb_simple_uart
+ generic map (
+ g_with_virtual_uart => g_with_virtual_uart,
+ g_with_physical_uart => g_with_physical_uart,
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_vuart_fifo_size => g_vuart_fifo_size)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ wb_adr_i => slave_i.adr(4 downto 0),
+ wb_dat_i => slave_i.dat,
+ wb_dat_o => slave_o.dat,
+ wb_cyc_i => slave_i.cyc,
+ wb_sel_i => slave_i.sel,
+ wb_stb_i => slave_i.stb,
+ wb_we_i => slave_i.we,
+ wb_ack_o => slave_o.ack,
+ wb_stall_o => slave_o.stall,
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o);
+
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+ slave_o.int <='0';
+
+ desc_o <= (others => '0');
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd
new file mode 100644
index 000000000..7962e6b6f
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_eic.vhd
@@ -0,0 +1,241 @@
+-------------------------------------------------------------------------------
+-- Title : WBGEN components
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wbgen2_eic.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+use work.wbgen2_pkg.all;
+
+entity wbgen2_eic is
+
+ generic (
+ g_num_interrupts : natural := 1;
+
+ g_irq00_mode : integer := 0;
+ g_irq01_mode : integer := 0;
+ g_irq02_mode : integer := 0;
+ g_irq03_mode : integer := 0;
+ g_irq04_mode : integer := 0;
+ g_irq05_mode : integer := 0;
+ g_irq06_mode : integer := 0;
+ g_irq07_mode : integer := 0;
+ g_irq08_mode : integer := 0;
+ g_irq09_mode : integer := 0;
+ g_irq0a_mode : integer := 0;
+ g_irq0b_mode : integer := 0;
+ g_irq0c_mode : integer := 0;
+ g_irq0d_mode : integer := 0;
+ g_irq0e_mode : integer := 0;
+ g_irq0f_mode : integer := 0;
+ g_irq10_mode : integer := 0;
+ g_irq11_mode : integer := 0;
+ g_irq12_mode : integer := 0;
+ g_irq13_mode : integer := 0;
+ g_irq14_mode : integer := 0;
+ g_irq15_mode : integer := 0;
+ g_irq16_mode : integer := 0;
+ g_irq17_mode : integer := 0;
+ g_irq18_mode : integer := 0;
+ g_irq19_mode : integer := 0;
+ g_irq1a_mode : integer := 0;
+ g_irq1b_mode : integer := 0;
+ g_irq1c_mode : integer := 0;
+ g_irq1d_mode : integer := 0;
+ g_irq1e_mode : integer := 0;
+ g_irq1f_mode : integer := 0
+ );
+ port(
+ rst_n_i : in std_logic; -- reset & system clock, as always :)
+ clk_i : in std_logic;
+
+ -- raw interrupt inputs
+ irq_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+
+ -- interrupt acknowledge signal, used for level-active interrupts to
+ -- indicate that the interrupt has been handled
+ irq_ack_o: out std_logic_vector(g_num_interrupts-1 downto 0);
+
+-- interrupt mask regsiter (slv/bus read-only)
+ reg_imr_o : out std_logic_vector(g_num_interrupts-1 downto 0);
+
+-- interrupt enable/disable registers (slv/bus pass-through)
+ reg_ier_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_ier_wr_stb_i : in std_logic;
+
+ reg_idr_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_idr_wr_stb_i : in std_logic;
+
+-- interrupt status register (slv/bus write with LOAD_EXT)
+ reg_isr_o : out std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_isr_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_isr_wr_stb_i : in std_logic;
+
+-- multiplexed wishbone irq output
+ wb_irq_o : out std_logic
+
+ );
+
+end wbgen2_eic;
+
+architecture syn of wbgen2_eic is
+
+ subtype t_irq_mode is integer;
+ type t_irq_mode_vec is array (0 to 31) of t_irq_mode;
+
+ constant c_IRQ_MODE_RISING_EDGE : t_irq_mode := 0;
+ constant c_IRQ_MODE_FALLING_EDGE : t_irq_mode := 1;
+ constant c_IRQ_MODE_LEVEL_0 : t_irq_mode := 2;
+ constant c_IRQ_MODE_LEVEL_1 : t_irq_mode := 3;
+
+
+ signal irq_mode : t_irq_mode_vec;
+
+ signal irq_mask : std_logic_vector(g_num_interrupts-1 downto 0);
+ signal irq_pending : std_logic_vector(g_num_interrupts-1 downto 0);
+
+ signal irq_i_d0 : std_logic_vector(g_num_interrupts-1 downto 0);
+ signal irq_i_d1 : std_logic_vector(g_num_interrupts-1 downto 0);
+ signal irq_i_d2 : std_logic_vector(g_num_interrupts-1 downto 0);
+
+begin -- syn
+
+ irq_mode(0) <= g_irq00_mode;
+ irq_mode(1) <= g_irq01_mode;
+ irq_mode(2) <= g_irq02_mode;
+ irq_mode(3) <= g_irq03_mode;
+ irq_mode(4) <= g_irq04_mode;
+ irq_mode(5) <= g_irq05_mode;
+ irq_mode(6) <= g_irq06_mode;
+ irq_mode(7) <= g_irq07_mode;
+ irq_mode(8) <= g_irq08_mode;
+ irq_mode(9) <= g_irq09_mode;
+ irq_mode(10) <= g_irq0a_mode;
+ irq_mode(11) <= g_irq0b_mode;
+ irq_mode(12) <= g_irq0c_mode;
+ irq_mode(13) <= g_irq0d_mode;
+ irq_mode(14) <= g_irq0e_mode;
+ irq_mode(15) <= g_irq0f_mode;
+ irq_mode(16) <= g_irq10_mode;
+ irq_mode(17) <= g_irq11_mode;
+ irq_mode(18) <= g_irq12_mode;
+ irq_mode(19) <= g_irq13_mode;
+ irq_mode(20) <= g_irq14_mode;
+ irq_mode(21) <= g_irq15_mode;
+ irq_mode(22) <= g_irq16_mode;
+ irq_mode(23) <= g_irq17_mode;
+ irq_mode(24) <= g_irq18_mode;
+ irq_mode(25) <= g_irq19_mode;
+ irq_mode(26) <= g_irq1a_mode;
+ irq_mode(27) <= g_irq1b_mode;
+ irq_mode(28) <= g_irq1c_mode;
+ irq_mode(29) <= g_irq1d_mode;
+ irq_mode(30) <= g_irq1e_mode;
+ irq_mode(31) <= g_irq1f_mode;
+
+
+ process(clk_i, rst_n_i)
+ begin
+ if(rst_n_i = '0') then
+ irq_i_d0 <= (others => '0');
+ irq_i_d1 <= (others => '0');
+ irq_i_d1 <= (others => '0');
+ irq_pending <= (others => '0');
+ irq_mask <= (others => '0');
+
+ elsif rising_edge(clk_i) then
+
+ for i in 0 to g_num_interrupts-1 loop
+
+ irq_i_d0(i) <= irq_i(i);
+ irq_i_d1(i) <= irq_i_d0(i);
+ irq_i_d2(i) <= irq_i_d1(i);
+
+
+ if((reg_isr_i(i) = '1' and reg_isr_wr_stb_i = '1') or irq_mask(i) = '0') then
+ irq_pending(i) <= '0';
+ irq_i_d0(i) <= '0';
+ irq_i_d1(i) <= '0';
+ irq_i_d2(i) <= '0';
+
+ else
+
+ case irq_mode(i) is
+ when c_IRQ_MODE_LEVEL_0 => irq_pending(i) <= not irq_i_d2(i);
+ when c_IRQ_MODE_LEVEL_1 => irq_pending(i) <= irq_i_d2(i);
+ when c_IRQ_MODE_RISING_EDGE => irq_pending(i) <= irq_pending(i) or ((not irq_i_d2(i)) and irq_i_d1(i));
+ when c_IRQ_MODE_FALLING_EDGE => irq_pending(i) <= irq_pending(i) or ((not irq_i_d1(i)) and irq_i_d2(i));
+ when others => null;
+ end case;
+ end if;
+ end loop; -- i
+
+ if(reg_ier_wr_stb_i = '1') then
+ for i in 0 to g_num_interrupts-1 loop
+ if(reg_ier_i(i) = '1') then
+ irq_mask(i) <= '1';
+ end if;
+ end loop;
+ end if;
+
+ if(reg_idr_wr_stb_i = '1') then
+ for i in 0 to g_num_interrupts-1 loop
+ if(reg_idr_i(i) = '1') then
+ irq_mask(i) <= '0';
+ end if;
+ end loop;
+ end if;
+ end if;
+ end process;
+
+ -- generation of wb_irq_o
+
+ process(clk_i, rst_n_i)
+ begin
+ if(rst_n_i = '0') then
+ wb_irq_o <= '0';
+ elsif rising_edge(clk_i) then
+ if(irq_pending = std_logic_vector(to_unsigned(0, g_num_interrupts))) then
+ wb_irq_o <= '0';
+ else
+ wb_irq_o <= '1';
+ end if;
+
+ end if;
+ end process;
+
+ gen_irq_ack: for i in 0 to g_num_interrupts-1 generate
+ irq_ack_o(i) <= '1' when (reg_isr_wr_stb_i = '1' and reg_isr_i(i) = '1') else '0';
+ end generate gen_irq_ack;
+
+ reg_imr_o <= irq_mask;
+ reg_isr_o <= irq_pending;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd
new file mode 100644
index 000000000..8905cc9dc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_fifo_sync.vhd
@@ -0,0 +1,144 @@
+-------------------------------------------------------------------------------
+-- Title : WBGEN components
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wbgen2_fifo_sync.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.wbgen2_pkg.all;
+
+
+entity wbgen2_fifo_sync is
+ generic (
+ g_width : integer;
+ g_size : integer;
+ g_usedw_size : integer);
+
+ port
+ (
+
+ clk_i : in std_logic;
+ rst_n_i : in std_logic := '1';
+
+ wr_data_i : in std_logic_vector(g_width-1 downto 0);
+ wr_req_i : in std_logic;
+
+ rd_data_o : out std_logic_vector(g_width-1 downto 0);
+ rd_req_i : in std_logic;
+
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0);
+
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0)
+
+ );
+end wbgen2_fifo_sync;
+
+
+architecture rtl of wbgen2_fifo_sync is
+
+
+ function f_log2_size (A : natural) return natural is
+ begin
+ for I in 1 to 64 loop -- Works for up to 64 bits
+ if (2**I > A) then
+ return(I-1);
+ end if;
+ end loop;
+ return(63);
+ end function f_log2_size;
+
+ component generic_sync_fifo
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_show_ahead : boolean;
+ g_with_empty : boolean;
+ g_with_full : boolean;
+ g_with_almost_empty : boolean;
+ g_with_almost_full : boolean;
+ g_with_count : boolean;
+ g_almost_empty_threshold : integer := 0;
+ g_almost_full_threshold : integer := 0);
+ port (
+ rst_n_i : in std_logic := '1';
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ we_i : in std_logic;
+ q_o : out std_logic_vector(g_data_width-1 downto 0);
+ rd_i : in std_logic;
+ empty_o : out std_logic;
+ full_o : out std_logic;
+ almost_empty_o : out std_logic;
+ almost_full_o : out std_logic;
+ count_o : out std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+ signal empty_int : std_logic;
+ signal full_int : std_logic;
+ signal usedw_int : std_logic_vector(g_usedw_size-1 downto 0);
+
+begin
+
+ wrapped_fifo: generic_sync_fifo
+ generic map (
+ g_data_width => g_width,
+ g_size => g_size,
+ g_show_ahead => false,
+ g_with_empty => true,
+ g_with_full => true,
+ g_with_almost_empty => false,
+ g_with_almost_full => false,
+ g_with_count => true)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_i,
+ d_i => wr_data_i,
+ we_i => wr_req_i,
+ q_o => rd_data_o,
+ rd_i => rd_req_i,
+ empty_o => empty_int,
+ full_o => full_int,
+ almost_empty_o => open,
+ almost_full_o => open,
+ count_o => usedw_int);
+
+
+ rd_empty_o <= empty_int;
+ rd_full_o <= full_int;
+ rd_usedw_o <= usedw_int;
+
+ wr_empty_o <= empty_int;
+ wr_full_o <= full_int;
+ wr_usedw_o <= usedw_int;
+
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd
new file mode 100644
index 000000000..aabce15a7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wbgen2/wbgen2_pkg.vhd
@@ -0,0 +1,154 @@
+-------------------------------------------------------------------------------
+-- Title : WBGEN components
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wbgen2_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011-2012 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+package wbgen2_pkg is
+
+
+ component wbgen2_dpssram
+ generic (
+ g_data_width : natural;
+ g_size : natural;
+ g_addr_width : natural;
+ g_dual_clock : boolean;
+ g_use_bwsel : boolean);
+ port (
+ clk_a_i : in std_logic;
+ clk_b_i : in std_logic;
+ addr_a_i : in std_logic_vector(g_addr_width-1 downto 0);
+ addr_b_i : in std_logic_vector(g_addr_width-1 downto 0);
+ data_a_i : in std_logic_vector(g_data_width-1 downto 0);
+ data_b_i : in std_logic_vector(g_data_width-1 downto 0);
+ data_a_o : out std_logic_vector(g_data_width-1 downto 0);
+ data_b_o : out std_logic_vector(g_data_width-1 downto 0);
+ bwsel_a_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ bwsel_b_i : in std_logic_vector((g_data_width+7)/8-1 downto 0);
+ rd_a_i : in std_logic;
+ rd_b_i : in std_logic;
+ wr_a_i : in std_logic;
+ wr_b_i : in std_logic);
+ end component;
+
+
+ component wbgen2_eic
+ generic (
+ g_num_interrupts : natural;
+ g_irq00_mode : integer;
+ g_irq01_mode : integer;
+ g_irq02_mode : integer;
+ g_irq03_mode : integer;
+ g_irq04_mode : integer;
+ g_irq05_mode : integer;
+ g_irq06_mode : integer;
+ g_irq07_mode : integer;
+ g_irq08_mode : integer;
+ g_irq09_mode : integer;
+ g_irq0a_mode : integer;
+ g_irq0b_mode : integer;
+ g_irq0c_mode : integer;
+ g_irq0d_mode : integer;
+ g_irq0e_mode : integer;
+ g_irq0f_mode : integer;
+ g_irq10_mode : integer;
+ g_irq11_mode : integer;
+ g_irq12_mode : integer;
+ g_irq13_mode : integer;
+ g_irq14_mode : integer;
+ g_irq15_mode : integer;
+ g_irq16_mode : integer;
+ g_irq17_mode : integer;
+ g_irq18_mode : integer;
+ g_irq19_mode : integer;
+ g_irq1a_mode : integer;
+ g_irq1b_mode : integer;
+ g_irq1c_mode : integer;
+ g_irq1d_mode : integer;
+ g_irq1e_mode : integer;
+ g_irq1f_mode : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ irq_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ irq_ack_o : out std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_imr_o : out std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_ier_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_ier_wr_stb_i : in std_logic;
+ reg_idr_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_idr_wr_stb_i : in std_logic;
+ reg_isr_o : out std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_isr_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ reg_isr_wr_stb_i : in std_logic;
+ wb_irq_o : out std_logic);
+ end component;
+
+ component wbgen2_fifo_async
+ generic (
+ g_size : integer;
+ g_width : integer;
+ g_usedw_size : integer);
+ port (
+ rst_n_i : in std_logic := '1';
+ rd_clk_i : in std_logic;
+ rd_req_i : in std_logic;
+ rd_data_o : out std_logic_vector(g_width-1 downto 0);
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0);
+ wr_clk_i : in std_logic;
+ wr_req_i : in std_logic;
+ wr_data_i : in std_logic_vector(g_width-1 downto 0);
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0));
+ end component;
+
+
+ component wbgen2_fifo_sync
+ generic (
+ g_width : integer;
+ g_size : integer;
+ g_usedw_size : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic := '1';
+ wr_data_i : in std_logic_vector(g_width-1 downto 0);
+ wr_req_i : in std_logic;
+ rd_data_o : out std_logic_vector(g_width-1 downto 0);
+ rd_req_i : in std_logic;
+ wr_empty_o : out std_logic;
+ wr_full_o : out std_logic;
+ wr_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0);
+ rd_empty_o : out std_logic;
+ rd_full_o : out std_logic;
+ rd_usedw_o : out std_logic_vector(g_usedw_size -1 downto 0));
+ end component;
+
+end wbgen2_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd
new file mode 100644
index 000000000..b7dfdfafc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/ip_cores/general-cores/modules/wishbone/wishbone_pkg.vhd
@@ -0,0 +1,2130 @@
+-------------------------------------------------------------------------------
+-- Title : Wishbone package
+-- Project : General Cores
+-------------------------------------------------------------------------------
+-- File : wishbone_pkg.vhd
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Copyright (c) 2011-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.genram_pkg.all;
+
+package wishbone_pkg is
+
+ constant c_wishbone_address_width : integer := 32;
+ constant c_wishbone_data_width : integer := 32;
+
+ subtype t_wishbone_address is
+ std_logic_vector(c_wishbone_address_width-1 downto 0);
+ subtype t_wishbone_data is
+ std_logic_vector(c_wishbone_data_width-1 downto 0);
+ subtype t_wishbone_byte_select is
+ std_logic_vector((c_wishbone_address_width/8)-1 downto 0);
+ subtype t_wishbone_cycle_type is
+ std_logic_vector(2 downto 0);
+ subtype t_wishbone_burst_type is
+ std_logic_vector(1 downto 0);
+
+ type t_wishbone_interface_mode is (CLASSIC, PIPELINED);
+ type t_wishbone_address_granularity is (BYTE, WORD);
+
+ type t_wishbone_master_out is record
+ cyc : std_logic;
+ stb : std_logic;
+ adr : t_wishbone_address;
+ sel : t_wishbone_byte_select;
+ we : std_logic;
+ dat : t_wishbone_data;
+ end record t_wishbone_master_out;
+
+ subtype t_wishbone_slave_in is t_wishbone_master_out;
+
+ type t_wishbone_slave_out is record
+ ack : std_logic;
+ err : std_logic;
+ rty : std_logic;
+ stall : std_logic;
+ int : std_logic;
+ dat : t_wishbone_data;
+ end record t_wishbone_slave_out;
+ subtype t_wishbone_master_in is t_wishbone_slave_out;
+
+ subtype t_wishbone_device_descriptor is std_logic_vector(255 downto 0);
+
+ type t_wishbone_byte_select_array is array(natural range <>) of t_wishbone_byte_select;
+ type t_wishbone_data_array is array(natural range <>) of t_wishbone_data;
+ type t_wishbone_address_array is array(natural range <>) of t_wishbone_address;
+ type t_wishbone_master_out_array is array (natural range <>) of t_wishbone_master_out;
+ --type t_wishbone_slave_in_array is array (natural range <>) of t_wishbone_slave_in;
+ subtype t_wishbone_slave_in_array is t_wishbone_master_out_array;
+ type t_wishbone_slave_out_array is array (natural range <>) of t_wishbone_slave_out;
+ --type t_wishbone_master_in_array is array (natural range <>) of t_wishbone_master_in;
+ subtype t_wishbone_master_in_array is t_wishbone_slave_out_array;
+
+ constant cc_dummy_address : std_logic_vector(c_wishbone_address_width-1 downto 0) :=
+ (others => 'X');
+ constant cc_dummy_data : std_logic_vector(c_wishbone_data_width-1 downto 0) :=
+ (others => 'X');
+ constant cc_dummy_sel : std_logic_vector(c_wishbone_data_width/8-1 downto 0) :=
+ (others => 'X');
+ constant cc_dummy_slave_in : t_wishbone_slave_in :=
+ ('0', '0', cc_dummy_address, cc_dummy_sel, 'X', cc_dummy_data);
+ constant cc_dummy_master_out : t_wishbone_master_out := cc_dummy_slave_in;
+
+ -- Dangerous! Will stall a bus.
+ constant cc_dummy_slave_out : t_wishbone_slave_out :=
+ ('X', 'X', 'X', 'X', 'X', cc_dummy_data);
+ constant cc_dummy_master_in : t_wishbone_master_in := cc_dummy_slave_out;
+
+ constant cc_dummy_address_array : t_wishbone_address_array(0 downto 0) := (0 => cc_dummy_address);
+
+ -- A generally useful function.
+ function f_ceil_log2(x : natural) return natural;
+ function f_bits2string(s : std_logic_vector) return string;
+
+ function f_string2bits(s : string) return std_logic_vector;
+ function f_string2svl (s : string) return std_logic_vector;
+ function f_slv2string (slv : std_logic_vector) return string;
+
+ function f_string_fix_len( s : string; ret_len : natural := 10; fill_char : character := '0'; justify_right : boolean := true ) return string;
+ function f_hot_to_bin(x : std_logic_vector) return natural;
+
+ -- *** Wishbone slave interface functions ***
+ -- f_wb_wr:
+ -- processes an incoming write reqest to a register while honoring the select lines
+ -- valid modes are overwrite "owr", set "set" (bits are or'ed) and clear "clr" (bits are nand'ed)
+ function f_wb_wr(pval : std_logic_vector; ival : std_logic_vector; sel : std_logic_vector; mode : string := "owr") return std_logic_vector;
+------------------------------------------------------------------------------
+-- SDB declaration
+------------------------------------------------------------------------------
+
+ constant c_sdb_device_length : natural := 512; -- bits
+ subtype t_sdb_record is std_logic_vector(c_sdb_device_length-1 downto 0);
+ type t_sdb_record_array is array(natural range <>) of t_sdb_record;
+
+ type t_sdb_product is record
+ vendor_id : std_logic_vector(63 downto 0);
+ device_id : std_logic_vector(31 downto 0);
+ version : std_logic_vector(31 downto 0);
+ date : std_logic_vector(31 downto 0);
+ name : string(1 to 19);
+ end record t_sdb_product;
+
+ type t_sdb_component is record
+ addr_first : std_logic_vector(63 downto 0);
+ addr_last : std_logic_vector(63 downto 0);
+ product : t_sdb_product;
+ end record t_sdb_component;
+
+ constant c_sdb_endian_big : std_logic := '0';
+ constant c_sdb_endian_little : std_logic := '1';
+ type t_sdb_device is record
+ abi_class : std_logic_vector(15 downto 0);
+ abi_ver_major : std_logic_vector(7 downto 0);
+ abi_ver_minor : std_logic_vector(7 downto 0);
+ wbd_endian : std_logic; -- 0 = big, 1 = little
+ wbd_width : std_logic_vector(3 downto 0); -- 3=64-bit, 2=32-bit, 1=16-bit, 0=8-bit
+ sdb_component : t_sdb_component;
+ end record t_sdb_device;
+
+ type t_sdb_msi is record
+ wbd_endian : std_logic; -- 0 = big, 1 = little
+ wbd_width : std_logic_vector(3 downto 0); -- 3=64-bit, 2=32-bit, 1=16-bit, 0=8-bit
+ sdb_component : t_sdb_component;
+ end record t_sdb_msi;
+
+ type t_sdb_bridge is record
+ sdb_child : std_logic_vector(63 downto 0);
+ sdb_component : t_sdb_component;
+ end record t_sdb_bridge;
+
+ type t_sdb_integration is record
+ product : t_sdb_product;
+ end record t_sdb_integration;
+
+ type t_sdb_repo_url is record
+ repo_url : string(1 to 63);
+ end record t_sdb_repo_url;
+
+ type t_sdb_synthesis is record
+ syn_module_name : string(1 to 16);
+ syn_commit_id : string(1 to 32);
+ syn_tool_name : string(1 to 8);
+ syn_tool_version : std_logic_vector(31 downto 0);
+ syn_date : std_logic_vector(31 downto 0);
+ syn_username : string(1 to 15);
+ end record t_sdb_synthesis;
+
+ -- If you have a Wishbone master that does not receive MSI,
+ -- list it in the layout as 'f_sdb_auto_msi(c_null_msi, false)'
+ constant c_null_msi : t_sdb_msi := (
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"0",
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"0000000000000000",
+ product => (
+ vendor_id => x"0000000000000000",
+ device_id => x"00000000",
+ version => x"00000000",
+ date => x"00000000",
+ name => " ")));
+
+ -- general crossbar building functions
+ function f_sdb_create_array(g_enum_dev_id : boolean := false;
+ g_dev_id_offs : natural := 0;
+ g_enum_dev_name : boolean := false;
+ g_dev_name_offs : natural := 0;
+ device : t_sdb_device;
+ instances : natural := 1) return t_sdb_record_array;
+ function f_sdb_join_arrays(a : t_sdb_record_array; b : t_sdb_record_array) return t_sdb_record_array;
+ function f_sdb_extract_base_addr(sdb_record : t_sdb_record) return std_logic_vector;
+ function f_sdb_extract_end_addr(sdb_record : t_sdb_record) return std_logic_vector;
+ function f_sdb_automap_array(sdb_array : t_sdb_record_array; start_offset : t_wishbone_address := (others => '0')) return t_sdb_record_array;
+ function f_align_addr_offset(offs : unsigned; this_rng : unsigned; prev_rng : unsigned) return unsigned;
+ function f_sdb_create_rom_addr(sdb_array : t_sdb_record_array) return t_wishbone_address;
+
+
+ -- Used to configure a device at a certain address
+ function f_sdb_embed_device(device : t_sdb_device; address : t_wishbone_address) return t_sdb_record;
+ function f_sdb_embed_bridge(bridge : t_sdb_bridge; address : t_wishbone_address) return t_sdb_record;
+ function f_sdb_embed_msi(msi : t_sdb_msi; address : t_wishbone_address) return t_sdb_record;
+ function f_sdb_embed_integration(integr : t_sdb_integration) return t_sdb_record;
+ function f_sdb_embed_repo_url(url : t_sdb_repo_url) return t_sdb_record;
+ function f_sdb_embed_synthesis(syn : t_sdb_synthesis) return t_sdb_record;
+
+ function f_sdb_extract_device(sdb_record : t_sdb_record) return t_sdb_device;
+ function f_sdb_extract_bridge(sdb_record : t_sdb_record) return t_sdb_bridge;
+ function f_sdb_extract_msi(sdb_record : t_sdb_record) return t_sdb_msi;
+ function f_sdb_extract_integration(sdb_record : t_sdb_record) return t_sdb_integration;
+ function f_sdb_extract_repo_url(sdb_record : t_sdb_record) return t_sdb_repo_url;
+ function f_sdb_extract_synthesis(sdb_record : t_sdb_record) return t_sdb_synthesis;
+
+ -- Automatic crossbar mapping functions
+ function f_sdb_auto_device(device : t_sdb_device; enable : boolean := true; name: string := "") return t_sdb_record;
+ function f_sdb_auto_bridge(bridge : t_sdb_bridge; enable : boolean := true; name: string := "") return t_sdb_record;
+ function f_sdb_auto_msi (msi : t_sdb_msi; enable : boolean := true) return t_sdb_record;
+ function f_sdb_auto_layout(records: t_sdb_record_array) return t_sdb_record_array;
+ function f_sdb_auto_layout(slaves : t_sdb_record_array; masters : t_sdb_record_array) return t_sdb_record_array;
+ function f_sdb_auto_sdb (records: t_sdb_record_array) return t_wishbone_address;
+ function f_sdb_auto_sdb (slaves : t_sdb_record_array; masters : t_sdb_record_array) return t_wishbone_address;
+
+ -- For internal use by the crossbar
+ function f_sdb_bus_end(g_wraparound : boolean; g_layout : t_sdb_record_array; g_sdb_addr : t_wishbone_address; msi : boolean) return unsigned;
+ function f_sdb_embed_product(product : t_sdb_product) return std_logic_vector; -- (319 downto 8)
+ function f_sdb_embed_component(sdb_component : t_sdb_component; address : t_wishbone_address) return std_logic_vector; -- (447 downto 8)
+ function f_sdb_extract_product(sdb_record : std_logic_vector(319 downto 8)) return t_sdb_product;
+ function f_sdb_extract_component(sdb_record : std_logic_vector(447 downto 8)) return t_sdb_component;
+
+------------------------------------------------------------------------------
+-- Components declaration
+-------------------------------------------------------------------------------
+
+ component wb_slave_adapter
+ generic (
+ g_master_use_struct : boolean;
+ g_master_mode : t_wishbone_interface_mode;
+ g_master_granularity : t_wishbone_address_granularity;
+ g_slave_use_struct : boolean;
+ g_slave_mode : t_wishbone_interface_mode;
+ g_slave_granularity : t_wishbone_address_granularity);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ sl_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := cc_dummy_address;
+ sl_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := cc_dummy_data;
+ sl_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0) := cc_dummy_sel;
+ sl_cyc_i : in std_logic := '0';
+ sl_stb_i : in std_logic := '0';
+ sl_we_i : in std_logic := '0';
+ sl_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ sl_err_o : out std_logic;
+ sl_rty_o : out std_logic;
+ sl_ack_o : out std_logic;
+ sl_stall_o : out std_logic;
+ sl_int_o : out std_logic;
+ slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ ma_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ ma_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ ma_sel_o : out std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ ma_cyc_o : out std_logic;
+ ma_stb_o : out std_logic;
+ ma_we_o : out std_logic;
+ ma_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := cc_dummy_data;
+ ma_err_i : in std_logic := '0';
+ ma_rty_i : in std_logic := '0';
+ ma_ack_i : in std_logic := '0';
+ ma_stall_i : in std_logic := '0';
+ ma_int_i : in std_logic := '0';
+ master_i : in t_wishbone_master_in := cc_dummy_slave_out;
+ master_o : out t_wishbone_master_out);
+ end component;
+
+ component wb_async_bridge
+ generic (
+ g_simulation : integer;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_cpu_address_width : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ cpu_cs_n_i : in std_logic;
+ cpu_wr_n_i : in std_logic;
+ cpu_rd_n_i : in std_logic;
+ cpu_bs_n_i : in std_logic_vector(3 downto 0);
+ cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0);
+ cpu_data_b : inout std_logic_vector(31 downto 0);
+ cpu_nwait_o : out std_logic;
+ wb_adr_o : out std_logic_vector(c_wishbone_address_width - 1 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_stb_o : out std_logic;
+ wb_we_o : out std_logic;
+ wb_sel_o : out std_logic_vector(3 downto 0);
+ wb_cyc_o : out std_logic;
+ wb_dat_i : in std_logic_vector (c_wishbone_data_width-1 downto 0);
+ wb_ack_i : in std_logic;
+ wb_stall_i : in std_logic := '0');
+ end component;
+
+ component xwb_async_bridge
+ generic (
+ g_simulation : integer;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_cpu_address_width : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ cpu_cs_n_i : in std_logic;
+ cpu_wr_n_i : in std_logic;
+ cpu_rd_n_i : in std_logic;
+ cpu_bs_n_i : in std_logic_vector(3 downto 0);
+ cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0);
+ cpu_data_b : inout std_logic_vector(31 downto 0);
+ cpu_nwait_o : out std_logic;
+ master_o : out t_wishbone_master_out;
+ master_i : in t_wishbone_master_in);
+ end component;
+
+ component xwb_bus_fanout
+ generic (
+ g_num_outputs : natural;
+ g_bits_per_slave : integer;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_slave_interface_mode : t_wishbone_interface_mode := CLASSIC);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in_array(0 to g_num_outputs-1);
+ master_o : out t_wishbone_master_out_array(0 to g_num_outputs-1));
+ end component;
+
+ component xwb_crossbar
+ generic (
+ g_num_masters : integer;
+ g_num_slaves : integer;
+ g_registered : boolean;
+ g_address : t_wishbone_address_array;
+ g_mask : t_wishbone_address_array);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in_array(g_num_masters-1 downto 0);
+ slave_o : out t_wishbone_slave_out_array(g_num_masters-1 downto 0);
+ master_i : in t_wishbone_master_in_array(g_num_slaves-1 downto 0);
+ master_o : out t_wishbone_master_out_array(g_num_slaves-1 downto 0);
+ sdb_sel_o : out std_logic_vector(g_num_masters-1 downto 0)); -- leave open!
+ end component;
+
+ -- Use the f_xwb_bridge_*_sdb to bridge a crossbar to another
+ function f_xwb_bridge_manual_sdb( -- take a manual bus size
+ g_size : t_wishbone_address;
+ g_sdb_addr : t_wishbone_address) return t_sdb_bridge;
+
+ function f_xwb_bridge_layout_sdb( -- determine bus size from layout
+ g_wraparound : boolean := true;
+ g_layout : t_sdb_record_array;
+ g_sdb_addr : t_wishbone_address) return t_sdb_bridge;
+
+ function f_xwb_msi_manual_sdb( -- take a manual bus size
+ g_size : t_wishbone_address) return t_sdb_msi;
+
+ function f_xwb_msi_layout_sdb( -- determine MSI size from layout
+ g_layout : t_sdb_record_array) return t_sdb_msi;
+
+ component xwb_sdb_crossbar
+ generic (
+ g_num_masters : integer;
+ g_num_slaves : integer;
+ g_registered : boolean := false;
+ g_wraparound : boolean := true;
+ g_layout : t_sdb_record_array;
+ g_sdb_addr : t_wishbone_address;
+ g_sdb_name : string := "WB4-Crossbar-GSI ");
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in_array (g_num_masters-1 downto 0);
+ slave_o : out t_wishbone_slave_out_array (g_num_masters-1 downto 0);
+ msi_master_i : in t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in);
+ msi_master_o : out t_wishbone_master_out_array(g_num_masters-1 downto 0);
+ master_i : in t_wishbone_master_in_array (g_num_slaves -1 downto 0);
+ master_o : out t_wishbone_master_out_array(g_num_slaves -1 downto 0);
+ msi_slave_i : in t_wishbone_slave_in_array (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in);
+ msi_slave_o : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0));
+ end component;
+
+ component xwb_register_link -- puts a register of delay between crossbars
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out);
+ end component;
+
+ -- skidpad. acts like a fifo in wb flow control, but costs less
+ component wb_skidpad is
+ generic(
+ g_adrbits : natural := 32
+ );
+ Port(
+ clk_i : std_logic;
+ rst_n_i : std_logic;
+
+ push_i : in std_logic;
+ pop_i : in std_logic;
+ full_o : out std_logic;
+ empty_o : out std_logic;
+
+ adr_i : in std_logic_vector(g_adrbits-1 downto 0);
+ dat_i : in std_logic_vector(32-1 downto 0);
+ sel_i : in std_logic_vector(4-1 downto 0);
+ we_i : in std_logic;
+
+ adr_o : out std_logic_vector(g_adrbits-1 downto 0);
+ dat_o : out std_logic_vector(32-1 downto 0);
+ sel_o : out std_logic_vector(4-1 downto 0);
+ we_o : out std_logic
+ );
+ end component;
+
+ component sdb_rom is
+ generic(
+ g_layout : t_sdb_record_array;
+ g_masters : natural;
+ g_bus_end : unsigned(63 downto 0);
+ g_sdb_name : string := "WB4-Crossbar-GSI ");
+ port(
+ clk_sys_i : in std_logic;
+ master_i : in std_logic_vector(g_masters-1 downto 0);
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out);
+ end component;
+
+ constant c_xwb_dma_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"00",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"000000000000001f",
+ product => (
+ vendor_id => x"0000000000000651", -- GSI
+ device_id => x"cababa56",
+ version => x"00000001",
+ date => x"20120518",
+ name => "WB4-Streaming-DMA_0")));
+ component xwb_dma is
+ generic(
+ -- Value 0 cannot stream
+ -- Value 1 only slaves with async ACK can stream
+ -- Value 2 only slaves with combined latency <= 2 can stream
+ -- Value 3 only slaves with combined latency <= 6 can stream
+ -- Value 4 only slaves with combined latency <= 14 can stream
+ -- ....
+ logRingLen : integer := 4
+ );
+ port(
+ -- Common wishbone signals
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ -- Master reader port
+ r_master_i : in t_wishbone_master_in;
+ r_master_o : out t_wishbone_master_out;
+ -- Master writer port
+ w_master_i : in t_wishbone_master_in;
+ w_master_o : out t_wishbone_master_out;
+ -- Pulsed high completion signal
+ interrupt_o : out std_logic
+ );
+ end component;
+
+ -- If you reset one clock domain, you must reset BOTH!
+ -- Release of the reset lines may be arbitrarily out-of-phase
+ component xwb_clock_crossing is
+ generic(
+ g_size : natural := 16);
+ port(
+ -- Slave control port
+ slave_clk_i : in std_logic;
+ slave_rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ -- Master reader port
+ master_clk_i : in std_logic;
+ master_rst_n_i : in std_logic;
+ master_i : in t_wishbone_master_in;
+ master_o : out t_wishbone_master_out;
+ -- Flow control back-channel for acks
+ slave_ready_o : out std_logic;
+ slave_stall_i : in std_logic := '0');
+ end component;
+
+ -- g_size is in words
+ function f_xwb_dpram(g_size : natural) return t_sdb_device;
+ component xwb_dpram
+ generic (
+ g_size : natural;
+ g_init_file : string := "";
+ g_must_have_init_file : boolean := true;
+ g_slave1_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_slave2_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_slave1_granularity : t_wishbone_address_granularity := WORD;
+ g_slave2_granularity : t_wishbone_address_granularity := WORD);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave1_i : in t_wishbone_slave_in;
+ slave1_o : out t_wishbone_slave_out;
+ slave2_i : in t_wishbone_slave_in;
+ slave2_o : out t_wishbone_slave_out);
+ end component;
+
+ component xwb_dpram_mixed
+ generic(
+ g_size : natural := 16384;
+ g_init_file : string := "";
+ g_must_have_init_file : boolean := true;
+ g_swap_word_endianness : boolean := true;
+ g_slave1_interface_mode : t_wishbone_interface_mode;
+ g_slave2_interface_mode : t_wishbone_interface_mode;
+ g_dpram_port_a_width : integer := 16;
+ g_dpram_port_b_width : integer := 32;
+ g_slave1_granularity : t_wishbone_address_granularity;
+ g_slave2_granularity : t_wishbone_address_granularity);
+ port(
+ clk_slave1_i : in std_logic;
+ clk_slave2_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ slave1_i : in t_wishbone_slave_in;
+ slave1_o : out t_wishbone_slave_out;
+ slave2_i : in t_wishbone_slave_in;
+ slave2_o : out t_wishbone_slave_out);
+ end component;
+
+ -- Just like the DMA controller, but constantly at address 0
+ component xwb_streamer is
+ generic(
+ -- Value 0 cannot stream
+ -- Value 1 only slaves with async ACK can stream
+ -- Value 2 only slaves with combined latency = 2 can stream
+ -- Value 3 only slaves with combined latency = 6 can stream
+ -- Value 4 only slaves with combined latency = 14 can stream
+ -- ....
+ logRingLen : integer := 4
+ );
+ port(
+ -- Common wishbone signals
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ -- Master reader port
+ r_master_i : in t_wishbone_master_in;
+ r_master_o : out t_wishbone_master_out;
+ -- Master writer port
+ w_master_i : in t_wishbone_master_in;
+ w_master_o : out t_wishbone_master_out);
+ end component;
+
+
+ constant c_xwb_gpio_port_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"441c5143",
+ version => x"00000001",
+ date => x"20121129",
+ name => "WB-GPIO-Port ")));
+
+
+ component wb_gpio_port
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_pins : natural range 1 to 256;
+ g_with_builtin_tristates : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_adr_i : in std_logic_vector(7 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ gpio_b : inout std_logic_vector(g_num_pins-1 downto 0);
+ gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0);
+ gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0);
+ gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0));
+ end component;
+
+ component xwb_gpio_port
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_pins : natural range 1 to 256;
+ g_with_builtin_tristates : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+ gpio_b : inout std_logic_vector(g_num_pins-1 downto 0);
+ gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0);
+ gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0);
+ gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0));
+ end component;
+
+ constant c_xwb_i2c_master_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"123c5443",
+ version => x"00000001",
+ date => x"20121129",
+ name => "WB-I2C-Master ")));
+
+
+ component wb_i2c_master
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_interfaces : integer := 1);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_cyc_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_int_o : out std_logic;
+ wb_stall_o : out std_logic;
+ scl_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0);
+ scl_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ scl_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0));
+ end component;
+
+ component xwb_i2c_master
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_interfaces : integer := 1);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+ scl_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0);
+ scl_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ scl_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_pad_i : in std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_pad_o : out std_logic_vector(g_num_interfaces-1 downto 0);
+ sda_padoen_o : out std_logic_vector(g_num_interfaces-1 downto 0));
+ end component;
+
+ component xwb_lm32
+ generic (
+ g_profile : string;
+ g_reset_vector : std_logic_vector(31 downto 0) := x"00000000";
+ g_sdb_address : std_logic_vector(31 downto 0) := x"00000000");
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ irq_i : in std_logic_vector(31 downto 0);
+ dwb_o : out t_wishbone_master_out;
+ dwb_i : in t_wishbone_master_in;
+ iwb_o : out t_wishbone_master_out;
+ iwb_i : in t_wishbone_master_in);
+ end component;
+
+ constant c_xwb_onewire_master_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"779c5443",
+ version => x"00000001",
+ date => x"20121129",
+ name => "WB-OneWire-Master ")));
+
+ component wb_onewire_master
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_ports : integer;
+ g_ow_btp_normal : string := "1.0";
+ g_ow_btp_overdrive : string := "5.0");
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_int_o : out std_logic;
+ wb_stall_o : out std_logic;
+ owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_en_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_i : in std_logic_vector(g_num_ports -1 downto 0));
+ end component;
+
+ component xwb_onewire_master
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_num_ports : integer;
+ g_ow_btp_normal : string := "5.0";
+ g_ow_btp_overdrive : string := "1.0");
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+ owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_en_o : out std_logic_vector(g_num_ports -1 downto 0);
+ owr_i : in std_logic_vector(g_num_ports -1 downto 0));
+ end component;
+
+ constant c_xwb_spi_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"000000000000001F",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"e503947e", -- echo "WB-SPI.Control " | md5sum | cut -c1-8
+ version => x"00000001",
+ date => x"20121116",
+ name => "WB-SPI.Control ")));
+
+ component wb_spi
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_divider_len : integer := 16;
+ g_max_char_len : integer := 128;
+ g_num_slaves : integer := 8);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_cyc_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_err_o : out std_logic;
+ wb_int_o : out std_logic;
+ wb_stall_o : out std_logic;
+ pad_cs_o : out std_logic_vector(g_num_slaves-1 downto 0);
+ pad_sclk_o : out std_logic;
+ pad_mosi_o : out std_logic;
+ pad_miso_i : in std_logic);
+ end component;
+
+ component xwb_spi
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_divider_len : integer := 16;
+ g_max_char_len : integer := 128;
+ g_num_slaves : integer := 8);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+ pad_cs_o : out std_logic_vector(g_num_slaves-1 downto 0);
+ pad_sclk_o : out std_logic;
+ pad_mosi_o : out std_logic;
+ pad_miso_i : in std_logic);
+ end component;
+
+ component wb_simple_uart
+ generic (
+ g_with_virtual_uart : boolean := false;
+ g_with_physical_uart : boolean := true;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_vuart_fifo_size : integer := 1024);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ uart_rxd_i : in std_logic := '1';
+ uart_txd_o : out std_logic);
+ end component;
+
+ component xwb_simple_uart
+ generic (
+ g_with_virtual_uart : boolean := false;
+ g_with_physical_uart : boolean := true;
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_vuart_fifo_size : integer := 1024);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor;
+ uart_rxd_i : in std_logic := '1';
+ uart_txd_o : out std_logic);
+ end component;
+
+ component wb_simple_pwm
+ generic (
+ g_num_channels : integer range 1 to 8;
+ g_regs_size : integer range 1 to 16 := 16;
+ g_default_period : integer range 0 to 255 := 0;
+ g_default_presc : integer range 0 to 255 := 0;
+ g_default_val : integer range 0 to 255 := 0;
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(5 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ pwm_o : out std_logic_vector(g_num_channels-1 downto 0));
+ end component;
+
+ component xwb_simple_pwm
+ generic (
+ g_num_channels : integer range 1 to 8;
+ g_regs_size : integer range 1 to 16 := 16;
+ g_default_period : integer range 0 to 255 := 0;
+ g_default_presc : integer range 0 to 255 := 0;
+ g_default_val : integer range 0 to 255 := 0;
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ pwm_o : out std_logic_vector(g_num_channels-1 downto 0));
+ end component;
+
+ component wb_tics
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_period : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(3 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic);
+ end component;
+
+ component xwb_tics
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_period : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ desc_o : out t_wishbone_device_descriptor);
+ end component;
+
+ component wb_vic
+ generic (
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_num_interrupts : natural;
+ g_init_vectors : t_wishbone_address_array := cc_dummy_address_array;
+ g_retry_timeout : integer := 0
+ );
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ irqs_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ irq_master_o : out std_logic);
+ end component;
+
+ constant c_xwb_vic_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"00000013",
+ version => x"00000002",
+ date => x"20120113",
+ name => "WB-VIC-Int.Control ")));
+
+ component xwb_vic
+ generic (
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_num_interrupts : natural;
+ g_init_vectors : t_wishbone_address_array := cc_dummy_address_array;
+ g_retry_timeout : integer := 0);
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ irqs_i : in std_logic_vector(g_num_interrupts-1 downto 0);
+ irq_master_o : out std_logic);
+ end component;
+
+ constant c_wb_serial_lcd_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"00",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"0000000000000651", -- GSI
+ device_id => x"b77a5045",
+ version => x"00000001",
+ date => x"20130222",
+ name => "SERIAL-LCD-DISPLAY ")));
+ component wb_serial_lcd
+ generic(
+ g_cols : natural := 40;
+ g_rows : natural := 24;
+ g_hold : natural := 15; -- How many times to repeat a line (for sharpness)
+ g_wait : natural := 1); -- How many cycles per state change (for 20MHz timing)
+ port(
+ slave_clk_i : in std_logic;
+ slave_rstn_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ di_clk_i : in std_logic;
+ di_scp_o : out std_logic;
+ di_lp_o : out std_logic;
+ di_flm_o : out std_logic;
+ di_dat_o : out std_logic);
+ end component;
+
+ function f_wb_spi_flash_sdb(g_bits : natural) return t_sdb_device;
+ component wb_spi_flash is
+ generic(
+ g_port_width : natural := 1; -- 1 for EPCS, 4 for EPCQ
+ g_addr_width : natural := 24; -- log of memory (24=16MB)
+ g_idle_time : natural := 3;
+ g_dummy_time : natural := 8;
+ -- leave these at defaults if you have:
+ -- a) slow clock, b) valid constraints, or c) registered in/outputs
+ g_input_latch_edge : std_logic := '1'; -- rising
+ g_output_latch_edge : std_logic := '0'; -- falling
+ g_input_to_output_cycles : natural := 1); -- between 1 and 8
+ port(
+ clk_i : in std_logic;
+ rstn_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ -- For properly constrained designs, set clk_out_i = clk_in_i.
+ clk_out_i : in std_logic;
+ clk_in_i : in std_logic;
+ ncs_o : out std_logic;
+ oe_o : out std_logic_vector(g_port_width-1 downto 0);
+ asdi_o : out std_logic_vector(g_port_width-1 downto 0);
+ data_i : in std_logic_vector(g_port_width-1 downto 0);
+
+ external_request_i : in std_logic := '0'; -- JTAG wants to use SPI?
+ external_granted_o : out std_logic);
+ end component;
+
+ -----------------------------------------------------------------------------
+ -- I2C to Wishbone bridge, following protocol defined with ELMA
+ -----------------------------------------------------------------------------
+ component wb_i2c_bridge is
+ generic
+ (
+ -- FSM watchdog timeout, see Appendix A in the component documentation for
+ -- an example of setting this generic
+ g_fsm_wdt : positive
+ );
+ port
+ (
+ -- Clock, reset
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- I2C lines
+ scl_i : in std_logic;
+ scl_o : out std_logic;
+ scl_en_o : out std_logic;
+ sda_i : in std_logic;
+ sda_o : out std_logic;
+ sda_en_o : out std_logic;
+
+ -- I2C address
+ i2c_addr_i : in std_logic_vector(6 downto 0);
+
+ -- Status outputs
+ -- TIP : Transfer In Progress
+ -- '1' when the I2C slave detects a matching I2C address, thus a
+ -- transfer is in progress
+ -- '0' when idle
+ -- ERR : Error
+ -- '1' when the SysMon attempts to access an invalid WB slave
+ -- '0' when idle
+ -- WDTO : Watchdog timeout (single clock cycle pulse)
+ -- '1' -- timeout of watchdog occured
+ -- '0' -- when idle
+ tip_o : out std_logic;
+ err_p_o : out std_logic;
+ wdto_p_o : out std_logic;
+
+ -- Wishbone master signals
+ wbm_stb_o : out std_logic;
+ wbm_cyc_o : out std_logic;
+ wbm_sel_o : out std_logic_vector(3 downto 0);
+ wbm_we_o : out std_logic;
+ wbm_dat_i : in std_logic_vector(31 downto 0);
+ wbm_dat_o : out std_logic_vector(31 downto 0);
+ wbm_adr_o : out std_logic_vector(31 downto 0);
+ wbm_ack_i : in std_logic;
+ wbm_rty_i : in std_logic;
+ wbm_err_i : in std_logic
+ );
+ end component wb_i2c_bridge;
+
+ ------------------------------------------------------------------------------
+ -- MultiBoot component
+ ------------------------------------------------------------------------------
+ component xwb_xil_multiboot is
+ port
+ (
+ -- Clock and reset input ports
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone ports
+ wbs_i : in t_wishbone_slave_in;
+ wbs_o : out t_wishbone_slave_out;
+
+ -- SPI ports
+ spi_cs_n_o : out std_logic;
+ spi_sclk_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic
+ );
+ end component xwb_xil_multiboot;
+
+ constant c_xwb_xil_multiboot_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"00",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"000000000000001f",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"11da333d", -- echo "WB-Xilinx-MultiBoot" | md5sum | cut -c1-8
+ version => x"00000001",
+ date => x"20140313",
+ name => "WB-Xilinx-MultiBoot")));
+
+ constant cc_dummy_sdb_device : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"ffffffff",
+ version => x"00000001",
+ date => x"20150722",
+ name => "Unused-Device ")));
+
+
+end wishbone_pkg;
+
+package body wishbone_pkg is
+ -- f_wb_wr: processes a write reqest to a slave register with select lines. valid modes are "owr", "set" and "clr"
+ function f_wb_wr(pval : std_logic_vector; ival : std_logic_vector; sel : std_logic_vector; mode : string := "owr") return std_logic_vector is
+ variable n_sel : std_logic_vector(pval'range);
+ variable n_val : std_logic_vector(pval'range);
+ variable result : std_logic_vector(pval'range);
+ begin
+ for i in pval'range loop
+ n_sel(i) := sel((i-pval'low) / 8); -- subtract the low index for when register width > wishbone data width
+ n_val(i) := ival(i-pval'low);
+ end loop;
+
+ if(mode = "set") then
+ result := pval or (n_val and n_sel);
+ elsif (mode = "clr") then
+ result := pval and not (n_val and n_sel);
+ else
+ result := (pval and not n_sel) or (n_val and n_sel);
+ end if;
+
+ return result;
+ end f_wb_wr;
+
+ function f_ceil_log2(x : natural) return natural is
+ begin
+ if x <= 1
+ then return 0;
+ else return f_ceil_log2((x+1)/2) +1;
+ end if;
+ end f_ceil_log2;
+
+ function f_sdb_embed_product(product : t_sdb_product)
+ return std_logic_vector -- (319 downto 8)
+ is
+ variable result : std_logic_vector(319 downto 8);
+ begin
+ result(319 downto 256) := product.vendor_id;
+ result(255 downto 224) := product.device_id;
+ result(223 downto 192) := product.version;
+ result(191 downto 160) := product.date;
+ for i in 0 to 18 loop -- string to ascii
+ result(159-i*8 downto 152-i*8) :=
+ std_logic_vector(to_unsigned(character'pos(product.name(i+1)), 8));
+ end loop;
+ return result;
+ end;
+
+ function f_sdb_extract_product(sdb_record : std_logic_vector(319 downto 8))
+ return t_sdb_product
+ is
+ variable result : t_sdb_product;
+ begin
+ result.vendor_id := sdb_record(319 downto 256);
+ result.device_id := sdb_record(255 downto 224);
+ result.version := sdb_record(223 downto 192);
+ result.date := sdb_record(191 downto 160);
+ for i in 0 to 18 loop -- ascii to string
+ result.name(i+1) := character'val(to_integer(unsigned(sdb_record(159-i*8 downto 152-i*8))));
+ end loop;
+ return result;
+ end;
+
+ function f_sdb_embed_component(sdb_component : t_sdb_component; address : t_wishbone_address)
+ return std_logic_vector -- (447 downto 8)
+ is
+ variable result : std_logic_vector(447 downto 8);
+
+ constant first : unsigned(63 downto 0) := unsigned(sdb_component.addr_first);
+ constant last : unsigned(63 downto 0) := unsigned(sdb_component.addr_last);
+ variable base : unsigned(63 downto 0) := (others => '0');
+ begin
+ base(address'length-1 downto 0) := unsigned(address);
+
+ result(447 downto 384) := std_logic_vector(base);
+ result(383 downto 320) := std_logic_vector(base + last - first);
+ result(319 downto 8) := f_sdb_embed_product(sdb_component.product);
+ return result;
+ end;
+
+ function f_sdb_extract_component(sdb_record : std_logic_vector(447 downto 8))
+ return t_sdb_component
+ is
+ variable result : t_sdb_component;
+ begin
+ result.addr_first := sdb_record(447 downto 384);
+ result.addr_last := sdb_record(383 downto 320);
+ result.product := f_sdb_extract_product(sdb_record(319 downto 8));
+ return result;
+ end;
+
+ function f_sdb_embed_device(device : t_sdb_device; address : t_wishbone_address)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+ begin
+ result(511 downto 496) := device.abi_class;
+ result(495 downto 488) := device.abi_ver_major;
+ result(487 downto 480) := device.abi_ver_minor;
+ result(479 downto 456) := (others => '0');
+ result(455) := device.wbd_endian;
+ result(454 downto 452) := (others => '0');
+ result(451 downto 448) := device.wbd_width;
+ result(447 downto 8) := f_sdb_embed_component(device.sdb_component, address);
+ result(7 downto 0) := x"01"; -- device
+ return result;
+ end;
+
+ function f_sdb_extract_device(sdb_record : t_sdb_record)
+ return t_sdb_device
+ is
+ variable result : t_sdb_device;
+ begin
+ result.abi_class := sdb_record(511 downto 496);
+ result.abi_ver_major := sdb_record(495 downto 488);
+ result.abi_ver_minor := sdb_record(487 downto 480);
+ result.wbd_endian := sdb_record(452);
+ result.wbd_width := sdb_record(451 downto 448);
+ result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8));
+
+ assert sdb_record(7 downto 0) = x"01"
+ report "Cannot extract t_sdb_device from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity failure;
+
+ return result;
+ end;
+
+ function f_sdb_embed_msi(msi : t_sdb_msi; address : t_wishbone_address)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+ begin
+ result(511 downto 456) := (others => '0');
+ result(455) := msi.wbd_endian;
+ result(454 downto 452) := (others => '0');
+ result(451 downto 448) := msi.wbd_width;
+ result(447 downto 8) := f_sdb_embed_component(msi.sdb_component, address);
+ result(7 downto 0) := x"03"; -- msi
+ return result;
+ end;
+
+ function f_sdb_extract_msi(sdb_record : t_sdb_record)
+ return t_sdb_msi
+ is
+ variable result : t_sdb_msi;
+ begin
+ result.wbd_endian := sdb_record(452);
+ result.wbd_width := sdb_record(451 downto 448);
+ result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8));
+
+ assert sdb_record(7 downto 0) = x"03"
+ report "Cannot extract t_sdb_msi from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity failure;
+
+ return result;
+ end;
+
+ function f_sdb_embed_integration(integr : t_sdb_integration)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+ begin
+ result(511 downto 320) := (others => '0');
+ result(319 downto 8) := f_sdb_embed_product(integr.product);
+ result(7 downto 0) := x"80"; -- integration record
+ return result;
+ end f_sdb_embed_integration;
+
+ function f_sdb_extract_integration(sdb_record : t_sdb_record)
+ return t_sdb_integration
+ is
+ variable result : t_sdb_integration;
+ begin
+ result.product := f_sdb_extract_product(sdb_record(319 downto 8));
+
+ assert sdb_record(7 downto 0) = x"80"
+ report "Cannot extract t_sdb_integration from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity Failure;
+
+ return result;
+ end f_sdb_extract_integration;
+
+ function f_sdb_embed_repo_url(url : t_sdb_repo_url)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+ begin
+ result(511 downto 8) := f_string2svl(url.repo_url);
+ result( 7 downto 0) := x"81"; -- repo_url record
+ return result;
+ end;
+
+ function f_sdb_extract_repo_url(sdb_record : t_sdb_record)
+ return t_sdb_repo_url
+ is
+ variable result : t_sdb_repo_url;
+ begin
+ result.repo_url := f_slv2string(sdb_record(511 downto 8));
+
+ assert sdb_record(7 downto 0) = x"81"
+ report "Cannot extract t_sdb_repo_url from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity Failure;
+
+ return result;
+ end;
+
+ function f_sdb_embed_synthesis(syn : t_sdb_synthesis)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+ begin
+ result(511 downto 384) := f_string2svl(syn.syn_module_name);
+ result(383 downto 256) := f_string2bits(syn.syn_commit_id);
+ result(255 downto 192) := f_string2svl(syn.syn_tool_name);
+ result(191 downto 160) := syn.syn_tool_version;
+ result(159 downto 128) := syn.syn_date;
+ result(127 downto 8) := f_string2svl(syn.syn_username);
+ result( 7 downto 0) := x"82"; -- synthesis record
+ return result;
+ end;
+
+ function f_sdb_extract_synthesis(sdb_record : t_sdb_record)
+ return t_sdb_synthesis
+ is
+ variable result : t_sdb_synthesis;
+ begin
+ result.syn_module_name := f_slv2string(sdb_record(511 downto 384));
+ result.syn_commit_id := f_bits2string(sdb_record(383 downto 256));
+ result.syn_tool_name := f_slv2string(sdb_record(255 downto 192));
+ result.syn_tool_version := sdb_record(191 downto 160);
+ result.syn_date := sdb_record(159 downto 128);
+ result.syn_username := f_slv2string(sdb_record(127 downto 8));
+
+ assert sdb_record(7 downto 0) = x"82"
+ report "Cannot extract t_sdb_repo_url from record of type " & Integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity Failure;
+
+ return result;
+ end;
+
+ function f_sdb_embed_bridge(bridge : t_sdb_bridge; address : t_wishbone_address)
+ return t_sdb_record
+ is
+ variable result : t_sdb_record;
+
+ constant first : unsigned(63 downto 0) := unsigned(bridge.sdb_component.addr_first);
+ constant child : unsigned(63 downto 0) := unsigned(bridge.sdb_child);
+ variable base : unsigned(63 downto 0) := (others => '0');
+ begin
+ base(address'length-1 downto 0) := unsigned(address);
+
+ result(511 downto 448) := std_logic_vector(base + child - first);
+ result(447 downto 8) := f_sdb_embed_component(bridge.sdb_component, address);
+ result(7 downto 0) := x"02"; -- bridge
+ return result;
+ end;
+
+ function f_sdb_extract_bridge(sdb_record : t_sdb_record)
+ return t_sdb_bridge
+ is
+ variable result : t_sdb_bridge;
+ begin
+ result.sdb_child := sdb_record(511 downto 448);
+ result.sdb_component := f_sdb_extract_component(sdb_record(447 downto 8));
+
+ assert sdb_record(7 downto 0) = x"02"
+ report "Cannot extract t_sdb_bridge from record of type " & integer'image(to_integer(unsigned(sdb_record(7 downto 0)))) & "."
+ severity failure;
+
+ return result;
+ end;
+
+ function f_sdb_auto_device(device : t_sdb_device; enable : boolean := true; name: string := "")
+ return t_sdb_record
+ is
+ constant c_zero : t_wishbone_address := (others => '0');
+ variable v_device: t_sdb_device := device;
+ variable v_empty : t_sdb_record := (others => '0');
+ begin
+ v_empty(7 downto 0) := x"f1";
+ if name /= "" then
+ v_device.sdb_component.product.name := f_string_fix_len(name , 19, ' ', false);
+ end if;
+ if enable then
+ v_empty := f_sdb_embed_device(v_device, c_zero);
+ end if;
+ return v_empty;
+ end f_sdb_auto_device;
+
+ function f_sdb_auto_bridge(bridge : t_sdb_bridge; enable : boolean := true; name: string := "")
+ return t_sdb_record
+ is
+ constant c_zero : t_wishbone_address := (others => '0');
+ variable v_bridge: t_sdb_bridge := bridge;
+ variable v_empty : t_sdb_record := (others => '0');
+ begin
+ v_empty(7 downto 0) := x"f2";
+ if name /= "" then
+ v_bridge.sdb_component.product.name := f_string_fix_len(name , 19, ' ', false);
+ end if;
+ if enable then
+ v_empty := f_sdb_embed_bridge(v_bridge, c_zero);
+ end if;
+ return v_empty;
+ end f_sdb_auto_bridge;
+
+ function f_sdb_auto_msi(msi : t_sdb_msi; enable : boolean := true)
+ return t_sdb_record
+ is
+ constant c_zero : t_wishbone_address := (others => '0');
+ variable v_empty : t_sdb_record := (others => '0');
+ begin
+ v_empty(7 downto 0) := x"f3";
+ if enable then
+ return f_sdb_embed_msi(msi, c_zero);
+ else
+ return v_empty;
+ end if;
+ end f_sdb_auto_msi;
+
+ subtype t_usdb_address is unsigned(63 downto 0);
+ type t_usdb_address_array is array(natural range <>) of t_usdb_address;
+
+ -- We map devices by placing the smallest ones first.
+ -- This is guaranteed to pack the maximum number of devices in the smallest space.
+ -- If a device has an address != 0, we leave it alone and let the crossbar confirm
+ -- that the address does not cause a conflict.
+ function f_sdb_auto_layout_helper(records : t_sdb_record_array)
+ return t_usdb_address_array
+ is
+ alias c_records : t_sdb_record_array(records'length-1 downto 0) is records;
+ constant c_zero : t_usdb_address := (others => '0');
+
+ constant c_used_entries : natural := c_records'length + 1;
+ constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries);
+ constant c_rom_bytes : natural := c_rom_entries * c_sdb_device_length / 8;
+
+ variable v_component : t_sdb_component;
+ variable v_sizes : t_usdb_address_array(c_records'length downto 0);
+ variable v_address : t_usdb_address_array(c_records'length downto 0);
+ variable v_bus_map : std_logic_vector(c_records'length downto 0) := (others => '0');
+ variable v_bus_cursor: unsigned(63 downto 0) := (others => '0');
+ variable v_msi_map : std_logic_vector(c_records'length downto 0) := (others => '0');
+ variable v_msi_cursor: unsigned(63 downto 0) := (others => '0');
+ variable v_increment : unsigned(63 downto 0) := (others => '0');
+ variable v_type : std_logic_vector(7 downto 0);
+ begin
+ -- First, extract the length of the devices, ignoring those not to be mapped
+ for i in c_records'range loop
+ v_component := f_sdb_extract_component(c_records(i)(447 downto 8));
+ v_sizes(i) := unsigned(v_component.addr_last);
+ v_address(i) := unsigned(v_component.addr_first);
+
+ -- Silently round up to a power of two; the crossbar will give a warning for us
+ for j in 62 downto 0 loop
+ v_sizes(i)(j) := v_sizes(i)(j+1) or v_sizes(i)(j);
+ end loop;
+
+ -- Only map devices/bridges at address zero
+ if v_address(i) = c_zero then
+ v_type := c_records(i)(7 downto 0);
+ case v_type is
+ when x"01" => v_bus_map(i) := '1';
+ when x"02" => v_bus_map(i) := '1';
+ when x"03" => v_msi_map(i) := '1';
+ when others => null;
+ end case;
+ end if;
+ end loop;
+
+ -- Assign the SDB record a spot as well
+ v_address(c_records'length) := (others => '0');
+ v_sizes(c_records'length) := to_unsigned(c_rom_bytes-1, 64);
+ v_bus_map(c_records'length) := '1';
+
+ -- Start assigning addresses
+ for j in 0 to 63 loop
+ v_increment := (others => '0');
+ v_increment(j) := '1';
+
+ for i in 0 to c_records'length loop
+ if v_bus_map(i) = '1' and v_sizes(i)(j) = '0' then
+ v_bus_map(i) := '0';
+ v_address(i) := v_bus_cursor;
+ v_bus_cursor := v_bus_cursor + v_increment;
+ end if;
+ if v_msi_map(i) = '1' and v_sizes(i)(j) = '0' then
+ v_msi_map(i) := '0';
+ v_address(i) := v_msi_cursor;
+ v_msi_cursor := v_msi_cursor + v_increment;
+ end if;
+ end loop;
+
+ -- Round up to the next required alignment
+ if v_bus_cursor(j) = '1' then
+ v_bus_cursor := v_bus_cursor + v_increment;
+ end if;
+ if v_msi_cursor(j) = '1' then
+ v_msi_cursor := v_msi_cursor + v_increment;
+ end if;
+ end loop;
+
+ return v_address;
+ end f_sdb_auto_layout_helper;
+
+ function f_sdb_auto_layout(records : t_sdb_record_array)
+ return t_sdb_record_array
+ is
+ alias c_records : t_sdb_record_array(records'length-1 downto 0) is records;
+ variable v_typ : std_logic_vector(7 downto 0);
+ variable v_result : t_sdb_record_array(c_records'range) := c_records;
+ constant c_address : t_usdb_address_array := f_sdb_auto_layout_helper(c_records);
+ variable v_address : t_wishbone_address;
+ begin
+ -- Put the addresses into the mapping
+ for i in v_result'range loop
+ v_typ := c_records(i)(7 downto 0);
+ v_address := std_logic_vector(c_address(i)(t_wishbone_address'range));
+
+ case v_typ is
+ when x"01" => v_result(i) := f_sdb_embed_device(f_sdb_extract_device(v_result(i)), v_address);
+ when x"02" => v_result(i) := f_sdb_embed_bridge(f_sdb_extract_bridge(v_result(i)), v_address);
+ when x"03" => v_result(i) := f_sdb_embed_msi (f_sdb_extract_msi (v_result(i)), v_address);
+ when others => null;
+ end case;
+ end loop;
+
+ return v_result;
+ end f_sdb_auto_layout;
+
+ function f_sdb_auto_layout(slaves : t_sdb_record_array; masters : t_sdb_record_array)
+ return t_sdb_record_array
+ is begin
+ return f_sdb_auto_layout(masters & slaves);
+ end f_sdb_auto_layout;
+
+ function f_sdb_auto_sdb(records : t_sdb_record_array)
+ return t_wishbone_address
+ is
+ alias c_records : t_sdb_record_array(records'length-1 downto 0) is records;
+ constant c_address : t_usdb_address_array(c_records'length downto 0) := f_sdb_auto_layout_helper(c_records);
+ begin
+ return std_logic_vector(c_address(c_records'length)(t_wishbone_address'range));
+ end f_sdb_auto_sdb;
+
+ function f_sdb_auto_sdb(slaves : t_sdb_record_array; masters : t_sdb_record_array)
+ return t_wishbone_address
+ is begin
+ return f_sdb_auto_sdb(masters & slaves);
+ end f_sdb_auto_sdb;
+
+--**************************************************************************************************************************--
+-- START MAT's NEW FUNCTIONS FROM 18th Oct 2013
+------------------------------------------------------------------------------------------------------------------------------
+
+
+ function f_sdb_create_array(g_enum_dev_id : boolean := false;
+ g_dev_id_offs : natural := 0;
+ g_enum_dev_name : boolean := false;
+ g_dev_name_offs : natural := 0;
+ device : t_sdb_device;
+ instances : natural := 1)
+ return t_sdb_record_array is
+ variable result : t_sdb_record_array(instances-1 downto 0);
+ variable i,j, pos : natural;
+ variable dev, newdev : t_sdb_device;
+ variable serial_no : string(1 to 3);
+ variable text_possible : boolean := false;
+ begin
+ dev := device;
+
+ report "### Creating " & integer'image(instances) & " x " & dev.sdb_component.product.name
+ severity note;
+ for i in 0 to instances-1 loop
+ newdev := dev;
+ if(g_enum_dev_id) then
+ dev.sdb_component.product.device_id :=
+ std_logic_vector( unsigned(dev.sdb_component.product.device_id)
+ + to_unsigned(i+g_dev_id_offs, dev.sdb_component.product.device_id'length));
+ end if;
+ if(g_enum_dev_name) then
+ -- find end of name
+
+ for j in dev.sdb_component.product.name'length downto 1 loop
+ if(dev.sdb_component.product.name(j) /= ' ') then
+ pos := j;
+ exit;
+ end if;
+ end loop;
+ -- convert i+g_dev_name_offs to string
+ serial_no := f_string_fix_len(integer'image(i+g_dev_name_offs), serial_no'length);
+ report "### Now: " & serial_no & " of " & dev.sdb_component.product.name severity note;
+ -- check if space is sufficient
+ assert (serial_no'length+1 <= dev.sdb_component.product.name'length - pos)
+ report "Not enough space in namestring of sdb_device " & dev.sdb_component.product.name
+ & " to add serial number " & serial_no & ". Space available " &
+ integer'image(dev.sdb_component.product.name'length-pos-1) & ", required "
+ & integer'image(serial_no'length+1)
+ severity Failure;
+ end if;
+ if(g_enum_dev_name) then
+ newdev.sdb_component.product.name(pos+1) := '_';
+ for j in 1 to serial_no'length loop
+ newdev.sdb_component.product.name(pos+1+j) := serial_no(j);
+ end loop;
+ end if;
+
+ -- insert
+ report "### to: " & newdev.sdb_component.product.name severity note;
+ result(i) := f_sdb_embed_device(newdev, (others=>'0'));
+ end loop;
+ return result;
+ end f_sdb_create_array;
+
+ function f_sdb_join_arrays(a : t_sdb_record_array; b : t_sdb_record_array) return t_sdb_record_array is
+ variable result : t_sdb_record_array(a'length+b'length-1 downto 0);
+ variable i : natural;
+ begin
+ for i in 0 to a'left loop
+ result(i) := a(i);
+ end loop;
+ for i in 0 to b'left loop
+ result(i+a'length) := b(i);
+ end loop;
+ return result;
+ end f_sdb_join_arrays;
+
+
+ function f_sdb_extract_base_addr(sdb_record : t_sdb_record) return std_logic_vector is
+ begin
+ return sdb_record(447 downto 384);
+ end f_sdb_extract_base_addr;
+
+ function f_sdb_extract_end_addr(sdb_record : t_sdb_record) return std_logic_vector is
+ begin
+ return sdb_record(383 downto 320);
+ end f_sdb_extract_end_addr;
+
+
+ function f_align_addr_offset(offs : unsigned; this_rng : unsigned; prev_rng : unsigned)
+ return unsigned is
+ variable this_pow, prev_pow : natural;
+ variable start, env, result : unsigned(63 downto 0) := (others => '0');
+ begin
+ start(offs'left downto 0) := offs;
+ --calculate address envelopes (next power of 2) for previous and this component and choose the larger one
+ this_pow := f_hot_to_bin(std_logic_vector(this_rng));
+ prev_pow := f_hot_to_bin(std_logic_vector(prev_rng));
+ -- no max(). thank you very much, std_numeric :-/
+ if(this_pow >= prev_pow) then
+ env(this_pow) := '1';
+ else
+ env(prev_pow) := '1';
+ end if;
+ --round up to the next multiple of the envelope...
+ if(prev_rng /= 0) then
+ result := start + env - (start mod env);
+ else
+ result := start; --...except for first element, result is start.
+ end if;
+ return result;
+ end f_align_addr_offset;
+
+
+ -- generates aligned address map for an sdb_record_array, accepts optional start offset
+ function f_sdb_automap_array(sdb_array : t_sdb_record_array; start_offset : t_wishbone_address := (others => '0'))
+ return t_sdb_record_array is
+ constant len : natural := sdb_array'length;
+ variable this_rng : unsigned(63 downto 0) := (others => '0');
+ variable prev_rng : unsigned(63 downto 0) := (others => '0');
+ variable prev_offs : unsigned(63 downto 0) := (others => '0');
+ variable this_offs : unsigned(63 downto 0) := (others => '0');
+ variable device : t_sdb_device;
+ variable bridge : t_sdb_bridge;
+ variable sdb_type : std_logic_vector(7 downto 0);
+ variable i : natural;
+ variable result : t_sdb_record_array(sdb_array'length-1 downto 0); -- last
+ begin
+
+ prev_offs(start_offset'left downto 0) := unsigned(start_offset);
+ --traverse the array
+ for i in 0 to len-1 loop
+ -- find the fitting extraction function by evaling the type byte.
+ -- could also use the component, but it's safer to use Wes' embed and extract functions.
+ sdb_type := sdb_array(i)(7 downto 0);
+ case sdb_type is
+ --device
+ when x"01" => device := f_sdb_extract_device(sdb_array(i));
+ this_rng := unsigned(device.sdb_component.addr_last) - unsigned(device.sdb_component.addr_first);
+ this_offs := f_align_addr_offset(prev_offs, this_rng, prev_rng);
+ result(i) := f_sdb_embed_device(device, std_logic_vector(this_offs(31 downto 0)));
+ --bridge
+ when x"02" => bridge := f_sdb_extract_bridge(sdb_array(i));
+ this_rng := unsigned(bridge.sdb_component.addr_last) - unsigned(bridge.sdb_component.addr_first);
+ this_offs := f_align_addr_offset(prev_offs, this_rng, prev_rng);
+ result(i) := f_sdb_embed_bridge(bridge, std_logic_vector(this_offs(31 downto 0)) );
+ --other
+ when others => result(i) := sdb_array(i);
+ end case;
+ -- doesnt hurt because this_* doesnt change if its not a device or bridge
+ prev_rng := this_rng;
+ prev_offs := this_offs;
+ end loop;
+ report "##* " & integer'image(sdb_array'length) & " Elements, last address: " & f_bits2string(std_logic_vector(this_offs+this_rng)) severity Note;
+ return result;
+ end f_sdb_automap_array;
+
+
+ -- find place for sdb rom on crossbar and return address. try to put it in an address gap.
+ function f_sdb_create_rom_addr(sdb_array : t_sdb_record_array) return t_wishbone_address is
+ constant len : natural := sdb_array'length;
+ constant rom_bytes : natural := (2**f_ceil_log2(sdb_array'length + 1)) * (c_sdb_device_length / 8);
+ variable result : t_wishbone_address := (others => '0');
+ variable this_base, this_end : unsigned(63 downto 0) := (others => '0');
+ variable prev_base, prev_end : unsigned(63 downto 0) := (others => '0');
+ variable rom_base : unsigned(63 downto 0) := (others => '0');
+ variable sdb_type : std_logic_vector(7 downto 0);
+ begin
+ --traverse the array
+ for i in 0 to len-1 loop
+ sdb_type := sdb_array(i)(7 downto 0);
+ if(sdb_type = x"01" or sdb_type = x"02") then
+ -- get
+ this_base := unsigned(f_sdb_extract_base_addr(sdb_array(i)));
+ this_end := unsigned(f_sdb_extract_end_addr(sdb_array(i)));
+ if(unsigned(result) = 0) then
+ rom_base := f_align_addr_offset(prev_base, to_unsigned(rom_bytes-1, 64), (prev_end-prev_base));
+ if(rom_base + to_unsigned(rom_bytes, 64) <= this_base) then
+ result := std_logic_vector(rom_base(t_wishbone_address'left downto 0));
+ end if;
+ end if;
+ prev_base := this_base;
+ prev_end := this_end;
+ end if;
+ end loop;
+ -- if there was no gap to fit the sdb rom, place it at the end
+ if(unsigned(result) = 0) then
+ result := std_logic_vector(f_align_addr_offset(this_base, to_unsigned(rom_bytes-1, 64),
+ this_end-this_base)(t_wishbone_address'left downto 0));
+ end if;
+ return result;
+ end f_sdb_create_rom_addr;
+------------------------------------------------------------------------------------------------------------------------------
+-- END MAT's NEW FUNCTIONS FROM 18th Oct 2013
+------------------------------------------------------------------------------------------------------------------------------
+
+ function f_sdb_bus_end(
+ g_wraparound : boolean;
+ g_layout : t_sdb_record_array;
+ g_sdb_addr : t_wishbone_address;
+ msi : boolean) return unsigned
+ is
+ alias c_layout : t_sdb_record_array(g_layout'length-1 downto 0) is g_layout;
+
+ -- How much space does the ROM need?
+ constant c_used_entries : natural := c_layout'length + 1;
+ constant c_rom_entries : natural := 2**f_ceil_log2(c_used_entries); -- next power of 2
+ constant c_sdb_bytes : natural := c_sdb_device_length / 8;
+ constant c_rom_bytes : natural := c_rom_entries * c_sdb_bytes;
+
+ variable result : unsigned(63 downto 0) := (others => '0');
+ variable typ : std_logic_vector(7 downto 0);
+ variable last : unsigned(63 downto 0);
+ begin
+ if not msi then
+ -- The ROM will be an addressed slave as well
+ result := (others => '0');
+ result(g_sdb_addr'range) := unsigned(g_sdb_addr);
+ result := result + to_unsigned(c_rom_bytes, 64) - 1;
+ end if;
+
+ for i in c_layout'range loop
+ typ := c_layout(i)(7 downto 0);
+ last := unsigned(f_sdb_extract_component(c_layout(i)(447 downto 8)).addr_last);
+ case typ is
+ when x"01" => if not msi and last > result then result := last; end if;
+ when x"02" => if not msi and last > result then result := last; end if;
+ when x"03" => if msi and last > result then result := last; end if;
+ when others => null;
+ end case;
+ end loop;
+
+ -- round result up to a power of two -1
+ for i in 62 downto 0 loop
+ result(i) := result(i) or result(i+1);
+ end loop;
+
+ if not g_wraparound then
+ result := (others => '0');
+ for i in 0 to c_wishbone_address_width-1 loop
+ result(i) := '1';
+ end loop;
+ end if;
+
+ return result;
+ end f_sdb_bus_end;
+
+ function f_xwb_bridge_manual_sdb(
+ g_size : t_wishbone_address;
+ g_sdb_addr : t_wishbone_address) return t_sdb_bridge
+ is
+ variable result : t_sdb_bridge;
+ begin
+ result.sdb_child := (others => '0');
+ result.sdb_child(c_wishbone_address_width-1 downto 0) := g_sdb_addr;
+
+ result.sdb_component.addr_first := (others => '0');
+ result.sdb_component.addr_last := (others => '0');
+ result.sdb_component.addr_last(c_wishbone_address_width-1 downto 0) := g_size;
+
+ result.sdb_component.product.vendor_id := x"0000000000000651"; -- GSI
+ result.sdb_component.product.device_id := x"eef0b198";
+ result.sdb_component.product.version := x"00000001";
+ result.sdb_component.product.date := x"20120511";
+ result.sdb_component.product.name := "WB4-Bridge-GSI ";
+
+ return result;
+ end f_xwb_bridge_manual_sdb;
+
+ function f_xwb_bridge_layout_sdb( -- determine bus size from layout
+ g_wraparound : boolean := true;
+ g_layout : t_sdb_record_array;
+ g_sdb_addr : t_wishbone_address) return t_sdb_bridge
+ is
+ variable address : t_wishbone_address;
+ begin
+ address := std_logic_vector(f_sdb_bus_end(g_wraparound, g_layout, g_sdb_addr, false)(address'range));
+ return f_xwb_bridge_manual_sdb(address, g_sdb_addr);
+ end f_xwb_bridge_layout_sdb;
+
+ function f_xwb_msi_manual_sdb(
+ g_size : t_wishbone_address) return t_sdb_msi
+ is
+ variable result : t_sdb_msi;
+ begin
+ result.wbd_endian := '0';
+ result.wbd_width := x"7";
+
+ result.sdb_component.addr_first := (others => '0');
+ result.sdb_component.addr_last := (others => '0');
+ result.sdb_component.addr_last(c_wishbone_address_width-1 downto 0) := g_size;
+
+ result.sdb_component.product.vendor_id := x"0000000000000651"; -- GSI
+ result.sdb_component.product.device_id := x"aa7bfb3c";
+ result.sdb_component.product.version := x"00000001";
+ result.sdb_component.product.date := x"20160422";
+ result.sdb_component.product.name := "WB4-MSI-Bridge-GSI ";
+
+ return result;
+ end f_xwb_msi_manual_sdb;
+
+ function f_xwb_msi_layout_sdb( -- determine MSI size from layout
+ g_layout : t_sdb_record_array) return t_sdb_msi
+ is
+ constant zero : t_wishbone_address := (others => '0');
+ variable address : t_wishbone_address;
+ begin
+ address := std_logic_vector(f_sdb_bus_end(true, g_layout, zero, true)(address'range));
+ return f_xwb_msi_manual_sdb(address);
+ end f_xwb_msi_layout_sdb;
+
+ function f_xwb_dpram(g_size : natural) return t_sdb_device
+ is
+ variable result : t_sdb_device;
+ begin
+ result.abi_class := x"0001"; -- RAM device
+ result.abi_ver_major := x"01";
+ result.abi_ver_minor := x"00";
+ result.wbd_width := x"7"; -- 32/16/8-bit supported
+ result.wbd_endian := c_sdb_endian_big;
+
+ result.sdb_component.addr_first := (others => '0');
+ result.sdb_component.addr_last := std_logic_vector(to_unsigned(g_size*4-1, 64));
+
+ result.sdb_component.product.vendor_id := x"000000000000CE42"; -- CERN
+ result.sdb_component.product.device_id := x"66cfeb52";
+ result.sdb_component.product.version := x"00000001";
+ result.sdb_component.product.date := x"20120305";
+ result.sdb_component.product.name := "WB4-BlockRAM ";
+
+ return result;
+ end f_xwb_dpram;
+
+ function f_bits2string(s : std_logic_vector) return string is
+ --- extend length to full hex nibble
+ variable result : string((s'length+7)/4 downto 1);
+ variable s_norm : std_logic_vector(result'length*4-1 downto 0) := (others=>'0');
+ variable cut : natural;
+ variable nibble: std_logic_vector(3 downto 0);
+ constant len : natural := result'length;
+ begin
+ s_norm(s'length-1 downto 0) := s;
+ for i in len-1 downto 0 loop
+ nibble := s_norm(i*4+3 downto i*4);
+ case nibble is
+ when "0000" => result(i+1) := '0';
+ when "0001" => result(i+1) := '1';
+ when "0010" => result(i+1) := '2';
+ when "0011" => result(i+1) := '3';
+ when "0100" => result(i+1) := '4';
+ when "0101" => result(i+1) := '5';
+ when "0110" => result(i+1) := '6';
+ when "0111" => result(i+1) := '7';
+ when "1000" => result(i+1) := '8';
+ when "1001" => result(i+1) := '9';
+ when "1010" => result(i+1) := 'a';
+ when "1011" => result(i+1) := 'b';
+ when "1100" => result(i+1) := 'c';
+ when "1101" => result(i+1) := 'd';
+ when "1110" => result(i+1) := 'e';
+ when "1111" => result(i+1) := 'f';
+ when others => result(i+1) := 'X';
+ end case;
+ end loop;
+
+ -- trim leading 0s
+ strip : for i in result'length downto 1 loop
+ cut := i;
+ exit strip when result(i) /= '0';
+ end loop;
+
+ return "0x" & result(cut downto 1);
+ end f_bits2string;
+
+ -- Converts string (hex number, without leading 0x) to std_logic_vector
+ function f_string2bits(s : string) return std_logic_vector is
+ constant len : natural := s'length;
+ variable slv : std_logic_vector(s'length*4-1 downto 0);
+ variable nibble : std_logic_vector(3 downto 0);
+ begin
+ for i in 0 to len-1 loop
+ case s(i+1) is
+ when '0' => nibble := X"0";
+ when '1' => nibble := X"1";
+ when '2' => nibble := X"2";
+ when '3' => nibble := X"3";
+ when '4' => nibble := X"4";
+ when '5' => nibble := X"5";
+ when '6' => nibble := X"6";
+ when '7' => nibble := X"7";
+ when '8' => nibble := X"8";
+ when '9' => nibble := X"9";
+ when 'a' => nibble := X"A";
+ when 'A' => nibble := X"A";
+ when 'b' => nibble := X"B";
+ when 'B' => nibble := X"B";
+ when 'c' => nibble := X"C";
+ when 'C' => nibble := X"C";
+ when 'd' => nibble := X"D";
+ when 'D' => nibble := X"D";
+ when 'e' => nibble := X"E";
+ when 'E' => nibble := X"E";
+ when 'f' => nibble := X"F";
+ when 'F' => nibble := X"F";
+ when others => nibble := "XXXX";
+ end case;
+ if s'ascending then
+ slv(slv'length-(i*4)-1 downto slv'length-(i+1)*4) := nibble;
+ else
+ slv(((i+1)*4)-1 downto i*4) := nibble;
+ end if;
+ end loop;
+ return slv;
+ end f_string2bits;
+
+ -- Converts string to ascii (std_logic_vector)
+ function f_string2svl (s : string) return std_logic_vector is
+ constant len : natural := s'length;
+ variable slv : std_logic_vector((s'length * 8) - 1 downto 0);
+ begin
+ for i in 0 to len-1 loop
+ slv(slv'high-i*8 downto (slv'high-7)-i*8) :=
+ std_logic_vector(to_unsigned(character'pos(s(i+1)), 8));
+ end loop;
+ return slv;
+ end f_string2svl;
+
+ -- Converts ascii (std_logic_vector) to string
+ function f_slv2string (slv : std_logic_vector) return string is
+ constant len : natural := slv'length;
+ variable s : string(1 to slv'length/8);
+ begin
+ for i in 0 to (len/8)-1 loop
+ s(i+1) := character'val(to_integer(unsigned(slv(slv'high-i*8 downto (slv'high-7)-i*8))));
+ end loop;
+ return s;
+ end f_slv2string;
+
+ -- pads a string of unknown length to a given length (useful for integer'image)
+ function f_string_fix_len ( s : string; ret_len : natural := 10; fill_char : character := '0'; justify_right : boolean := true ) return string is
+ variable ret_v : string (1 to ret_len);
+ constant pad_len : integer := ret_len - s'length ;
+ variable pad_v : string (1 to abs(pad_len));
+ begin
+ if pad_len < 1 then
+ ret_v := s(ret_v'range);
+ else
+ pad_v := (others => fill_char);
+ if justify_right then
+ ret_v := pad_v & s;
+ else
+ ret_v := s & pad_v ;
+ end if;
+ end if;
+ return ret_v;
+ end f_string_fix_len;
+
+ -- do not synthesize
+ function f_hot_to_bin(x : std_logic_vector) return natural is
+ variable rv : natural;
+ begin
+ rv := 0;
+ -- if there are few ones set in _x_ then the most significant will be
+ -- translated to bin
+ for i in 0 to x'left loop
+ if x(i) = '1' then
+ rv := i+1;
+ end if;
+ end loop;
+ return rv;
+ end function;
+
+ function f_wb_spi_flash_sdb(g_bits : natural) return t_sdb_device is
+ variable result : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"02",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"0000000000ffffff",
+ product => (
+ vendor_id => x"0000000000000651", -- GSI
+ device_id => x"5cf12a1c",
+ version => x"00000002",
+ date => x"20140417",
+ name => "SPI-FLASH-16M-MMAP ")));
+ begin
+ result.sdb_component.addr_last := std_logic_vector(to_unsigned(2**g_bits-1, 64));
+ return result;
+ end f_wb_spi_flash_sdb;
+
+end wishbone_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd
new file mode 100644
index 000000000..3e15d94cc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/wr_fabric_pkg.vhd
@@ -0,0 +1,220 @@
+-------------------------------------------------------------------------------
+-- Title : Wishbone Packet Fabric package
+-- Project : WR Cores Collection
+-------------------------------------------------------------------------------
+-- File : wr_fabric_pkg.vhd
+-- Author : Grzegorz Daniluk
+-- Company : CERN BE-CO-HT
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use work.wishbone_pkg.all;
+
+
+package wr_fabric_pkg is
+
+ constant c_WRF_DATA : std_logic_vector(1 downto 0) := "00";
+ constant c_WRF_OOB : std_logic_vector(1 downto 0) := "01";
+ constant c_WRF_STATUS : std_logic_vector(1 downto 0) := "10";
+ constant c_WRF_USER : std_logic_vector(1 downto 0) := "11";
+
+ constant c_WRF_OOB_TYPE_RX : std_logic_vector(3 downto 0) := "0000";
+ constant c_WRF_OOB_TYPE_TX : std_logic_vector(3 downto 0) := "0001";
+
+ type t_wrf_mux_class is array (natural range <>) of std_logic_vector(7 downto 0);
+
+ type t_wrf_status_reg is record
+ is_hp : std_logic;
+ has_smac : std_logic;
+ has_crc : std_logic;
+ error : std_logic;
+ tag_me : std_logic;
+ match_class : std_logic_vector(7 downto 0);
+ end record;
+
+ type t_wrf_source_out is record
+ adr : std_logic_vector(1 downto 0);
+ dat : std_logic_vector(15 downto 0);
+ cyc : std_logic;
+ stb : std_logic;
+ we : std_logic;
+ sel : std_logic_vector(1 downto 0);
+ end record;
+
+ type t_wrf_source_in is record
+ ack : std_logic;
+ stall : std_logic;
+ err : std_logic;
+ rty : std_logic;
+ end record;
+
+
+ type t_wrf_oob is record
+ valid: std_logic;
+ oob_type : std_logic_vector(3 downto 0);
+ ts_r : std_logic_vector(27 downto 0);
+ ts_f : std_logic_vector(3 downto 0);
+ frame_id : std_logic_vector(15 downto 0);
+ port_id : std_logic_vector(5 downto 0);
+ end record;
+
+ subtype t_wrf_sink_in is t_wrf_source_out;
+ subtype t_wrf_sink_out is t_wrf_source_in;
+
+ type t_wrf_source_in_array is array (natural range <>) of t_wrf_source_in;
+ type t_wrf_source_out_array is array (natural range <>) of t_wrf_source_out;
+
+ subtype t_wrf_sink_in_array is t_wrf_source_out_array;
+ subtype t_wrf_sink_out_array is t_wrf_source_in_array;
+
+ function f_marshall_wrf_status (stat : t_wrf_status_reg) return std_logic_vector;
+ function f_unmarshall_wrf_status(stat : std_logic_vector) return t_wrf_status_reg;
+
+ constant c_wrf_status_init_value : t_wrf_status_reg :=
+ ('0', '0', '0', '0', '0', (others => '0'));
+
+ constant c_dummy_src_in : t_wrf_source_in :=
+ ('0', '0', '0', '0');
+ constant c_dummy_snk_in : t_wrf_sink_in :=
+ ("XX", "XXXXXXXXXXXXXXXX", '0', '0', '0', "XX");
+
+
+ -----------------------------------------------------------------------------
+ -- WRF MUX
+ -----------------------------------------------------------------------------
+ component xwrf_mux is
+ generic(
+ g_muxed_ports : integer := 2);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ --ENDPOINT
+ ep_src_o : out t_wrf_source_out;
+ ep_src_i : in t_wrf_source_in;
+ ep_snk_o : out t_wrf_sink_out;
+ ep_snk_i : in t_wrf_sink_in;
+ --Muxed ports
+ mux_src_o : out t_wrf_source_out_array(g_muxed_ports-1 downto 0);
+ mux_src_i : in t_wrf_source_in_array(g_muxed_ports-1 downto 0);
+ mux_snk_o : out t_wrf_sink_out_array(g_muxed_ports-1 downto 0);
+ mux_snk_i : in t_wrf_sink_in_array(g_muxed_ports-1 downto 0);
+ --
+ mux_class_i : in t_wrf_mux_class(g_muxed_ports-1 downto 0)
+ );
+ end component;
+
+ component xwrf_reg is
+ generic(
+ g_adr_width : integer := 2;
+ g_dat_width : integer :=16);
+ port(
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out);
+ end component;
+
+ component xwrf_loopback
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ wrf_snk_i : in t_wrf_sink_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in;
+
+ wb_i : in t_wishbone_slave_in;
+ wb_o : out t_wishbone_slave_out);
+ end component;
+
+ component xwb_fabric_sink
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ addr_o : out std_logic_vector(1 downto 0);
+ data_o : out std_logic_vector(15 downto 0);
+ dvalid_o : out std_logic;
+ sof_o : out std_logic;
+ eof_o : out std_logic;
+ error_o : out std_logic;
+ bytesel_o : out std_logic;
+ dreq_i : in std_logic);
+ end component;
+
+ component xwb_fabric_source
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ addr_i : in std_logic_vector(1 downto 0);
+ data_i : in std_logic_vector(15 downto 0);
+ dvalid_i : in std_logic;
+ sof_i : in std_logic;
+ eof_i : in std_logic;
+ error_i : in std_logic;
+ bytesel_i : in std_logic;
+ dreq_o : out std_logic);
+ end component;
+
+end wr_fabric_pkg;
+
+package body wr_fabric_pkg is
+
+ function f_marshall_wrf_status(stat : t_wrf_status_reg)
+ return std_logic_vector is
+ variable tmp : std_logic_vector(15 downto 0);
+ begin
+ tmp(0) := stat.is_hp;
+ tmp(1) := stat.error;
+ tmp(2) := stat.has_smac;
+ tmp(3) := stat.has_crc;
+ tmp(15 downto 8) := stat.match_class;
+ return tmp;
+ end function;
+
+ function f_unmarshall_wrf_status(stat : std_logic_vector) return t_wrf_status_reg is
+ variable tmp : t_wrf_status_reg;
+ begin
+ tmp.is_hp := stat(0);
+ tmp.error := stat(1);
+ tmp.has_smac := stat(2);
+ tmp.has_crc := stat(3);
+ tmp.match_class := stat(15 downto 8);
+ return tmp;
+
+ end function;
+
+
+end wr_fabric_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd
new file mode 100644
index 000000000..978516c38
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_sink.vhd
@@ -0,0 +1,265 @@
+-------------------------------------------------------------------------------
+-- Title : Wishbone Packet Fabric buffered packet sink
+-- Project : WR Cores Collection
+-------------------------------------------------------------------------------
+-- File : xwb_fabric_sink.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-01-16
+-- Last update: 2012-01-22
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A simple WB packet streaming sink with builtin FIFO buffer.
+-- Outputs a trivial interface (start-of-packet, end-of-packet, data-valid)
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-01-16 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.genram_pkg.all;
+use work.wr_fabric_pkg.all;
+
+entity xwb_fabric_sink is
+
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone Fabric Interface I/O
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+
+ -- Decoded & buffered fabric
+ addr_o : out std_logic_vector(1 downto 0);
+ data_o : out std_logic_vector(15 downto 0);
+ dvalid_o : out std_logic;
+ sof_o : out std_logic;
+ eof_o : out std_logic;
+ error_o : out std_logic;
+ bytesel_o : out std_logic;
+ dreq_i : in std_logic
+ );
+
+end xwb_fabric_sink;
+
+architecture rtl of xwb_fabric_sink is
+
+ constant c_fifo_width : integer := 16 + 2 + 4;
+
+ signal q_valid, full, we, rd : std_logic;
+ signal fin, fout, fout_reg : std_logic_vector(c_fifo_width-1 downto 0);
+ signal cyc_d0, rd_d0 : std_logic;
+
+ signal pre_sof, pre_eof, pre_bytesel, pre_dvalid : std_logic;
+ signal post_sof, post_dvalid : std_logic;
+ signal post_addr : std_logic_vector(1 downto 0);
+ signal post_data : std_logic_vector(15 downto 0);
+
+ signal snk_out : t_wrf_sink_out;
+
+begin -- rtl
+
+
+ p_delay_cyc_and_rd : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ cyc_d0 <= '0';
+ rd_d0 <= '0';
+ else
+ if(full = '0') then
+ cyc_d0 <= snk_i.cyc;
+ end if;
+
+ rd_d0 <= rd;
+ end if;
+ end if;
+ end process;
+
+
+ pre_sof <= snk_i.cyc and not cyc_d0; -- sof
+ pre_eof <= not snk_i.cyc and cyc_d0; -- eof
+ pre_bytesel <= not snk_i.sel(0); -- bytesel
+ pre_dvalid <= snk_i.stb and snk_i.we and snk_i.cyc and not snk_out.stall; -- data valid
+
+ fin(15 downto 0) <= snk_i.dat;
+ fin(17 downto 16) <= snk_i.adr;
+ fin(21 downto 18) <= pre_sof & pre_eof & pre_bytesel & pre_dvalid;
+
+
+ snk_out.stall <= full or (snk_i.cyc and not cyc_d0);
+ snk_out.err <= '0';
+ snk_out.rty <= '0';
+
+ p_gen_ack : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ snk_out.ack <= '0';
+ else
+ snk_out.ack <= snk_i.cyc and snk_i.stb and snk_i.we and not snk_out.stall;
+ end if;
+ end if;
+ end process;
+
+ snk_o <= snk_out;
+
+ we <= '1' when fin(21 downto 18) /= "0000" and full = '0' else '0';
+ rd <= q_valid and dreq_i and not post_sof;
+
+ U_FIFO : generic_shiftreg_fifo
+ generic map (
+ g_data_width => c_fifo_width,
+ g_size => 16)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_i,
+ d_i => fin,
+ we_i => we,
+ q_o => fout,
+ rd_i => rd,
+ almost_full_o => full,
+ q_valid_o => q_valid);
+
+ p_fout_reg : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ fout_reg <= (others => '0');
+ elsif(rd = '1') then
+ fout_reg <= fout;
+ end if;
+ end if;
+ end process;
+
+
+ post_data <= fout_reg(15 downto 0);
+ post_addr <= fout_reg(17 downto 16);
+ post_sof <= fout_reg(21) and rd_d0; --and q_valid;
+
+ post_dvalid <= fout_reg(18);
+
+ sof_o <= post_sof and rd_d0;
+ dvalid_o <= post_dvalid and rd_d0;
+ error_o <= '1' when rd_d0 = '1' and (post_addr = c_WRF_STATUS) and (f_unmarshall_wrf_status(post_data).error = '1') else '0';
+ eof_o <= fout_reg(20) and rd_d0;
+ bytesel_o <= fout_reg(19);
+ data_o <= post_data;
+ addr_o <= post_addr;
+
+
+end rtl;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.genram_pkg.all;
+use work.wr_fabric_pkg.all;
+
+
+entity wb_fabric_sink is
+
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_dat_i : in std_logic_vector(15 downto 0);
+ snk_adr_i : in std_logic_vector(1 downto 0);
+ snk_sel_i : in std_logic_vector(1 downto 0);
+ snk_cyc_i : in std_logic;
+ snk_stb_i : in std_logic;
+ snk_we_i : in std_logic;
+ snk_stall_o : out std_logic;
+ snk_ack_o : out std_logic;
+ snk_err_o : out std_logic;
+ snk_rty_o : out std_logic;
+
+ -- Decoded & buffered fabric
+ addr_o : out std_logic_vector(1 downto 0);
+ data_o : out std_logic_vector(15 downto 0);
+ dvalid_o : out std_logic;
+ sof_o : out std_logic;
+ eof_o : out std_logic;
+ error_o : out std_logic;
+ bytesel_o : out std_logic;
+ dreq_i : in std_logic
+ );
+
+end wb_fabric_sink;
+
+architecture wrapper of wb_fabric_sink is
+
+ component xwb_fabric_sink
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ addr_o : out std_logic_vector(1 downto 0);
+ data_o : out std_logic_vector(15 downto 0);
+ dvalid_o : out std_logic;
+ sof_o : out std_logic;
+ eof_o : out std_logic;
+ error_o : out std_logic;
+ bytesel_o : out std_logic;
+ dreq_i : in std_logic);
+ end component;
+
+ signal snk_in : t_wrf_sink_in;
+ signal snk_out : t_wrf_sink_out;
+
+begin -- wrapper
+
+ U_Wrapped_Sink : xwb_fabric_sink
+ port map (
+ clk_i => clk_i,
+ rst_n_i => rst_n_i,
+ snk_i => snk_in,
+ snk_o => snk_out,
+ addr_o => addr_o,
+ data_o => data_o,
+ dvalid_o => dvalid_o,
+ sof_o => sof_o,
+ eof_o => eof_o,
+ error_o => error_o,
+ bytesel_o => bytesel_o,
+ dreq_i => dreq_i);
+
+ snk_in.adr <= snk_adr_i;
+ snk_in.dat <= snk_dat_i;
+ snk_in.stb <= snk_stb_i;
+ snk_in.we <= snk_we_i;
+ snk_in.cyc <= snk_cyc_i;
+ snk_in.sel <= snk_sel_i;
+
+ snk_stall_o <= snk_out.stall;
+ snk_ack_o <= snk_out.ack;
+ snk_err_o <= snk_out.err;
+ snk_rty_o <= snk_out.rty;
+
+end wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd
new file mode 100644
index 000000000..ec79fb316
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwb_fabric_source.vhd
@@ -0,0 +1,229 @@
+-------------------------------------------------------------------------------
+-- Title : Wishbone Packet Fabric buffered packet source
+-- Project : WR Cores Collection
+-------------------------------------------------------------------------------
+-- File : xwb_fabric_source.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-01-16
+-- Last update: 2012-01-22
+-- Platform :
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.genram_pkg.all;
+use work.wr_fabric_pkg.all;
+
+entity xwb_fabric_source is
+
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone Fabric Interface I/O
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+
+ -- Decoded & buffered fabric
+ addr_i : in std_logic_vector(1 downto 0);
+ data_i : in std_logic_vector(15 downto 0);
+ dvalid_i : in std_logic;
+ sof_i : in std_logic;
+ eof_i : in std_logic;
+ error_i : in std_logic;
+ bytesel_i : in std_logic;
+ dreq_o : out std_logic
+ );
+
+end xwb_fabric_source;
+
+architecture rtl of xwb_fabric_source is
+
+ constant c_fifo_width : integer := 16 + 2 + 4;
+
+ signal q_valid, full, we, rd, rd_d0 : std_logic;
+ signal fin, fout : std_logic_vector(c_fifo_width-1 downto 0);
+
+ signal pre_dvalid : std_logic;
+ signal pre_eof : std_logic;
+ signal pre_data : std_logic_vector(15 downto 0);
+ signal pre_addr : std_logic_vector(1 downto 0);
+
+ signal post_dvalid, post_eof, post_bytesel, post_sof : std_logic;
+
+ signal err_status : t_wrf_status_reg;
+ signal cyc_int : std_logic;
+
+begin -- rtl
+
+ err_status.error <= '1';
+
+ dreq_o <= not full;
+
+ rd <= not src_i.stall;
+ we <= sof_i or eof_i or error_i or dvalid_i;
+
+ pre_dvalid <= dvalid_i or error_i;
+ pre_data <= data_i when (error_i = '0') else f_marshall_wrf_status(err_status);
+ pre_addr <= addr_i when (error_i = '0') else c_WRF_STATUS;
+ pre_eof <= error_i or eof_i;
+
+ fin <= sof_i & pre_eof & bytesel_i & pre_dvalid & pre_addr & pre_data;
+
+ U_FIFO : generic_shiftreg_fifo
+ generic map (
+ g_data_width => c_fifo_width,
+ g_size => 16)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_i,
+ d_i => fin,
+ we_i => we,
+ q_o => fout,
+ rd_i => rd,
+ almost_full_o => full,
+ q_valid_o => q_valid);
+
+ post_sof <= fout(21);
+ post_eof <= fout(20);
+ post_dvalid <= fout(18);
+
+ p_gen_cyc : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ cyc_int <= '0';
+ else
+ if( q_valid = '1') then
+ if(post_sof = '1')then
+ cyc_int <= '1';
+ elsif(post_eof = '1') then
+ cyc_int <= '0';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ src_o.cyc <= cyc_int;
+ src_o.we <= '1';
+ src_o.stb <= post_dvalid and q_valid;
+ src_o.sel <= '1' & not fout(19);
+ src_o.dat <= fout(15 downto 0);
+ src_o.adr <= fout(17 downto 16);
+
+end rtl;
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.wr_fabric_pkg.all;
+
+entity wb_fabric_source is
+
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Wishbone Fabric Interface I/O
+
+ src_dat_o : out std_logic_vector(15 downto 0);
+ src_adr_o : out std_logic_vector(1 downto 0);
+ src_sel_o : out std_logic_vector(1 downto 0);
+ src_cyc_o : out std_logic;
+ src_stb_o : out std_logic;
+ src_we_o : out std_logic;
+ src_stall_i : in std_logic;
+ src_ack_i : in std_logic;
+ src_err_i : in std_logic;
+
+ -- Decoded & buffered fabric
+ addr_i : in std_logic_vector(1 downto 0);
+ data_i : in std_logic_vector(15 downto 0);
+ dvalid_i : in std_logic;
+ sof_i : in std_logic;
+ eof_i : in std_logic;
+ error_i : in std_logic;
+ bytesel_i : in std_logic;
+ dreq_o : out std_logic
+ );
+
+end wb_fabric_source;
+
+architecture wrapper of wb_fabric_source is
+ component xwb_fabric_source
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ addr_i : in std_logic_vector(1 downto 0);
+ data_i : in std_logic_vector(15 downto 0);
+ dvalid_i : in std_logic;
+ sof_i : in std_logic;
+ eof_i : in std_logic;
+ error_i : in std_logic;
+ bytesel_i : in std_logic;
+ dreq_o : out std_logic);
+ end component;
+
+ signal src_in : t_wrf_source_in;
+ signal src_out : t_wrf_source_out;
+
+begin -- wrapper
+
+
+ U_Wrapped_Source : xwb_fabric_source
+ port map (
+ clk_i => clk_i,
+ rst_n_i => rst_n_i,
+ src_i => src_in,
+ src_o => src_out,
+ addr_i => addr_i,
+ data_i => data_i,
+ dvalid_i => dvalid_i,
+ sof_i => sof_i,
+ eof_i => eof_i,
+ error_i => error_i,
+ bytesel_i => bytesel_i,
+ dreq_o => dreq_o);
+
+ src_cyc_o <= src_out.cyc;
+ src_stb_o <= src_out.stb;
+ src_we_o <= src_out.we;
+ src_sel_o <= src_out.sel;
+ src_adr_o <= src_out.adr;
+ src_dat_o <= src_out.dat;
+
+ src_in.rty <= '0';
+ src_in.err <= src_err_i;
+ src_in.ack <= src_ack_i;
+ src_in.stall <= src_stall_i;
+
+
+end wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd
new file mode 100644
index 000000000..5ff1594e1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/fabric/xwrf_mux.vhd
@@ -0,0 +1,307 @@
+-------------------------------------------------------------------------------
+-- Title : Simple Pipelined Wishbone MUX/DEMUX for WRPC
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : xwrf_mux.vhd
+-- Author : Grzegorz Daniluk
+-- Company : CERN BE-CO-HT
+-- Created : 2011-08-11
+-- Last update: 2017-02-03
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- This is the simple multiplexer/demultiplexer for WR Fabric interface
+-- (Pipelined Wishbone interface). It forwards ethernet frames between
+-- WR endpoint, Mini-NIC and external Fabric interface in both directions.
+-- In the direction 'from' WR endpoint it also decides whether the packet
+-- has to be forwarded to Mini-NIC (if it is the PTP message) or to the
+-- external interface (others).
+-------------------------------------------------------------------------------
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-08-11 1.0 greg.d Created
+-- 2012-10-16 2.0 greg.d generic number of ports
+-------------------------------------------------------------------------------
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_misc.all;
+
+use ieee.numeric_std.all;
+
+library work;
+use work.wr_fabric_pkg.all;
+use work.genram_pkg.all;
+
+entity xwrf_mux is
+ generic(
+ g_muxed_ports : integer := 2);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ --ENDPOINT
+ ep_src_o : out t_wrf_source_out;
+ ep_src_i : in t_wrf_source_in;
+ ep_snk_o : out t_wrf_sink_out;
+ ep_snk_i : in t_wrf_sink_in;
+ --Muxed ports
+ mux_src_o : out t_wrf_source_out_array(g_muxed_ports-1 downto 0);
+ mux_src_i : in t_wrf_source_in_array(g_muxed_ports-1 downto 0);
+ mux_snk_o : out t_wrf_sink_out_array(g_muxed_ports-1 downto 0);
+ mux_snk_i : in t_wrf_sink_in_array(g_muxed_ports-1 downto 0);
+ --
+ mux_class_i : in t_wrf_mux_class(g_muxed_ports-1 downto 0)
+ );
+end xwrf_mux;
+
+architecture behaviour of xwrf_mux is
+
+ function f_hot_to_bin(x : std_logic_vector(g_muxed_ports-1 downto 0))
+ return integer is
+ variable rv : integer;
+ begin
+ rv := 0;
+ -- if there are few ones set in _x_ then the least significant will be
+ -- translated to bin
+ for i in g_muxed_ports-1 downto 0 loop
+ if x(i) = '1' then
+ rv := i;
+ end if;
+ end loop;
+ return rv;
+ end function;
+
+ function f_match_class(port_mask, pkt_mask : std_logic_vector(7 downto 0)) return std_logic is
+ variable ret : std_logic;
+ begin
+ if((port_mask and pkt_mask) /= x"00") then
+ return '1';
+ else
+ return '0';
+ end if;
+ end function;
+
+ --==================================--
+ -- Masters to Endpoint mux signals --
+ --==================================--
+ type t_mux is (MUX_SEL, MUX_TRANSFER);
+ signal mux : t_mux;
+ signal mux_cycs : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal mux_rrobin : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal mux_select : std_logic_vector(g_muxed_ports-1 downto 0);
+
+ --==================================--
+ -- Endpoint to Slaves demux signals --
+ --==================================--
+ type t_demux is (DMUX_WAIT, DMUX_STATUS, DMUX_PAYLOAD);
+ signal demux : t_demux;
+ signal dmux_sel : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal dmux_status_reg : std_logic_vector(15 downto 0);
+ signal dmux_select : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal dmux_others : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal dmux_sel_zero : std_logic;
+ signal dmux_snd_stat : std_logic_vector(g_muxed_ports-1 downto 0);
+ signal ep_stall_mask : std_logic;
+ signal ep_snk_out_stall : std_logic;
+
+begin
+
+ --=============================================--
+ -- --
+ -- Many Fabric Masters talking to ENDPOINT --
+ -- --
+ --=============================================--
+ GEN_MUX_CYCS_REG : for I in 0 to g_muxed_ports-1 generate
+ mux_cycs(I) <= mux_snk_i(I).cyc;
+ end generate;
+
+ p_mux : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0') then
+ mux_rrobin(0) <= '1';
+ mux_rrobin(g_muxed_ports-1 downto 1) <= (others => '0');
+ mux <= MUX_SEL;
+ else
+ case mux is
+ when MUX_SEL =>
+ if (unsigned(mux_cycs and mux_rrobin) /= 0)then
+ mux_select <= mux_cycs and mux_rrobin;
+ mux <= MUX_TRANSFER;
+ else
+ mux_select <= (others => '0');
+ mux_rrobin <= mux_rrobin(0) & mux_rrobin(g_muxed_ports-1 downto 1);
+ end if;
+
+ when MUX_TRANSFER =>
+ if(unsigned(mux_cycs and mux_select) = 0) then --cycle end
+ mux_rrobin <= mux_rrobin(0) & mux_rrobin(g_muxed_ports-1 downto 1);
+ mux <= MUX_SEL;
+ end if;
+ end case;
+
+ end if;
+ end if;
+ end process;
+
+
+ GEN_MUX_CONNS : for J in 0 to g_muxed_ports-1 generate
+ mux_snk_o(J).ack <= ep_src_i.ack when(mux /= MUX_SEL and mux_select(J) = '1') else
+ '0';
+ mux_snk_o(J).stall <= ep_src_i.stall when(mux /= MUX_SEL and mux_select(J) = '1') else
+ '1';
+ mux_snk_o(J).err <= ep_src_i.err when(mux /= MUX_SEL and mux_select(J) = '1') else
+ '0';
+ mux_snk_o(J).rty <= '0';
+ end generate;
+
+ ep_src_o.cyc <= mux_snk_i(f_hot_to_bin(mux_select)).cyc when(mux /= MUX_SEL) else
+ '0';
+ ep_src_o.stb <= mux_snk_i(f_hot_to_bin(mux_select)).stb when(mux /= MUX_SEL) else
+ '0';
+ ep_src_o.adr <= mux_snk_i(f_hot_to_bin(mux_select)).adr;
+ ep_src_o.dat <= mux_snk_i(f_hot_to_bin(mux_select)).dat;
+ ep_src_o.sel <= mux_snk_i(f_hot_to_bin(mux_select)).sel;
+ ep_src_o.we <= '1';
+
+
+ --=============================================--
+ -- --
+ -- ENDPOINT talking to many Fabric Slaves --
+ -- --
+ --=============================================--
+
+ CLASS_MATCH : for I in 0 to g_muxed_ports-1 generate
+ dmux_sel(I) <= f_match_class(mux_class_i(I), f_unmarshall_wrf_status(dmux_status_reg).match_class);
+ end generate;
+
+ DMUX_FSM : process(clk_sys_i)
+ variable sel : integer range 0 to g_muxed_ports-1;
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ dmux_select <= (others => '0');
+ dmux_snd_stat <= (others => '0');
+ dmux_status_reg <= (others => '0');
+ ep_stall_mask <= '0';
+ demux <= DMUX_WAIT;
+ else
+ case demux is
+ ---------------------------------------------------------------
+ --State DMUX_WAIT: Wait for the WRF cycle to start and then
+ -- wait for the STATUS word
+ ---------------------------------------------------------------
+ when DMUX_WAIT =>
+ dmux_select <= (others => '0');
+ dmux_snd_stat <= (others => '0');
+ dmux_status_reg <= (others => '0');
+ ep_stall_mask <= '0';
+ if(ep_snk_i.cyc = '1' and ep_snk_i.stb = '1' and ep_snk_i.adr = c_WRF_STATUS) then
+ ep_stall_mask <= '1';
+ dmux_status_reg <= ep_snk_i.dat;
+ demux <= DMUX_STATUS;
+ end if;
+
+ ---------------------------------------------------------------
+ --State DMUX_STATUS: Send Status word to appropriate interface
+ ---------------------------------------------------------------
+ when DMUX_STATUS =>
+ ep_stall_mask <= '1';
+
+ if(to_integer(unsigned(dmux_sel)) = 0) then --class not matched to anything, pass pkt to last port
+ dmux_select(g_muxed_ports-1) <= '1';
+ dmux_snd_stat(g_muxed_ports-1) <= '1';
+ sel := g_muxed_ports-1;
+ else
+ dmux_select <= dmux_sel;
+ dmux_snd_stat <= dmux_sel;
+ sel := f_hot_to_bin(dmux_sel);
+ end if;
+ if(mux_src_i(sel).stall = '0') then
+ demux <= DMUX_PAYLOAD;
+ end if;
+
+ ---------------------------------------------------------------
+ --State DMUX_PAYLOAD: Just wait here till the end of the
+ -- current transfer
+ ---------------------------------------------------------------
+ when DMUX_PAYLOAD =>
+ dmux_snd_stat <= (others => '0');
+ ep_stall_mask <= '0';
+
+ if(ep_snk_i.cyc = '0') then
+ demux <= DMUX_WAIT;
+ end if;
+
+ when others =>
+ demux <= DMUX_WAIT;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ dmux_sel_zero <= '1' when(to_integer(unsigned(dmux_select)) = 0) else
+ '0';
+
+ -- dmux_others signal says for given interface I if any other interface was
+ -- also matched to packet class
+ dmux_others(0) <= '0';
+ GEN_DMUX_OTHERS : for I in 1 to g_muxed_ports-1 generate
+ dmux_others(I) <= or_reduce(dmux_select(I-1 downto 0));
+ end generate;
+
+
+ GEN_DMUX_CONN : for I in 0 to g_muxed_ports-1 generate
+ mux_src_o(I).cyc <= ep_snk_i.cyc when(dmux_select(I) = '1' and dmux_others(I) = '0') else
+ '0';
+ mux_src_o(I).stb <= '1' when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else
+ ep_snk_i.stb when(dmux_select(I) = '1' and dmux_others(I) = '0') else
+ '0';
+ mux_src_o(I).adr <= c_WRF_STATUS when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else
+ ep_snk_i.adr when(dmux_select(I) = '1' and dmux_others(I) = '0') else
+ (others => '0');
+ mux_src_o(I).dat <= dmux_status_reg when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else
+ ep_snk_i.dat when(dmux_select(I) = '1' and dmux_others(I) = '0') else
+ (others => '0');
+ mux_src_o(I).sel <= (others => '1') when(dmux_snd_stat(I) = '1' and dmux_others(I) = '0') else
+ ep_snk_i.sel when(dmux_select(I) = '1' and dmux_others(I) = '0') else
+ (others => '1');
+ mux_src_o(I).we <= '1';
+ end generate;
+
+
+ ep_snk_o.ack <= ep_snk_i.cyc and ep_snk_i.stb and not ep_snk_out_stall when(dmux_sel_zero = '1') else
+ mux_src_i(f_hot_to_bin(dmux_select)).ack;
+
+ ep_snk_o.err <= '0' when(dmux_sel_zero = '1') else
+ mux_src_i(f_hot_to_bin(dmux_select)).err;
+
+ ep_snk_out_stall <= '1' when(ep_stall_mask = '1') else
+ '0' when(dmux_sel_zero = '1') else
+ mux_src_i(f_hot_to_bin(dmux_select)).stall;
+
+ ep_snk_o.stall <= ep_snk_out_stall;
+
+ ep_snk_o.rty <= '0';
+
+end behaviour;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd
new file mode 100644
index 000000000..2cabc4426
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_phase_meas.vhd
@@ -0,0 +1,290 @@
+-------------------------------------------------------------------------------
+-- Title : Digital DMTD Phase Measurement Unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : dmtd_phase_meas.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-02-25
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description: Module measures phase shift between the two input clocks
+-- using a DDMTD phase detector. The raw measurement can be further averaged to
+-- increase the accuracy.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-02-25 1.0 twlostow Created
+-- 2011-04-18 1.1 twlostow Added comments and header
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.NUMERIC_STD.all;
+
+library work;
+use work.gencores_pkg.all;
+
+entity dmtd_phase_meas is
+ generic (
+-- DDMTD deglitcher threshold (in clk_dmtd_i) clock cycles
+ g_deglitcher_threshold: integer;
+-- Phase tag counter size (see dmtd_with_deglitcher.vhd for explanation)
+ g_counter_bits : integer := 14);
+
+ port (
+-- resets
+ rst_sys_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+
+-- system clock
+ clk_sys_i : in std_logic;
+-- Input clocks
+ clk_a_i : in std_logic;
+ clk_b_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+
+
+ en_i : in std_logic;
+
+ navg_i : in std_logic_vector(11 downto 0);
+ phase_meas_o : out std_logic_vector(31 downto 0);
+ phase_meas_p_o : out std_logic
+ );
+
+end dmtd_phase_meas;
+
+architecture syn of dmtd_phase_meas is
+
+ component dmtd_with_deglitcher
+ generic (
+ g_counter_bits : natural);
+ port (
+ rst_n_dmtdclk_i : in std_logic;
+ rst_n_sysclk_i : in std_logic;
+ clk_in_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+ clk_sys_i : in std_logic;
+ shift_en_i : in std_logic;
+ shift_dir_i : in std_logic;
+ deglitch_threshold_i : in std_logic_vector(15 downto 0);
+ dbg_dmtdout_o : out std_logic;
+ tag_o : out std_logic_vector(g_counter_bits-1 downto 0);
+ tag_stb_p1_o : out std_logic);
+ end component;
+
+ type t_pd_state is (PD_WAIT_TAG, PD_WAIT_A, PD_WAIT_B);
+
+ signal tag_a : std_logic_vector(g_counter_bits-1 downto 0);
+ signal tag_b : std_logic_vector(g_counter_bits-1 downto 0);
+
+ signal tag_a_p : std_logic;
+ signal tag_b_p : std_logic;
+
+ signal acc : unsigned(31 downto 0);
+ signal avg_cnt : unsigned(11 downto 0);
+
+ signal phase_raw_p : std_logic;
+ signal phase_raw : unsigned(g_counter_bits-1 downto 0);
+ signal pd_state : t_pd_state;
+
+ signal phase_hi, phase_lo : std_logic;
+ signal ph_acq_valid : std_logic;
+
+
+ signal stored_sign : std_logic;
+ signal preserve_sign : std_logic;
+
+begin -- syn
+
+ DMTD_A : dmtd_with_deglitcher
+ generic map (
+ g_counter_bits => g_counter_bits)
+ port map (
+ rst_n_dmtdclk_i => rst_dmtd_n_i,
+ rst_n_sysclk_i => rst_sys_n_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_a_i,
+ tag_o => tag_a,
+ tag_stb_p1_o => tag_a_p,
+ shift_en_i => '0',
+ shift_dir_i => '0',
+ deglitch_threshold_i => std_logic_vector(to_unsigned(g_deglitcher_threshold, 16)),
+ dbg_dmtdout_o => open);
+
+ DMTD_B : dmtd_with_deglitcher
+ generic map (
+ g_counter_bits => g_counter_bits)
+ port map (
+ rst_n_dmtdclk_i => rst_dmtd_n_i,
+ rst_n_sysclk_i => rst_sys_n_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_b_i,
+ tag_o => tag_b,
+ tag_stb_p1_o => tag_b_p,
+ shift_en_i => '0',
+ shift_dir_i => '0',
+ deglitch_threshold_i => std_logic_vector(to_unsigned(g_deglitcher_threshold, 16)),
+ dbg_dmtdout_o => open);
+
+
+ collect_tags : process (clk_sys_i)
+ begin -- process
+ if rising_edge(clk_sys_i) then
+ if(rst_sys_n_i = '0' or en_i = '0') then
+ phase_raw <= (others => '0');
+ phase_raw_p <= '0';
+ ph_acq_valid <= '0';
+ pd_state <= PD_WAIT_TAG;
+
+ else
+
+ case pd_state is
+ when PD_WAIT_TAG =>
+
+ if(tag_a_p = '1' and tag_b_p = '1') then
+ phase_raw <= unsigned(tag_b) - unsigned(tag_a);
+ phase_raw_p <= '1';
+ elsif(tag_a_p = '1') then
+ phase_raw <= unsigned(tag_a);
+ phase_raw_p <= '0';
+ pd_state <= PD_WAIT_B;
+ elsif (tag_b_p = '1') then
+ phase_raw <= (not unsigned(tag_b)) + 1;
+ phase_raw_p <= '0';
+ pd_state <= PD_WAIT_A;
+ else
+ phase_raw_p <= '0';
+ end if;
+
+ when PD_WAIT_A =>
+ if(tag_a_p = '1') then
+ phase_raw <= phase_raw + unsigned(tag_a);
+ phase_raw_p <= '1';
+ pd_state <= PD_WAIT_TAG;
+ end if;
+
+ when PD_WAIT_B =>
+ if(tag_b_p = '1') then
+ phase_raw <= phase_raw - unsigned(tag_b);
+ phase_raw_p <= '1';
+ pd_state <= PD_WAIT_TAG;
+ end if;
+
+
+ when others => null;
+ end case;
+
+ --if(tag_a_p = '1' and tag_b_p = '1') then
+ -- phase_raw <= unsigned(tag_b) - unsigned(tag_a);
+ -- phase_raw_p <= '1';
+ -- ph_acq_valid <= '0';
+ --elsif(tag_a_p = '1' and tag_b_p = '0' and ph_acq_valid ='1') then
+ -- phase_raw <= phase_raw - unsigned(tag_a);
+ -- phase_raw_p <= '1';
+ -- ph_acq_valid <= '0';
+ --elsif(tag_a_p = '0' and tag_b_p = '1') then
+ -- phase_raw_p <= '0';
+ -- phase_raw <= unsigned(tag_b);
+ -- ph_acq_valid <= '1';
+ --else
+ -- phase_raw_p <= '0';
+ --end if;
+
+
+ end if;
+ end if;
+ end process;
+
+
+ phase_hi <= '1' when phase_raw(phase_raw'high downto phase_raw'high-1) = "11" else '0';
+ phase_lo <= '1' when phase_raw(phase_raw'high downto phase_raw'high-1) = "00" else '0';
+
+
+ calc_error : process (clk_sys_i)
+ begin -- process calc_error
+ if rising_edge(clk_sys_i) then
+ if(rst_sys_n_i = '0' or en_i = '0') then
+ acc <= (others => '0');
+ avg_cnt <= (others => '0');
+ phase_meas_p_o <= '0';
+ phase_meas_o <= (others => '0');
+ stored_sign <= '0';
+ else
+
+
+ if(phase_raw_p = '1') then
+ if(avg_cnt = to_unsigned(0, avg_cnt'length)) then
+ acc <= resize(phase_raw, acc'length);
+
+ if(phase_lo = '1') then
+ preserve_sign <= '1';
+ stored_sign <= '0';
+ elsif(phase_hi = '1') then
+ preserve_sign <= '1';
+ stored_sign <= '1';
+ else
+ preserve_sign <= '0';
+ end if;
+
+ avg_cnt <= avg_cnt + 1;
+ phase_meas_p_o <= '0';
+ elsif (avg_cnt = unsigned(navg_i)) then
+ avg_cnt <= (others => '0');
+ phase_meas_o <= std_logic_vector(acc);
+ phase_meas_p_o <= '1';
+ else
+ avg_cnt <= avg_cnt + 1;
+ phase_meas_p_o <= '0';
+
+
+
+ if(preserve_sign = '1') then
+ if(phase_lo = '1' and stored_sign = '1') then
+ -- report "preserve_sign1";
+ acc <= acc + resize(phase_raw, acc'length) + to_unsigned(2**g_counter_bits, acc'length);
+ elsif (phase_hi = '1' and stored_sign = '0') then
+
+ --report "preserve_sign0";
+ acc <= acc + resize(phase_raw, acc'length) - to_unsigned(2**g_counter_bits, acc'length);
+ else
+ acc <= acc + resize(phase_raw, acc'length);
+ end if;
+ else
+ acc <= acc + resize(phase_raw, acc'length);
+ end if;
+ end if;
+ else
+ phase_meas_p_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process calc_error;
+
+
+end syn;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd
new file mode 100644
index 000000000..e1f4528db
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/dmtd_with_deglitcher.vhd
@@ -0,0 +1,353 @@
+-------------------------------------------------------------------------------
+-- Title : Digital DMTD Edge Tagger
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : dmtd_with_deglitcher.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-02-25
+-- Last update: 2014-07-15
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description: Single-channel DDMTD phase tagger with integrated bit-median
+-- deglitcher. Contains a DDMTD detector, which output signal is deglitched and
+-- tagged with a counter running in DMTD offset clock domain. Phase tags are
+-- generated for each rising edge in DDMTD output with an internal counter
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-01-24 1.0 twlostow Created
+-- 2011-18-04 1.1 twlostow Bit-median type deglitcher, comments
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.NUMERIC_STD.all;
+
+library work;
+use work.gencores_pkg.all;
+
+entity dmtd_with_deglitcher is
+ generic (
+ -- Size of the phase tag counter. Must be big enough to cover at least one
+ -- full period of the DDMTD detector output. Given the frequencies of clk_in_i
+ -- and clk_dmtd_i are respectively f_in an f_dmtd, it can be calculated with
+ -- the following formula:
+ -- g_counter_bits = log2(f_in / abs(f_in - f_dmtd)) + 1
+ g_counter_bits : natural := 17;
+ g_chipscope : boolean := false;
+
+ -- Divides the inputs by 2 (effectively passing the clock through a flip flop)
+ -- before it gets to the DMTD, effectively removing Place&Route warnings
+ -- (at the cost of detector bandwidth)
+ g_divide_input_by_2 : boolean := false;
+
+ -- reversed mode: samples clk_dmtd with clk_in.
+ g_reverse : boolean := false
+ );
+ port (
+ -- resets for different clock domains
+ rst_n_dmtdclk_i : in std_logic;
+ rst_n_sysclk_i : in std_logic;
+
+ -- input clock
+ clk_in_i : in std_logic;
+
+ -- DMTD sampling clock
+ clk_dmtd_i : in std_logic;
+
+ -- system clock
+ clk_sys_i : in std_logic;
+
+ -- async counter resync input: resets only the DDMTD state machine and free
+ -- running counter, synchronized to clk_dmtd_i
+ resync_p_a_i : in std_logic := '0';
+
+ -- [clk_dmtd_i] counter resync output, pulses when free_cntr == 0
+ resync_p_o : out std_logic;
+
+ -- [clk_sys_i] starts resynchronization
+ resync_start_p_i : in std_logic := '0';
+
+ -- [clk_sys_i] 1: resynchonization done
+ resync_done_o : out std_logic;
+
+ -- [clk_dmtd_i] phase shifter enable, HI level shifts the internal counter
+ -- forward/backward by 1 clk_dmtd_i cycle, effectively shifting the tag
+ -- value by +-1.
+ shift_en_i : in std_logic := '0';
+
+ -- [clk_dmtd_i] phase shift direction: 1 - forward, 0 - backward
+ shift_dir_i : in std_logic := '0';
+
+ -- DMTD clock enable, active high. Can be used to reduce the DMTD sampling
+ -- frequency - for example, two 10 MHz signals cannot be sampled directly
+ -- with a 125 MHz clock, but it's possible with a 5 MHz reference, obtained
+ -- by asserting clk_dmtd_en_i every 25 clk_dmtd_i cycles.
+
+ clk_dmtd_en_i : in std_logic := '1';
+
+ -- [clk_dmtd_i] deglitcher threshold
+ deglitch_threshold_i : in std_logic_vector(15 downto 0);
+
+ -- [clk_dmtd_i] raw DDMTD output (for debugging purposes)
+ dbg_dmtdout_o : out std_logic;
+
+ -- [clk_sys_i] deglitched edge tag value
+ tag_o : out std_logic_vector(g_counter_bits-1 downto 0);
+
+ -- [clk_sys_i] pulse indicates new phase tag on tag_o
+ tag_stb_p1_o : out std_logic;
+ dbg_clk_d3_o : out std_logic
+ );
+
+end dmtd_with_deglitcher;
+
+architecture rtl of dmtd_with_deglitcher is
+
+ type t_state is (WAIT_STABLE_0, WAIT_EDGE, GOT_EDGE);
+
+ signal state : t_state;
+
+ signal stab_cntr : unsigned(15 downto 0);
+ signal free_cntr : unsigned(g_counter_bits-1 downto 0);
+
+ signal s_one : std_logic;
+
+ signal clk_in : std_logic;
+ signal clk_i_d0, clk_i_d1, clk_i_d2, clk_i_d3, clk_i_dx : std_logic;
+
+ attribute keep : string;
+ attribute keep of clk_in : signal is "true";
+ attribute keep of clk_i_d0 : signal is "true";
+ attribute keep of clk_i_d1 : signal is "true";
+ attribute keep of clk_i_d2 : signal is "true";
+ attribute keep of clk_i_d3 : signal is "true";
+
+ signal new_edge_sreg : std_logic_vector(5 downto 0);
+ signal new_edge_p : std_logic;
+
+ signal tag_int : unsigned(g_counter_bits-1 downto 0);
+ signal resync_p_dmtd : std_logic;
+
+ signal resync_start_p_dmtd, resync_done_dmtd, resync_p_int : std_logic;
+
+begin -- rtl
+
+ U_Sync_Resync_Pulse : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_dmtd_i,
+ rst_n_i => rst_n_dmtdclk_i,
+ data_i => resync_p_a_i,
+ synced_o => resync_p_dmtd);
+
+ U_Sync_Start_Pulse : gc_pulse_synchronizer
+ port map (
+ clk_in_i => clk_sys_i,
+ clk_out_i => clk_dmtd_i,
+ rst_n_i => rst_n_dmtdclk_i,
+ d_ready_o => open,
+ d_p_i => resync_start_p_i,
+ q_p_o => resync_start_p_dmtd);
+
+ U_Sync_Resync_Done : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sysclk_i,
+ data_i => resync_done_dmtd,
+ synced_o => resync_done_o);
+
+
+ gen_straight : if(g_reverse = false) generate
+
+ gen_input_div2 : if(g_divide_input_by_2 = true) generate
+ p_divide_input_clock : process(clk_in_i, rst_n_sysclk_i)
+ begin
+ if rst_n_sysclk_i = '0' then
+ clk_in <= '0';
+ elsif rising_edge(clk_in_i) then
+ clk_in <= not clk_in;
+ end if;
+ end process;
+ end generate gen_input_div2;
+
+ gen_input_straight : if(g_divide_input_by_2 = false) generate
+ clk_in <= clk_in_i;
+ end generate gen_input_straight;
+
+ p_the_dmtd_itself : process(clk_dmtd_i)
+ begin
+ if rising_edge(clk_dmtd_i) then
+ clk_i_d0 <= clk_in;
+ clk_i_d1 <= clk_i_d0;
+ clk_i_d2 <= clk_i_d1;
+ clk_i_d3 <= clk_i_d2;
+ end if;
+ end process;
+
+ end generate gen_straight;
+
+ gen_reverse : if(g_reverse = true) generate
+
+ assert (not g_divide_input_by_2) report "dmtd_with_deglitcher: g_reverse implies g_divide_input_by_2 == false" severity failure;
+
+ clk_in <= clk_in_i;
+
+ p_the_dmtd_itself : process(clk_in)
+ begin
+ if rising_edge(clk_in) then
+ clk_i_d0 <= clk_dmtd_i;
+ clk_i_d1 <= clk_i_d0;
+ end if;
+ end process;
+
+ p_sync : process(clk_dmtd_i)
+ begin
+ if rising_edge(clk_dmtd_i) then
+ clk_i_dx <= clk_i_d1;
+ clk_i_d2 <= not clk_i_dx;
+ clk_i_d3 <= clk_i_d2;
+ end if;
+ end process;
+
+ end generate gen_reverse;
+
+-- glitchproof DMTD output edge detection
+ p_deglitch : process (clk_dmtd_i)
+ begin -- process deglitch
+
+ if rising_edge(clk_dmtd_i) then -- rising clock edge
+
+ if (rst_n_dmtdclk_i = '0' or (resync_p_dmtd = '1' and resync_done_dmtd = '0')) then -- synchronous reset (active low)
+ stab_cntr <= (others => '0');
+ state <= WAIT_STABLE_0;
+ free_cntr <= (others => '0');
+ new_edge_sreg <= (others => '0');
+ elsif(clk_dmtd_en_i = '1') then
+
+ if (shift_en_i = '0') then -- phase shifter
+ free_cntr <= free_cntr + 1;
+ elsif (shift_dir_i = '1') then
+ free_cntr <= free_cntr + 2;
+ end if;
+
+ case state is
+ when WAIT_STABLE_0 => -- out-of-sync
+ new_edge_sreg <= '0' & new_edge_sreg(new_edge_sreg'length-1 downto 1);
+
+ if clk_i_d3 /= '0' then
+ stab_cntr <= (others => '0');
+ else
+ stab_cntr <= stab_cntr + 1;
+ end if;
+
+ -- DMTD output stable counter hit the LOW level threshold?
+ if stab_cntr = unsigned(deglitch_threshold_i) then
+ state <= WAIT_EDGE;
+ end if;
+
+ when WAIT_EDGE =>
+ if (clk_i_d3 /= '0') then -- got a glitch?
+ state <= GOT_EDGE;
+ tag_int <= free_cntr;
+ stab_cntr <= (others => '0');
+ end if;
+
+ when GOT_EDGE =>
+ if (clk_i_d3 = '0') then
+ tag_int <= tag_int + 1;
+ end if;
+
+ if stab_cntr = unsigned(deglitch_threshold_i) then
+ state <= WAIT_STABLE_0;
+ tag_o <= std_logic_vector(tag_int);
+ new_edge_sreg <= (others => '1');
+ stab_cntr <= (others => '0');
+ elsif (clk_i_d3 = '0') then
+ stab_cntr <= (others => '0');
+ else
+ stab_cntr <= stab_cntr + 1;
+ end if;
+
+
+ end case;
+ end if;
+ end if;
+ end process p_deglitch;
+
+ p_resync_pulse_output : process(clk_dmtd_i)
+ begin
+ if rising_edge(clk_dmtd_i) then
+ if(unsigned(free_cntr(free_cntr'length-1 downto 3)) = 0) then
+ resync_p_o <= '1';
+ else
+ resync_p_o <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_resync_pulse_trigger : process(clk_dmtd_i)
+ begin
+ if rising_edge(clk_dmtd_i) then
+ if rst_n_dmtdclk_i = '0' then
+ resync_done_dmtd <= '1';
+ else
+ if(resync_start_p_dmtd = '1') then
+ resync_done_dmtd <= '0';
+ elsif(resync_p_dmtd = '1') then
+ resync_done_dmtd <= '1';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ U_sync_tag_strobe : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sysclk_i,
+ data_i => new_edge_sreg(0),
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => new_edge_p);
+
+ tag_stb_p1_o <= new_edge_p;
+
+ U_Extend_Debug_Pulses : gc_extend_pulse
+ generic map (
+ g_width => 3000)
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sysclk_i,
+ pulse_i => new_edge_p,
+ extended_o => dbg_dmtdout_o);
+
+ dbg_clk_d3_o <= clk_i_d3;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd
new file mode 100644
index 000000000..fb55da00c
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/timing/pulse_stamper.vhd
@@ -0,0 +1,161 @@
+-------------------------------------------------------------------------------
+-- Entity: pulse_stamper
+-- File: pulse_stamper.vhd
+-- Description: a time-tagger which associates a time-tag with an asyncrhonous
+-- input pulse.
+-- Author: Javier Serrano (Javier.Serrano@cern.ch)
+-- Date: 24 January 2012
+-- Version: 0.01
+-- Todo: Factor out syncrhonizer in a separate reusable block.
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+-- GNU LESSER GENERAL PUBLIC LICENSE
+-- -----------------------------------
+-- This source file is free software; you can redistribute it and/or modify it
+-- under the terms of the GNU Lesser General Public License as published by the
+-- Free Software Foundation; either version 2.1 of the License, or (at your
+-- option) any later version.
+-- This source 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 Lesser General Public License
+-- for more details. You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it from
+-- http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity pulse_stamper is
+
+ generic (
+ -- reference clock frequency
+ g_ref_clk_rate : integer := 125000000);
+
+ port(
+ clk_ref_i : in std_logic; -- timing reference clock
+ clk_sys_i : in std_logic; -- data output reference clock
+ rst_n_i : in std_logic; -- system reset
+
+ pulse_a_i : in std_logic; -- pulses to be stamped
+
+ -------------------------------------------------------------------------------
+ -- Timing input (from WRPC), clk_ref_i domain
+ ------------------------------------------------------------------------------
+
+ -- 1: time given on tm_utc_i and tm_cycles_i is valid (otherwise, don't timestamp)
+ tm_time_valid_i : in std_logic;
+ -- number of seconds
+ tm_tai_i : in std_logic_vector(39 downto 0);
+ -- number of clk_ref_i cycles
+ tm_cycles_i : in std_logic_vector(27 downto 0);
+
+
+ ---------------------------------------------------------------------------
+ -- Time tag output (clk_sys_i domain)
+ ---------------------------------------------------------------------------
+ tag_tai_o : out std_logic_vector(39 downto 0);
+ tag_cycles_o : out std_logic_vector(27 downto 0);
+ -- single-cycle pulse: strobe tag on tag_utc_o and tag_cycles_o
+ tag_valid_o : out std_logic
+ );
+
+
+end pulse_stamper;
+
+architecture rtl of pulse_stamper is
+
+ -- Signals for input anti-metastability ffs
+ signal pulse_ref : std_logic_vector(2 downto 0);
+ signal pulse_ref_p1 : std_logic;
+ signal pulse_ref_p1_d1 : std_logic;
+
+ -- Time tagger signals
+ signal tag_utc_ref : std_logic_vector(39 downto 0);
+ signal tag_cycles_ref : std_logic_vector(27 downto 0);
+
+ -- Signals for synchronizer
+ signal rst_from_sync : std_logic;
+ signal pulse_ref_d2 : std_logic;
+ signal pulse_sys : std_logic_vector(2 downto 0);
+ signal pulse_sys_p1 : std_logic;
+ signal pulse_back : std_logic_vector(2 downto 0);
+
+begin -- architecture rtl
+
+ -- Synchronization of external pulse into the clk_ref_i clock domain
+ sync_ext_pulse: process (clk_ref_i)
+ begin
+ if clk_ref_i'event and clk_ref_i='1' then
+ pulse_ref <= pulse_ref(1 downto 0) & pulse_a_i;
+ pulse_ref_p1 <= pulse_ref(1) and not pulse_ref(2);
+ pulse_ref_p1_d1 <= pulse_ref_p1 and tm_time_valid_i;
+ end if;
+ end process sync_ext_pulse;
+
+ -- Time tagging of the pulse, still in the clk_ref_i domain
+ tagger: process (clk_ref_i)
+ begin
+ if clk_ref_i'event and clk_ref_i='1' then
+ if pulse_ref_p1='1' and tm_time_valid_i='1' then
+ tag_utc_ref <= tm_tai_i;
+ tag_cycles_ref <= tm_cycles_i;
+ end if;
+ end if;
+ end process tagger;
+
+ -- Synchronizer to pass UTC register data to the system clock domain
+ -- This synchronizer is made with the following three processes
+
+ -- First one FF with async reset, still in the clk_ref_i domain
+ sync_first_ff: process (clk_ref_i, rst_n_i, rst_from_sync)
+ begin
+ if rst_n_i='0' or rst_from_sync='1' then
+ pulse_ref_d2 <= '0';
+ elsif clk_ref_i'event and clk_ref_i='1' then
+ if pulse_ref_p1_d1='1' then
+ pulse_ref_d2 <= '1';
+ end if;
+ end if;
+ end process sync_first_ff;
+
+ -- Then three FFs to take the strobe safely into the clk_sys_i domain
+ sync_sys: process (clk_sys_i)
+ begin
+ if clk_sys_i'event and clk_sys_i='1' then
+ pulse_sys <= pulse_sys(1 downto 0) & pulse_ref_d2;
+ pulse_sys_p1 <= pulse_sys(1) and not pulse_sys(2);
+ end if;
+ end process sync_sys;
+
+ -- And then back into the clk_ref_i domain
+ sync_ref: process (clk_ref_i)
+ begin
+ if clk_ref_i'event and clk_ref_i='1' then
+ pulse_back <= pulse_back(1 downto 0) & pulse_sys(2);
+ rst_from_sync <= pulse_back(2);
+ end if;
+ end process sync_ref;
+
+ -- Now we can take the time tags into the clk_sys_i domain
+ sys_tags: process (clk_sys_i)
+ begin
+ if clk_sys_i'event and clk_sys_i='1' then
+ if rst_n_i='0' then
+ tag_tai_o <= (others=>'0');
+ tag_cycles_o <= (others=>'0');
+ tag_valid_o <= '0';
+ elsif pulse_sys_p1='1' then
+ tag_tai_o <= tag_utc_ref;
+ tag_cycles_o <= tag_cycles_ref;
+ tag_valid_o <= '1';
+ else
+ tag_valid_o <='0';
+ end if;
+ end if;
+ end process sys_tags;
+
+end architecture rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd
new file mode 100644
index 000000000..c28410f68
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac.vhd
@@ -0,0 +1,209 @@
+-------------------------------------------------------------------------------
+-- Title : Serial DAC interface
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : spec_serial_dac.vhd
+-- Author : paas, slayer
+-- Company : CERN BE-Co-HT
+-- Created : 2010-02-25
+-- Last update: 2011-05-10
+-- Platform : fpga-generic
+-- Standard : VHDL'87
+-------------------------------------------------------------------------------
+-- Description: The dac unit provides an interface to a 16 bit serial Digital
+-- to Analogue converter (max5441, SPI?/QSPI?/MICROWIRE? compatible)
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :1
+-- Date Version Author Description
+-- 2009-01-24 1.0 paas Created
+-- 2010-02-25 1.1 slayer Modified for rev 1.1 switch
+-------------------------------------------------------------------------------
+
+
+library IEEE;
+
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+
+entity spec_serial_dac is
+
+ generic (
+ g_num_data_bits : integer := 16;
+ g_num_extra_bits : integer := 8;
+ g_num_cs_select : integer := 2
+ );
+
+ port (
+-- clock & reset
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+-- channel 1 value and value load strobe
+ value_i : in std_logic_vector(g_num_data_bits-1 downto 0);
+ cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0);
+ load_i : in std_logic;
+
+-- SCLK divider: 000 = clk_i/8 ... 111 = clk_i/1024
+ sclk_divsel_i : in std_logic_vector(2 downto 0);
+
+-- DAC I/F
+ dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0);
+ dac_sclk_o : out std_logic;
+ dac_sdata_o : out std_logic;
+
+ xdone_o : out std_logic
+ );
+end spec_serial_dac;
+
+
+architecture syn of spec_serial_dac is
+
+ signal divider : unsigned(11 downto 0);
+ signal dataSh : std_logic_vector(g_num_data_bits + g_num_extra_bits-1 downto 0);
+ signal bitCounter : std_logic_vector(g_num_data_bits + g_num_extra_bits+1 downto 0);
+ signal endSendingData : std_logic;
+ signal sendingData : std_logic;
+ signal iDacClk : std_logic;
+ signal iValidValue : std_logic;
+
+ signal divider_muxed : std_logic;
+
+ signal cs_sel_reg : std_logic_vector(g_num_cs_select-1 downto 0);
+
+begin
+
+ select_divider : process (divider, sclk_divsel_i)
+ begin -- process
+ case sclk_divsel_i is
+ when "000" => divider_muxed <= divider(1); -- sclk = clk_i/8
+ when "001" => divider_muxed <= divider(2); -- sclk = clk_i/16
+ when "010" => divider_muxed <= divider(3); -- sclk = clk_i/32
+ when "011" => divider_muxed <= divider(4); -- sclk = clk_i/64
+ when "100" => divider_muxed <= divider(5); -- sclk = clk_i/128
+ when "101" => divider_muxed <= divider(6); -- sclk = clk_i/256
+ when "110" => divider_muxed <= divider(7); -- sclk = clk_i/512
+ when "111" => divider_muxed <= divider(8); -- sclk = clk_i/1024
+ when others => null;
+ end case;
+ end process;
+
+
+ iValidValue <= load_i;
+
+ process(clk_i, rst_n_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ sendingData <= '0';
+ else
+ if iValidValue = '1' and sendingData = '0' then
+ sendingData <= '1';
+ elsif endSendingData = '1' then
+ sendingData <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if iValidValue = '1' then
+ divider <= (others => '0');
+ elsif sendingData = '1' then
+ if(divider_muxed = '1') then
+ divider <= (others => '0');
+ else
+ divider <= divider + 1;
+ end if;
+ elsif endSendingData = '1' then
+ divider <= (others => '0');
+ end if;
+ end if;
+ end process;
+
+
+ process(clk_i, rst_n_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ iDacClk <= '1'; -- 0
+ else
+ if iValidValue = '1' then
+ iDacClk <= '1'; -- 0
+ elsif divider_muxed = '1' then
+ iDacClk <= not(iDacClk);
+ elsif endSendingData = '1' then
+ iDacClk <= '1'; -- 0
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_i, rst_n_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ dataSh <= (others => '0');
+ else
+ if iValidValue = '1' and sendingData = '0' then
+ cs_sel_reg <= cs_sel_i;
+ dataSh(g_num_data_bits-1 downto 0) <= value_i;
+ dataSh(dataSh'left downto g_num_data_bits) <= (others => '0');
+ elsif sendingData = '1' and divider_muxed = '1' and iDacClk = '0' then
+ dataSh(0) <= dataSh(dataSh'left);
+ dataSh(dataSh'left downto 1) <= dataSh(dataSh'left - 1 downto 0);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if iValidValue = '1' and sendingData = '0' then
+ bitCounter(0) <= '1';
+ bitCounter(bitCounter'left downto 1) <= (others => '0');
+ elsif sendingData = '1' and to_integer(divider) = 0 and iDacClk = '1' then
+ bitCounter(0) <= '0';
+ bitCounter(bitCounter'left downto 1) <= bitCounter(bitCounter'left - 1 downto 0);
+ end if;
+ end if;
+ end process;
+
+ endSendingData <= bitCounter(bitCounter'left);
+
+ xdone_o <= not SendingData;
+
+ dac_sdata_o <= dataSh(dataSh'left);
+
+ gen_cs_out : for i in 0 to g_num_cs_select-1 generate
+ dac_cs_n_o(i) <= not(sendingData) or (not cs_sel_reg(i));
+ end generate gen_cs_out;
+
+ dac_sclk_o <= iDacClk;
+
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd
new file mode 100644
index 000000000..511bb27b7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_dacs/spec_serial_dac_arb.vhd
@@ -0,0 +1,187 @@
+-------------------------------------------------------------------------------
+-- Title : SPEC serial DAC interface with arbiter
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : spec_serial_dac.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Platform : fpga-generic
+-- Standard : VHDL'87
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+
+entity spec_serial_dac_arb is
+ generic(
+ g_invert_sclk : boolean;
+ g_num_extra_bits : integer
+ );
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ val1_i : in std_logic_vector(15 downto 0);
+ load1_i : in std_logic;
+ val2_i : in std_logic_vector(15 downto 0);
+ load2_i : in std_logic;
+
+ dac_cs_n_o : out std_logic_vector(1 downto 0);
+ dac_clr_n_o : out std_logic;
+ dac_sclk_o : out std_logic;
+ dac_din_o : out std_logic);
+
+end spec_serial_dac_arb;
+
+architecture behavioral of spec_serial_dac_arb is
+
+ component spec_serial_dac
+ generic (
+ g_num_data_bits : integer;
+ g_num_extra_bits : integer;
+ g_num_cs_select : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ value_i : in std_logic_vector(g_num_data_bits-1 downto 0);
+ cs_sel_i : in std_logic_vector(g_num_cs_select-1 downto 0);
+ load_i : in std_logic;
+ sclk_divsel_i : in std_logic_vector(2 downto 0);
+ dac_cs_n_o : out std_logic_vector(g_num_cs_select-1 downto 0);
+ dac_sclk_o : out std_logic;
+ dac_sdata_o : out std_logic;
+ xdone_o : out std_logic);
+ end component;
+
+ signal d1, d2 : std_logic_vector(15 downto 0);
+ signal d1_ready, d2_ready : std_logic;
+
+
+ signal dac_data : std_logic_vector(15 downto 0);
+ signal dac_load : std_logic;
+ signal dac_cs_sel : std_logic_vector(1 downto 0);
+ signal dac_done : std_logic;
+ signal dac_sclk_int : std_logic;
+
+ type t_state is (WAIT_DONE, LOAD_DAC, WAIT_DATA);
+
+ signal state : t_state;
+
+ signal trig0 : std_logic_vector(31 downto 0);
+ signal trig1 : std_logic_vector(31 downto 0);
+ signal trig2 : std_logic_vector(31 downto 0);
+ signal trig3 : std_logic_vector(31 downto 0);
+ signal CONTROL0 : std_logic_vector(35 downto 0);
+
+begin -- behavioral
+
+ dac_clr_n_o <= '1';
+
+ U_DAC : spec_serial_dac
+ generic map (
+ g_num_data_bits => 16,
+ g_num_extra_bits => g_num_extra_bits,
+ g_num_cs_select => 2)
+ port map (
+ clk_i => clk_i,
+ rst_n_i => rst_n_i,
+ value_i => dac_data,
+ cs_sel_i => dac_cs_sel,
+ load_i => dac_load,
+ sclk_divsel_i => "001",
+ dac_cs_n_o => dac_cs_n_o,
+ dac_sclk_o => dac_sclk_int,
+ dac_sdata_o => dac_din_o,
+ xdone_o => dac_done);
+
+
+ p_drive_sclk: process(dac_sclk_int)
+ begin
+ if(g_invert_sclk) then
+ dac_sclk_o <= not dac_sclk_int;
+ else
+ dac_sclk_o <= dac_sclk_int;
+ end if;
+ end process;
+
+ process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ d1 <= (others => '0');
+ d1_ready <= '0';
+ d2 <= (others => '0');
+ d2_ready <= '0';
+ dac_load <= '0';
+ dac_cs_sel <= (others => '0');
+ state <= WAIT_DATA;
+ else
+
+ if(load1_i = '1' or load2_i = '1') then
+
+ if(load1_i = '1') then
+ d1_ready <= '1';
+ d1 <= val1_i;
+ end if;
+
+ if(load2_i = '1') then
+ d2_ready <= '1';
+ d2 <= val2_i;
+ end if;
+ else
+ case state is
+ when WAIT_DATA =>
+ if(d1_ready = '1') then
+ dac_cs_sel <= "01";
+ dac_data <= d1;
+ dac_load <= '1';
+ d1_ready <= '0';
+ state <= LOAD_DAC;
+ elsif(d2_ready = '1') then
+ dac_cs_sel <= "10";
+ dac_data <= d2;
+ dac_load <= '1';
+ d2_ready <= '0';
+ state <= LOAD_DAC;
+ end if;
+
+ when LOAD_DAC=>
+ dac_load <= '0';
+ state <= WAIT_DONE;
+
+ when WAIT_DONE =>
+ if(dac_done = '1') then
+ state <= WAIT_DATA;
+ end if;
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd
new file mode 100644
index 000000000..5d1a794ad
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_pkg.vhd
@@ -0,0 +1,469 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : endpoint_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-04-26
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description: Public package for the WR Endpoint. Contains public data
+-- structures and component declarations.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+
+package endpoint_pkg is
+
+ function f_pcs_data_width(pcs_16 : boolean) return integer;
+ function f_pcs_k_width(pcs_16 : boolean) return integer;
+ function f_pcs_bts_width(pcs_16 : boolean) return integer;
+ function f_pcs_clock_rate(pcs_16 : boolean) return integer;
+
+ type t_txtsu_timestamp is record
+ stb : std_logic;
+ tsval : std_logic_vector(31 downto 0);
+ port_id : std_logic_vector(5 downto 0);
+ frame_id : std_logic_vector(15 downto 0);
+ incorrect : std_logic;
+ end record;
+
+ type t_txtsu_timestamp_array is array(integer range <>) of t_txtsu_timestamp;
+
+ -- Endpoint's internal fabric used to connect the submodules with each other.
+ -- Easier to handle than pipelined Wishbone.
+ type t_ep_internal_fabric is record
+ sof : std_logic;
+ eof : std_logic;
+ error : std_logic;
+ dvalid : std_logic;
+ bytesel : std_logic;
+ has_rx_timestamp : std_logic;
+ rx_timestamp_valid : std_logic;
+ data : std_logic_vector(15 downto 0);
+ addr : std_logic_vector(1 downto 0);
+ end record;
+ type t_fab_pipe is array(integer range <>) of t_ep_internal_fabric;
+
+ -----------------------------
+ -- Phy i/f types
+ -----------------------------
+ -- 8-bit Serdes
+ type t_phy_8bits_to_wrc is record
+ ref_clk : std_logic;
+ tx_disparity : std_logic;
+ tx_enc_err : std_logic;
+ rx_data : std_logic_vector(7 downto 0);
+ rx_clk : std_logic;
+ rx_k : std_logic_vector(0 downto 0);
+ rx_enc_err : std_logic;
+ rx_bitslide : std_logic_vector(3 downto 0);
+ rdy : std_logic;
+ sfp_tx_fault : std_logic;
+ sfp_los : std_logic;
+ end record;
+ type t_phy_8bits_from_wrc is record
+ rst : std_logic;
+ loopen : std_logic;
+ tx_data : std_logic_vector(7 downto 0);
+ tx_k : std_logic_vector(0 downto 0);
+ loopen_vec : std_logic_vector(2 downto 0);
+ tx_prbs_sel : std_logic_vector(2 downto 0);
+ sfp_tx_disable : std_logic;
+ end record;
+
+ constant c_dummy_phy8_to_wrc : t_phy_8bits_to_wrc :=
+ ('0', '0', '0', (others=>'0'), '0', (others=>'0'), '0',
+ (others=>'0'), '0', '0', '0');
+ constant c_dummy_phy8_from_wrc : t_phy_8bits_from_wrc :=
+ ('0', '0', (others=>'0'), (others=>'0'), (others=>'0'),
+ (others=>'0'), '0');
+
+ -- 16-bit Serdes
+ type t_phy_16bits_to_wrc is record
+ ref_clk : std_logic;
+ tx_disparity : std_logic;
+ tx_enc_err : std_logic;
+ rx_data : std_logic_vector(15 downto 0);
+ rx_clk : std_logic;
+ rx_k : std_logic_vector(1 downto 0);
+ rx_enc_err : std_logic;
+ rx_bitslide : std_logic_vector(4 downto 0);
+ rdy : std_logic;
+ sfp_tx_fault : std_logic;
+ sfp_los : std_logic;
+ end record;
+ type t_phy_16bits_from_wrc is record
+ rst : std_logic;
+ loopen : std_logic;
+ tx_data : std_logic_vector(15 downto 0);
+ tx_k : std_logic_vector(1 downto 0);
+ loopen_vec : std_logic_vector(2 downto 0);
+ tx_prbs_sel : std_logic_vector(2 downto 0);
+ sfp_tx_disable : std_logic;
+ end record;
+
+ constant c_dummy_phy16_to_wrc : t_phy_16bits_to_wrc :=
+ ('0', '0', '0', (others=>'0'), '0', (others=>'0'), '0',
+ (others=>'0'), '0', '0', '0');
+ constant c_dummy_phy16_from_wrc : t_phy_16bits_from_wrc :=
+ ('0', '0', (others=>'0'), (others=>'0'), (others=>'0'),
+ (others=>'0'), '0');
+
+
+ -- debug CS types
+ type t_dbg_ep_rxpcs is record
+ fsm : std_logic_vector(2 downto 0);
+ end record;
+
+ type t_dbg_ep_pcs is record
+ rx : t_dbg_ep_rxpcs;
+ end record;
+
+ type t_dbg_ep_rxpath is record
+ fab_pipe : t_fab_pipe(9 downto 0);
+ dreq_pipe : std_logic_vector(9 downto 0);
+ pcs_fifo_afull : std_logic;
+ pcs_fifo_empty : std_logic;
+ pcs_fifo_full : std_logic;
+ rxbuf_full : std_logic;
+ end record;
+
+ type t_dbg_ep is record
+ pcs : t_dbg_ep_pcs;
+ rxpath : t_dbg_ep_rxpath;
+ end record;
+ ------------------------------------
+
+ constant c_epevents_sz : integer := 29; --how many events the endpoint generates
+
+ component xwr_endpoint
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_simulation : boolean := false;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_tx_force_gap_length : integer := 0;
+ g_tx_runt_padding : boolean := false;
+ g_rx_buffer_size : integer := 1024;
+ g_with_rx_buffer : boolean := true;
+ g_with_flow_control : boolean := true;
+ g_with_timestamper : boolean := true;
+ g_with_dpi_classifier : boolean := false;
+ g_with_vlans : boolean := false;
+ g_with_rtu : boolean := false;
+ g_with_leds : boolean := false;
+ g_with_dmtd : boolean := false;
+ g_with_packet_injection : boolean := false;
+ g_use_new_rxcrc : boolean := false;
+ g_use_new_txcrc : boolean := false;
+ g_with_stop_traffic : boolean := false);
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ clk_dmtd_i : in std_logic := '0';
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ pps_csync_p1_i : in std_logic := '0';
+ pps_valid_i : in std_logic := '1';
+ phy_rst_o : out std_logic;
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+ phy_rdy_i : in std_logic;
+ phy_ref_clk_i : in std_logic := '0';
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic := '0';
+ phy_tx_enc_err_i : in std_logic := '0';
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_clk_i : in std_logic := '0';
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_enc_err_i : in std_logic := '0';
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+ gmii_tx_clk_i : in std_logic := '0';
+ gmii_txd_o : out std_logic_vector(7 downto 0);
+ gmii_tx_en_o : out std_logic;
+ gmii_tx_er_o : out std_logic;
+ gmii_rx_clk_i : in std_logic := '0';
+ gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00";
+ gmii_rx_er_i : in std_logic := '0';
+ gmii_rx_dv_i : in std_logic := '0';
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+ snk_o : out t_wrf_sink_out;
+ snk_i : in t_wrf_sink_in;
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic := '1';
+ rtu_full_i : in std_logic := '0';
+ rtu_almost_full_i : in std_logic := '0';
+ rtu_rq_strobe_p1_o : out std_logic;
+ rtu_rq_abort_o : out std_logic;
+ rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0);
+ rtu_rq_has_vid_o : out std_logic;
+ rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0);
+ rtu_rq_has_prio_o : out std_logic;
+ wb_i : in t_wishbone_slave_in;
+ wb_o : out t_wishbone_slave_out;
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+ fc_rx_pause_start_p_o : out std_logic;
+ fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0);
+ inject_req_i : in std_logic := '0';
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+ rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0);
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ led_link_o : out std_logic;
+ led_act_o : out std_logic;
+ link_kill_i : in std_logic := '0';
+ link_up_o : out std_logic;
+ stop_traffic_i : in std_logic := '0';
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep);
+ end component;
+
+ component wr_endpoint
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_tx_force_gap_length : integer := 0;
+ g_tx_runt_padding : boolean := false;
+ g_simulation : boolean := false;
+ g_pcs_16bit : boolean := true;
+ g_rx_buffer_size : integer := 1024;
+ g_with_rx_buffer : boolean := true;
+ g_with_flow_control : boolean := true;
+ g_with_timestamper : boolean := true;
+ g_with_dpi_classifier : boolean := false;
+ g_with_vlans : boolean := true;
+ g_with_rtu : boolean := true;
+ g_with_leds : boolean := true;
+ g_with_dmtd : boolean := false;
+ g_with_packet_injection : boolean := false;
+ g_use_new_rxcrc : boolean := false;
+ g_use_new_txcrc : boolean := false;
+ g_with_stop_traffic : boolean := false);
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ pps_csync_p1_i : in std_logic;
+ pps_valid_i : in std_logic := '1';
+ phy_rst_o : out std_logic;
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+ phy_rdy_i : in std_logic;
+ phy_ref_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_clk_i : in std_logic;
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_enc_err_i : in std_logic;
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ gmii_tx_clk_i : in std_logic := '0';
+ gmii_txd_o : out std_logic_vector(7 downto 0) := x"00";
+ gmii_tx_en_o : out std_logic := '0';
+ gmii_tx_er_o : out std_logic := '0';
+ gmii_rx_clk_i : in std_logic := '0';
+ gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00";
+ gmii_rx_er_i : in std_logic := '0';
+ gmii_rx_dv_i : in std_logic := '0';
+ src_dat_o : out std_logic_vector(15 downto 0);
+ src_adr_o : out std_logic_vector(1 downto 0);
+ src_sel_o : out std_logic_vector(1 downto 0);
+ src_cyc_o : out std_logic;
+ src_stb_o : out std_logic;
+ src_we_o : out std_logic;
+ src_stall_i : in std_logic;
+ src_ack_i : in std_logic;
+ src_err_i : in std_logic;
+ snk_dat_i : in std_logic_vector(15 downto 0);
+ snk_adr_i : in std_logic_vector(1 downto 0);
+ snk_sel_i : in std_logic_vector(1 downto 0);
+ snk_cyc_i : in std_logic;
+ snk_stb_i : in std_logic;
+ snk_we_i : in std_logic;
+ snk_stall_o : out std_logic;
+ snk_ack_o : out std_logic;
+ snk_err_o : out std_logic;
+ snk_rty_o : out std_logic;
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic;
+ rtu_full_i : in std_logic;
+ rtu_almost_full_i : in std_logic;
+ rtu_rq_strobe_p1_o : out std_logic;
+ rtu_rq_abort_o : out std_logic;
+ rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0);
+ rtu_rq_has_vid_o : out std_logic;
+ rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0);
+ rtu_rq_has_prio_o : out std_logic;
+ wb_cyc_i : in std_logic;
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_adr_i : in std_logic_vector(7 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+ fc_rx_pause_start_p_o : out std_logic;
+ fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0);
+ inject_req_i : in std_logic := '0';
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+ rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0);
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ led_link_o : out std_logic;
+ led_act_o : out std_logic;
+ link_kill_i : in std_logic := '0';
+ link_up_o : out std_logic;
+ stop_traffic_i : in std_logic := '0';
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep);
+ end component;
+
+ constant c_xwr_endpoint_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"650c2d4f",
+ version => x"00000002",
+ date => x"20121116",
+ name => "WR-Endpoint ")));
+
+end endpoint_pkg;
+
+package body endpoint_pkg is
+
+ function f_pcs_data_width(pcs_16 : boolean)
+ return integer is
+ begin
+ if (pcs_16) then
+ return 16;
+ else
+ return 8;
+ end if;
+ end function;
+
+ function f_pcs_k_width(pcs_16 : boolean)
+ return integer is
+ begin
+ if (pcs_16) then
+ return 2;
+ else
+ return 1;
+ end if;
+ end function;
+
+ function f_pcs_bts_width(pcs_16 : boolean)
+ return integer is
+ begin
+ if (pcs_16) then
+ return 5;
+ else
+ return 4;
+ end if;
+ end function;
+
+ function f_pcs_clock_rate(pcs_16 : boolean)
+ return integer is
+ begin
+ if (pcs_16) then
+ return 62500000;
+ else
+ return 125000000;
+ end if;
+ end function;
+
+end package body endpoint_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd
new file mode 100644
index 000000000..3191e71cb
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/endpoint_private_pkg.vhd
@@ -0,0 +1,930 @@
+-------------------------------------------------------------------------------
+-- Title : Private constants/types/functions package
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : endpoint_private_pkg.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Endpoint private definitions:
+-- - 8B10B codes
+-- - VLAN control registers
+-- - Data types: internal fabric, RMON, RTU
+-- - 18-bit FIFO fabric packing/unpacking functions
+-- - Endpoint subcomponents declarations
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2011 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.ep_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.genram_pkg.all;
+
+package endpoint_private_pkg is
+
+ -- special/control characters
+ constant c_k28_5 : std_logic_vector(7 downto 0) := "10111100"; -- bc
+ constant c_k23_7 : std_logic_vector(7 downto 0) := "11110111"; -- f7
+ constant c_k27_7 : std_logic_vector(7 downto 0) := "11111011"; -- fb
+ constant c_k29_7 : std_logic_vector(7 downto 0) := "11111101"; -- fd
+ constant c_k30_7 : std_logic_vector(7 downto 0) := "11111110"; -- fe
+ constant c_k28_7 : std_logic_vector(7 downto 0) := "11111100"; -- fc
+ constant c_d21_5 : std_logic_vector(7 downto 0) := "10110101"; -- b5
+
+ constant c_d2_2 : std_logic_vector(7 downto 0) := "01000010"; -- 42
+ constant c_d5_6 : std_logic_vector(7 downto 0) := "11000101"; -- c5
+ constant c_d16_2 : std_logic_vector(7 downto 0) := "01010000"; -- 50
+ constant c_preamble_char : std_logic_vector(7 downto 0) := "01010101";
+ constant c_preamble_sfd : std_logic_vector(7 downto 0) := "11010101";
+
+ constant c_QMODE_PORT_ACCESS : std_logic_vector(1 downto 0) := "00";
+ constant c_QMODE_PORT_TRUNK : std_logic_vector(1 downto 0) := "01";
+ constant c_QMODE_PORT_UNQUALIFIED : std_logic_vector(1 downto 0) := "11";
+ constant c_QMODE_PORT_VLAN_DISABLED : std_logic_vector(1 downto 0) := "10";
+
+ -- fixme: remove these along with the non-WB version of the endpoint
+ constant c_wrsw_ctrl_none : std_logic_vector(4 - 1 downto 0) := x"0";
+ constant c_wrsw_ctrl_dst_mac : std_logic_vector(4 - 1 downto 0) := x"1";
+ constant c_wrsw_ctrl_src_mac : std_logic_vector(4 - 1 downto 0) := x"2";
+ constant c_wrsw_ctrl_ethertype : std_logic_vector(4 - 1 downto 0) := x"3";
+ constant c_wrsw_ctrl_vid_prio : std_logic_vector(4 - 1 downto 0) := x"4";
+ constant c_wrsw_ctrl_tx_oob : std_logic_vector(4 - 1 downto 0) := x"5";
+ constant c_wrsw_ctrl_rx_oob : std_logic_vector(4 - 1 downto 0) := x"6";
+ constant c_wrsw_ctrl_payload : std_logic_vector(4 - 1 downto 0) := x"7";
+ constant c_wrsw_ctrl_fcs : std_logic_vector(4 - 1 downto 0) := x"8";
+
+ type t_ep_internal_rtu_request is record
+ smac : std_logic_vector(47 downto 0);
+ dmac : std_logic_vector(47 downto 0);
+ vid : std_logic_vector(11 downto 0);
+ prio : std_logic_vector(2 downto 0);
+ has_vid : std_logic;
+ has_prio : std_logic;
+ hash : std_logic_vector(15 downto 0);
+ end record;
+
+ type t_rmon_triggers is record
+ rx_sync_lost : std_logic;
+ rx_invalid_code : std_logic;
+ rx_overrun : std_logic;
+ rx_crc_err : std_logic;
+ rx_ok : std_logic;
+ rx_pfilter_drop : std_logic;
+ rx_runt : std_logic;
+ rx_giant : std_logic;
+ rx_pause : std_logic;
+ rx_pcs_err : std_logic;
+ rx_buffer_overrun : std_logic;
+ rx_rtu_overrun : std_logic;
+ rx_path_timing_failure : std_logic;
+ tx_pause : std_logic;
+ tx_underrun : std_logic;
+ rx_pclass : std_logic_vector(7 downto 0); -- packet class (from filter)
+ rx_tclass : std_logic_vector(7 downto 0); -- traffic class (priority)
+ tx_frame : std_logic;
+ rx_frame : std_logic;
+ rx_drop_at_rtu_full : std_logic;
+ end record;
+
+ component ep_1000basex_pcs
+ generic (
+ g_simulation : boolean;
+ g_16bit : boolean);
+ port (
+ rst_sys_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rxpcs_fab_o : out t_ep_internal_fabric;
+ rxpcs_fifo_almostfull_i : in std_logic;
+ rxpcs_busy_o : out std_logic;
+ rxpcs_timestamp_trigger_p_a_o : out std_logic;
+ rxpcs_timestamp_i : in std_logic_vector(31 downto 0);
+ rxpcs_timestamp_stb_i : in std_logic;
+ rxpcs_timestamp_valid_i : in std_logic;
+ txpcs_fab_i : in t_ep_internal_fabric;
+ txpcs_error_o : out std_logic;
+ txpcs_busy_o : out std_logic;
+ txpcs_dreq_o : out std_logic;
+ txpcs_timestamp_trigger_p_a_o : out std_logic;
+ link_ok_o : out std_logic;
+ link_ctr_i : in std_logic := '1';
+ serdes_rst_o : out std_logic;
+ serdes_loopen_o : out std_logic;
+ serdes_loopen_vec_o : out std_logic_vector(2 downto 0);
+ serdes_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ serdes_sfp_tx_fault_i : in std_logic;
+ serdes_sfp_los_i : in std_logic;
+ serdes_sfp_tx_disable_o : out std_logic;
+ serdes_rdy_i : in std_logic;
+ serdes_tx_clk_i : in std_logic;
+ serdes_tx_data_o : out std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0);
+ serdes_tx_k_o : out std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0);
+ serdes_tx_disparity_i : in std_logic;
+ serdes_tx_enc_err_i : in std_logic;
+ serdes_rx_clk_i : in std_logic;
+ serdes_rx_data_i : in std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0);
+ serdes_rx_k_i : in std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0);
+ serdes_rx_enc_err_i : in std_logic;
+ serdes_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_16bit)-1 downto 0);
+ rmon_o : out t_rmon_triggers;
+ mdio_addr_i : in std_logic_vector(15 downto 0);
+ mdio_data_i : in std_logic_vector(15 downto 0);
+ mdio_data_o : out std_logic_vector(15 downto 0);
+ mdio_stb_i : in std_logic;
+ mdio_rw_i : in std_logic;
+ mdio_ready_o : out std_logic;
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep_pcs);
+ end component;
+
+ component ep_tx_pcs_8bit
+ port (
+ rst_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ pcs_fab_i : in t_ep_internal_fabric;
+ pcs_error_o : out std_logic;
+ pcs_busy_o : out std_logic;
+ pcs_dreq_o : out std_logic;
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_tx_cal_i : in std_logic;
+ an_tx_en_i : in std_logic;
+ an_tx_val_i : in std_logic_vector(15 downto 0);
+ timestamp_trigger_p_a_o : out std_logic;
+ rmon_tx_underrun : out std_logic;
+ phy_tx_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(7 downto 0);
+ phy_tx_k_o : out std_logic;
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic);
+ end component;
+
+ component ep_tx_pcs_16bit
+ port (
+ rst_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ pcs_fab_i : in t_ep_internal_fabric;
+ pcs_error_o : out std_logic;
+ pcs_busy_o : out std_logic;
+ pcs_dreq_o : out std_logic;
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_tx_cal_i : in std_logic;
+ an_tx_en_i : in std_logic;
+ an_tx_val_i : in std_logic_vector(15 downto 0);
+ timestamp_trigger_p_a_o : out std_logic;
+ rmon_tx_underrun : out std_logic;
+ phy_tx_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(15 downto 0);
+ phy_tx_k_o : out std_logic_vector(1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+ dbg_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_rd_count_o : out std_logic_vector(5+4 downto 0));
+ end component;
+
+ component ep_rx_pcs_8bit
+ generic (
+ g_simulation : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ pcs_fifo_almostfull_i : in std_logic;
+ pcs_busy_o : out std_logic;
+ pcs_fab_o : out t_ep_internal_fabric;
+ timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping
+ timestamp_i : in std_logic_vector(31 downto 0);
+ timestamp_stb_i : in std_logic;
+ timestamp_valid_i : in std_logic;
+ phy_rdy_i : in std_logic;
+ phy_rx_clk_i : in std_logic;
+ phy_rx_data_i : in std_logic_vector(7 downto 0);
+ phy_rx_k_i : in std_logic;
+ phy_rx_enc_err_i : in std_logic;
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_cal_crst_i : in std_logic;
+ mdio_wr_spec_rx_cal_stat_o : out std_logic;
+ synced_o : out std_logic;
+ sync_lost_o : out std_logic;
+ an_rx_en_i : in std_logic;
+ an_rx_val_o : out std_logic_vector(15 downto 0);
+ an_rx_valid_o : out std_logic;
+ an_idle_match_o : out std_logic;
+ rmon_rx_overrun : out std_logic;
+ rmon_rx_inv_code : out std_logic;
+ rmon_rx_sync_lost : out std_logic);
+ end component;
+
+ component ep_rx_pcs_16bit
+ generic (
+ g_simulation : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ pcs_fifo_almostfull_i : in std_logic;
+ pcs_busy_o : out std_logic;
+ pcs_fab_o : out t_ep_internal_fabric;
+ timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping
+ timestamp_i : in std_logic_vector(31 downto 0);
+ timestamp_stb_i : in std_logic;
+ timestamp_valid_i : in std_logic;
+ phy_rdy_i : in std_logic;
+ phy_rx_clk_i : in std_logic;
+ phy_rx_data_i : in std_logic_vector(15 downto 0);
+ phy_rx_k_i : in std_logic_vector(1 downto 0);
+ phy_rx_enc_err_i : in std_logic;
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_cal_crst_i : in std_logic;
+ mdio_wr_spec_rx_cal_stat_o : out std_logic;
+ synced_o : out std_logic;
+ sync_lost_o : out std_logic;
+ an_rx_en_i : in std_logic;
+ an_rx_val_o : out std_logic_vector(15 downto 0);
+ an_rx_valid_o : out std_logic;
+ an_idle_match_o : out std_logic;
+ rmon_rx_overrun : out std_logic;
+ rmon_rx_inv_code : out std_logic;
+ rmon_rx_sync_lost : out std_logic;
+ nice_dbg_o : out t_dbg_ep_rxpcs);
+ end component;
+
+ component ep_autonegotiation
+ generic (
+ g_simulation : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ pcs_synced_i : in std_logic;
+ pcs_los_i : in std_logic;
+ pcs_link_ok_o : out std_logic;
+ an_idle_match_i : in std_logic;
+ an_rx_en_o : out std_logic;
+ an_rx_val_i : in std_logic_vector(15 downto 0);
+ an_rx_valid_i : in std_logic;
+ an_tx_en_o : out std_logic;
+ an_tx_val_o : out std_logic_vector(15 downto 0);
+ mdio_mcr_anrestart_i : in std_logic;
+ mdio_mcr_anenable_i : in std_logic;
+ mdio_msr_anegcomplete_o : out std_logic;
+ mdio_advertise_pause_i : in std_logic_vector(1 downto 0);
+ mdio_advertise_rfault_i : in std_logic_vector(1 downto 0);
+ mdio_lpa_full_o : out std_logic;
+ mdio_lpa_half_o : out std_logic;
+ mdio_lpa_pause_o : out std_logic_vector(1 downto 0);
+ mdio_lpa_rfault_o : out std_logic_vector(1 downto 0);
+ mdio_lpa_lpack_o : out std_logic;
+ mdio_lpa_npage_o : out std_logic);
+ end component;
+
+ component ep_pcs_tbi_mdio_wb
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ tx_clk_i : in std_logic;
+ rx_clk_i : in std_logic;
+ mdio_mcr_uni_en_o : out std_logic;
+ mdio_mcr_anrestart_o : out std_logic;
+ mdio_mcr_pdown_o : out std_logic;
+ mdio_mcr_anenable_o : out std_logic;
+ mdio_mcr_reset_o : out std_logic;
+ mdio_mcr_loopback_o : out std_logic;
+ mdio_msr_lstatus_i : in std_logic;
+ lstat_read_notify_o : out std_logic;
+ mdio_msr_rfault_i : in std_logic;
+ mdio_msr_anegcomplete_i : in std_logic;
+ mdio_advertise_pause_o : out std_logic_vector(1 downto 0);
+ mdio_advertise_rfault_o : out std_logic_vector(1 downto 0);
+ mdio_lpa_full_i : in std_logic;
+ mdio_lpa_half_i : in std_logic;
+ mdio_lpa_pause_i : in std_logic_vector(1 downto 0);
+ mdio_lpa_rfault_i : in std_logic_vector(1 downto 0);
+ mdio_lpa_lpack_i : in std_logic;
+ mdio_lpa_npage_i : in std_logic;
+ mdio_wr_spec_tx_cal_o : out std_logic;
+ mdio_wr_spec_rx_cal_stat_i : in std_logic;
+ mdio_wr_spec_cal_crst_o : out std_logic;
+ mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0);
+ mdio_ectrl_lpbck_vec_o : out std_logic_vector(2 downto 0);
+ mdio_ectrl_sfp_tx_fault_i : in std_logic;
+ mdio_ectrl_sfp_loss_i : in std_logic;
+ mdio_ectrl_sfp_tx_disable_o : out std_logic;
+ mdio_ectrl_tx_prbs_sel_o : out std_logic_vector(2 downto 0));
+ end component;
+
+ component ep_tx_header_processor
+ generic (
+ g_with_packet_injection : boolean;
+ g_with_timestamper : boolean;
+ g_force_gap_length : integer;
+ g_runt_padding : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ pcs_busy_i : in std_logic;
+ pcs_error_i : in std_logic;
+ wb_snk_i : in t_wrf_sink_in;
+ wb_snk_o : out t_wrf_sink_out;
+ fc_pause_req_i : in std_logic;
+ fc_pause_delay_i : in std_logic_vector(15 downto 0);
+ fc_pause_ready_o : out std_logic;
+ fc_flow_enable_i : in std_logic;
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_fid_o : out std_logic_vector(16 -1 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic;
+ txts_timestamp_i : in std_logic_vector(31 downto 0);
+ txts_timestamp_valid_i : in std_logic;
+ ep_ctrl_i : in std_logic;
+ regs_i : in t_ep_out_registers);
+ end component;
+
+ component ep_tx_vlan_unit
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ inject_mem_addr_i : in std_logic_vector(9 downto 0);
+ inject_mem_data_o : out std_logic_vector(17 downto 0);
+ uram_offset_wr_i : in std_logic;
+ uram_offset_i : in std_logic_vector(9 downto 0);
+ uram_data_i : in std_logic_vector(17 downto 0));
+ end component;
+
+ component ep_timestamping_unit
+ generic (
+ g_timestamp_bits_r : natural;
+ g_timestamp_bits_f : natural;
+ g_ref_clock_rate : integer);
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ clk_rx_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+ rst_n_ref_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ pps_csync_p1_i : in std_logic;
+ pps_valid_i : in std_logic;
+ tx_timestamp_trigger_p_a_i : in std_logic;
+ rx_timestamp_trigger_p_a_i : in std_logic;
+ rxts_timestamp_o : out std_logic_vector(31 downto 0);
+ rxts_timestamp_stb_o : out std_logic;
+ rxts_timestamp_valid_o : out std_logic;
+ txts_timestamp_o : out std_logic_vector(31 downto 0);
+ txts_timestamp_stb_o : out std_logic;
+ txts_timestamp_valid_o : out std_logic;
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers);
+ end component;
+
+ component ep_flow_control
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ rx_pause_p1_i : in std_logic;
+ rx_pause_delay_i : in std_logic_vector(15 downto 0);
+ tx_pause_o : out std_logic;
+ tx_pause_delay_o : out std_logic_vector(15 downto 0);
+ tx_pause_ack_i : in std_logic;
+ tx_flow_enable_o : out std_logic;
+ rx_buffer_used_i : in std_logic_vector(7 downto 0);
+ ep_fcr_txpause_i : in std_logic;
+ ep_fcr_rxpause_i : in std_logic;
+ ep_fcr_tx_thr_i : in std_logic_vector(7 downto 0);
+ ep_fcr_tx_quanta_i : in std_logic_vector(15 downto 0);
+ rmon_rcvd_pause_o : out std_logic;
+ rmon_sent_pause_o : out std_logic);
+ end component;
+
+ component ep_wishbone_controller
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ tx_clk_i : in std_logic;
+ rx_clk_i : in std_logic;
+ regs_o : out t_ep_out_registers;
+ regs_i : in t_ep_in_registers);
+ end component;
+
+ component ep_leds_controller
+ generic (
+ g_blink_period_log2 : integer);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ dvalid_tx_i : in std_logic;
+ dvalid_rx_i : in std_logic;
+ link_ok_i : in std_logic;
+ led_link_o : out std_logic;
+ led_act_o : out std_logic);
+ end component;
+
+ component ep_tx_packet_injection
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ inject_req_i : in std_logic;
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0);
+ inject_user_value_i : in std_logic_vector(15 downto 0);
+ inject_mode_i : in std_logic_vector(1 downto 0);
+ mem_addr_o : out std_logic_vector(9 downto 0);
+ mem_data_i : in std_logic_vector(17 downto 0));
+ end component;
+
+ component ep_rtu_header_extract
+ generic (
+ g_with_rtu : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ mbuf_is_pause_i : in std_logic;
+ vlan_class_i : in std_logic_vector(2 downto 0);
+ vlan_vid_i : in std_logic_vector(11 downto 0);
+ vlan_tag_done_i : in std_logic;
+ vlan_is_tagged_i : in std_logic;
+ rmon_drp_at_rtu_full_o: out std_logic;
+ rtu_rq_o : out t_ep_internal_rtu_request;
+ rtu_full_i : in std_logic;
+ rtu_rq_abort_o : out std_logic;
+ rtu_rq_valid_o : out std_logic;
+ rxbuf_full_i : in std_logic);
+ end component;
+
+ component ep_rx_early_address_match
+ port (
+ clk_sys_i : in std_logic;
+ clk_rx_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ src_fab_o : out t_ep_internal_fabric;
+ match_done_o : out std_logic;
+ match_is_hp_o : out std_logic;
+ match_is_pause_o : out std_logic;
+ match_pause_quanta_o : out std_logic_vector(15 downto 0);
+ match_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ match_pause_p_o : out std_logic;
+ regs_i : in t_ep_out_registers);
+ end component;
+
+ component ep_clock_alignment_fifo
+ generic (
+ g_size : integer;
+ g_almostfull_threshold : integer);
+ port (
+ rst_n_rd_i : in std_logic;
+ rst_n_wr_i : in std_logic;
+ clk_wr_i : in std_logic;
+ clk_rd_i : in std_logic;
+ dreq_i : in std_logic;
+ fab_i : in t_ep_internal_fabric;
+ fab_o : out t_ep_internal_fabric;
+ full_o : out std_logic;
+ empty_o : out std_logic;
+ almostfull_o : out std_logic;
+ pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0));
+ end component;
+
+ component ep_packet_filter
+ port (
+ clk_rx_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ src_fab_o : out t_ep_internal_fabric;
+ done_o : out std_logic;
+ pclass_o : out std_logic_vector(7 downto 0);
+ drop_o : out std_logic;
+ regs_i : in t_ep_out_registers);
+ end component;
+
+ component ep_rx_vlan_unit
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ tclass_o : out std_logic_vector(2 downto 0);
+ vid_o : out std_logic_vector(11 downto 0);
+ tag_done_o : out std_logic;
+ is_tagged_o : out std_logic;
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers);
+ end component;
+
+ component ep_rx_oob_insert
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ regs_i : in t_ep_out_registers);
+ end component;
+
+ component ep_rx_crc_size_check
+ generic (
+ g_use_new_crc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ regs_i : in t_ep_out_registers;
+ rmon_pcs_err_o : out std_logic;
+ rmon_giant_o : out std_logic;
+ rmon_runt_o : out std_logic;
+ rmon_crc_err_o : out std_logic);
+ end component;
+
+ component ep_rx_wb_master
+ generic (
+ g_ignore_ack : boolean;
+ g_cyc_on_stall : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_wb_i : in t_wrf_source_in;
+ src_wb_o : out t_wrf_source_out);
+ end component;
+
+ component ep_rx_status_reg_insert
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ mbuf_valid_i : in std_logic;
+ mbuf_ack_o : out std_logic;
+ mbuf_drop_i : in std_logic;
+ mbuf_pclass_i : in std_logic_vector(7 downto 0);
+ mbuf_is_hp_i : in std_logic;
+ mbuf_is_pause_i : in std_logic;
+ rmon_pfilter_drop_o : out std_logic);
+ end component;
+
+ component ep_rx_buffer
+ generic (
+ g_size : integer;
+ g_with_fc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ level_o : out std_logic_vector(7 downto 0);
+ full_o : out std_logic;
+ drop_req_i : in std_logic;
+ dropped_o : out std_logic;
+ regs_i : in t_ep_out_registers);
+ end component;
+
+
+ component ep_rx_path
+ generic (
+ g_with_vlans : boolean;
+ g_with_dpi_classifier : boolean;
+ g_with_rtu : boolean;
+ g_with_rx_buffer : boolean;
+ g_rx_buffer_size : integer;
+ g_use_new_crc : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ clk_rx_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+ pcs_fab_i : in t_ep_internal_fabric;
+ pcs_fifo_almostfull_o : out std_logic;
+ pcs_busy_i : in std_logic;
+ src_wb_o : out t_wrf_source_out;
+ src_wb_i : in t_wrf_source_in;
+ fc_pause_p_o : out std_logic;
+ fc_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_buffer_occupation_o : out std_logic_vector(7 downto 0);
+ rmon_o : out t_rmon_triggers;
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers;
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+ rtu_rq_o : out t_ep_internal_rtu_request;
+ rtu_full_i : in std_logic;
+ rtu_rq_valid_o : out std_logic;
+ rtu_rq_abort_o : out std_logic;
+ nice_dbg_o : out t_dbg_ep_rxpath);
+ end component;
+
+ component ep_tx_path
+ generic (
+ g_with_vlans : boolean;
+ g_with_timestamper : boolean;
+ g_with_packet_injection : boolean;
+ g_force_gap_length : integer;
+ g_runt_padding : boolean;
+ g_use_new_crc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ pcs_fab_o : out t_ep_internal_fabric;
+ pcs_error_i : in std_logic;
+ pcs_busy_i : in std_logic;
+ pcs_dreq_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ fc_pause_req_i : in std_logic;
+ fc_pause_delay_i : in std_logic_vector(15 downto 0);
+ fc_pause_ready_o : out std_logic;
+ fc_flow_enable_i : in std_logic;
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_fid_o : out std_logic_vector(16 -1 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic;
+ txts_timestamp_i : in std_logic_vector(31 downto 0);
+ txts_timestamp_valid_i : in std_logic;
+ inject_req_i : in std_logic := '0';
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+ ep_ctrl_i : in std_logic := '1';
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers;
+ dbg_o : out std_logic_vector(33 downto 0));
+ end component;
+
+ component ep_tx_crc_inserter
+ generic(
+ g_use_new_crc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ dbg_o : out std_logic_vector(2 downto 0));
+ end component;
+
+ component ep_tx_inject_ctrl
+ generic(
+ g_min_if_gap_length : integer
+ );
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ inject_req_o : out std_logic;
+ inject_ready_i : in std_logic;
+ inject_packet_sel_o : out std_logic_vector(2 downto 0);
+ inject_user_value_o : out std_logic_vector(15 downto 0);
+ inject_ctr_ena_o : out std_logic;
+ inject_ctr_mode_o : out std_logic_vector(1 downto 0);
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers);
+ end component;
+
+
+ procedure f_pack_fifo_contents (
+ signal fab : in t_ep_internal_fabric;
+ signal dout : out std_logic_vector;
+ signal dout_valid : out std_logic;
+ early_eof : boolean := false);
+
+
+ procedure f_unpack_fifo_contents (
+ signal din : in std_logic_vector;
+ constant din_valid : in std_logic;
+ signal fab : out t_ep_internal_fabric;
+ early_eof : boolean := false);
+
+
+ procedure f_pack_rmon_triggers (
+ signal trig_in : in t_rmon_triggers;
+ signal trig_out : out std_logic_vector(c_epevents_sz-1 downto 0));
+
+end endpoint_private_pkg;
+
+-------------------------------------------------------------------------------
+
+package body endpoint_private_pkg is
+
+ procedure f_pack_fifo_contents
+ (
+ signal fab : in t_ep_internal_fabric;
+ signal dout : out std_logic_vector;
+ signal dout_valid : out std_logic;
+ early_eof : boolean := false) is
+ begin
+ -- the encodings are slightly different:
+ -- - if early_eof == 1, the target needs the EOF information along with the last data word.
+ -- This is the case for ep_tx_pcs.
+ -- - if early_eof == 0, EOF is an independent transfer
+ if(early_eof) then
+ if(fab.sof = '1' or fab.error = '1') then
+ -- tag = 01
+ dout(17 downto 16) <= "01";
+ dout(15) <= fab.sof;
+ dout(14) <= 'X';
+ dout(13) <= fab.error;
+ dout(12 downto 0) <= (others => 'X');
+ dout_valid <= '1';
+ elsif(fab.eof = '1' and
+ fab.dvalid = '1') then -- ML: it happened that the last word was "stalled" by PCS (dreq_i LOW)
+ -- at the EOF... CRC indiated that this word is not valid (dvalid LOW)
+ -- but this information was ignored... and tx was hanging the tree
+ -- tag = 1x
+ dout(17) <= '1';
+ dout(16) <= fab.bytesel;
+ dout(15 downto 0) <= fab.data;
+ dout_valid <= '1';
+ elsif(fab.dvalid = '1') then
+ -- tag = 00
+ dout(17) <= '0';
+ dout(16) <= '0';
+ dout(15 downto 0) <= fab.data;
+ dout_valid <= '1';
+ else
+ dout(17 downto 0) <= (others => 'X');
+ dout_valid <= '0';
+ end if;
+ else
+ if(fab.sof = '1' or fab.error = '1' or fab.eof = '1' or fab.has_rx_timestamp = '1') then
+ -- tag = 01
+ dout(17) <= 'X';
+ dout(16) <= '1';
+ dout(15) <= fab.sof;
+ dout(14) <= fab.eof;
+ dout(13) <= fab.error;
+ dout(12) <= fab.has_rx_timestamp;
+ dout(11) <= fab.rx_timestamp_valid;
+ dout(10 downto 0) <= (others => 'X');
+ dout_valid <= '1';
+ elsif(fab.dvalid = '1') then
+ dout(17) <= fab.bytesel;
+ dout(16) <= '0';
+ dout(15 downto 0) <= fab.data;
+ dout_valid <= '1';
+ else
+ dout(17 downto 0) <= (others => 'X');
+ dout_valid <= '0';
+ end if;
+
+ end if;
+ end f_pack_fifo_contents;
+
+ procedure f_unpack_fifo_contents
+ (
+ signal din : in std_logic_vector;
+ constant din_valid : in std_logic;
+ signal fab : out t_ep_internal_fabric;
+ early_eof : boolean := false) is
+ begin
+
+ fab.data <= din(15 downto 0);
+ fab.addr <= (others => '0');
+ if(din_valid = '1') then
+ if(early_eof) then
+ fab.dvalid <= not (not din(17) and din(16));
+ fab.sof <= not din(17) and din(16) and din(15);
+ fab.eof <= din(17);
+ fab.error <= not din(17) and din(16) and din(13);
+ fab.has_rx_timestamp <= '0';
+ fab.rx_timestamp_valid <= '0';
+ fab.bytesel <= din(17) and din(16);
+
+ else
+ fab.dvalid <= not din(16);
+ fab.sof <= din(16) and din(15);
+ fab.eof <= din(16) and din(14);
+ fab.error <= din(16) and din(13);
+ fab.has_rx_timestamp <= din(16) and din(12);
+ fab.rx_timestamp_valid <= din(16) and din(11);
+ fab.bytesel <= (not din(16)) and din(17);
+ end if;
+ else
+ fab.bytesel <= 'X';
+ fab.dvalid <= '0';
+ fab.sof <= '0';
+ fab.eof <= '0';
+ fab.error <= '0';
+ fab.has_rx_timestamp <= '0';
+ fab.rx_timestamp_valid <= '0';
+ fab.data <= (others => 'X');
+ end if;
+ end f_unpack_fifo_contents;
+
+
+ procedure f_pack_rmon_triggers
+ (
+ signal trig_in : in t_rmon_triggers;
+ signal trig_out : out std_logic_vector(c_epevents_sz-1 downto 0)) is
+ begin
+ --from 1000base pcs
+ trig_out(0) <= trig_in.tx_underrun;
+ trig_out(1) <= trig_in.rx_overrun;
+ trig_out(2) <= trig_in.rx_invalid_code;
+ trig_out(3) <= trig_in.rx_sync_lost;
+ trig_out(4) <= trig_in.rx_pause;
+ trig_out(5) <= trig_in.rx_pfilter_drop;
+ trig_out(6) <= trig_in.rx_pcs_err;
+ trig_out(7) <= trig_in.rx_giant;
+ trig_out(8) <= trig_in.rx_runt;
+ trig_out(9) <= trig_in.rx_crc_err;
+ trig_out(17 downto 10) <= trig_in.rx_pclass(7 downto 0);
+ trig_out(18)<= trig_in.tx_frame;
+ trig_out(19)<= trig_in.rx_frame;
+ trig_out(20)<= trig_in.rx_drop_at_rtu_full;
+ trig_out(28 downto 21) <= trig_in.rx_tclass(7 downto 0);
+ end f_pack_rmon_triggers;
+
+
+end endpoint_private_pkg;
+
+-------------------------------------------------------------------------------
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd
new file mode 100644
index 000000000..900726f69
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_1000basex_pcs.vhd
@@ -0,0 +1,635 @@
+-------------------------------------------------------------------------------
+-- Title : 1000Base-X Physical Coding Sublayer (PCS)
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_1000basex_pcs.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements the top level of a 1000Base-X compliant PCS
+-- (Physical Coding Sublayer) with precise RX/TX timestamping. The PCS module
+-- incorporates:
+-- - configurable 8/16-bit RX/TX data paths,
+-- - TX clock alignment FIFO,
+-- - 802.3 autonegotiation.
+-- - White Rabbit serdes-specific features (calibration patterns & bitslide)
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-11-18 0.4 twlostow Created (separeted from wrsw_endpoint)
+-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP
+-- 2011-10-18 0.6 twlostow Virtex-6 GTX port
+-- 2012-01-24 0.7 twlostow Redone TX timestamping
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.gencores_pkg.all;
+
+entity ep_1000basex_pcs is
+
+ generic (
+ -- simulation mode: when true, all internal timeouts are reduced by few orders of
+ -- magnitude to speed up simulations.
+ g_simulation : boolean;
+ -- PCS datapath width selection: true = 16-bit (Virtex-6), false = 8-bit
+ -- (Spartan-6 or TBI).
+ g_16bit : boolean);
+
+ port (
+
+ ---------------------------------------------------------------------------
+ -- System clock & resets (system + rx/tx)
+ ---------------------------------------------------------------------------
+
+ rst_sys_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- PCS <-> MAC Interface
+ ---------------------------------------------------------------------------
+
+ -- Internal data output (incoming data).
+ rxpcs_fab_o : out t_ep_internal_fabric;
+
+ -- 1: RX FIFO is almost full (drop the packet).
+ rxpcs_fifo_almostfull_i : in std_logic;
+
+ -- 1: RX PCS is busy receiving a packet or waiting for its' timestamp.
+ rxpcs_busy_o : out std_logic;
+
+ -- 1-pulse: RX timestamp trigger (to timestamping unit).
+ rxpcs_timestamp_trigger_p_a_o : out std_logic;
+
+ -- RX timestamp value (4 falling : 28 rising edge bits).
+ rxpcs_timestamp_i : in std_logic_vector(31 downto 0);
+
+ rxpcs_timestamp_stb_i : in std_logic;
+
+ -- 1: timestamp on rxpcs_timestamp_i is valid).
+ rxpcs_timestamp_valid_i : in std_logic;
+
+ -- Internal data input (data to be TXed).
+ txpcs_fab_i : in t_ep_internal_fabric;
+
+ -- 1: TX error occured.
+ txpcs_error_o : out std_logic;
+
+ -- 1: TX PCS is busy transmitting a packet.
+ txpcs_busy_o : out std_logic;
+
+ -- 1: TX PCS requests another transfer on txpcs_fab_i.
+ txpcs_dreq_o : out std_logic;
+
+ -- 1-pulse: TX timestamp trigger (to timestamping unit).
+ txpcs_timestamp_trigger_p_a_o : out std_logic;
+
+ link_ok_o : out std_logic;
+ link_ctr_i : in std_logic;
+ -----------------------------------------------------------------------------
+ -- GTP/GTX/TBI Serdes interface
+ ---------------------------------------------------------------------------
+
+ -- 1: serdes is reset, 0: serdes is operating normally.
+ serdes_rst_o : out std_logic;
+
+ -- 1: serdes near-end PMA loopback is enabled.
+ serdes_loopen_o : out std_logic;
+
+ -- 000: loopback vector "normal operation" (see Serdes User Guide)
+ serdes_loopen_vec_o : out std_logic_vector(2 downto 0);
+
+ -- 000: "normal operation" (see Serdes User Guide)
+ serdes_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+
+ -- 1: indicates laser fault
+ serdes_sfp_tx_fault_i : in std_logic;
+
+ -- 1: indicates Loss Of Signal
+ serdes_sfp_los_i : in std_logic;
+
+ -- 1: Disables the transmitter
+ serdes_sfp_tx_disable_o : out std_logic;
+
+ -- 1: serdes is locked and aligned
+ serdes_rdy_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- Serdes TX path (all synchronous to serdes_tx_clk_i)
+ ---------------------------------------------------------------------------
+
+ -- Transmit path clock:
+ -- 62.5 MHz in 16-bit mode, 125 MHz in 8-bit mode.
+ serdes_tx_clk_i : in std_logic;
+
+ -- TX Code group. In 16-bit mode, the MSB is TXed first (tx_data_o[15:8],
+ -- then tx_data_o[7:0]). In 8-bit mode only bits [7:0] are used.
+ serdes_tx_data_o : out std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0);
+
+ -- TX Control Code: When 1, a K-character is transmitted. In 16-bit mode,
+ -- bit 1 goes first, in 8-bit mode only bit 0 is used.
+ serdes_tx_k_o : out std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0);
+
+ -- TX Disparity input: 1 = last transmitted code group ended with negative
+ -- running disparity, 0 = positive RD.
+ serdes_tx_disparity_i : in std_logic;
+
+ -- TX Encoding Error: 1 = PHY encountered a transmission error, drop the current
+ -- packet.
+ serdes_tx_enc_err_i : in std_logic;
+
+ -------------------------------------------------------------------------------
+ -- Serdes RX path (all synchronous to serdes_rx_clk_i)
+ -------------------------------------------------------------------------------
+
+ -- RX recovered clock. MUST be synchronous to incoming serial data stream
+ -- for proper PTP/SyncE operation. 62.5 MHz in 16-bit mode, 125 MHz in 8-bit mode.
+ serdes_rx_clk_i : in std_logic;
+ serdes_rx_data_i : in std_logic_vector(f_pcs_data_width(g_16bit)-1 downto 0);
+ serdes_rx_k_i : in std_logic_vector(f_pcs_k_width(g_16bit)-1 downto 0);
+ serdes_rx_enc_err_i : in std_logic;
+ serdes_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_16bit)-1 downto 0);
+
+ -- RMON events, aligned to clk_sys
+ rmon_o : out t_rmon_triggers;
+
+ -- MDIO interface
+
+ mdio_addr_i : in std_logic_vector(15 downto 0);
+ mdio_data_i : in std_logic_vector(15 downto 0);
+ mdio_data_o : out std_logic_vector(15 downto 0);
+ mdio_stb_i : in std_logic;
+ mdio_rw_i : in std_logic;
+ mdio_ready_o : out std_logic;
+
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep_pcs);
+
+end ep_1000basex_pcs;
+
+architecture rtl of ep_1000basex_pcs is
+
+ alias rst_n_i : std_logic is rst_sys_n_i;
+
+ signal mdio_mcr_anrestart : std_logic;
+ signal mdio_mcr_pdown : std_logic;
+ signal mdio_mcr_pdown_cpu : std_logic;
+ signal mdio_mcr_anenable : std_logic;
+ signal mdio_mcr_reset : std_logic;
+ signal mdio_msr_lstatus : std_logic;
+ signal mdio_msr_rfault : std_logic;
+ signal mdio_msr_anegcomplete : std_logic;
+ signal mdio_advertise_pause : std_logic_vector(1 downto 0);
+ signal mdio_advertise_rfault : std_logic_vector(1 downto 0);
+ signal mdio_lpa_full : std_logic;
+ signal mdio_lpa_half : std_logic;
+ signal mdio_lpa_pause : std_logic_vector(1 downto 0);
+ signal mdio_lpa_rfault : std_logic_vector(1 downto 0);
+ signal mdio_lpa_lpack : std_logic;
+ signal mdio_lpa_npage : std_logic;
+ signal mdio_wr_spec_tx_cal : std_logic;
+ signal mdio_wr_spec_rx_cal_stat : std_logic;
+ signal mdio_wr_spec_cal_crst : std_logic;
+ signal mdio_wr_spec_bslide : std_logic_vector(4 downto 0);
+ signal mdio_data_in : std_logic_vector(31 downto 0);
+ signal mdio_data_out : std_logic_vector(31 downto 0);
+
+ signal lstat_read_notify : std_logic;
+
+-------------------------------------------------------------------------------
+-- Autonegotiation signals
+-------------------------------------------------------------------------------
+
+ signal an_tx_en : std_logic;
+ signal an_rx_en : std_logic;
+ signal an_tx_val : std_logic_vector(15 downto 0);
+ signal an_rx_val : std_logic_vector(15 downto 0);
+ signal an_rx_valid : std_logic;
+ signal an_idle_match : std_logic;
+
+ signal pcs_enable : std_logic;
+ signal synced, sync_lost : std_logic;
+ signal synced_d1 : std_logic;
+
+ signal txpcs_busy_int : std_logic;
+ signal link_ok : std_logic;
+
+ signal pcs_reset_n : std_logic;
+
+ signal wb_stb, wb_ack : std_logic;
+
+ signal tx_clk, rx_clk : std_logic;
+
+ --RMON events
+ signal rmon_tx_underrun : std_logic;
+ signal rmon_rx_overrun : std_logic;
+ signal rmon_rx_inv_code : std_logic;
+ signal rmon_rx_sync_lost: std_logic;
+
+begin -- rtl
+
+ pcs_reset_n <= '0' when (mdio_mcr_reset = '1' or rst_n_i = '0') else '1';
+
+ gen_16bit : if(g_16bit) generate
+ U_TX_PCS : ep_tx_pcs_16bit
+ port map (
+ rst_n_i => pcs_reset_n,
+ clk_sys_i => clk_sys_i,
+
+ rst_txclk_n_i => rst_txclk_n_i,
+
+ pcs_fab_i => txpcs_fab_i,
+ pcs_error_o => txpcs_error_o,
+ pcs_busy_o => txpcs_busy_int,
+ pcs_dreq_o => txpcs_dreq_o,
+
+ mdio_mcr_reset_i => mdio_mcr_reset,
+ mdio_mcr_pdown_i => mdio_mcr_pdown,
+ mdio_wr_spec_tx_cal_i => mdio_wr_spec_tx_cal,
+
+ an_tx_en_i => an_tx_en,
+ an_tx_val_i => an_tx_val,
+ timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a_o,
+ rmon_tx_underrun => rmon_tx_underrun,
+
+ phy_tx_clk_i => serdes_tx_clk_i,
+ phy_tx_data_o => serdes_tx_data_o,
+ phy_tx_k_o => serdes_tx_k_o,
+ phy_tx_disparity_i => serdes_tx_disparity_i,
+ phy_tx_enc_err_i => serdes_tx_enc_err_i,
+ dbg_wr_count_o => dbg_tx_pcs_wr_count_o,
+ dbg_rd_count_o => dbg_tx_pcs_rd_count_o
+ );
+
+ U_RX_PCS : ep_rx_pcs_16bit
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => pcs_reset_n,
+
+ rst_rxclk_n_i => rst_rxclk_n_i,
+
+ pcs_busy_o => rxpcs_busy_o,
+ pcs_fab_o => rxpcs_fab_o,
+ pcs_fifo_almostfull_i => rxpcs_fifo_almostfull_i,
+
+ timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a_o,
+ timestamp_i => rxpcs_timestamp_i,
+ timestamp_valid_i => rxpcs_timestamp_valid_i,
+ timestamp_stb_i => rxpcs_timestamp_stb_i,
+
+ mdio_mcr_reset_i => mdio_mcr_reset,
+ mdio_mcr_pdown_i => mdio_mcr_pdown,
+ mdio_wr_spec_cal_crst_i => mdio_wr_spec_cal_crst,
+ mdio_wr_spec_rx_cal_stat_o => mdio_wr_spec_rx_cal_stat,
+
+ synced_o => synced,
+ sync_lost_o => sync_lost,
+ an_rx_en_i => an_rx_en,
+ an_rx_val_o => an_rx_val,
+ an_rx_valid_o => an_rx_valid,
+ an_idle_match_o => an_idle_match,
+
+ rmon_rx_overrun => rmon_rx_overrun,
+ rmon_rx_inv_code => rmon_rx_inv_code,
+ rmon_rx_sync_lost=> rmon_rx_sync_lost,
+
+ phy_rdy_i => serdes_rdy_i,
+ phy_rx_clk_i => serdes_rx_clk_i,
+ phy_rx_data_i => serdes_rx_data_i,
+ phy_rx_k_i => serdes_rx_k_i,
+ phy_rx_enc_err_i => serdes_rx_enc_err_i,
+
+ nice_dbg_o => nice_dbg_o.rx
+ );
+
+ mdio_wr_spec_bslide <= serdes_rx_bitslide_i(4 downto 0);
+
+ end generate gen_16bit;
+
+ gen_8bit : if(not g_16bit) generate
+ U_TX_PCS : ep_tx_pcs_8bit
+ port map (
+ rst_n_i => pcs_reset_n,
+ clk_sys_i => clk_sys_i,
+
+ rst_txclk_n_i => rst_txclk_n_i,
+
+ pcs_fab_i => txpcs_fab_i,
+ pcs_error_o => txpcs_error_o,
+ pcs_busy_o => txpcs_busy_int,
+ pcs_dreq_o => txpcs_dreq_o,
+
+ mdio_mcr_reset_i => mdio_mcr_reset,
+ mdio_mcr_pdown_i => mdio_mcr_pdown,
+ mdio_wr_spec_tx_cal_i => mdio_wr_spec_tx_cal,
+
+ an_tx_en_i => an_tx_en,
+ an_tx_val_i => an_tx_val,
+ timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a_o,
+ rmon_tx_underrun => rmon_tx_underrun,
+
+ phy_tx_clk_i => serdes_tx_clk_i,
+ phy_tx_data_o => serdes_tx_data_o(7 downto 0),
+ phy_tx_k_o => serdes_tx_k_o(0),
+ phy_tx_disparity_i => serdes_tx_disparity_i,
+ phy_tx_enc_err_i => serdes_tx_enc_err_i
+ );
+
+ U_RX_PCS : ep_rx_pcs_8bit
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => pcs_reset_n,
+
+ rst_rxclk_n_i => rst_rxclk_n_i,
+
+ pcs_busy_o => rxpcs_busy_o,
+ pcs_fab_o => rxpcs_fab_o,
+ pcs_fifo_almostfull_i => rxpcs_fifo_almostfull_i,
+
+ timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a_o,
+ timestamp_i => rxpcs_timestamp_i,
+ timestamp_valid_i => rxpcs_timestamp_valid_i,
+ timestamp_stb_i => rxpcs_timestamp_stb_i,
+
+ mdio_mcr_reset_i => mdio_mcr_reset,
+ mdio_mcr_pdown_i => mdio_mcr_pdown,
+ mdio_wr_spec_cal_crst_i => mdio_wr_spec_cal_crst,
+ mdio_wr_spec_rx_cal_stat_o => mdio_wr_spec_rx_cal_stat,
+
+ synced_o => synced,
+ sync_lost_o => sync_lost,
+ an_rx_en_i => an_rx_en,
+ an_rx_val_o => an_rx_val,
+ an_rx_valid_o => an_rx_valid,
+ an_idle_match_o => an_idle_match,
+
+ rmon_rx_overrun => rmon_rx_overrun,
+ rmon_rx_inv_code => rmon_rx_inv_code,
+ rmon_rx_sync_lost=> rmon_rx_sync_lost,
+
+ phy_rdy_i => serdes_rdy_i,
+ phy_rx_clk_i => serdes_rx_clk_i,
+ phy_rx_data_i => serdes_rx_data_i(7 downto 0),
+ phy_rx_k_i => serdes_rx_k_i(0),
+ phy_rx_enc_err_i => serdes_rx_enc_err_i
+ );
+
+ mdio_wr_spec_bslide <= '0' & serdes_rx_bitslide_i(3 downto 0);
+
+ dbg_tx_pcs_rd_count_o <= (others => '0');
+ dbg_tx_pcs_wr_count_o <= (others => '0');
+ nice_dbg_o.rx.fsm <= (others => '0');
+
+ end generate gen_8bit;
+
+ txpcs_busy_o <= txpcs_busy_int;
+
+ -- to enable killing of link (by ML)
+ mdio_mcr_pdown <= mdio_mcr_pdown_cpu or (not link_ctr_i);
+
+ -- keep PHY reset also when SFP reports LOS (DL)
+ serdes_rst_o <= (not pcs_reset_n) or mdio_mcr_pdown or serdes_sfp_los_i;
+
+ U_MDIO_WB : ep_pcs_tbi_mdio_wb
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => mdio_addr_i(4 downto 0),
+ wb_dat_i => mdio_data_in,
+ wb_dat_o => mdio_data_out,
+
+ wb_cyc_i => wb_stb,
+ wb_sel_i => "1111",
+ wb_stb_i => wb_stb,
+ wb_we_i => mdio_rw_i,
+ wb_ack_o => wb_ack,
+ wb_stall_o => open,
+ tx_clk_i => serdes_tx_clk_i,
+ rx_clk_i => serdes_rx_clk_i,
+
+ mdio_mcr_uni_en_o => open,
+ mdio_mcr_anrestart_o => mdio_mcr_anrestart,
+ mdio_mcr_pdown_o => mdio_mcr_pdown_cpu,
+ mdio_mcr_anenable_o => mdio_mcr_anenable,
+ mdio_mcr_reset_o => mdio_mcr_reset,
+ mdio_mcr_loopback_o => serdes_loopen_o,
+ mdio_msr_lstatus_i => mdio_msr_lstatus,
+ mdio_msr_rfault_i => mdio_msr_rfault,
+ mdio_msr_anegcomplete_i => mdio_msr_anegcomplete,
+ mdio_advertise_pause_o => mdio_advertise_pause,
+ mdio_advertise_rfault_o => mdio_advertise_rfault,
+ mdio_lpa_full_i => mdio_lpa_full,
+ mdio_lpa_half_i => mdio_lpa_half,
+ mdio_lpa_pause_i => mdio_lpa_pause,
+ mdio_lpa_rfault_i => mdio_lpa_rfault,
+ mdio_lpa_lpack_i => mdio_lpa_lpack,
+ mdio_lpa_npage_i => mdio_lpa_npage,
+ mdio_wr_spec_tx_cal_o => mdio_wr_spec_tx_cal,
+ mdio_wr_spec_rx_cal_stat_i => mdio_wr_spec_rx_cal_stat,
+ mdio_wr_spec_cal_crst_o => mdio_wr_spec_cal_crst,
+ mdio_wr_spec_bslide_i => mdio_wr_spec_bslide,
+ mdio_ectrl_lpbck_vec_o => serdes_loopen_vec_o,
+ mdio_ectrl_sfp_tx_fault_i => serdes_sfp_tx_fault_i,
+ mdio_ectrl_sfp_loss_i => serdes_sfp_los_i,
+ mdio_ectrl_sfp_tx_disable_o => serdes_sfp_tx_disable_o,
+ mdio_ectrl_tx_prbs_sel_o => serdes_tx_prbs_sel_o,
+
+ lstat_read_notify_o => lstat_read_notify
+ );
+
+
+ mdio_data_in <= X"0000" & mdio_data_i;
+ mdio_data_o <= mdio_data_out(15 downto 0);
+
+ mdio_msr_rfault <= '0';
+
+ U_AUTONEGOTIATION : ep_autonegotiation
+ generic map (
+ g_simulation => g_simulation)
+
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => pcs_reset_n,
+
+ pcs_synced_i => synced,
+ pcs_los_i => sync_lost,
+ pcs_link_ok_o => link_ok,
+
+ an_idle_match_i => an_idle_match,
+ an_rx_en_o => an_rx_en,
+ an_rx_val_i => an_rx_val,
+ an_rx_valid_i => an_rx_valid,
+ an_tx_en_o => an_tx_en,
+ an_tx_val_o => an_tx_val,
+ mdio_mcr_anrestart_i => mdio_mcr_anrestart,
+ mdio_mcr_anenable_i => mdio_mcr_anenable,
+ mdio_msr_anegcomplete_o => mdio_msr_anegcomplete,
+ mdio_advertise_pause_i => mdio_advertise_pause,
+ mdio_advertise_rfault_i => mdio_advertise_rfault,
+ mdio_lpa_full_o => mdio_lpa_full,
+ mdio_lpa_half_o => mdio_lpa_half,
+ mdio_lpa_pause_o => mdio_lpa_pause,
+ mdio_lpa_rfault_o => mdio_lpa_rfault,
+ mdio_lpa_lpack_o => mdio_lpa_lpack,
+ mdio_lpa_npage_o => mdio_lpa_npage
+ );
+
+ -- process: translates the MDIO reads/writes into Wishbone read/writes
+ -- inputs: mdio_stb_i, wb_ack
+ -- ouputs: mdio_ready_o, wb_stb
+ p_translate_mdio_wb : process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0') then
+ wb_stb <= '0';
+ mdio_ready_o <= '1';
+ else
+ if(mdio_stb_i = '1' and wb_stb = '0') then
+ wb_stb <= '1';
+ mdio_ready_o <= '0';
+ elsif(wb_stb = '1' and wb_ack = '1') then
+ mdio_ready_o <= '1';
+ wb_stb <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- process: handles the LSTATUS bit in MSR register
+ -- inputs: sync_lost, synced, lstat_read_notify
+ -- outputs: mdio_msr_lstatus
+ p_gen_link_status : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(pcs_reset_n = '0') then
+ mdio_msr_lstatus <= '0';
+ else
+ if(sync_lost = '1') then
+ mdio_msr_lstatus <= '0';
+ elsif(lstat_read_notify = '1') then
+ mdio_msr_lstatus <= synced and link_ok;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- The process delays by 1 cyc synced signal. This delayed synced, called synced_d1
+ -- is then used to produce link_ok_o (below he process).
+ -- This is done to avoid 1-cycle glitches of link_ok_o. Such glitch happened after
+ -- the autonegotation FSM was in pseudo AN_ENABLED state caused by synced=LOW (in
+ -- this state, link_ok is HIGH). When synced goes HIGH, the FSM enters "proper"
+ -- AN_ENABLED state, it drives link_ok LOW.s All in all, this glitch is avoided
+ -- when we use delayed synced_d1 to produce the final link_ok_o
+ p_delay_synced: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(pcs_reset_n = '0') then
+ synced_d1 <= '0';
+ else
+ synced_d1 <= synced;
+ end if;
+ end if;
+ end process;
+
+ link_ok_o <= link_ok and synced_d1;
+
+ --RMON events
+ U_sync_tx_underrun: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => rmon_tx_underrun,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon_o.tx_underrun);
+
+ U_sync_rx_overrun: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => rmon_rx_overrun,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon_o.rx_overrun);
+
+ U_sync_rx_inv_code: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => rmon_rx_inv_code,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon_o.rx_invalid_code);
+
+ U_sync_rx_sync_lost: gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => rmon_rx_sync_lost,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon_o.rx_sync_lost);
+
+ -- drive unused outputs
+ rmon_o.rx_crc_err <= '0';
+ rmon_o.rx_ok <= '0';
+ rmon_o.rx_pfilter_drop <= '0';
+ rmon_o.rx_runt <= '0';
+ rmon_o.rx_giant <= '0';
+ rmon_o.rx_pause <= '0';
+ rmon_o.rx_pcs_err <= '0';
+ rmon_o.rx_buffer_overrun <= '0';
+ rmon_o.rx_rtu_overrun <= '0';
+ rmon_o.rx_path_timing_failure <= '0';
+ rmon_o.tx_pause <= '0';
+ rmon_o.rx_pclass <= (others => '0');
+ rmon_o.rx_tclass <= (others => '0');
+ rmon_o.tx_frame <= '0';
+ rmon_o.rx_frame <= '0';
+ rmon_o.rx_drop_at_rtu_full <= '0';
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd
new file mode 100644
index 000000000..69dbe4c06
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_autonegotiation.vhd
@@ -0,0 +1,281 @@
+-------------------------------------------------------------------------------
+-- Title : 1000Base-X Autonegotiation
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_autonegotiation.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-02-21
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements the 1000Base-X autonegotiation engine as
+-- defined in IEEE802.3.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1l.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-11-18 0.4 twlostow Initial release
+-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+
+entity ep_autonegotiation is
+ generic (
+ g_simulation : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- RX PCS signals
+ pcs_synced_i : in std_logic;
+ pcs_los_i : in std_logic;
+ pcs_link_ok_o : out std_logic;
+
+ an_idle_match_i : in std_logic;
+ an_rx_en_o : out std_logic;
+ an_rx_val_i : in std_logic_vector(15 downto 0);
+ an_rx_valid_i : in std_logic;
+
+ -- TX PCS signals
+ an_tx_en_o : out std_logic;
+ an_tx_val_o : out std_logic_vector(15 downto 0);
+
+ mdio_mcr_anrestart_i : in std_logic;
+ mdio_mcr_anenable_i : in std_logic;
+ mdio_msr_anegcomplete_o : out std_logic;
+
+ mdio_advertise_pause_i : in std_logic_vector(1 downto 0);
+ mdio_advertise_rfault_i : in std_logic_vector(1 downto 0);
+
+ mdio_lpa_full_o : out std_logic;
+ mdio_lpa_half_o : out std_logic;
+ mdio_lpa_pause_o : out std_logic_vector(1 downto 0);
+ mdio_lpa_rfault_o : out std_logic_vector(1 downto 0);
+ mdio_lpa_lpack_o : out std_logic;
+ mdio_lpa_npage_o : out std_logic
+ );
+
+end ep_autonegotiation;
+
+architecture syn of ep_autonegotiation is
+
+ type t_autoneg_state is (AN_ENABLE, AN_RESTART, AN_ABILITY_DETECT, AN_DISABLE_LINK_OK, AN_ACKNOWLEDGE_DETECT, AN_COMPLETE_ACKNOWLEDGE, AN_IDLE_DETECT, AN_LINK_OK);
+
+ signal state : t_autoneg_state;
+
+
+ function f_eval_link_timer_size
+ return integer is
+ begin -- f_eval_link_timer_size
+ if(g_simulation = false) then
+ return 20;
+ else
+ return 11;
+ end if;
+ end f_eval_link_timer_size;
+
+ constant c_link_timer_bits : integer := f_eval_link_timer_size;
+
+ signal link_timer : unsigned(c_link_timer_bits downto 0); -- 23 for normal operation
+
+
+ signal link_timer_restart : std_logic;
+ signal link_timer_expired : std_logic;
+
+ signal an_enable_changed, an_enable_d0 : std_logic;
+ signal toggle_tx, toggle_rx : std_logic;
+
+ signal rx_config_reg : std_logic_vector(15 downto 0);
+
+ signal acknowledge_match : std_logic;
+ signal ability_match : std_logic;
+ signal consistency_match : std_logic;
+
+
+
+begin -- syn
+
+
+ -- process: link timer (counts until MSB of link_timer == 1).
+ -- inputs: link_timer_restart
+ -- outputs: link_timer_expired
+ p_link_timer : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or link_timer_restart ='1' then
+ link_timer <= (others => '0');
+ else
+ if(link_timer_expired = '0') then
+ link_timer <= link_timer + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ link_timer_expired <= std_logic(link_timer(link_timer'high)) and (not link_timer_restart);
+
+
+ -- process: detects the changes of Autonegotiation Enable bit.
+ -- inputs: mdio_mcr_anenable_i
+ -- outputs: an_enable_changed
+ p_detect_enable_changed : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ an_enable_d0 <= mdio_mcr_anenable_i;
+ an_enable_changed <= an_enable_d0 xor mdio_mcr_anenable_i;
+ end if;
+ end process;
+
+
+ -- generate some FSM conditions combinatorially outside the FSM process to
+ -- make the code more readable
+ ability_match <= an_rx_valid_i;
+ acknowledge_match <= an_rx_valid_i and an_rx_val_i(14);
+ consistency_match <= '1' when (an_rx_valid_i = '1' and rx_config_reg (15) = an_rx_val_i(15) and rx_config_reg(13 downto 0) = an_rx_val_i(13 downto 0));
+
+
+-- process: main auto-negotiation state machine. More or less compatible with
+-- IEEE 802.3.
+ p_autonegotation_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ link_timer_restart <= '0';
+ state <= AN_ENABLE;
+ pcs_link_ok_o <= '0';
+
+ an_tx_en_o <= '0';
+ an_rx_en_o <= '1';
+ an_tx_val_o <= (others => '0');
+
+ mdio_lpa_lpack_o <= '0';
+ mdio_msr_anegcomplete_o <= '0';
+ rx_config_reg <= (others => '0');
+ else
+
+ if(mdio_mcr_anrestart_i = '1' or an_enable_changed = '1' or pcs_synced_i = '0') then
+ state <= AN_ENABLE;
+ else
+
+ case state is
+ when AN_ENABLE =>
+ mdio_msr_anegcomplete_o <= '0';
+ pcs_link_ok_o <= '0';
+
+ if mdio_mcr_anenable_i = '1' then
+ an_tx_val_o <= (others => '0'); -- send breaklink
+ an_tx_en_o <= '1';
+ link_timer_restart <= '1';
+ state <= AN_RESTART;
+ else
+ state <= AN_DISABLE_LINK_OK;
+ end if;
+
+ when AN_DISABLE_LINK_OK =>
+ an_tx_en_o <= '0';
+ pcs_link_ok_o <= '1';
+
+ when AN_RESTART =>
+ link_timer_restart <= '0';
+ if(link_timer_expired = '1') then
+ state <= AN_ABILITY_DETECT;
+ end if;
+
+
+ when AN_ABILITY_DETECT =>
+-- toggle_tx <= mr_adv_ability<12> -- ???
+ an_rx_en_o <= '1';
+ an_tx_en_o <= '1';
+ an_tx_val_o (15) <= '0';
+ an_tx_val_o (14) <= '0';
+ an_tx_val_o (13 downto 12) <= mdio_advertise_rfault_i;
+ an_tx_val_o (11 downto 9) <= (others => '0');
+ an_tx_val_o (8 downto 7) <= mdio_advertise_pause_i;
+ an_tx_val_o (6) <= '0'; -- hdx not supported
+ an_tx_val_o (5) <= '1'; -- fdx supported
+ an_tx_val_o (4 downto 0) <= (others => '0');
+
+ if(an_rx_valid_i = '1' and an_rx_val_i /= x"0000") then -- ability_match=true
+ state <= AN_ACKNOWLEDGE_DETECT;
+ rx_config_reg <= an_rx_val_i;
+ end if;
+
+ when AN_ACKNOWLEDGE_DETECT =>
+ an_tx_val_o(14) <= '1';
+ if(acknowledge_match = '1' and consistency_match = '0')
+ or (ability_match = '1' and an_rx_val_i = x"0000") then
+ state <= AN_ENABLE;
+ elsif(acknowledge_match = '1' and consistency_match = '1') then
+ state <= AN_COMPLETE_ACKNOWLEDGE;
+ link_timer_restart <= '1';
+ end if;
+
+ when AN_COMPLETE_ACKNOWLEDGE =>
+ link_timer_restart <= '0';
+
+ mdio_lpa_npage_o <= an_rx_val_i(15);
+ mdio_lpa_lpack_o <= an_rx_val_i(14);
+ mdio_lpa_rfault_o <= an_rx_val_i(13 downto 12);
+ mdio_lpa_pause_o <= an_rx_val_i (8 downto 7);
+ mdio_lpa_half_o <= an_rx_val_i(6);
+ mdio_lpa_full_o <= an_rx_val_i(5);
+
+
+ if(ability_match = '1' and an_rx_val_i = x"0000")then
+ state <= AN_ENABLE;
+ elsif(link_timer_expired = '1' and (ability_match = '0' or an_rx_val_i /= x"0000")) then
+ link_timer_restart <= '1';
+ state <= AN_IDLE_DETECT;
+ end if;
+
+ when AN_IDLE_DETECT =>
+ link_timer_restart <= '0';
+ an_tx_en_o <= '0';
+ if(ability_match = '1' and an_rx_val_i = x"0000") then
+ state <= AN_ENABLE;
+ elsif (an_idle_match_i = '1' and link_timer_expired = '1') then
+ state <= AN_LINK_OK;
+ end if;
+
+
+ when AN_LINK_OK =>
+ mdio_msr_anegcomplete_o <= '1';
+ pcs_link_ok_o <= '1';
+ if(ability_match = '1') then
+ state <= AN_ENABLE;
+ end if;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd
new file mode 100644
index 000000000..09a214467
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_clock_alignment_fifo.vhd
@@ -0,0 +1,127 @@
+-------------------------------------------------------------------------------
+-- Title : RX Clock Alignment FIFO
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_clock_alignment_fifo.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2012-08-28
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Asynchronous FIFO with internal fabric (t_ep_internal_fabric)
+-- interface used to pass packet data between the RX clock->system clock
+-- domains.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2011 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+entity ep_clock_alignment_fifo is
+
+ generic(
+ g_size : integer := 64;
+ g_almostfull_threshold : integer := 56);
+
+ port(
+ rst_n_rd_i : in std_logic;
+ rst_n_wr_i : in std_logic;
+ clk_wr_i : in std_logic;
+ clk_rd_i : in std_logic;
+
+ dreq_i : in std_logic;
+ fab_i : in t_ep_internal_fabric;
+ fab_o : out t_ep_internal_fabric;
+
+ full_o : out std_logic;
+ empty_o : out std_logic;
+ almostfull_o : out std_logic;
+
+ -- number of data words which enables the output. Used
+ -- to control the minimum latency
+ pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)
+ );
+end ep_clock_alignment_fifo;
+
+architecture structural of ep_clock_alignment_fifo is
+ signal fifo_in : std_logic_vector(17 downto 0);
+ signal fifo_out : std_logic_vector(17 downto 0);
+ signal rx_rdreq : std_logic;
+ signal empty_int : std_logic;
+ signal valid_int : std_logic;
+
+
+ signal fab_int : t_ep_internal_fabric;
+ signal fifo_we : std_logic;
+begin
+
+ f_pack_fifo_contents (fab_i, fifo_in, fifo_we, false);
+
+-- Clock adjustment FIFO
+ U_FIFO : generic_async_fifo
+ generic map (
+ g_data_width => 18,
+ g_size => g_size,
+ g_with_wr_almost_full => true,
+ g_almost_full_threshold => g_almostfull_threshold
+ )
+ port map (
+ rst_n_i => rst_n_wr_i,
+ clk_wr_i => clk_wr_i,
+ d_i => fifo_in,
+ we_i => fifo_we,
+ wr_full_o => full_o,
+ wr_almost_full_o => almostfull_o,
+ clk_rd_i => clk_rd_i,
+ q_o => fifo_out,
+ rd_i => rx_rdreq,
+ rd_empty_o => empty_int);
+
+
+ rx_rdreq <= (not empty_int) and dreq_i; -- and dreq_mask;
+
+
+ p_readout : process (clk_rd_i)
+ begin
+ if rising_edge(clk_rd_i) then
+ if(rst_n_rd_i = '0') then
+ valid_int <= '0';
+ else
+ valid_int <= rx_rdreq;
+ end if;
+ end if;
+ end process;
+
+ -- FIFO output data formatting
+ f_unpack_fifo_contents(fifo_out, valid_int, fab_int, false);
+
+ fab_o <= fab_int;
+ empty_o <= empty_int;
+
+end structural;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd
new file mode 100644
index 000000000..c51f95827
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_crc32_pkg.vhd
@@ -0,0 +1,128 @@
+-------------------------------------------------------------------------------
+-- Title : CRC32 package
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_crc32_pkg.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2013 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+package ep_crc32_pkg is
+
+
+ constant c_CRC32_RESIDUE_FULL : std_logic_vector(31 downto 0) := x"1cdf4421";
+ constant c_CRC32_RESIDUE_HALF : std_logic_vector(31 downto 0) := x"1df722c6";
+ constant c_CRC32_INIT_VALUE : std_logic_vector(31 downto 0) := x"00000000";
+
+ function f_update_crc32_d16(d : std_logic_vector; data_in : std_logic_vector) return std_logic_vector;
+ function f_update_crc32_d8(d : std_logic_vector(31 downto 0); data_in : std_logic_vector(7 downto 0)) return std_logic_vector;
+
+end ep_crc32_pkg;
+
+package body ep_crc32_pkg is
+
+
+ function f_update_crc32_d16(d : std_logic_vector; data_in : std_logic_vector) return std_logic_vector is
+ variable q : std_logic_vector(d'length-1 downto 0);
+ begin
+ q(7) := not ((not d(23)) xor (not d(17)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor data_in(7) xor data_in(1) xor data_in(14) xor data_in(13) xor data_in(11));
+ q(6) := not ((not d(23)) xor (not d(22)) xor (not d(17)) xor (not d(16)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(0) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(10));
+ q(5) := not ((not d(23)) xor (not d(22)) xor (not d(21)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(10) xor data_in(9));
+ q(4) := not ((not d(22)) xor (not d(21)) xor (not d(20)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(13) xor data_in(9) xor data_in(8));
+ q(3) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(31)) xor (not d(28)) xor (not d(27)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(15) xor data_in(12) xor data_in(11) xor data_in(8));
+ q(2) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(26)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(10));
+ q(1) := not ((not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(9));
+ q(0) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(16)) xor (not d(31)) xor (not d(29)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(0) xor data_in(15) xor data_in(13) xor data_in(8));
+ q(15) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(15) xor data_in(13) xor data_in(12) xor data_in(11));
+ q(14) := not ((not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(10));
+ q(13) := not ((not d(23)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(14) xor data_in(10) xor data_in(9));
+ q(12) := not ((not d(23)) xor (not d(22)) xor (not d(20)) xor (not d(19)) xor (not d(30)) xor (not d(27)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(14) xor data_in(11) xor data_in(9) xor data_in(8));
+ q(11) := not ((not d(23)) xor (not d(22)) xor (not d(21)) xor (not d(19)) xor (not d(18)) xor (not d(17)) xor (not d(30)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(14) xor data_in(11) xor data_in(10) xor data_in(8));
+ q(10) := not ((not d(22)) xor (not d(21)) xor (not d(20)) xor (not d(18)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(10) xor data_in(9));
+ q(9) := not ((not d(21)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(9) xor data_in(8));
+ q(8) := not ((not d(20)) xor (not d(19)) xor (not d(18)) xor (not d(16)) xor (not d(31)) xor (not d(30)) xor (not d(27)) xor (not d(24)) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(0) xor data_in(15) xor data_in(14) xor data_in(11) xor data_in(8));
+ q(23) := not ((not d(7)) xor (not d(23)) xor (not d(19)) xor (not d(18)) xor (not d(31)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(3) xor data_in(2) xor data_in(15) xor data_in(11) xor data_in(10));
+ q(22) := not ((not d(6)) xor (not d(22)) xor (not d(18)) xor (not d(17)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(2) xor data_in(1) xor data_in(14) xor data_in(10) xor data_in(9));
+ q(21) := not ((not d(5)) xor (not d(21)) xor (not d(17)) xor (not d(16)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(1) xor data_in(0) xor data_in(13) xor data_in(9) xor data_in(8));
+ q(20) := not ((not d(4)) xor (not d(20)) xor (not d(16)) xor (not d(31)) xor (not d(28)) xor (not d(24)) xor data_in(4) xor data_in(0) xor data_in(15) xor data_in(12) xor data_in(8));
+ q(19) := not ((not d(3)) xor (not d(19)) xor (not d(31)) xor (not d(30)) xor (not d(27)) xor data_in(3) xor data_in(15) xor data_in(14) xor data_in(11));
+ q(18) := not ((not d(2)) xor (not d(18)) xor (not d(30)) xor (not d(29)) xor (not d(26)) xor data_in(2) xor data_in(14) xor data_in(13) xor data_in(10));
+ q(17) := not ((not d(1)) xor (not d(23)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(14) xor data_in(12) xor data_in(11) xor data_in(9));
+ q(16) := not ((not d(0)) xor (not d(23)) xor (not d(22)) xor (not d(17)) xor (not d(30)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(14) xor data_in(10) xor data_in(8));
+ q(31) := not ((not d(15)) xor (not d(22)) xor (not d(21)) xor (not d(16)) xor (not d(29)) xor (not d(25)) xor data_in(6) xor data_in(5) xor data_in(0) xor data_in(13) xor data_in(9));
+ q(30) := not ((not d(14)) xor (not d(21)) xor (not d(20)) xor (not d(31)) xor (not d(28)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(15) xor data_in(12) xor data_in(8));
+ q(29) := not ((not d(13)) xor (not d(23)) xor (not d(20)) xor (not d(19)) xor (not d(17)) xor (not d(29)) xor data_in(7) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(13));
+ q(28) := not ((not d(12)) xor (not d(22)) xor (not d(19)) xor (not d(18)) xor (not d(16)) xor (not d(28)) xor data_in(6) xor data_in(3) xor data_in(2) xor data_in(0) xor data_in(12));
+ q(27) := not ((not d(11)) xor (not d(21)) xor (not d(18)) xor (not d(17)) xor (not d(31)) xor (not d(27)) xor data_in(5) xor data_in(2) xor data_in(1) xor data_in(15) xor data_in(11));
+ q(26) := not ((not d(10)) xor (not d(20)) xor (not d(17)) xor (not d(16)) xor (not d(30)) xor (not d(26)) xor data_in(4) xor data_in(1) xor data_in(0) xor data_in(14) xor data_in(10));
+ q(25) := not ((not d(9)) xor (not d(19)) xor (not d(16)) xor (not d(31)) xor (not d(29)) xor (not d(25)) xor data_in(3) xor data_in(0) xor data_in(15) xor data_in(13) xor data_in(9));
+ q(24) := not ((not d(8)) xor (not d(18)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(24)) xor data_in(2) xor data_in(15) xor data_in(14) xor data_in(12) xor data_in(8));
+
+ return q;
+ end f_update_crc32_d16;
+
+
+ function f_update_crc32_d8(d : std_logic_vector(31 downto 0); data_in : std_logic_vector(7 downto 0)) return std_logic_vector is
+ variable q : std_logic_vector(31 downto 0);
+ begin
+ q(7) := not ((not d(31)) xor (not d(25)) xor data_in(7) xor data_in(1));
+ q(6) := not ((not d(31)) xor (not d(30)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(1) xor data_in(0));
+ q(5) := not ((not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(1) xor data_in(0));
+ q(4) := not ((not d(30)) xor (not d(29)) xor (not d(28)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(0));
+ q(3) := not ((not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1));
+ q(2) := not ((not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0));
+ q(1) := not ((not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1) xor data_in(0));
+ q(0) := not ((not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor (not d(24)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(0));
+ q(15) := not ((not d(7)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3));
+ q(14) := not ((not d(6)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2));
+ q(13) := not ((not d(5)) xor (not d(31)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor data_in(7) xor data_in(5) xor data_in(4) xor data_in(2));
+ q(12) := not ((not d(4)) xor (not d(31)) xor (not d(30)) xor (not d(28)) xor (not d(27)) xor data_in(7) xor data_in(6) xor data_in(4) xor data_in(3));
+ q(11) := not ((not d(3)) xor (not d(31)) xor (not d(30)) xor (not d(29)) xor (not d(27)) xor (not d(26)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(5) xor data_in(3) xor data_in(2) xor data_in(1));
+ q(10) := not ((not d(2)) xor (not d(30)) xor (not d(29)) xor (not d(28)) xor (not d(26)) xor (not d(25)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(4) xor data_in(2) xor data_in(1) xor data_in(0));
+ q(9) := not ((not d(1)) xor (not d(29)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(4) xor data_in(3) xor data_in(1) xor data_in(0));
+ q(8) := not ((not d(0)) xor (not d(28)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(4) xor data_in(3) xor data_in(2) xor data_in(0));
+ q(23) := not ((not d(15)) xor (not d(31)) xor (not d(27)) xor (not d(26)) xor data_in(7) xor data_in(3) xor data_in(2));
+ q(22) := not ((not d(14)) xor (not d(30)) xor (not d(26)) xor (not d(25)) xor data_in(6) xor data_in(2) xor data_in(1));
+ q(21) := not ((not d(13)) xor (not d(29)) xor (not d(25)) xor (not d(24)) xor data_in(5) xor data_in(1) xor data_in(0));
+ q(20) := not ((not d(12)) xor (not d(28)) xor (not d(24)) xor data_in(4) xor data_in(0));
+ q(19) := not ((not d(11)) xor (not d(27)) xor data_in(3));
+ q(18) := not ((not d(10)) xor (not d(26)) xor data_in(2));
+ q(17) := not ((not d(9)) xor (not d(31)) xor data_in(7));
+ q(16) := not ((not d(8)) xor (not d(31)) xor (not d(30)) xor (not d(25)) xor data_in(7) xor data_in(6) xor data_in(1));
+ q(31) := not ((not d(23)) xor (not d(30)) xor (not d(29)) xor (not d(24)) xor data_in(6) xor data_in(5) xor data_in(0));
+ q(30) := not ((not d(22)) xor (not d(29)) xor (not d(28)) xor data_in(5) xor data_in(4));
+ q(29) := not ((not d(21)) xor (not d(31)) xor (not d(28)) xor (not d(27)) xor (not d(25)) xor data_in(7) xor data_in(4) xor data_in(3) xor data_in(1));
+ q(28) := not ((not d(20)) xor (not d(30)) xor (not d(27)) xor (not d(26)) xor (not d(24)) xor data_in(6) xor data_in(3) xor data_in(2) xor data_in(0));
+ q(27) := not ((not d(19)) xor (not d(29)) xor (not d(26)) xor (not d(25)) xor data_in(5) xor data_in(2) xor data_in(1));
+ q(26) := not ((not d(18)) xor (not d(28)) xor (not d(25)) xor (not d(24)) xor data_in(4) xor data_in(1) xor data_in(0));
+ q(25) := not ((not d(17)) xor (not d(27)) xor (not d(24)) xor data_in(3) xor data_in(0));
+ q(24) := not ((not d(16)) xor (not d(26)) xor data_in(2));
+ return q;
+ end f_update_crc32_d8;
+end ep_crc32_pkg;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd
new file mode 100644
index 000000000..28582fb52
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_leds_controller.vhd
@@ -0,0 +1,129 @@
+-------------------------------------------------------------------------------
+-- Title : Endpoint LEDs controller
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_leds_controller.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.endpoint_private_pkg.all;
+use work.gencores_pkg.all;
+
+entity ep_leds_controller is
+
+ generic (
+ g_blink_period_log2 : integer := 21);
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- data valid (from PCS <> framers)
+ dvalid_tx_i : in std_logic;
+ dvalid_rx_i : in std_logic;
+
+ link_ok_i : in std_logic;
+
+ led_link_o : out std_logic;
+ led_act_o : out std_logic
+ );
+
+end ep_leds_controller;
+
+architecture rtl of ep_leds_controller is
+
+ type t_state is (INACTIVE, BLINKING);
+
+ signal cnt : unsigned(g_blink_period_log2-1 downto 0);
+ signal cnt_reset, cnt_expired : std_logic;
+ signal state : t_state;
+ signal led_act : std_logic;
+ signal last_cycle_act : std_logic;
+ signal txrx : std_logic;
+begin -- rtl
+
+ led_link_o <= link_ok_i;
+
+ txrx <= dvalid_rx_i or dvalid_tx_i;
+
+ p_counter : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+
+ if(rst_n_i = '0' or cnt_reset = '1')then
+ cnt <= (others => '0');
+ else
+ cnt <= cnt + 1;
+ if((not cnt) = 0) then
+ cnt_expired <= '1';
+ else
+ cnt_expired <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_gen_act_led : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= INACTIVE;
+ led_act <= '0';
+ cnt_reset <= '0';
+ else
+ case state is
+ when INACTIVE =>
+ if(txrx = '1') then
+ state <= BLINKING;
+ led_act <= '1';
+ cnt_reset <= '1';
+ end if;
+ when BLINKING =>
+ cnt_reset <= '0';
+ if(cnt_expired = '1') then
+ led_act <= not led_act;
+ if(last_cycle_act = '0') then
+ led_act <= '0';
+ state <= INACTIVE;
+ end if;
+ last_cycle_act <= '0';
+ else
+ if(txrx = '1') then
+ last_cycle_act <= '1';
+ end if;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ led_act_o <= led_act;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd
new file mode 100644
index 000000000..79b4c4cbd
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_packet_filter.vhd
@@ -0,0 +1,371 @@
+-------------------------------------------------------------------------------
+-- Title : Programmable Packet Filter/Inspector
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_packet_filter.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A simple packet inspection CPU, capable of classifying incoming
+-- packets to 8 different packet classes. The microcode format and programming
+-- constaints are described in detail in the Endpoint's manual.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1l.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_packet_filter is
+
+ port (
+ clk_rx_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ src_fab_o : out t_ep_internal_fabric;
+
+ done_o : out std_logic;
+ pclass_o : out std_logic_vector(7 downto 0);
+ drop_o : out std_logic;
+
+ regs_i : in t_ep_out_registers
+ );
+
+end ep_packet_filter;
+
+architecture behavioral of ep_packet_filter is
+
+ constant c_PC_SIZE : integer := 6;
+
+ constant c_MODE_LOGIC : std_logic := '1';
+ constant c_MODE_COMPARE : std_logic := '0';
+
+ type t_microcode_instruction is record
+ fin : std_logic;
+ mode : std_logic;
+ cmp_bit : std_logic;
+ cmp_mask : std_logic_vector(3 downto 0);
+ cmp_value : std_logic_vector(15 downto 0);
+ offset : std_logic_vector(5 downto 0);
+ op : std_logic_vector(2 downto 0);
+ op2 : std_logic_vector(2 downto 0);
+
+ rd : std_logic_vector(4 downto 0);
+ ra : std_logic_vector(4 downto 0);
+ rb : std_logic_vector(4 downto 0);
+ rc : std_logic_vector(4 downto 0);
+ end record;
+
+ function f_decode_insn
+ (ir : std_logic_vector) return t_microcode_instruction is
+ variable insn : t_microcode_instruction;
+ begin
+ insn.fin := ir(35);
+ insn.mode := ir(34);
+ insn.cmp_bit := ir(33);
+ insn.cmp_mask := ir(32 downto 29);
+ insn.cmp_value := ir(28 downto 13);
+ insn.offset := ir(12 downto 7);
+ insn.rd(3 downto 0) := ir(6 downto 3);
+ insn.op := ir(2 downto 0);
+ insn.rd(4) := ir(34) and ir(7);
+ insn.ra := ir(12 downto 8);
+ insn.rb := ir(17 downto 13);
+ insn.rc := ir(22 downto 18);
+ insn.op2 := ir(25 downto 23);
+ return insn;
+ end f_decode_insn;
+
+ function f_eval
+ (
+ a, b : std_logic;
+ op : std_logic_vector
+ ) return std_logic is
+ variable r : std_logic;
+ variable op_t : std_logic_vector(2 downto 0);
+ begin
+ op_t := op;
+ case op_t is
+ when "000" => r := a and b;
+ when "100" => r := a nand b;
+ when "001" => r := a or b;
+ when "101" => r := a nor b;
+ when "010" => r := a xor b;
+ when "110" => r := a xnor b;
+ when "011" => r := a;
+ when "111" => r := not a;
+ when others => null;
+ end case;
+ return r;
+ end f_eval;
+
+ function f_pick_reg(regs : std_logic_vector; index : std_logic_vector)return std_logic is
+ variable idx_int : integer;
+ begin
+ idx_int := to_integer(unsigned(index));
+ return regs(idx_int);
+ end f_pick_reg;
+
+
+
+ signal pc : unsigned(c_PC_SIZE-1 downto 0);
+ signal ir, ir_d : std_logic_vector(35 downto 0);
+ signal insn, insn_d : t_microcode_instruction;
+ signal insn_predecoded : t_microcode_instruction;
+
+ signal done_int : std_logic;
+ signal regs : std_logic_vector(31 downto 0);
+
+ signal result_cmp : std_logic;
+ signal mask : std_logic_vector(15 downto 0);
+
+ signal ra, rb, rc, result1, result2, rd : std_logic;
+
+ signal pmem_rdata : std_logic_vector(15 downto 0);
+
+ signal mm_write : std_logic;
+ signal mm_rdata, mm_wdata : std_logic_vector(35 downto 0);
+
+ type t_state is (WAIT_FRAME, PROCESS_FRAME, GEN_OUTPUT);
+
+ signal stage1, stage2, stage3 : std_logic;
+ signal r_pfcr1_mm_data_lsb : std_logic_vector(11 downto 0);
+
+ signal pfcr0_enable_rxclk : std_logic;
+
+begin -- behavioral
+
+ U_sync_pfcr0_enable : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_rx_i,
+ rst_n_i => '1',
+ data_i => regs_i.pfcr0_enable_o,
+ synced_o => pfcr0_enable_rxclk,
+ npulse_o => open,
+ ppulse_o => open);
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(regs_i.pfcr1_mm_data_lsb_wr_o = '1') then
+ r_pfcr1_mm_data_lsb <= regs_i.pfcr1_mm_data_lsb_o;
+ end if;
+ end if;
+ end process;
+
+
+ mm_write <= not regs_i.pfcr0_enable_o and regs_i.pfcr0_mm_write_o and regs_i.pfcr0_mm_write_wr_o;
+ mm_wdata <= regs_i.pfcr0_mm_data_msb_o & r_pfcr1_mm_data_lsb;
+
+ U_microcode_ram : generic_dpram
+ generic map (
+ g_data_width => 36,
+ g_size => 2**c_PC_SIZE,
+ g_dual_clock => true)
+ port map (
+ rst_n_i => rst_n_sys_i,
+ clka_i => clk_rx_i,
+ bwea_i => "00000",
+ wea_i => '0',
+ aa_i => std_logic_vector(pc),
+ da_i => x"000000000",
+ qa_o => mm_rdata,
+ clkb_i => clk_sys_i,
+ bweb_i => "11111",
+ web_i => mm_write,
+ ab_i => regs_i.pfcr0_mm_addr_o,
+ db_i => mm_wdata
+ );
+
+
+
+ U_backlog_ram : generic_dpram
+ generic map (
+ g_data_width => 16,
+ g_size => 2**c_PC_SIZE,
+ g_with_byte_enable => false,
+ g_dual_clock => false)
+ port map (
+ rst_n_i => rst_n_rx_i,
+ clka_i => clk_rx_i,
+ bwea_i => "11",
+ wea_i => snk_fab_i.dvalid,
+ aa_i => std_logic_vector(pc),
+ da_i => snk_fab_i.data,
+ qa_o => open,
+ clkb_i => clk_rx_i,
+ bweb_i => "00",
+ web_i => '0',
+ ab_i => insn_predecoded.offset,
+ db_i => x"0000",
+ qb_o => pmem_rdata);
+
+ insn_predecoded <= f_decode_insn(mm_rdata);
+
+ src_fab_o <= snk_fab_i;
+
+ p_pc_counter : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' or snk_fab_i.eof = '1' or snk_fab_i.error = '1' or done_int = '1' then
+ pc <= (others => '0');
+ stage1 <= '0';
+ elsif(snk_fab_i.dvalid = '1') then
+ pc <= pc + 1;
+ stage1 <= '1';
+ else
+ stage1 <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_stage2 : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' or done_int = '1' or snk_fab_i.error = '1' then
+ stage2 <= '0';
+ ir <= (others => '0');
+ else
+ stage2 <= stage1;
+ ir <= mm_rdata;
+ end if;
+ end if;
+ end process;
+
+ p_gen_mask : process(insn)
+ begin
+ if(insn.cmp_bit = '0') then
+ mask <= (3 downto 0 => insn.cmp_mask(0),
+ 7 downto 4 => insn.cmp_mask(1),
+ 11 downto 8 => insn.cmp_mask(2),
+ 15 downto 12 => insn.cmp_mask(3));
+ else
+ case insn.cmp_mask is
+ when x"0" => mask <= x"0001";
+ when x"1" => mask <= x"0002";
+ when x"2" => mask <= x"0004";
+ when x"3" => mask <= x"0008";
+ when x"4" => mask <= x"0010";
+ when x"5" => mask <= x"0020";
+ when x"6" => mask <= x"0040";
+ when x"7" => mask <= x"0080";
+ when x"8" => mask <= x"0100";
+ when x"9" => mask <= x"0200";
+ when x"a" => mask <= x"0400";
+ when x"b" => mask <= x"0800";
+ when x"c" => mask <= x"1000";
+ when x"d" => mask <= x"2000";
+ when x"e" => mask <= x"4000";
+ when x"f" => mask <= x"8000";
+ when others => mask <= (others => 'X');
+ end case;
+ end if;
+ end process;
+
+ p_compare : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if stage2 = '1' then
+ stage3 <= '1';
+ ir_d <= ir;
+ if (((pmem_rdata and mask) = insn.cmp_value)) then
+ result_cmp <= '1';
+ else
+ result_cmp <= '0';
+ end if;
+
+ else
+ stage3 <= '0';
+ end if;
+ end if;
+ end process;
+
+ insn <= f_decode_insn(ir);
+ insn_d <= f_decode_insn(ir_d);
+ ra <= f_pick_reg(regs, insn_d.ra) when insn_d.mode = c_MODE_LOGIC else result_cmp;
+ rb <= f_pick_reg(regs, insn_d.rb) when insn_d.mode = c_MODE_LOGIC else f_pick_reg(regs, insn_d.rd);
+ rc <= f_pick_reg(regs, insn_d.rc);
+
+ result1 <= f_eval(ra, rb, insn_d.op);
+ result2 <= f_eval(result1, rc, insn_d.op2);
+
+ rd <= result2 when insn_d.mode = c_MODE_LOGIC else result1;
+
+
+ p_execute : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' or snk_fab_i.eof = '1' or snk_fab_i.error = '1' or done_int = '1' then
+ regs <= (others => '0');
+ else
+ if(stage3 = '1') then
+ regs(to_integer(unsigned(insn_d.rd))) <= rd;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_gen_status : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if (rst_n_rx_i = '0' or snk_fab_i.sof = '1') then
+ done_int <= '0';
+ drop_o <= '0';
+ else
+ if(pfcr0_enable_rxclk = '0') then
+ done_int <= '0';
+ drop_o <= '0';
+ pclass_o <= (others => '0');
+ elsif( (stage3 = '1' and insn_d.fin = '1') or
+ ((snk_fab_i.error = '1' or snk_fab_i.eof = '1') and done_int = '0') ) then
+ done_int <= '1';
+ pclass_o <= regs(31 downto 24);
+ drop_o <= regs(23);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ U_Sync_Done : gc_pulse_synchronizer
+ port map (
+ clk_in_i => clk_rx_i,
+ clk_out_i => clk_sys_i,
+ rst_n_i => rst_n_rx_i,
+ d_p_i => done_int,
+ q_p_o => done_o);
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd
new file mode 100644
index 000000000..f94b29b11
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_pcs_tbi_mdio_wb.vhd
@@ -0,0 +1,627 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Endpoint 1000base-X TBI PCS register block
+---------------------------------------------------------------------------------------
+-- File : ep_pcs_tbi_mdio_wb.vhd
+-- Author : auto-generated by wbgen2 from pcs_regs.wb
+-- Created : Wed Aug 16 22:43:42 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE pcs_regs.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity ep_pcs_tbi_mdio_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ tx_clk_i : in std_logic;
+ rx_clk_i : in std_logic;
+-- Port for BIT field: 'Unidirectional Enable' in reg: 'MDIO Control Register'
+ mdio_mcr_uni_en_o : out std_logic;
+-- Port for MONOSTABLE field: 'Restart Auto-Negotiation' in reg: 'MDIO Control Register'
+ mdio_mcr_anrestart_o : out std_logic;
+-- Port for BIT field: 'Power Down' in reg: 'MDIO Control Register'
+ mdio_mcr_pdown_o : out std_logic;
+-- Port for BIT field: 'Auto-Negotiation Enable' in reg: 'MDIO Control Register'
+ mdio_mcr_anenable_o : out std_logic;
+-- Port for BIT field: 'Loopback' in reg: 'MDIO Control Register'
+ mdio_mcr_loopback_o : out std_logic;
+-- Port for MONOSTABLE field: 'Reset' in reg: 'MDIO Control Register'
+ mdio_mcr_reset_o : out std_logic;
+-- Port for BIT field: 'Link Status' in reg: 'MDIO Status Register'
+ mdio_msr_lstatus_i : in std_logic;
+ lstat_read_notify_o : out std_logic;
+-- Port for BIT field: 'Remote Fault' in reg: 'MDIO Status Register'
+ mdio_msr_rfault_i : in std_logic;
+-- Port for BIT field: 'Auto-Negotiation Complete' in reg: 'MDIO Status Register'
+ mdio_msr_anegcomplete_i : in std_logic;
+-- Port for std_logic_vector field: 'Pause' in reg: 'MDIO Auto-Negotiation Advertisement Register'
+ mdio_advertise_pause_o : out std_logic_vector(1 downto 0);
+-- Port for std_logic_vector field: 'Remote Fault' in reg: 'MDIO Auto-Negotiation Advertisement Register'
+ mdio_advertise_rfault_o : out std_logic_vector(1 downto 0);
+-- Port for BIT field: 'Full Duplex' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_full_i : in std_logic;
+-- Port for BIT field: 'Half Duplex' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_half_i : in std_logic;
+-- Port for std_logic_vector field: 'Pause' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_pause_i : in std_logic_vector(1 downto 0);
+-- Port for std_logic_vector field: 'Remote Fault' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_rfault_i : in std_logic_vector(1 downto 0);
+-- Port for BIT field: 'Acknowledge' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_lpack_i : in std_logic;
+-- Port for BIT field: 'Next Page' in reg: 'MDIO Auto-Negotiation Link Partner Ability Register'
+ mdio_lpa_npage_i : in std_logic;
+-- Port for asynchronous (clock: tx_clk_i) BIT field: 'TX Calibration Pattern' in reg: 'WhiteRabbit-specific Configuration Register'
+ mdio_wr_spec_tx_cal_o : out std_logic;
+-- Port for asynchronous (clock: rx_clk_i) BIT field: 'Calibration Pattern RX Status' in reg: 'WhiteRabbit-specific Configuration Register'
+ mdio_wr_spec_rx_cal_stat_i : in std_logic;
+-- Port for asynchronous (clock: rx_clk_i) MONOSTABLE field: 'Reset calibration counter' in reg: 'WhiteRabbit-specific Configuration Register'
+ mdio_wr_spec_cal_crst_o : out std_logic;
+-- Port for asynchronous (clock: rx_clk_i) std_logic_vector field: 'GTP RX Bitslide' in reg: 'WhiteRabbit-specific Configuration Register'
+ mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0);
+-- Port for std_logic_vector field: 'Loopback - detailed' in reg: 'MDIO Extended Control Register'
+ mdio_ectrl_lpbck_vec_o : out std_logic_vector(2 downto 0);
+-- Port for BIT field: 'SFP TX Fault Status' in reg: 'MDIO Extended Control Register'
+ mdio_ectrl_sfp_tx_fault_i : in std_logic;
+-- Port for BIT field: 'SFP LOS' in reg: 'MDIO Extended Control Register'
+ mdio_ectrl_sfp_loss_i : in std_logic;
+-- Port for BIT field: 'SFP TX Disable' in reg: 'MDIO Extended Control Register'
+ mdio_ectrl_sfp_tx_disable_o : out std_logic;
+-- Port for std_logic_vector field: 'tx_prbs_sel' in reg: 'MDIO Extended Control Register'
+ mdio_ectrl_tx_prbs_sel_o : out std_logic_vector(2 downto 0)
+ );
+end ep_pcs_tbi_mdio_wb;
+
+architecture syn of ep_pcs_tbi_mdio_wb is
+
+signal mdio_mcr_uni_en_int : std_logic ;
+signal mdio_mcr_anrestart_dly0 : std_logic ;
+signal mdio_mcr_anrestart_int : std_logic ;
+signal mdio_mcr_pdown_int : std_logic ;
+signal mdio_mcr_anenable_int : std_logic ;
+signal mdio_mcr_loopback_int : std_logic ;
+signal mdio_mcr_reset_dly0 : std_logic ;
+signal mdio_mcr_reset_int : std_logic ;
+signal mdio_advertise_pause_int : std_logic_vector(1 downto 0);
+signal mdio_advertise_rfault_int : std_logic_vector(1 downto 0);
+signal mdio_wr_spec_tx_cal_int : std_logic ;
+signal mdio_wr_spec_tx_cal_sync0 : std_logic ;
+signal mdio_wr_spec_tx_cal_sync1 : std_logic ;
+signal mdio_wr_spec_rx_cal_stat_sync0 : std_logic ;
+signal mdio_wr_spec_rx_cal_stat_sync1 : std_logic ;
+signal mdio_wr_spec_cal_crst_int : std_logic ;
+signal mdio_wr_spec_cal_crst_int_delay : std_logic ;
+signal mdio_wr_spec_cal_crst_sync0 : std_logic ;
+signal mdio_wr_spec_cal_crst_sync1 : std_logic ;
+signal mdio_wr_spec_cal_crst_sync2 : std_logic ;
+signal mdio_wr_spec_bslide_int : std_logic_vector(4 downto 0);
+signal mdio_wr_spec_bslide_lwb : std_logic ;
+signal mdio_wr_spec_bslide_lwb_delay : std_logic ;
+signal mdio_wr_spec_bslide_lwb_in_progress : std_logic ;
+signal mdio_wr_spec_bslide_lwb_s0 : std_logic ;
+signal mdio_wr_spec_bslide_lwb_s1 : std_logic ;
+signal mdio_wr_spec_bslide_lwb_s2 : std_logic ;
+signal mdio_ectrl_lpbck_vec_int : std_logic_vector(2 downto 0);
+signal mdio_ectrl_sfp_tx_disable_int : std_logic ;
+signal mdio_ectrl_tx_prbs_sel_int : std_logic_vector(2 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(4 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ mdio_mcr_uni_en_int <= '0';
+ mdio_mcr_anrestart_int <= '0';
+ mdio_mcr_pdown_int <= '0';
+ mdio_mcr_anenable_int <= '0';
+ mdio_mcr_loopback_int <= '0';
+ mdio_mcr_reset_int <= '0';
+ lstat_read_notify_o <= '0';
+ mdio_advertise_pause_int <= "00";
+ mdio_advertise_rfault_int <= "00";
+ mdio_wr_spec_tx_cal_int <= '0';
+ mdio_wr_spec_cal_crst_int <= '0';
+ mdio_wr_spec_cal_crst_int_delay <= '0';
+ mdio_wr_spec_bslide_lwb <= '0';
+ mdio_wr_spec_bslide_lwb_delay <= '0';
+ mdio_wr_spec_bslide_lwb_in_progress <= '0';
+ mdio_ectrl_lpbck_vec_int <= "000";
+ mdio_ectrl_sfp_tx_disable_int <= '0';
+ mdio_ectrl_tx_prbs_sel_int <= "000";
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ mdio_mcr_anrestart_int <= '0';
+ mdio_mcr_reset_int <= '0';
+ lstat_read_notify_o <= '0';
+ ack_in_progress <= '0';
+ else
+ mdio_wr_spec_cal_crst_int <= mdio_wr_spec_cal_crst_int_delay;
+ mdio_wr_spec_cal_crst_int_delay <= '0';
+ mdio_wr_spec_bslide_lwb <= mdio_wr_spec_bslide_lwb_delay;
+ mdio_wr_spec_bslide_lwb_delay <= '0';
+ if ((ack_sreg(1) = '1') and (mdio_wr_spec_bslide_lwb_in_progress = '1')) then
+ rddata_reg(8 downto 4) <= mdio_wr_spec_bslide_int;
+ mdio_wr_spec_bslide_lwb_in_progress <= '0';
+ end if;
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(4 downto 0) is
+ when "00000" =>
+ if (wb_we_i = '1') then
+ mdio_mcr_uni_en_int <= wrdata_reg(5);
+ mdio_mcr_anrestart_int <= wrdata_reg(9);
+ mdio_mcr_pdown_int <= wrdata_reg(11);
+ mdio_mcr_anenable_int <= wrdata_reg(12);
+ mdio_mcr_loopback_int <= wrdata_reg(14);
+ mdio_mcr_reset_int <= wrdata_reg(15);
+ end if;
+ rddata_reg(4 downto 0) <= "00000";
+ rddata_reg(5) <= mdio_mcr_uni_en_int;
+ rddata_reg(6) <= '1';
+ rddata_reg(7) <= '0';
+ rddata_reg(8) <= '1';
+ rddata_reg(9) <= '0';
+ rddata_reg(10) <= '0';
+ rddata_reg(11) <= mdio_mcr_pdown_int;
+ rddata_reg(12) <= mdio_mcr_anenable_int;
+ rddata_reg(13) <= '0';
+ rddata_reg(14) <= mdio_mcr_loopback_int;
+ rddata_reg(15) <= '0';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "00001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= '0';
+ rddata_reg(2) <= mdio_msr_lstatus_i;
+ lstat_read_notify_o <= '1';
+ rddata_reg(3) <= '1';
+ rddata_reg(4) <= mdio_msr_rfault_i;
+ rddata_reg(5) <= mdio_msr_anegcomplete_i;
+ rddata_reg(6) <= '0';
+ rddata_reg(7) <= '1';
+ rddata_reg(8) <= '1';
+ rddata_reg(9) <= '0';
+ rddata_reg(10) <= '0';
+ rddata_reg(11) <= '0';
+ rddata_reg(12) <= '0';
+ rddata_reg(13) <= '0';
+ rddata_reg(14) <= '0';
+ rddata_reg(15) <= '0';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(15 downto 0) <= "0000000000000000";
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(3 downto 0) <= "0000";
+ rddata_reg(9 downto 4) <= "000000";
+ rddata_reg(15 downto 10) <= "000000";
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00100" =>
+ if (wb_we_i = '1') then
+ mdio_advertise_pause_int <= wrdata_reg(8 downto 7);
+ mdio_advertise_rfault_int <= wrdata_reg(13 downto 12);
+ end if;
+ rddata_reg(4 downto 0) <= "00000";
+ rddata_reg(5) <= '1';
+ rddata_reg(6) <= '0';
+ rddata_reg(8 downto 7) <= mdio_advertise_pause_int;
+ rddata_reg(11 downto 9) <= "000";
+ rddata_reg(13 downto 12) <= mdio_advertise_rfault_int;
+ rddata_reg(14) <= '0';
+ rddata_reg(15) <= '0';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(4 downto 0) <= "00000";
+ rddata_reg(5) <= mdio_lpa_full_i;
+ rddata_reg(6) <= mdio_lpa_half_i;
+ rddata_reg(8 downto 7) <= mdio_lpa_pause_i;
+ rddata_reg(11 downto 9) <= "000";
+ rddata_reg(13 downto 12) <= mdio_lpa_rfault_i;
+ rddata_reg(14) <= mdio_lpa_lpack_i;
+ rddata_reg(15) <= mdio_lpa_npage_i;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= '0';
+ rddata_reg(2) <= '0';
+ rddata_reg(15 downto 3) <= "0000000000000";
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(11 downto 0) <= "000000000000";
+ rddata_reg(12) <= '0';
+ rddata_reg(13) <= '0';
+ rddata_reg(14) <= '0';
+ rddata_reg(15) <= '1';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10000" =>
+ if (wb_we_i = '1') then
+ mdio_wr_spec_tx_cal_int <= wrdata_reg(0);
+ mdio_wr_spec_cal_crst_int <= wrdata_reg(2);
+ mdio_wr_spec_cal_crst_int_delay <= wrdata_reg(2);
+ end if;
+ rddata_reg(0) <= mdio_wr_spec_tx_cal_int;
+ rddata_reg(1) <= mdio_wr_spec_rx_cal_stat_sync1;
+ rddata_reg(2) <= '0';
+ if (wb_we_i = '0') then
+ mdio_wr_spec_bslide_lwb <= '1';
+ mdio_wr_spec_bslide_lwb_delay <= '1';
+ mdio_wr_spec_bslide_lwb_in_progress <= '1';
+ end if;
+ rddata_reg(3) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when "10001" =>
+ if (wb_we_i = '1') then
+ mdio_ectrl_lpbck_vec_int <= wrdata_reg(2 downto 0);
+ mdio_ectrl_sfp_tx_disable_int <= wrdata_reg(5);
+ mdio_ectrl_tx_prbs_sel_int <= wrdata_reg(10 downto 8);
+ end if;
+ rddata_reg(2 downto 0) <= mdio_ectrl_lpbck_vec_int;
+ rddata_reg(3) <= mdio_ectrl_sfp_tx_fault_i;
+ rddata_reg(4) <= mdio_ectrl_sfp_loss_i;
+ rddata_reg(5) <= mdio_ectrl_sfp_tx_disable_int;
+ rddata_reg(10 downto 8) <= mdio_ectrl_tx_prbs_sel_int;
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Unidirectional Enable
+ mdio_mcr_uni_en_o <= mdio_mcr_uni_en_int;
+-- Restart Auto-Negotiation
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_mcr_anrestart_dly0 <= '0';
+ mdio_mcr_anrestart_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ mdio_mcr_anrestart_dly0 <= mdio_mcr_anrestart_int;
+ mdio_mcr_anrestart_o <= mdio_mcr_anrestart_int and (not mdio_mcr_anrestart_dly0);
+ end if;
+ end process;
+
+
+-- Power Down
+ mdio_mcr_pdown_o <= mdio_mcr_pdown_int;
+-- Auto-Negotiation Enable
+ mdio_mcr_anenable_o <= mdio_mcr_anenable_int;
+-- Loopback
+ mdio_mcr_loopback_o <= mdio_mcr_loopback_int;
+-- Reset
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_mcr_reset_dly0 <= '0';
+ mdio_mcr_reset_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ mdio_mcr_reset_dly0 <= mdio_mcr_reset_int;
+ mdio_mcr_reset_o <= mdio_mcr_reset_int and (not mdio_mcr_reset_dly0);
+ end if;
+ end process;
+
+
+-- Link Status
+-- Remote Fault
+-- Auto-Negotiation Complete
+-- Pause
+ mdio_advertise_pause_o <= mdio_advertise_pause_int;
+-- Remote Fault
+ mdio_advertise_rfault_o <= mdio_advertise_rfault_int;
+-- Full Duplex
+-- Half Duplex
+-- Pause
+-- Remote Fault
+-- Acknowledge
+-- Next Page
+-- TX Calibration Pattern
+-- synchronizer chain for field : TX Calibration Pattern (type RW/RO, clk_sys_i <-> tx_clk_i)
+ process (tx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_wr_spec_tx_cal_o <= '0';
+ mdio_wr_spec_tx_cal_sync0 <= '0';
+ mdio_wr_spec_tx_cal_sync1 <= '0';
+ elsif rising_edge(tx_clk_i) then
+ mdio_wr_spec_tx_cal_sync0 <= mdio_wr_spec_tx_cal_int;
+ mdio_wr_spec_tx_cal_sync1 <= mdio_wr_spec_tx_cal_sync0;
+ mdio_wr_spec_tx_cal_o <= mdio_wr_spec_tx_cal_sync1;
+ end if;
+ end process;
+
+
+-- Calibration Pattern RX Status
+-- synchronizer chain for field : Calibration Pattern RX Status (type RO/WO, rx_clk_i -> clk_sys_i)
+ process (rx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_wr_spec_rx_cal_stat_sync0 <= '0';
+ mdio_wr_spec_rx_cal_stat_sync1 <= '0';
+ elsif rising_edge(rx_clk_i) then
+ mdio_wr_spec_rx_cal_stat_sync0 <= mdio_wr_spec_rx_cal_stat_i;
+ mdio_wr_spec_rx_cal_stat_sync1 <= mdio_wr_spec_rx_cal_stat_sync0;
+ end if;
+ end process;
+
+
+-- Reset calibration counter
+ process (rx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_wr_spec_cal_crst_o <= '0';
+ mdio_wr_spec_cal_crst_sync0 <= '0';
+ mdio_wr_spec_cal_crst_sync1 <= '0';
+ mdio_wr_spec_cal_crst_sync2 <= '0';
+ elsif rising_edge(rx_clk_i) then
+ mdio_wr_spec_cal_crst_sync0 <= mdio_wr_spec_cal_crst_int;
+ mdio_wr_spec_cal_crst_sync1 <= mdio_wr_spec_cal_crst_sync0;
+ mdio_wr_spec_cal_crst_sync2 <= mdio_wr_spec_cal_crst_sync1;
+ mdio_wr_spec_cal_crst_o <= mdio_wr_spec_cal_crst_sync2 and (not mdio_wr_spec_cal_crst_sync1);
+ end if;
+ end process;
+
+
+-- GTP RX Bitslide
+-- asynchronous std_logic_vector register : GTP RX Bitslide (type RO/WO, rx_clk_i <-> clk_sys_i)
+ process (rx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ mdio_wr_spec_bslide_lwb_s0 <= '0';
+ mdio_wr_spec_bslide_lwb_s1 <= '0';
+ mdio_wr_spec_bslide_lwb_s2 <= '0';
+ mdio_wr_spec_bslide_int <= "00000";
+ elsif rising_edge(rx_clk_i) then
+ mdio_wr_spec_bslide_lwb_s0 <= mdio_wr_spec_bslide_lwb;
+ mdio_wr_spec_bslide_lwb_s1 <= mdio_wr_spec_bslide_lwb_s0;
+ mdio_wr_spec_bslide_lwb_s2 <= mdio_wr_spec_bslide_lwb_s1;
+ if ((mdio_wr_spec_bslide_lwb_s1 = '1') and (mdio_wr_spec_bslide_lwb_s2 = '0')) then
+ mdio_wr_spec_bslide_int <= mdio_wr_spec_bslide_i;
+ end if;
+ end if;
+ end process;
+
+
+-- Loopback - detailed
+ mdio_ectrl_lpbck_vec_o <= mdio_ectrl_lpbck_vec_int;
+-- SFP TX Fault Status
+-- SFP LOS
+-- SFP TX Disable
+ mdio_ectrl_sfp_tx_disable_o <= mdio_ectrl_sfp_tx_disable_int;
+-- tx_prbs_sel
+ mdio_ectrl_tx_prbs_sel_o <= mdio_ectrl_tx_prbs_sel_int;
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd
new file mode 100644
index 000000000..9f5983d51
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_registers_pkg.vhd
@@ -0,0 +1,261 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR switch endpoint controller
+---------------------------------------------------------------------------------------
+-- File : ep_registers_pkg.vhd
+-- Author : auto-generated by wbgen2 from ep_wishbone_controller.wb
+-- Created : Wed Aug 16 22:43:41 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE ep_wishbone_controller.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package ep_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_ep_in_registers is record
+ ecr_feat_vlan_i : std_logic;
+ ecr_feat_dmtd_i : std_logic;
+ ecr_feat_ptp_i : std_logic;
+ ecr_feat_dpi_i : std_logic;
+ tscr_cs_done_i : std_logic;
+ tscr_rx_cal_result_i : std_logic;
+ tcar_pcp_map_i : std_logic_vector(23 downto 0);
+ mdio_asr_rdata_i : std_logic_vector(15 downto 0);
+ mdio_asr_ready_i : std_logic;
+ dsr_lstatus_i : std_logic;
+ dsr_lact_i : std_logic;
+ dmcr_en_i : std_logic;
+ dmcr_n_avg_i : std_logic_vector(11 downto 0);
+ dmsr_ps_val_i : std_logic_vector(23 downto 0);
+ dmsr_ps_rdy_i : std_logic;
+ inj_ctrl_pic_conf_ifg_i : std_logic_vector(15 downto 0);
+ inj_ctrl_pic_conf_sel_i : std_logic_vector(2 downto 0);
+ inj_ctrl_pic_conf_valid_i : std_logic;
+ inj_ctrl_pic_mode_id_i : std_logic_vector(2 downto 0);
+ inj_ctrl_pic_mode_valid_i : std_logic;
+ inj_ctrl_pic_ena_i : std_logic;
+ end record;
+
+ constant c_ep_in_registers_init_value: t_ep_in_registers := (
+ ecr_feat_vlan_i => '0',
+ ecr_feat_dmtd_i => '0',
+ ecr_feat_ptp_i => '0',
+ ecr_feat_dpi_i => '0',
+ tscr_cs_done_i => '0',
+ tscr_rx_cal_result_i => '0',
+ tcar_pcp_map_i => (others => '0'),
+ mdio_asr_rdata_i => (others => '0'),
+ mdio_asr_ready_i => '0',
+ dsr_lstatus_i => '0',
+ dsr_lact_i => '0',
+ dmcr_en_i => '0',
+ dmcr_n_avg_i => (others => '0'),
+ dmsr_ps_val_i => (others => '0'),
+ dmsr_ps_rdy_i => '0',
+ inj_ctrl_pic_conf_ifg_i => (others => '0'),
+ inj_ctrl_pic_conf_sel_i => (others => '0'),
+ inj_ctrl_pic_conf_valid_i => '0',
+ inj_ctrl_pic_mode_id_i => (others => '0'),
+ inj_ctrl_pic_mode_valid_i => '0',
+ inj_ctrl_pic_ena_i => '0'
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_ep_out_registers is record
+ ecr_portid_o : std_logic_vector(4 downto 0);
+ ecr_rst_cnt_o : std_logic;
+ ecr_tx_en_o : std_logic;
+ ecr_rx_en_o : std_logic;
+ tscr_en_txts_o : std_logic;
+ tscr_en_rxts_o : std_logic;
+ tscr_cs_start_o : std_logic;
+ tscr_rx_cal_start_o : std_logic;
+ rfcr_a_runt_o : std_logic;
+ rfcr_a_giant_o : std_logic;
+ rfcr_a_hp_o : std_logic;
+ rfcr_keep_crc_o : std_logic;
+ rfcr_hpap_o : std_logic_vector(7 downto 0);
+ rfcr_mru_o : std_logic_vector(13 downto 0);
+ vcr0_qmode_o : std_logic_vector(1 downto 0);
+ vcr0_fix_prio_o : std_logic;
+ vcr0_prio_val_o : std_logic_vector(2 downto 0);
+ vcr0_pvid_o : std_logic_vector(11 downto 0);
+ vcr1_offset_o : std_logic_vector(9 downto 0);
+ vcr1_offset_wr_o : std_logic;
+ vcr1_data_o : std_logic_vector(17 downto 0);
+ vcr1_data_wr_o : std_logic;
+ pfcr0_mm_addr_o : std_logic_vector(5 downto 0);
+ pfcr0_mm_addr_wr_o : std_logic;
+ pfcr0_mm_write_o : std_logic;
+ pfcr0_mm_write_wr_o : std_logic;
+ pfcr0_enable_o : std_logic;
+ pfcr0_mm_data_msb_o : std_logic_vector(23 downto 0);
+ pfcr0_mm_data_msb_wr_o : std_logic;
+ pfcr1_mm_data_lsb_o : std_logic_vector(11 downto 0);
+ pfcr1_mm_data_lsb_wr_o : std_logic;
+ tcar_pcp_map_o : std_logic_vector(23 downto 0);
+ tcar_pcp_map_load_o : std_logic;
+ fcr_rxpause_o : std_logic;
+ fcr_txpause_o : std_logic;
+ fcr_rxpause_802_1q_o : std_logic;
+ fcr_txpause_802_1q_o : std_logic;
+ fcr_tx_thr_o : std_logic_vector(7 downto 0);
+ fcr_tx_quanta_o : std_logic_vector(15 downto 0);
+ mach_o : std_logic_vector(15 downto 0);
+ macl_o : std_logic_vector(31 downto 0);
+ mdio_cr_data_o : std_logic_vector(15 downto 0);
+ mdio_cr_data_wr_o : std_logic;
+ mdio_cr_addr_o : std_logic_vector(7 downto 0);
+ mdio_cr_rw_o : std_logic;
+ mdio_asr_phyad_o : std_logic_vector(7 downto 0);
+ dsr_lact_o : std_logic;
+ dsr_lact_load_o : std_logic;
+ dmcr_en_o : std_logic;
+ dmcr_en_load_o : std_logic;
+ dmcr_n_avg_o : std_logic_vector(11 downto 0);
+ dmcr_n_avg_load_o : std_logic;
+ dmsr_ps_rdy_o : std_logic;
+ dmsr_ps_rdy_load_o : std_logic;
+ inj_ctrl_pic_conf_ifg_o : std_logic_vector(15 downto 0);
+ inj_ctrl_pic_conf_ifg_load_o : std_logic;
+ inj_ctrl_pic_conf_sel_o : std_logic_vector(2 downto 0);
+ inj_ctrl_pic_conf_sel_load_o : std_logic;
+ inj_ctrl_pic_conf_valid_o : std_logic;
+ inj_ctrl_pic_conf_valid_load_o : std_logic;
+ inj_ctrl_pic_mode_id_o : std_logic_vector(2 downto 0);
+ inj_ctrl_pic_mode_id_load_o : std_logic;
+ inj_ctrl_pic_mode_valid_o : std_logic;
+ inj_ctrl_pic_mode_valid_load_o : std_logic;
+ inj_ctrl_pic_ena_o : std_logic;
+ inj_ctrl_pic_ena_load_o : std_logic;
+ end record;
+
+ constant c_ep_out_registers_init_value: t_ep_out_registers := (
+ ecr_portid_o => (others => '0'),
+ ecr_rst_cnt_o => '0',
+ ecr_tx_en_o => '0',
+ ecr_rx_en_o => '0',
+ tscr_en_txts_o => '0',
+ tscr_en_rxts_o => '0',
+ tscr_cs_start_o => '0',
+ tscr_rx_cal_start_o => '0',
+ rfcr_a_runt_o => '0',
+ rfcr_a_giant_o => '0',
+ rfcr_a_hp_o => '0',
+ rfcr_keep_crc_o => '0',
+ rfcr_hpap_o => (others => '0'),
+ rfcr_mru_o => (others => '0'),
+ vcr0_qmode_o => (others => '0'),
+ vcr0_fix_prio_o => '0',
+ vcr0_prio_val_o => (others => '0'),
+ vcr0_pvid_o => (others => '0'),
+ vcr1_offset_o => (others => '0'),
+ vcr1_offset_wr_o => '0',
+ vcr1_data_o => (others => '0'),
+ vcr1_data_wr_o => '0',
+ pfcr0_mm_addr_o => (others => '0'),
+ pfcr0_mm_addr_wr_o => '0',
+ pfcr0_mm_write_o => '0',
+ pfcr0_mm_write_wr_o => '0',
+ pfcr0_enable_o => '0',
+ pfcr0_mm_data_msb_o => (others => '0'),
+ pfcr0_mm_data_msb_wr_o => '0',
+ pfcr1_mm_data_lsb_o => (others => '0'),
+ pfcr1_mm_data_lsb_wr_o => '0',
+ tcar_pcp_map_o => (others => '0'),
+ tcar_pcp_map_load_o => '0',
+ fcr_rxpause_o => '0',
+ fcr_txpause_o => '0',
+ fcr_rxpause_802_1q_o => '0',
+ fcr_txpause_802_1q_o => '0',
+ fcr_tx_thr_o => (others => '0'),
+ fcr_tx_quanta_o => (others => '0'),
+ mach_o => (others => '0'),
+ macl_o => (others => '0'),
+ mdio_cr_data_o => (others => '0'),
+ mdio_cr_data_wr_o => '0',
+ mdio_cr_addr_o => (others => '0'),
+ mdio_cr_rw_o => '0',
+ mdio_asr_phyad_o => (others => '0'),
+ dsr_lact_o => '0',
+ dsr_lact_load_o => '0',
+ dmcr_en_o => '0',
+ dmcr_en_load_o => '0',
+ dmcr_n_avg_o => (others => '0'),
+ dmcr_n_avg_load_o => '0',
+ dmsr_ps_rdy_o => '0',
+ dmsr_ps_rdy_load_o => '0',
+ inj_ctrl_pic_conf_ifg_o => (others => '0'),
+ inj_ctrl_pic_conf_ifg_load_o => '0',
+ inj_ctrl_pic_conf_sel_o => (others => '0'),
+ inj_ctrl_pic_conf_sel_load_o => '0',
+ inj_ctrl_pic_conf_valid_o => '0',
+ inj_ctrl_pic_conf_valid_load_o => '0',
+ inj_ctrl_pic_mode_id_o => (others => '0'),
+ inj_ctrl_pic_mode_id_load_o => '0',
+ inj_ctrl_pic_mode_valid_o => '0',
+ inj_ctrl_pic_mode_valid_load_o => '0',
+ inj_ctrl_pic_ena_o => '0',
+ inj_ctrl_pic_ena_load_o => '0'
+ );
+ function "or" (left, right: t_ep_in_registers) return t_ep_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body ep_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_ep_in_registers) return t_ep_in_registers is
+variable tmp: t_ep_in_registers;
+begin
+tmp.ecr_feat_vlan_i := f_x_to_zero(left.ecr_feat_vlan_i) or f_x_to_zero(right.ecr_feat_vlan_i);
+tmp.ecr_feat_dmtd_i := f_x_to_zero(left.ecr_feat_dmtd_i) or f_x_to_zero(right.ecr_feat_dmtd_i);
+tmp.ecr_feat_ptp_i := f_x_to_zero(left.ecr_feat_ptp_i) or f_x_to_zero(right.ecr_feat_ptp_i);
+tmp.ecr_feat_dpi_i := f_x_to_zero(left.ecr_feat_dpi_i) or f_x_to_zero(right.ecr_feat_dpi_i);
+tmp.tscr_cs_done_i := f_x_to_zero(left.tscr_cs_done_i) or f_x_to_zero(right.tscr_cs_done_i);
+tmp.tscr_rx_cal_result_i := f_x_to_zero(left.tscr_rx_cal_result_i) or f_x_to_zero(right.tscr_rx_cal_result_i);
+tmp.tcar_pcp_map_i := f_x_to_zero(left.tcar_pcp_map_i) or f_x_to_zero(right.tcar_pcp_map_i);
+tmp.mdio_asr_rdata_i := f_x_to_zero(left.mdio_asr_rdata_i) or f_x_to_zero(right.mdio_asr_rdata_i);
+tmp.mdio_asr_ready_i := f_x_to_zero(left.mdio_asr_ready_i) or f_x_to_zero(right.mdio_asr_ready_i);
+tmp.dsr_lstatus_i := f_x_to_zero(left.dsr_lstatus_i) or f_x_to_zero(right.dsr_lstatus_i);
+tmp.dsr_lact_i := f_x_to_zero(left.dsr_lact_i) or f_x_to_zero(right.dsr_lact_i);
+tmp.dmcr_en_i := f_x_to_zero(left.dmcr_en_i) or f_x_to_zero(right.dmcr_en_i);
+tmp.dmcr_n_avg_i := f_x_to_zero(left.dmcr_n_avg_i) or f_x_to_zero(right.dmcr_n_avg_i);
+tmp.dmsr_ps_val_i := f_x_to_zero(left.dmsr_ps_val_i) or f_x_to_zero(right.dmsr_ps_val_i);
+tmp.dmsr_ps_rdy_i := f_x_to_zero(left.dmsr_ps_rdy_i) or f_x_to_zero(right.dmsr_ps_rdy_i);
+tmp.inj_ctrl_pic_conf_ifg_i := f_x_to_zero(left.inj_ctrl_pic_conf_ifg_i) or f_x_to_zero(right.inj_ctrl_pic_conf_ifg_i);
+tmp.inj_ctrl_pic_conf_sel_i := f_x_to_zero(left.inj_ctrl_pic_conf_sel_i) or f_x_to_zero(right.inj_ctrl_pic_conf_sel_i);
+tmp.inj_ctrl_pic_conf_valid_i := f_x_to_zero(left.inj_ctrl_pic_conf_valid_i) or f_x_to_zero(right.inj_ctrl_pic_conf_valid_i);
+tmp.inj_ctrl_pic_mode_id_i := f_x_to_zero(left.inj_ctrl_pic_mode_id_i) or f_x_to_zero(right.inj_ctrl_pic_mode_id_i);
+tmp.inj_ctrl_pic_mode_valid_i := f_x_to_zero(left.inj_ctrl_pic_mode_valid_i) or f_x_to_zero(right.inj_ctrl_pic_mode_valid_i);
+tmp.inj_ctrl_pic_ena_i := f_x_to_zero(left.inj_ctrl_pic_ena_i) or f_x_to_zero(right.inj_ctrl_pic_ena_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd
new file mode 100644
index 000000000..a071bdd3a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rtu_header_extract.vhd
@@ -0,0 +1,205 @@
+-------------------------------------------------------------------------------
+-- Title : RTU header extract
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rtu_header_extract.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+
+entity ep_rtu_header_extract is
+ generic(
+ g_with_rtu : boolean);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ mbuf_is_pause_i : in std_logic;
+
+ vlan_class_i : in std_logic_vector(2 downto 0);
+ vlan_vid_i : in std_logic_vector(11 downto 0);
+ vlan_tag_done_i : in std_logic;
+ vlan_is_tagged_i: in std_logic;
+
+ rmon_drp_at_rtu_full_o: out std_logic;
+
+ rtu_rq_o : out t_ep_internal_rtu_request;
+ rtu_full_i : in std_logic;
+ rtu_rq_abort_o : out std_logic;
+ rtu_rq_valid_o : out std_logic;
+ rxbuf_full_i : in std_logic
+ );
+
+end ep_rtu_header_extract;
+
+architecture rtl of ep_rtu_header_extract is
+
+ signal hdr_offset : std_logic_vector(11 downto 0);
+ signal in_packet : std_logic;
+ signal in_header : std_logic;
+ signal rtu_rq_valid_basic : std_logic;
+ signal rtu_rq_valid_tagged : std_logic;
+ signal rtu_rq_valid_out : std_logic;
+ signal rtu_rq_abort : std_logic;
+
+
+ procedure f_extract_rtu(signal q : out std_logic_vector;
+ signal fab : t_ep_internal_fabric;
+ signal at_offset : std_logic) is
+ begin
+ if(at_offset = '1' and fab.dvalid = '1') then
+ q <= fab.data;
+ end if;
+ end f_extract_rtu;
+
+begin -- rtl
+
+ gen_with_rtu : if(g_with_rtu) generate
+
+ p_hdr_offset_sreg : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0' or snk_fab_i.sof = '1') then
+ hdr_offset(hdr_offset'left downto 1) <= (others => '0');
+ hdr_offset(0) <= '1';
+ elsif(snk_fab_i.dvalid = '1') then
+ hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0';
+ end if;
+ end if;
+ end process;
+
+ p_gen_rtu_request : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ rtu_rq_o.smac <= (others => '0');
+ rtu_rq_o.dmac <= (others => '0');
+ in_packet <= '0';
+ rtu_rq_valid_basic<= '0';
+ rmon_drp_at_rtu_full_o <='0';
+ rtu_rq_abort <= '0';
+ in_header <= '0';
+ else
+ rmon_drp_at_rtu_full_o <='0';
+
+ if(snk_fab_i.sof = '1' and rtu_full_i = '0' and rxbuf_full_i = '0') then
+ in_packet <= '1';
+ in_header <= '1';
+ elsif(snk_fab_i.sof = '1' and rtu_full_i = '1') then
+ rmon_drp_at_rtu_full_o <='1';
+ end if;
+
+ if((snk_fab_i.eof = '1' and snk_fab_i.sof = '0') or -- in case both (sof & eof) are HIGH
+ snk_fab_i.error = '1') then
+ in_packet <= '0';
+ end if;
+
+ if(snk_fab_i.error = '1' or rtu_rq_valid_out = '1') then
+ in_header <= '0';
+ end if;
+
+
+ f_extract_rtu(rtu_rq_o.dmac(47 downto 32), snk_fab_i, hdr_offset(0));
+ f_extract_rtu(rtu_rq_o.dmac(31 downto 16), snk_fab_i, hdr_offset(1));
+ f_extract_rtu(rtu_rq_o.dmac(15 downto 0), snk_fab_i, hdr_offset(2));
+ f_extract_rtu(rtu_rq_o.smac(47 downto 32), snk_fab_i, hdr_offset(3));
+ f_extract_rtu(rtu_rq_o.smac(31 downto 16), snk_fab_i, hdr_offset(4));
+ f_extract_rtu(rtu_rq_o.smac(15 downto 0), snk_fab_i, hdr_offset(5));
+
+ if(snk_fab_i.dvalid = '1' and hdr_offset(6) = '1' and in_packet = '1') then
+ rtu_rq_valid_basic <='1';
+ elsif(rtu_rq_valid_out = '1' or -- reset after making request or
+ snk_fab_i.error = '1') then -- when there is error in the header, so we don't
+ -- make request for invalid frame which will be dumped
+ -- in the SWcore (which reads error status).
+ -- the special case when error occurs when the request
+ -- is made, we do end with the output of error (below, end of file)
+ rtu_rq_valid_basic <= '0';
+ end if;
+
+ if(in_packet = '1' and in_header = '0' and -- if we have packet and the header is already processed
+ snk_fab_i.error = '1' and rtu_rq_abort = '0') then
+ rtu_rq_abort <= '1';
+ else
+ rtu_rq_abort <= '0';
+ end if;
+
+ end if;
+ end if;
+ end process;
+
+ rtu_rq_abort_o <= rtu_rq_abort;
+ src_fab_o.sof <= snk_fab_i.sof and not rtu_full_i; -- null dev
+
+ rtu_rq_valid_tagged <= rtu_rq_valid_basic and vlan_tag_done_i;
+
+ -- the request is not done for PAUSE frames as they never go outside of Endpoint
+ -- (they are dropped inside Endpoint)
+ rtu_rq_valid_out <= (rtu_rq_valid_tagged and (not mbuf_is_pause_i))when (vlan_is_tagged_i = '1') else
+ (rtu_rq_valid_basic and (not mbuf_is_pause_i));
+
+
+ end generate gen_with_rtu;
+
+ gen_without_rtu : if (not g_with_rtu) generate
+ src_fab_o.sof <= snk_fab_i.sof;
+ rtu_rq_valid_out <= '0';
+ rtu_rq_o.smac <= (others => '0');
+ rtu_rq_o.dmac <= (others => '0');
+ rtu_rq_abort_o <= '0';
+ rmon_drp_at_rtu_full_o <= '0';
+ end generate gen_without_rtu;
+
+ snk_dreq_o <= src_dreq_i;
+
+ src_fab_o.eof <= snk_fab_i.eof;
+ src_fab_o.dvalid <= snk_fab_i.dvalid;
+ src_fab_o.error <= snk_fab_i.error;
+ src_fab_o.bytesel <= snk_fab_i.bytesel;
+ src_fab_o.data <= snk_fab_i.data;
+ src_fab_o.addr <= snk_fab_i.addr;
+ src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp;
+ src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid;
+
+ rtu_rq_o.vid <= vlan_vid_i;
+ rtu_rq_o.has_vid <= vlan_is_tagged_i;
+ rtu_rq_o.prio <= vlan_class_i;
+ rtu_rq_o.has_prio <= vlan_is_tagged_i;
+ rtu_rq_valid_o <= rtu_rq_valid_out and not snk_fab_i.ERROR;
+ rtu_rq_o.hash <= (others => '0');
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd
new file mode 100644
index 000000000..8295fac4b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_buffer.vhd
@@ -0,0 +1,321 @@
+-------------------------------------------------------------------------------
+-- Title : RX Packet Buffer
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_rx_buffer.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: A simple RX packet buffer, optimized for 18-bit Block RAM-based
+-- FIFOs.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1l.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_rx_buffer is
+ generic (
+ g_size : integer := 1024;
+ g_with_fc : boolean := false
+ );
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ level_o : out std_logic_vector(7 downto 0);
+ full_o : out std_logic;
+ drop_req_i : in std_logic;
+ dropped_o : out std_logic;
+ regs_i : in t_ep_out_registers
+ );
+
+end ep_rx_buffer;
+
+architecture behavioral of ep_rx_buffer is
+
+ constant c_drop_threshold : integer := g_size - 3;
+ constant c_release_threshold : integer := g_size * 7 / 8;
+
+ type t_write_state is(WAIT_FRAME, DATA);
+
+ procedure f_pack_rbuf_contents
+ (
+ signal st : in t_write_state;
+ signal fab : in t_ep_internal_fabric;
+ signal prev_addr : in std_logic_vector;
+ signal dout : out std_logic_vector;
+ signal dout_valid : out std_logic) is
+ variable valid_tmp : std_logic;
+ begin
+ if(fab.sof = '1' or fab.error = '1' or fab.eof = '1') then
+ -- tag = 11
+ dout(17) <= '1';
+ dout(16) <= '1';
+ dout(15) <= fab.sof;
+ dout(14) <= fab.eof;
+ dout(13) <= fab.error;
+ dout(12 downto 0) <= (others => '0');
+ valid_tmp := '1';
+-- dout_valid <= '1';
+ elsif(fab.dvalid = '1') then
+
+ if(prev_addr /= fab.addr) then
+ dout(17 downto 16) <= "10"; -- reg-change
+ else
+ dout(17 downto 16) <= '0' & fab.bytesel;
+ end if;
+
+ dout(15 downto 0) <= fab.data;
+ valid_tmp := '1';
+ else
+ dout(17 downto 0) <= (others => '0');
+ valid_tmp := '0';
+ end if;
+
+ if(fab.sof = '1') then
+ dout_valid <= valid_tmp;
+ elsif(st = DATA) then
+ dout_valid <= valid_tmp;
+ else
+ dout_valid <= '0';
+ end if;
+ end f_pack_rbuf_contents;
+
+ procedure f_unpack_rbuf_contents
+ (
+ signal din : in std_logic_vector;
+ signal cur_addr : in std_logic_vector;
+ signal din_valid : in std_logic;
+ signal fab : out t_ep_internal_fabric;
+ early_eof : boolean := false) is
+ begin
+
+ fab.data <= din(15 downto 0);
+ if(din_valid = '1') then
+
+ if(din(17 downto 16) = "10") then -- some fancy encoding is necessary here
+ case cur_addr(1 downto 0) is
+ when c_WRF_DATA =>
+ fab.addr <= c_WRF_OOB after 1 ns;
+ when c_WRF_STATUS =>
+ fab.addr <= c_WRF_DATA after 1 ns;
+ when others => fab.addr <= c_WRF_DATA after 1 ns;
+ end case;
+
+ else
+ fab.addr <= cur_addr after 1 ns;
+ end if;
+
+ fab.dvalid <= not din(17) or (din(17) and not din(16));
+ fab.sof <= din(15) and din(17) and din(16);
+ fab.eof <= din(14) and din(17) and din(16);
+ fab.error <= din(13) and din(17) and din(16);
+ fab.bytesel <= not din(17) and din(16);
+
+ else
+ fab.bytesel <= '0';
+ fab.addr <= cur_addr after 1 ns;
+ fab.dvalid <= '0';
+ fab.sof <= '0';
+ fab.eof <= '0';
+ fab.error <= '0';
+ fab.data <= (others => '0');
+ end if;
+ fab.has_rx_timestamp <= '0';
+ fab.rx_timestamp_valid <= '0';
+ end f_unpack_rbuf_contents;
+
+
+ signal q_in, q_out : std_logic_vector(17 downto 0);
+ signal q_usedw : std_logic_vector(f_log2_size(g_size)-1 downto 0);
+ signal q_empty : std_logic;
+ signal q_reset : std_logic;
+ signal q_rd : std_logic;
+ signal q_drop : std_logic;
+ signal q_in_valid, q_out_valid : std_logic;
+ signal q_aempty, q_afull : std_logic;
+
+
+ signal state : t_write_state;
+ signal fab_to_encode : t_ep_internal_fabric;
+ signal src_fab_int : t_ep_internal_fabric;
+
+ signal in_prev_addr : std_logic_vector(1 downto 0);
+ signal out_cur_addr : std_logic_vector(1 downto 0);
+
+begin
+
+ full_o <= q_drop;
+
+ p_fifo_write : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ q_drop <= '0';
+ state <= WAIT_FRAME;
+ in_prev_addr <= (others => '0');
+ dropped_o <= '0';
+ else
+
+ if(snk_fab_i.dvalid = '1') then
+ in_prev_addr <= snk_fab_i.addr;
+ end if;
+
+ if(q_afull = '1') then
+ q_drop <= '1';
+ elsif(q_aempty = '1') then
+ q_drop <= '0';
+ end if;
+
+ case state is
+ when WAIT_FRAME =>
+ in_prev_addr <= c_WRF_STATUS;
+
+ if(snk_fab_i.sof = '1' and q_drop = '0' and drop_req_i = '0') then
+ state <= DATA;
+ dropped_o <= '0';
+ elsif(snk_fab_i.sof = '1' and (q_drop = '1' or drop_req_i = '1')) then
+ dropped_o <= '1';
+ end if;
+
+ when DATA =>
+ if(q_drop = '1' or snk_fab_i.eof = '1' or snk_fab_i.error = '1') then
+ state <= WAIT_FRAME;
+ end if;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ p_pack_rbuf : process(state, fab_to_encode, in_prev_addr, q_in, q_in_valid)
+ begin
+ f_pack_rbuf_contents(state, fab_to_encode, in_prev_addr, q_in, q_in_valid);
+ end process;
+
+
+ p_encode_fifo_in : process(drop_req_i, q_drop, snk_fab_i, state)
+ variable fab_pre_encode : t_ep_internal_fabric;
+
+ begin
+ fab_pre_encode := snk_fab_i;
+
+ if(fab_pre_encode.sof = '1' and (q_drop = '1' or drop_req_i = '1')) then
+ fab_pre_encode.sof := '0';
+ end if;
+
+ if(state = DATA and q_drop = '1') then
+ fab_pre_encode.dvalid := '0';
+ fab_pre_encode.error := '1';
+ end if;
+
+ fab_to_encode <= fab_pre_encode;
+ end process;
+
+ q_reset <= rst_n_i and regs_i.ecr_rx_en_o;
+
+ BUF_FIFO : generic_sync_fifo
+ generic map (
+ g_data_width => 18,
+ g_size => g_size,
+ g_with_almost_empty => true,
+ g_with_almost_full => true,
+ g_almost_empty_threshold => c_release_threshold,
+ g_almost_full_threshold => c_drop_threshold,
+ g_with_count => g_with_fc)
+ port map (
+ rst_n_i => q_reset,
+ clk_i => clk_sys_i,
+ d_i => q_in,
+ we_i => q_in_valid,
+ q_o => q_out,
+ rd_i => q_rd,
+ empty_o => q_empty,
+ full_o => open,
+ almost_empty_o => q_aempty,
+ almost_full_o => q_afull,
+ count_o => q_usedw);
+
+
+
+ q_rd <= (not q_empty) and src_dreq_i;
+
+ rd_valid_gen : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ q_out_valid <= '0';
+ out_cur_addr <= c_WRF_STATUS;
+ else
+ q_out_valid <= q_rd;
+
+ if(src_fab_int.sof = '1' or src_fab_int.eof = '1' or src_fab_int.error = '1')then
+ out_cur_addr <= c_WRF_STATUS;
+ else
+ out_cur_addr <= src_fab_int.addr;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_unpack : process(q_out, out_cur_addr, q_out_valid,src_fab_int)
+ begin
+ f_unpack_rbuf_contents(q_out, out_cur_addr, q_out_valid, src_fab_int);
+ end process;
+
+ src_fab_o <= src_fab_int;
+ snk_dreq_o <= '1';
+
+ GEN_FC: if g_with_fc = true generate
+ GEN_LEV_BIG : if f_log2_size(g_size)-1 > level_o'left generate
+ level_o <= q_usedw(q_usedw'left downto q_usedw'left - 7);
+ end generate;
+ GEN_LEV_SML : if f_log2_size(g_size)-1 < level_o'left+1 generate
+ level_o(q_usedw'left downto 0) <= q_usedw;
+ end generate;
+ end generate;
+
+ GEN_NOFC: if g_with_fc = false generate
+ level_o <= (others=>'X');
+ end generate;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd
new file mode 100644
index 000000000..23230b849
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_crc_size_check.vhd
@@ -0,0 +1,404 @@
+-------------------------------------------------------------------------------
+-- Title : Rx CRC checker
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rx_crc_size_check.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all; -- for gc_crc_gen
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.ep_crc32_pkg.all;
+
+-- 1st deframing pipeline stage - CRC/PCS error/Size checker
+
+entity ep_rx_crc_size_check is
+ generic
+ (
+ g_use_new_crc : boolean := false);
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ regs_i : in t_ep_out_registers;
+ rmon_pcs_err_o : out std_logic;
+ rmon_giant_o : out std_logic;
+ rmon_runt_o : out std_logic;
+ rmon_crc_err_o : out std_logic
+ );
+
+end ep_rx_crc_size_check;
+
+architecture behavioral of ep_rx_crc_size_check is
+
+ constant c_MIN_FRAME_SIZE : integer := 64;
+
+ component ep_rx_bypass_queue
+ generic (
+ g_size : integer;
+ g_width : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_i : in std_logic;
+ d_i : in std_logic_vector(g_width-1 downto 0);
+ valid_i : in std_logic;
+ dreq_o : out std_logic;
+ q_o : out std_logic_vector(g_width-1 downto 0);
+ valid_o : out std_logic;
+ dreq_i : in std_logic;
+ flush_i : in std_logic;
+ purge_i : in std_logic;
+ empty_o : out std_logic);
+ end component;
+
+
+ type t_state is (ST_WAIT_FRAME, ST_DATA, ST_OOB);
+
+ signal crc_gen_enable : std_logic;
+ signal crc_gen_reset : std_logic;
+ signal crc_match, crc_match2 : std_logic;
+
+ signal crc_cur : std_logic_vector(31 downto 0);
+ signal crc_in_data : std_logic_vector(15 downto 0);
+ signal crc_last_is_odd : std_logic;
+
+ signal byte_cntr : unsigned(13 downto 0);
+ signal is_runt : std_logic;
+ signal is_giant : std_logic;
+ signal size_check_ok : std_logic;
+
+ signal state : t_state;
+
+ signal q_flush, q_empty : std_logic;
+ signal q_purge : std_logic;
+ signal q_in, q_out : std_logic_vector(17 downto 0);
+ signal q_bytesel : std_logic;
+ signal q_dvalid_in : std_logic;
+ signal q_dvalid_out : std_logic;
+ signal q_dreq_out : std_logic;
+
+ -- bypass_queue stuff comes here
+ constant c_crc_size : integer := 2;
+ constant c_dat_width : integer := 18;
+
+ type t_queue_array is array(0 to c_crc_size-1) of std_logic_vector(c_dat_width-1 downto 0);
+
+ signal q_data : t_queue_array;
+ signal q_valid : std_logic_vector(c_crc_size-1 downto 0);
+
+ signal qempty, qfull : std_logic;
+ signal sreg_enable : std_logic;
+ signal oob_in : std_logic;
+ signal dat_in : std_logic;
+ signal valid_mask : std_logic;
+ signal err_on_giant : std_logic;
+
+ function f_queue_occupation(q : std_logic_vector; check_empty : std_logic) return std_logic is
+ variable i : integer;
+ begin
+ for i in 0 to q'length-1 loop
+ if(q(i) = check_empty) then
+ return '0';
+ end if;
+ end loop; -- i
+ return '1';
+ end function;
+
+begin -- behavioral
+
+ crc_gen_reset <= snk_fab_i.sof or (not rst_n_i);
+ crc_gen_enable <= '1' when (snk_fab_i.addr = c_WRF_DATA and snk_fab_i.dvalid = '1') else '0';
+
+ gen_old_crc : if(g_use_new_crc = false) generate
+ U_rx_crc_generator : gc_crc_gen
+ generic map (
+ g_polynomial => x"04C11DB7",
+ g_init_value => x"ffffffff",
+ g_residue => x"1cdf4421",
+ g_data_width => 16,
+ g_half_width => 8,
+ g_sync_reset => 1,
+ g_dual_width => 1,
+ g_registered_match_output => false)
+ port map (
+ clk_i => clk_sys_i,
+ rst_i => crc_gen_reset,
+ en_i => crc_gen_enable,
+ half_i => snk_fab_i.bytesel,
+ data_i => snk_fab_i.data(15 downto 0),
+ match_o => crc_match,
+ crc_o => open);
+ end generate gen_old_crc;
+
+ gen_new_crc : if(g_use_new_crc = true) generate
+
+ crc_in_data(15 downto 8) <= snk_fab_i.data(15 downto 8);
+ crc_in_data(7 downto 0) <= x"00" when snk_fab_i.bytesel = '1' else snk_fab_i.data(7 downto 0);
+
+ p_check_crc : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if crc_gen_reset = '1' then
+ crc_cur <= c_CRC32_INIT_VALUE;
+ elsif(crc_gen_enable = '1') then
+ crc_cur <= f_update_crc32_d16(crc_cur, crc_in_data);
+ crc_last_is_odd <= snk_fab_i.bytesel;
+ end if;
+ end if;
+ end process;
+
+ crc_match <= '1' when (crc_last_is_odd = '0' and crc_cur = c_CRC32_RESIDUE_FULL)
+ or (crc_last_is_odd = '1' and crc_cur = c_CRC32_RESIDUE_HALF) else '0';
+
+ end generate gen_new_crc;
+
+-- U_bypass_queue : ep_rx_bypass_queue
+-- generic map (
+-- g_size => 3,
+-- g_width => 18)
+-- port map (
+-- rst_n_i => rst_n_i,
+-- clk_i => clk_sys_i,
+-- d_i => q_in,
+-- valid_i => q_dvalid_in,
+-- dreq_o => q_dreq_out,
+-- q_o => q_out,
+-- valid_o => q_dvalid_out,
+-- dreq_i => src_dreq_i,
+-- flush_i => '0',
+-- purge_i => q_purge,
+-- empty_o => q_empty);
+
+ snk_dreq_o <= q_dreq_out and not (snk_fab_i.eof or snk_fab_i.error);
+
+
+ p_count_bytes : process (clk_sys_i, rst_n_i)
+ begin -- process
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0' or regs_i.ecr_rx_en_o = '0') then
+ byte_cntr <= (others => '0');
+ is_runt <= '0';
+ is_giant <= '0';
+ else
+ if(snk_fab_i.sof = '1') then
+ byte_cntr <= (others => '0');
+ is_runt <= '1';
+ end if;
+
+ if(snk_fab_i.dvalid = '1') then
+ if(snk_fab_i.bytesel = '1') then
+ byte_cntr <= byte_cntr + 1;
+ else
+ byte_cntr <= byte_cntr + 2;
+ end if;
+ end if;
+
+ if(byte_cntr = to_unsigned(c_MIN_FRAME_SIZE - 2, byte_cntr'length) and snk_fab_i.dvalid = '1' and snk_fab_i.bytesel = '0') then
+ is_runt <= '0';
+ end if;
+
+ if(byte_cntr > unsigned(regs_i.rfcr_mru_o) and snk_fab_i.sof = '0') then
+ is_giant <= '1';
+ else
+ is_giant <= '0';
+ end if;
+
+ end if;
+ end if;
+ end process;
+
+ size_check_ok <= '0' when (is_runt = '1' and regs_i.rfcr_a_runt_o = '0') or
+ (is_giant = '1' and regs_i.rfcr_a_giant_o = '0') else '1';
+ err_on_giant <= '1' when (is_giant = '1' and regs_i.rfcr_a_giant_o = '0') else '0';
+
+ p_gen_output : process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+
+ if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then
+
+ q_purge <= '0';
+ q_bytesel <= '0';
+
+ state <= ST_WAIT_FRAME;
+
+ rmon_pcs_err_o <= '0';
+ rmon_giant_o <= '0';
+ rmon_runt_o <= '0';
+ rmon_crc_err_o <= '0';
+
+ src_fab_o.sof <= '0';
+
+ else
+ case state is
+ when ST_WAIT_FRAME =>
+ q_purge <= '0';
+ rmon_pcs_err_o <= '0';
+ rmon_giant_o <= '0';
+ rmon_runt_o <= '0';
+ rmon_crc_err_o <= '0';
+ q_bytesel <= '0';
+ src_fab_o.error <= '0';
+ src_fab_o.sof <= '0';
+
+ if(snk_fab_i.sof = '1') then
+ state <= ST_DATA;
+ src_fab_o.sof <= '1';
+ end if;
+
+ when ST_DATA =>
+
+ src_fab_o.sof <= '0';
+
+ if(snk_fab_i.dvalid = '1' and snk_fab_i.addr = c_WRF_DATA) then
+ q_bytesel <= snk_fab_i.bytesel;
+ end if;
+
+ if(snk_fab_i.error = '1' or -- an error from the source?
+ (q_bytesel = '1' and oob_in = '0' and snk_fab_i.dvalid = '1')) then -- we expect bytesel at the last byte of data
+
+ src_fab_o.error <= '1';
+ rmon_pcs_err_o <= '1';
+ state <= ST_WAIT_FRAME;
+ q_purge <= '1';
+
+-- elsif(snk_fab_i.eof = '1' or oob_in = '1') then
+ elsif(snk_fab_i.eof = '1' or oob_in = '1' or err_on_giant = '1') then
+ if(size_check_ok = '0' or crc_match = '0') then -- bad frame?
+ state <= ST_WAIT_FRAME;
+ src_fab_o.error <= '1';
+ q_purge <= '1';
+ elsif(snk_fab_i.eof = '1') then
+ state <= ST_WAIT_FRAME;
+ else
+ state <= ST_OOB;
+ end if;
+
+ rmon_runt_o <= is_runt and (not regs_i.rfcr_a_runt_o);
+ rmon_giant_o <= is_giant and (not regs_i.rfcr_a_giant_o);
+ rmon_crc_err_o <= not crc_match;
+ end if;
+
+
+ when ST_OOB =>
+ rmon_runt_o <= '0';
+ rmon_giant_o <= '0';
+ rmon_crc_err_o <= '0';
+
+ if(src_dreq_i = '1' and snk_fab_i.eof='1') then
+ state <= ST_WAIT_FRAME;
+ end if;
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+ --
+ q_in(15 downto 0) <= snk_fab_i.data;
+ q_in(17 downto 16) <= snk_fab_i.addr;
+ q_dvalid_in <= '1' when snk_fab_i.dvalid = '1' and (state = ST_DATA or state = ST_OOB) else '0';
+
+ --ML optimized queue_bypass so can remove masks tuff
+ src_fab_o.dvalid <= q_dvalid_out;
+ src_fab_o.data <= q_in(15 downto 0) when (oob_in = '1') else q_out(15 downto 0);
+ src_fab_o.addr <= q_in(17 downto 16) when (oob_in = '1') else q_out(17 downto 16) ;
+ src_fab_o.bytesel <= snk_fab_i.bytesel when (dat_in = '1') else '0';
+ src_fab_o.eof <= snk_fab_i.eof;
+
+ src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp;
+ src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid;
+
+ --------------------- the whole of bypass_queue is here ------------------------------------
+ -- it was put inside as the optimization made it far from "universal" and apparently this
+ -- was the cause of doing the bypass_queue a separate module
+ --------------------------------------------------------------------------------------------
+ qempty <= f_queue_occupation(q_valid, '1') ;
+ qfull <= f_queue_occupation(q_valid, '0');
+
+ q_dvalid_out <= (qfull and q_dvalid_in) or (oob_in and valid_mask);
+ q_dreq_out <= (src_dreq_i or not qfull);
+ oob_in <= '1' when (snk_fab_i.addr = c_WRF_OOB and q_dvalid_in = '1') else '0';
+ dat_in <= '1' when (snk_fab_i.addr = c_WRF_DATA and q_dvalid_in = '1') else '0';
+
+
+ sreg_enable <= '1' when ((q_dvalid_in = '1') or (qempty = '0' and q_dvalid_out = '1')) else '0';
+
+ q_out <= q_data(0);
+
+ p_fifo: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(sreg_enable = '1') then
+ q_data(c_crc_size-1) <= q_in;
+ L0: for i in 0 to c_crc_size-2 loop
+ q_data(i) <= q_data(i+1);
+ end loop L0;
+ end if;
+ end if;
+ end process;
+
+ p_queue : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or q_purge = '1' then
+ valid_mask <= '0';
+ q_valid <= (others => '0');
+ else
+
+ valid_mask <= src_dreq_i;
+
+ if sreg_enable = '1' then
+ q_valid(0) <= q_dvalid_in;
+ if(oob_in = '1' ) then -- flashing CRC
+ q_valid <=(others => '0');
+ else
+ q_valid(q_valid'length-1 downto 1) <= q_valid(q_valid'length-2 downto 0);
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+end behavioral;
+
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd
new file mode 100644
index 000000000..427b5d322
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_early_address_match.vhd
@@ -0,0 +1,271 @@
+-------------------------------------------------------------------------------
+-- Title : Rx Early Address Match
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rx_early_address_match.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2015 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all; -- for gc_crc_gen
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+-- 1st stage in the RX pipeline: early address matching/header parsing
+-- to filter out pause and HP frames in advance.
+
+entity ep_rx_early_address_match is
+ generic
+ (
+ g_early_hp_detection : boolean := false);
+ port(
+ clk_sys_i : in std_logic;
+ clk_rx_i : in std_logic;
+
+ rst_n_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ src_fab_o : out t_ep_internal_fabric;
+
+ match_done_o : out std_logic;
+ match_is_hp_o : out std_logic;
+
+ -- indicate that pause was detected
+ match_is_pause_o : out std_logic;
+
+ -- tell quanta (for prio-based pause it is the greatest of all prios)
+ match_pause_quanta_o : out std_logic_vector(15 downto 0);
+
+ -- mask with priorities which shall be PAUSEd
+ match_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+
+ -- once the PAUSE frame is decoded, it requests pausing from SWcore
+ match_pause_p_o : out std_logic;
+
+ regs_i : in t_ep_out_registers
+ );
+
+end ep_rx_early_address_match;
+
+architecture behavioral of ep_rx_early_address_match is
+
+ signal hdr_offset : std_logic_vector(16 downto 0);
+
+ signal at_ethertype : std_logic;
+ signal at_vid : std_logic;
+ signal is_tagged : std_logic;
+ signal pause_match_int : std_logic_vector(7 downto 0);
+
+ signal comb_pcp_matches_hp : std_logic;
+ signal done_int : std_logic;
+
+ signal pause_prio_mask : std_logic_vector(7 downto 0);
+ signal match_pause_req : std_logic;
+ signal match_is_pause : std_logic;
+ signal is_perprio_pause : std_logic;
+ signal match_pause_quanta : std_logic_vector(15 downto 0);
+
+ function f_compare_slv (a : std_logic_vector; b : std_logic_vector) return std_logic is
+ begin
+ if(a = b) then
+ return '1';
+ else
+ return '0';
+ end if;
+ end f_compare_slv;
+
+
+
+begin -- behavioral
+
+ at_ethertype <= hdr_offset(5) and snk_fab_i.dvalid;
+ at_vid <= hdr_offset(7) and snk_fab_i.dvalid and is_tagged;
+
+ src_fab_o <= snk_fab_i;
+
+ p_hdr_offset_sreg : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if (rst_n_rx_i = '0' or snk_fab_i.sof = '1') then
+ hdr_offset(hdr_offset'left downto 1) <= (others => '0');
+ hdr_offset(0) <= '1';
+ elsif(snk_fab_i.dvalid = '1') then
+ hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0';
+ end if;
+ end if;
+ end process;
+
+ p_match_pause : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then
+ pause_match_int <= (others => '0');
+ match_pause_quanta <= (others => '0');
+ match_is_pause <= '0';
+ pause_prio_mask <= (others => '0');
+ match_pause_req <= '0';
+ is_perprio_pause <= '0';
+ else
+ if(snk_fab_i.dvalid = '1') then
+ if(hdr_offset(0) = '1') then
+ pause_match_int (0) <= f_compare_slv(snk_fab_i.data, x"0180");
+ end if;
+ if(hdr_offset(1) = '1') then
+ pause_match_int (1) <= f_compare_slv(snk_fab_i.data, x"c200");
+ end if;
+ if(hdr_offset(2) = '1') then
+ pause_match_int (2) <= f_compare_slv(snk_fab_i.data, x"0001");
+ end if;
+-- if(hdr_offset(3) = '1') then
+-- pause_match_int (3) <= f_compare_slv(snk_fab_i.data, regs_i.mach_o);
+-- end if;
+-- if(hdr_offset(4) = '1') then
+-- pause_match_int (4) <= f_compare_slv(snk_fab_i.data, regs_i.macl_o(31 downto 16));
+-- end if;
+-- if(hdr_offset(5) = '1') then
+-- pause_match_int (5) <= f_compare_slv(snk_fab_i.data, regs_i.macl_o(15 downto 0));
+-- end if;
+ if(hdr_offset(6) = '1') then
+ pause_match_int (3) <= f_compare_slv(snk_fab_i.data, x"8808");
+ end if;
+ if(hdr_offset(7) = '1') then
+ pause_match_int (4) <= f_compare_slv(snk_fab_i.data, x"0001"); -- 802.3 PAUSE
+ pause_match_int (5) <= f_compare_slv(snk_fab_i.data, x"0101"); -- 802.1Q PAUSE (per-prio)
+ end if;
+ if(hdr_offset(8) = '1') then
+ if(f_compare_slv(pause_match_int, b"0001_1111") = '1') then -- 802.3 PAUSE
+
+ match_is_pause <= '1'; -- to indicate that frame shall be dropped
+
+ if(regs_i.fcr_rxpause_o = '1') then
+ match_pause_req <= '1';
+ match_pause_quanta <= snk_fab_i.data;
+ pause_prio_mask <= (others => '1');
+ end if;
+
+ elsif(f_compare_slv(pause_match_int, b"0010_1111") = '1') then -- 802.1Q PAUSE (per-prio)
+
+ match_is_pause <= '1'; -- to indicate that frame shall be dropped
+
+ if(regs_i.fcr_rxpause_802_1q_o = '1') then
+ pause_prio_mask <= snk_fab_i.data(7 downto 0);
+ is_perprio_pause <= '1';
+ end if;
+
+ end if;
+ end if;
+ if (is_perprio_pause ='1' and ((hdr_offset(16 downto 9) and pause_prio_mask) /= b"0000_0000")) then
+ if(snk_fab_i.data > match_pause_quanta) then
+ match_pause_quanta <= snk_fab_i.data;
+ end if;
+ end if;
+ if(hdr_offset(16) = '1' and is_perprio_pause = '1') then
+ match_pause_req <= '1';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ match_is_pause_o <= match_is_pause;
+ match_pause_prio_mask_o <= pause_prio_mask;
+ match_pause_quanta_o <= match_pause_quanta;
+
+ gen_with_early_hp_det: if(g_early_hp_detection) generate
+ -- ML: the p_match_hp is not used, instead identification of HP is done in RTU
+ p_match_hp : process(clk_rx_i)
+ variable index : integer;
+ begin
+
+ if rising_edge(clk_rx_i) then
+ index := to_integer(unsigned(snk_fab_i.data(15 downto 13)));
+
+ if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then
+ is_tagged <= '0';
+ match_is_hp_o <= '0';
+ else
+ if(at_ethertype = '1') then
+ is_tagged <= f_compare_slv(snk_fab_i.data, x"8100");
+ end if;
+
+ if (at_vid = '1') then
+ if(regs_i.rfcr_a_hp_o = '1' and regs_i.rfcr_hpap_o(index) = '1' and is_tagged = '1') then
+ match_is_hp_o <= '1';
+ else
+ match_is_hp_o <= '0';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+ end generate gen_with_early_hp_det;
+
+ gen_without_early_hp_det: if(not g_early_hp_detection) generate
+ match_is_hp_o <='0';
+ end generate gen_without_early_hp_det;
+
+ p_gen_done : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' or snk_fab_i.sof = '1' then
+ done_int <= '0';
+ else
+ if hdr_offset(8) = '1' or snk_fab_i.error = '1' then
+ done_int <= '1';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ U_sync_done : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ data_i => done_int,
+ ppulse_o => match_done_o);
+
+ U_sync_pause : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ data_i => match_pause_req,
+ ppulse_o => match_pause_p_o);
+
+end behavioral;
+
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd
new file mode 100644
index 000000000..4fbaf7596
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_oob_insert.vhd
@@ -0,0 +1,171 @@
+-------------------------------------------------------------------------------
+-- Title : RX OOB inserter
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rx_oob_insert.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all; -- for gc_crc_gen
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+
+
+entity ep_rx_oob_insert is
+ port(clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ regs_i : in t_ep_out_registers
+ );
+
+end ep_rx_oob_insert;
+
+architecture behavioral of ep_rx_oob_insert is
+
+ type t_state is (WAIT_OOB, OOB);
+ signal state : t_state;
+
+ signal src_dreq_d0 : std_logic;
+
+ --component chipscope_ila
+ -- port (
+ -- CONTROL : inout std_logic_vector(35 downto 0);
+ -- CLK : in std_logic;
+ -- TRIG0 : in std_logic_vector(31 downto 0);
+ -- TRIG1 : in std_logic_vector(31 downto 0);
+ -- TRIG2 : in std_logic_vector(31 downto 0);
+ -- TRIG3 : in std_logic_vector(31 downto 0));
+ --end component;
+
+ --component chipscope_icon
+ -- port (
+ -- CONTROL0 : inout std_logic_vector (35 downto 0));
+ --end component;
+
+ --signal CONTROL : std_logic_vector(35 downto 0);
+ --signal CLK : std_logic;
+ --signal TRIG0 : std_logic_vector(31 downto 0);
+ --signal TRIG1 : std_logic_vector(31 downto 0);
+ --signal TRIG2 : std_logic_vector(31 downto 0);
+ --signal TRIG3 : std_logic_vector(31 downto 0);
+
+begin
+ --chipscope_ila_1 : chipscope_ila
+ -- port map (
+ -- CONTROL => CONTROL,
+ -- CLK => clk_sys_i,
+ -- TRIG0 => TRIG0,
+ -- TRIG1 => TRIG1,
+ -- TRIG2 => TRIG2,
+ -- TRIG3 => TRIG3);
+
+ --chipscope_icon_1 : chipscope_icon
+ -- port map (
+ -- CONTROL0 => CONTROL);
+
+ --TRIG0(15 downto 0) <= snk_fab_i.data;
+ --trig0(16) <= snk_fab_i.sof;
+ --trig0(17) <= snk_fab_i.eof;
+ --trig0(18) <= snk_fab_i.error;
+ --trig0(19) <= snk_fab_i.bytesel;
+ --trig0(20) <= snk_fab_i.has_rx_timestamp;
+ --trig0(21) <= snk_fab_i.dvalid;
+ --trig0(22) <= '1' when state = WAIT_OOB else '0';
+ --trig0(24 downto 23) <= snk_fab_i.addr;
+
+ snk_dreq_o <= src_dreq_i;
+ src_fab_o.sof <= snk_fab_i.sof;
+ src_fab_o.eof <= snk_fab_i.eof;
+ src_fab_o.ERROR <= snk_fab_i.ERROR;
+ src_fab_o.bytesel <= snk_fab_i.bytesel;
+ src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp;
+ src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid;
+
+ p_comb_src : process (state, snk_fab_i, src_dreq_i, regs_i)
+ begin
+
+ if(snk_fab_i.has_rx_timestamp = '1')then
+ src_fab_o.data <= c_WRF_OOB_TYPE_RX & (not snk_fab_i.rx_timestamp_valid) & "000000" & regs_i.ecr_portid_o;
+ src_fab_o.dvalid <= '1';
+ src_fab_o.addr <= c_WRF_OOB;
+ else
+ if(state = WAIT_OOB) then
+ src_fab_o.addr <= c_WRF_DATA;
+ else
+ src_fab_o.addr <= c_WRF_OOB;
+ end if;
+ src_fab_o.data <= snk_fab_i.data;
+ src_fab_o.dvalid <= snk_fab_i.dvalid;
+ end if;
+ end process;
+
+ p_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then
+ state <= WAIT_OOB;
+ else
+
+ if(snk_fab_i.error = '1' or snk_fab_i.sof = '1') then
+ state <= WAIT_OOB;
+ else
+
+ case state is
+ when WAIT_OOB =>
+ if(snk_fab_i.has_rx_timestamp = '1') then
+ state <= OOB;
+ end if;
+
+ when OOB =>
+ if(snk_fab_i.eof = '1') then
+ state <= WAIT_OOB;
+ end if;
+
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+end behavioral;
+
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd
new file mode 100644
index 000000000..7398828f2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_path.vhd
@@ -0,0 +1,515 @@
+-------------------------------------------------------------------------------
+-- Title : Gigabit Ethernet reception pipeline
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_rx_path.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: RX path unit:
+-- - provides elastic buffering between RX and system clock
+-- - checks frame CRC and size
+-- - inserts/removes 802.1q headers when necessary
+-- - parses packet headers and generates RTU requests
+-- - performs programmable packet inspection and classifying
+-- - distinguishes between HP and non-HP frames
+-- - issues RTU requests
+-- - embeds RX OOB block with timestamp information
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2011 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-06-22 0.1 twlostow Created
+-- 2011-10-18 0.5 twlostow WB rev B4 - compatible data path
+------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+
+entity ep_rx_path is
+ generic (
+ g_with_vlans : boolean := true;
+ g_with_dpi_classifier : boolean := true;
+ g_with_rtu : boolean := true;
+ g_with_rx_buffer : boolean := true;
+ g_with_early_match : boolean := false;
+ g_rx_buffer_size : integer := 1024;
+ g_use_new_crc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ clk_rx_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ rst_n_rx_i : in std_logic;
+
+-- physical coding sublayer (PCS) interface
+ pcs_fab_i : in t_ep_internal_fabric;
+ pcs_fifo_almostfull_o : out std_logic;
+ pcs_busy_i : in std_logic;
+
+-- Wishbone I/O
+ src_wb_o : out t_wrf_source_out;
+ src_wb_i : in t_wrf_source_in;
+
+-- flow control signals
+ fc_pause_p_o : out std_logic;
+ fc_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_buffer_occupation_o : out std_logic_vector(7 downto 0);
+
+-- RMON/statistic counters signals
+ rmon_o : out t_rmon_triggers;
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers;
+
+-- info for TRU module
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- RTU interface
+-------------------------------------------------------------------------------
+
+ rtu_rq_o : out t_ep_internal_rtu_request;
+ rtu_full_i : in std_logic;
+ rtu_rq_valid_o : out std_logic;
+ rtu_rq_abort_o : out std_logic;
+
+ nice_dbg_o : out t_dbg_ep_rxpath
+ );
+end ep_rx_path;
+
+architecture behavioral of ep_rx_path is
+
+ type t_rx_deframer_state is (RXF_IDLE, RXF_DATA, RXF_FLUSH_STALL, RXF_FINISH_CYCLE, RXF_THROW_ERROR);
+
+ signal state : t_rx_deframer_state;
+
+ signal gap_cntr : unsigned(3 downto 0);
+
+ -- new sigs
+ signal counter : unsigned(7 downto 0);
+
+ signal rxdata_saved : std_logic_vector(15 downto 0);
+ signal next_hdr : std_logic;
+ signal is_pause : std_logic;
+
+ signal data_firstword : std_logic;
+
+
+ signal flush_stall : std_logic;
+ signal stb_int : std_logic;
+
+ signal fab_int : t_ep_internal_fabric;
+ signal dreq_int : std_logic;
+
+ signal ack_count : unsigned(7 downto 0);
+ signal src_out_int : t_wrf_source_out;
+
+ signal tmp_sel : std_logic;
+ signal tmp_dat : std_logic_vector(15 downto 0);
+
+
+ signal fab_pipe : t_fab_pipe(0 to 9);
+ signal dreq_pipe : std_logic_vector(9 downto 0);
+
+ signal ematch_done : std_logic;
+ signal ematch_is_hp : std_logic;
+ signal ematch_is_pause : std_logic;
+ signal fc_pause_p : std_logic;
+
+ signal pfilter_pclass : std_logic_vector(7 downto 0);
+ signal pfilter_drop : std_logic;
+ signal pfilter_done : std_logic;
+
+ signal vlan_tclass : std_logic_vector(2 downto 0);
+ signal vlan_vid : std_logic_vector(11 downto 0);
+ signal vlan_tag_done : std_logic;
+ signal vlan_is_tagged : std_logic;
+
+ signal pcs_fifo_almostfull : std_logic;
+ signal mbuf_rd, mbuf_valid, mbuf_we, mbuf_pf_drop, mbuf_is_hp : std_logic;
+ signal mbuf_is_pause, mbuf_full : std_logic;
+ signal mbuf_pf_class : std_logic_vector(7 downto 0);
+ signal rtu_rq_valid : std_logic;
+ signal stat_reg_mbuf_valid : std_logic;
+
+ signal rxbuf_full : std_logic;
+ signal rxbuf_dropped : std_logic;
+
+ signal src_wb_out : t_wrf_source_out;
+ signal src_wb_cyc_d0 : std_logic;
+
+ signal rst_n_rx_match_buff : std_logic;
+
+begin -- behavioral
+
+ fab_pipe(0) <= pcs_fab_i;
+
+ fc_pause_p_o <= fc_pause_p;
+ gen_with_early_match : if(g_with_early_match) generate
+ U_early_addr_match : ep_rx_early_address_match
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_rx_i => clk_rx_i,
+ rst_n_sys_i => rst_n_sys_i,
+ rst_n_rx_i => rst_n_rx_i,
+ snk_fab_i => fab_pipe(0),
+ src_fab_o => fab_pipe(1),
+ match_done_o => ematch_done,
+ match_is_hp_o => ematch_is_hp,
+ match_is_pause_o => ematch_is_pause,
+ match_pause_quanta_o => fc_pause_quanta_o,
+ match_pause_prio_mask_o => fc_pause_prio_mask_o,
+ match_pause_p_o => fc_pause_p,
+ regs_i => regs_i);
+ end generate gen_with_early_match;
+
+ gen_without_early_match : if(not g_with_early_match) generate
+ fab_pipe(1) <= fab_pipe(0);
+ ematch_done <= '0';
+ ematch_is_hp <= '0';
+ ematch_is_pause <= '0';
+ fc_pause_quanta_o <= (others =>'0');
+ fc_pause_prio_mask_o <= (others =>'0');
+ fc_pause_p <= '0';
+ end generate gen_without_early_match;
+
+ gen_with_packet_filter : if(g_with_dpi_classifier) generate
+ U_packet_filter : ep_packet_filter
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_rx_i => clk_rx_i,
+ rst_n_sys_i => rst_n_sys_i,
+ rst_n_rx_i => rst_n_rx_i,
+
+ snk_fab_i => fab_pipe(1),
+ src_fab_o => fab_pipe(2),
+ done_o => pfilter_done,
+ pclass_o => pfilter_pclass,
+ drop_o => pfilter_drop,
+ regs_i => regs_i);
+ end generate gen_with_packet_filter;
+
+ gen_without_packet_filter : if(not g_with_dpi_classifier) generate
+ fab_pipe(2) <= fab_pipe(1);
+ pfilter_drop <= '0';
+ pfilter_done <= '1';
+ pfilter_pclass <= (others => '0');
+ end generate gen_without_packet_filter;
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_sys_i = '0') then
+ mbuf_we <= '0';
+ -- if rx_buffer has dropped a frame (e.g. because it was full) we
+ -- shouldn't store pfilter decision in the mbuf as well
+ elsif( ((ematch_done='1' and g_with_early_match) or
+ (pfilter_done='1' and g_with_dpi_classifier)) and
+ rxbuf_dropped='0') then
+ mbuf_we <= '1';
+ elsif(mbuf_rd = '1' or mbuf_full = '0') then
+ mbuf_we <= '0';
+ end if;
+ end if;
+ end process;
+
+ gen_with_match_buff: if( g_with_early_match or g_with_dpi_classifier) generate
+ U_Sync_Rst_match_buff : gc_sync_ffs
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => '1',
+ data_i => rst_n_rx_i,
+ synced_o => rst_n_rx_match_buff);
+
+ U_match_buffer : generic_shiftreg_fifo
+ generic map (
+ g_data_width => 8 + 1 + 1 + 1,
+ g_size => 16)
+ port map (
+ rst_n_i => rst_n_rx_match_buff,
+ clk_i => clk_sys_i,
+ d_i (0) => ematch_is_hp,
+ d_i (1) => ematch_is_pause,
+ d_i (2) => pfilter_drop,
+ d_i (10 downto 3) => pfilter_pclass,
+
+ we_i => mbuf_we,
+ q_o (0) => mbuf_is_hp,
+ q_o (1) => mbuf_is_pause,
+ q_o (2) => mbuf_pf_drop,
+ q_o (10 downto 3) => mbuf_pf_class,
+
+ rd_i => mbuf_rd,
+ full_o => mbuf_full,
+ q_valid_o => mbuf_valid);
+ end generate;
+
+ gen_without_match_buf: if(not (g_with_early_match or g_with_dpi_classifier)) generate
+ mbuf_is_hp <= '0';
+ mbuf_is_pause <= '0';
+ mbuf_pf_drop <= '0';
+ mbuf_pf_class <= (others=>'0');
+ mbuf_full <= '0';
+ mbuf_valid <= '1';
+ end generate;
+
+ -- don't block ep_rx_status_reg_insert when pfilter is disabled and early
+ -- match is not used
+ stat_reg_mbuf_valid <= '1' when (not g_with_early_match and g_with_dpi_classifier
+ and regs_i.pfcr0_enable_o='0') else
+ mbuf_valid;
+
+ U_Rx_Clock_Align_FIFO : ep_clock_alignment_fifo
+ generic map (
+ g_size => 128,
+ g_almostfull_threshold => 112)
+ port map (
+ rst_n_rd_i => rst_n_sys_i,
+ rst_n_wr_i => rst_n_rx_i,
+ clk_wr_i => clk_rx_i,
+ clk_rd_i => clk_sys_i,
+ dreq_i => dreq_pipe(3),
+ fab_i => fab_pipe(2),
+ fab_o => fab_pipe(3),
+ full_o => nice_dbg_o.pcs_fifo_full,
+ empty_o => nice_dbg_o.pcs_fifo_empty,
+ almostfull_o => pcs_fifo_almostfull,
+ pass_threshold_i => std_logic_vector(to_unsigned(32, 7))); -- fixme: add
+ -- register
+ pcs_fifo_almostfull_o <= pcs_fifo_almostfull;
+
+ U_Insert_OOB : ep_rx_oob_insert
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(3),
+ snk_dreq_o => dreq_pipe(3),
+ src_dreq_i => dreq_pipe(4),
+ src_fab_o => fab_pipe(4),
+ regs_i => regs_i);
+
+ U_crc_size_checker : ep_rx_crc_size_check
+ generic map (
+ g_use_new_crc => g_use_new_crc)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(4),
+ snk_dreq_o => dreq_pipe(4),
+ src_dreq_i => dreq_pipe(5),
+ src_fab_o => fab_pipe(5),
+ regs_i => regs_i,
+ rmon_pcs_err_o => rmon_o.rx_pcs_err,
+ rmon_giant_o => rmon_o.rx_giant,
+ rmon_runt_o => rmon_o.rx_runt,
+ rmon_crc_err_o => rmon_o.rx_crc_err);
+
+ gen_with_vlan_unit : if(g_with_vlans) generate
+ U_vlan_unit : ep_rx_vlan_unit
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(5),
+ snk_dreq_o => dreq_pipe(5),
+ src_fab_o => fab_pipe(6),
+ src_dreq_i => dreq_pipe(6),
+ tclass_o => vlan_tclass,
+ vid_o => vlan_vid,
+ tag_done_o => vlan_tag_done,
+ is_tagged_o => vlan_is_tagged,
+ regs_i => regs_i,
+ regs_o => regs_o);
+ end generate gen_with_vlan_unit;
+
+
+ gen_without_vlan_unit : if(not g_with_vlans) generate
+ fab_pipe(6) <= fab_pipe(5);
+ dreq_pipe(5) <= dreq_pipe(6);
+ vlan_tclass <= (others => '0');
+ vlan_vid <= (others => '0');
+ vlan_tag_done <= '0';
+ vlan_is_tagged <= '0';
+ regs_o <= c_ep_in_registers_init_value;
+ end generate gen_without_vlan_unit;
+
+ U_RTU_Header_Extract : ep_rtu_header_extract
+ generic map (
+ g_with_rtu => g_with_rtu)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(6),
+ snk_dreq_o => dreq_pipe(6),
+ src_fab_o => fab_pipe(7),
+ src_dreq_i => dreq_pipe(7),
+ mbuf_is_pause_i => mbuf_is_pause, -- this module is in the pipe before ep_rx_status_reg_insert,
+ -- however, we know that mbuf_is_pause is valid when it
+ -- is used by this module -- this is because blocks the pipe
+ -- untill mbuf_valid is HIGH, and rtu_rq_valid_o is inserted HIGH
+ -- at the end of the header... (clear ??:)
+ vlan_class_i => vlan_tclass,
+ vlan_vid_i => vlan_vid,
+ vlan_tag_done_i => vlan_tag_done,
+ vlan_is_tagged_i => vlan_is_tagged,
+
+ rmon_drp_at_rtu_full_o => rmon_o.rx_drop_at_rtu_full,
+
+ rtu_rq_o => rtu_rq_o,
+ rtu_full_i => rtu_full_i,
+ rtu_rq_abort_o => rtu_rq_abort_o,
+ rtu_rq_valid_o => rtu_rq_valid,
+ rxbuf_full_i => rxbuf_full);
+
+ gen_with_rx_buffer : if g_with_rx_buffer generate
+ U_Rx_Buffer : ep_rx_buffer
+ generic map (
+ g_size => g_rx_buffer_size,
+ g_with_fc => false)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(7),
+ snk_dreq_o => dreq_pipe(7),
+ src_fab_o => fab_pipe(8),
+ src_dreq_i => dreq_pipe(8),
+ level_o => fc_buffer_occupation_o,
+ full_o => rxbuf_full,
+ drop_req_i => mbuf_we, -- if mbuf_we is high that means it waits to be
+ -- stored in mbuf => mbuf is probably full so we
+ -- should drop this frame
+ dropped_o => rxbuf_dropped,
+ regs_i => regs_i);
+ end generate gen_with_rx_buffer;
+
+ gen_without_rx_buffer : if (not g_with_rx_buffer) generate
+ fab_pipe(8) <= fab_pipe(7);
+ dreq_pipe(7) <= dreq_pipe(8);
+ rxbuf_full <= '0';
+ end generate gen_without_rx_buffer;
+
+ U_Gen_Status : ep_rx_status_reg_insert
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(8),
+ snk_dreq_o => dreq_pipe(8),
+ src_fab_o => fab_pipe(9),
+ src_dreq_i => dreq_pipe(9),
+ mbuf_valid_i => stat_reg_mbuf_valid,
+ mbuf_ack_o => mbuf_rd,
+ mbuf_drop_i => mbuf_pf_drop,
+ mbuf_pclass_i => mbuf_pf_class,
+ mbuf_is_hp_i => mbuf_is_hp,
+ mbuf_is_pause_i => mbuf_is_pause,
+ rmon_pfilter_drop_o => rmon_o.rx_pfilter_drop);
+
+ U_RX_Wishbone_Master : ep_rx_wb_master
+ generic map (
+ g_ignore_ack => true)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ snk_fab_i => fab_pipe(9),
+ snk_dreq_o => dreq_pipe(9),
+ src_wb_i => src_wb_i,
+ src_wb_o => src_wb_out
+ );
+
+ src_wb_o <= src_wb_out;
+
+ -- direct output of packet filter data (for TRU)
+ pfilter_pclass_o <= pfilter_pclass;
+ pfilter_drop_o <= pfilter_drop;
+ pfilter_done_o <= pfilter_done;
+
+ rtu_rq_valid_o <= rtu_rq_valid;
+ -----------------------------------------
+ -- RMON events
+ -----------------------------------------
+ rmon_o.rx_pause <= fc_pause_p;
+ GEN_PCLASS_EVT: for i in 0 to 7 generate
+ rmon_o.rx_pclass(i) <= pfilter_pclass(i) and pfilter_done;
+ end generate;
+
+ rmon_o.rx_tclass(0) <= rtu_rq_valid when (vlan_tclass = "000" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(1) <= rtu_rq_valid when (vlan_tclass = "001" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(2) <= rtu_rq_valid when (vlan_tclass = "010" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(3) <= rtu_rq_valid when (vlan_tclass = "011" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(4) <= rtu_rq_valid when (vlan_tclass = "100" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(5) <= rtu_rq_valid when (vlan_tclass = "101" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(6) <= rtu_rq_valid when (vlan_tclass = "110" and vlan_is_tagged = '1') else '0';
+ rmon_o.rx_tclass(7) <= rtu_rq_valid when (vlan_tclass = "111" and vlan_is_tagged = '1') else '0';
+
+ GEN_DBG: for i in 0 to 9 generate
+ nice_dbg_o.fab_pipe(i) <= fab_pipe(i);
+ nice_dbg_o.dreq_pipe(i)<= dreq_pipe(i);
+ end generate GEN_DBG;
+
+ nice_dbg_o.pcs_fifo_afull <= pcs_fifo_almostfull;
+ nice_dbg_o.rxbuf_full <= rxbuf_full;
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_sys_i = '0') then
+ src_wb_cyc_d0 <= '0';
+ else
+ src_wb_cyc_d0 <= src_wb_out.cyc;
+ end if;
+ end if;
+ end process;
+
+ rmon_o.rx_frame <= '1' when (src_wb_out.cyc = '1' and src_wb_cyc_d0 = '0') else
+ '0';
+
+ -- drive unused signals and outputs
+ dreq_pipe(2 downto 0) <= (others => '0');
+ rmon_o.rx_sync_lost <= '0';
+ rmon_o.rx_invalid_code <= '0';
+ rmon_o.rx_overrun <= '0';
+ rmon_o.rx_ok <= '0';
+ rmon_o.rx_buffer_overrun <= '0';
+ rmon_o.rx_rtu_overrun <= '0';
+ rmon_o.rx_path_timing_failure <= '0';
+ rmon_o.tx_pause <= '0';
+ rmon_o.tx_underrun <= '0';
+ rmon_o.tx_frame <= '0';
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd
new file mode 100644
index 000000000..ea0fd8818
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_16bit.vhd
@@ -0,0 +1,765 @@
+-------------------------------------------------------------------------------
+-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_rx_pcs_16bit.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-16
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements the reception path for 1000BaseX PCS
+-- (Physical Coding Sublayer) with native 16-bit datapath.
+-- It provides synchronization between the PHY RX clock and system reference clock,
+-- elastic buffering, preamble, SFD and other 8b10b patterns recognition.
+-- It also generates deterministic timestamping pulses for RXed packets.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-10-17 0.2 twlostow Virtex6 port
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+entity ep_rx_pcs_16bit is
+ generic (
+ g_simulation : boolean);
+ port (
+-- 62.5 MHz refclk divided by 2
+ clk_sys_i : in std_logic;
+
+-- reset (refclk2-synchronous)
+ rst_n_i : in std_logic;
+
+-- reset (phy_rx_clk_i sync)
+ rst_rxclk_n_i : in std_logic;
+
+ pcs_fifo_almostfull_i : in std_logic;
+-- RX path busy indicator (active HI).
+-- When asserted, the receiver is in the middle of reception of a frame
+ pcs_busy_o : out std_logic;
+-- data FIFO output
+ pcs_fab_o : out t_ep_internal_fabric;
+
+
+ timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping
+ timestamp_i : in std_logic_vector(31 downto 0);
+ timestamp_stb_i: in std_logic;
+ timestamp_valid_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- PHY interface
+-------------------------------------------------------------------------------
+
+ phy_rdy_i : in std_logic;
+ phy_rx_clk_i : in std_logic;
+ phy_rx_data_i : in std_logic_vector(15 downto 0);
+ phy_rx_k_i : in std_logic_vector(1 downto 0);
+ phy_rx_enc_err_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone registers
+-------------------------------------------------------------------------------
+
+ -- Receive control regsiter
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_cal_crst_i : in std_logic;
+ mdio_wr_spec_rx_cal_stat_o : out std_logic;
+
+ synced_o : out std_logic;
+ sync_lost_o : out std_logic;
+
+ -- autonegotiation signals
+ an_rx_en_i : in std_logic;
+ an_rx_val_o : out std_logic_vector(15 downto 0);
+ an_rx_valid_o : out std_logic;
+ an_idle_match_o : out std_logic;
+
+ -- RMON events
+ rmon_rx_overrun : out std_logic;
+ rmon_rx_inv_code : out std_logic;
+ rmon_rx_sync_lost : out std_logic;
+
+ nice_dbg_o : out t_dbg_ep_rxpcs
+ );
+
+end ep_rx_pcs_16bit;
+
+architecture behavioral of ep_rx_pcs_16bit is
+
+-- RX state machine definitions
+ type t_tbif_rx_state is (RX_NOFRAME, RX_CR, RX_SPD_PREAMBLE, RX_PAYLOAD, RX_EXTEND);
+
+-- size of the calibrration pattern detection counter. It counts up every time
+-- a valid calibration pattern character is received and resets upon detecion
+-- of non-calibration character. The pattern is validated when the counter
+-- overflows (after 2**c_cal_pattern_counter_bits counts)
+
+ function f_calc_pattern_counter_bits
+ return integer is
+ begin -- f_calc_pattern_counter_bits
+ if(g_simulation) then
+ return 8; -- use smaller calibration counter to
+ -- speed up the simulation
+ else
+ return 17;
+ end if;
+ end f_calc_pattern_counter_bits;
+
+ function f_to_sl(x : boolean) return std_logic is
+ begin
+ if(x) then
+ return '1';
+ else
+ return '0';
+ end if;
+ end f_to_sl;
+
+
+ constant c_cal_pattern_counter_bits : integer := f_calc_pattern_counter_bits;
+
+ component ep_sync_detect_16bit
+ port (
+ rst_n_i : in std_logic;
+ rbclk_i : in std_logic;
+ en_i : in std_logic;
+ data_i : in std_logic_vector(15 downto 0);
+ k_i : in std_logic_vector(1 downto 0);
+ err_i : in std_logic;
+ synced_o : out std_logic;
+ cal_i : in std_logic);
+ end component;
+
+ signal rst_n_rx : std_logic;
+
+ signal rx_state : t_tbif_rx_state;
+ signal preamble_cntr : unsigned(2 downto 0);
+ signal rx_busy : std_logic;
+ signal rx_enable_synced : std_logic;
+ signal rx_rdreq : std_logic;
+
+ -- 8b10b decoding and postprocessing signals
+ signal d_data : std_logic_vector(15 downto 0);
+ signal d_err, d_is_idle, d_is_spd_preamble : std_logic;
+ signal d_is_eof_extend, d_is_eof, d_is_extend : std_logic;
+ signal d_is_preamble, d_is_preamble_sfd : std_logic;
+ signal d_is_k : std_logic_vector(1 downto 0);
+ signal d_is_lcr : std_logic;
+ signal d_is_cal : std_logic;
+
+-- Synchronization detection FSM signals
+ signal rx_synced : std_logic;
+ signal rx_sync_lost_p : std_logic;
+ signal rx_sync_status : std_logic;
+ signal rx_sync_enable : std_logic;
+
+-- Autonegotiation control signals
+ signal an_rx_en_synced : std_logic;
+
+ signal lcr_ready : std_logic;
+ signal lcr_prev_val : std_logic_vector(15 downto 0);
+ signal lcr_cur_val : std_logic_vector(15 downto 0);
+ signal lcr_final_val : std_logic_vector(15 downto 0);
+ signal lcr_validity_cntr : unsigned(1 downto 0);
+
+ signal an_idle_cntr : unsigned(1 downto 0);
+ signal an_idle_match_int : std_logic;
+
+-- RMON counter pulses
+ signal rmon_rx_overrun_p_int : std_logic;
+ signal rmon_syncloss_p_int : std_logic;
+ signal rmon_invalid_code_p_int : std_logic;
+
+-- Misc. signals
+ signal cal_pattern_cntr : unsigned(c_cal_pattern_counter_bits-1 downto 0);
+ signal mdio_mcr_reset_synced : std_logic;
+ signal mdio_mcr_pdown_synced : std_logic;
+
+
+ signal pcs_valid_int : std_logic;
+ signal timestamp_pending : std_logic_vector(2 downto 0) := "000";
+
+begin
+-------------------------------------------------------------------------------
+-- synchronizer chains for Wishbone-accessible control signals
+-------------------------------------------------------------------------------
+
+ U_sync_pcs_busy : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => '1',
+ data_i => rx_busy,
+ synced_o => pcs_busy_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_an_rx_enable : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ data_i => an_rx_en_i,
+ synced_o => an_rx_en_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_mcr_reset : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_reset_i,
+ synced_o => mdio_mcr_reset_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_power_down : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_pdown_i,
+ synced_o => mdio_mcr_pdown_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ rx_sync_enable <= not mdio_mcr_pdown_synced;
+ rst_n_rx <= rst_rxclk_n_i and not mdio_mcr_reset_synced and phy_rdy_i;
+
+-------------------------------------------------------------------------------
+-- 802.3z Link Synchronization State Machine
+-------------------------------------------------------------------------------
+
+ U_SYNC_DET : ep_sync_detect_16bit
+ port map (
+ rst_n_i => rst_n_rx,
+ rbclk_i => phy_rx_clk_i,
+ en_i => rx_sync_enable,
+ data_i => phy_rx_data_i,
+ k_i => phy_rx_k_i,
+ err_i => phy_rx_enc_err_i,
+ synced_o => rx_synced,
+ cal_i => d_is_cal);
+
+ -- synchronizer chain for rx_synced signal, also serving as a loss-of-sync detector
+ U_sync_los : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => '1',
+ data_i => rx_synced,
+ synced_o => rx_sync_status,
+ npulse_o => rx_sync_lost_p,
+ ppulse_o => open);
+
+ synced_o <= rx_sync_status; -- drive the PCS outputs
+ sync_lost_o <= rx_sync_lost_p;
+
+-------------------------------------------------------------------------------
+-- Calibration pattern logic
+-------------------------------------------------------------------------------
+
+ -- process checks the presence of valid calibtaion pattern and controls the
+ -- state of CAL_STA bit in Receive Control Register.
+ --
+ -- reads: phy_rx_data_i, mdio_wr_spec_cal_crst_i
+ -- writes: mdio_wr_spec_rx_cal_stat_o
+ --
+ p_detect_cal : process(phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+ if rst_n_rx = '0' then
+ cal_pattern_cntr <= (others => '0');
+ d_is_cal <= '0';
+ else
+
+ d_is_cal <= f_to_sl(phy_rx_data_i = (c_k28_7 & c_k28_7) and phy_rx_k_i = "11");
+
+ if(d_is_cal = '1' and mdio_wr_spec_cal_crst_i = '0') then
+
+-- we've got c_cal_pattern_threshold valid calibration characters - indicate
+-- that we're receiving a valid calibration pattern
+ if(cal_pattern_cntr(cal_pattern_cntr'high) = '1') then
+ mdio_wr_spec_rx_cal_stat_o <= '1';
+ else
+ mdio_wr_spec_rx_cal_stat_o <= '0';
+ cal_pattern_cntr <= cal_pattern_cntr + 1;
+ end if;
+-- we've got a non-calibration character or the pattern detection has been reset
+ else
+ mdio_wr_spec_rx_cal_stat_o <= '0';
+ cal_pattern_cntr <= (others => '0');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-------------------------------------------------------------------------------
+-- Clock adjustment FIFO
+-------------------------------------------------------------------------------
+
+
+ -- process postprocesses the raw 8b10b decoder output (phy_rx_data_i, phy_rx_k_i, phy_rx_enc_err_ior)
+ -- providing 1-bit signals indicating various 8b10b control patterns
+ p_8b10b_postprocess : process(phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+
+ if(rst_n_rx = '0' or rx_synced = '0') then
+ d_data <= (others => '0');
+ d_is_idle <= '0';
+ d_is_k <= "00";
+ d_is_spd_preamble <= '0';
+ d_is_preamble_sfd <= '0';
+ d_is_preamble <= '0';
+ d_is_eof <= '0';
+ d_is_extend <= '0';
+ d_is_eof_extend <= '0';
+ d_is_lcr <= '0';
+ d_err <= '0';
+ else
+
+ d_data <= phy_rx_data_i;
+ d_is_k <= phy_rx_k_i;
+
+ if(phy_rx_enc_err_i = '0') then
+ d_err <= '0';
+
+
+ d_is_idle <= f_to_sl(phy_rx_data_i(15 downto 8) = c_K28_5
+ and (phy_rx_data_i(7 downto 0) = c_d16_2
+ or phy_rx_data_i(7 downto 0) = c_d5_6)
+ and phy_rx_k_i = "10");
+
+
+ d_is_spd_preamble <= f_to_sl(
+ phy_rx_data_i(15 downto 8) = c_k27_7
+ and phy_rx_data_i(7 downto 0) = c_preamble_char
+ and phy_rx_k_i = "10");
+
+ d_is_preamble <= f_to_sl(
+ phy_rx_data_i = c_preamble_char & c_preamble_char
+ and phy_rx_k_i = "00");
+
+ d_is_preamble_sfd <= f_to_sl(
+ phy_rx_data_i = c_preamble_char & c_preamble_sfd
+ and phy_rx_k_i = "00");
+
+-- data + EPD
+ d_is_eof <= f_to_sl(
+ phy_rx_data_i(7 downto 0) = c_K29_7
+ and phy_rx_k_i = "01");
+
+ -- EPD + extend
+ d_is_eof_extend <= f_to_sl(
+ phy_rx_data_i(15 downto 8) = c_K29_7
+ and phy_rx_data_i(7 downto 0) = c_k23_7
+ and phy_rx_k_i = "11");
+
+ d_is_extend <= f_to_sl(
+ phy_rx_data_i = c_K23_7 & c_K23_7
+ and phy_rx_k_i = "11");
+
+ d_is_lcr <= f_to_sl(
+ phy_rx_data_i(15 downto 8) = c_K28_5
+ and (phy_rx_data_i(7 downto 0) = c_d21_5
+ or phy_rx_data_i(7 downto 0) = c_d2_2)
+ and phy_rx_k_i = "10");
+
+
+-- invalid code received?
+ else
+ d_err <= '1';
+ d_is_idle <= 'X';
+ d_is_spd_preamble <= 'X';
+ d_is_preamble_sfd <= 'X';
+ d_is_preamble <= 'X';
+ d_is_eof <= 'X';
+ d_is_extend <= 'X';
+ d_is_eof_extend <= 'X';
+ d_is_lcr <= 'X';
+ end if;
+ end if;
+ end if;
+ end process;
+
+-- process: RBCLK-driven RX state machine. Implements the receive logic od 802.3z compliant
+-- 1000BaseX PCS.
+-- reads: almost everything
+-- writes: almost everything
+
+
+ rx_fsm : process (phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+ -- reset or PCS disabled
+ if(rst_n_rx = '0' or mdio_mcr_pdown_synced = '1') then
+ rx_state <= RX_NOFRAME;
+ rx_busy <= '0';
+
+ pcs_fab_o.sof <= '0';
+ pcs_fab_o.eof <= '0';
+ pcs_fab_o.error <= '0';
+ pcs_fab_o.dvalid <= '0';
+ pcs_fab_o.bytesel <= '0';
+ pcs_fab_o.has_rx_timestamp <= '0';
+ pcs_fab_o.data <= (others => 'X');
+
+ lcr_ready <= '0';
+ lcr_cur_val <= (others => '0');
+ lcr_prev_val <= (others => '0');
+ -- lcr_final_val ===> DO NOT CLEAR on reset
+ lcr_validity_cntr <= (others => '0');
+ an_idle_cntr <= (others => '0');
+ an_idle_match_int <= '0';
+
+ rmon_rx_overrun_p_int <= '0';
+ rmon_invalid_code_p_int <= '0';
+ timestamp_trigger_p_a_o <= '0';
+ timestamp_pending <= "000";
+ else -- normal PCS operation
+
+ -- clear the autogotiation variables if the autonegotiation is disabled
+ if(an_rx_en_synced = '0') then
+ lcr_ready <= '0';
+ lcr_validity_cntr <= (others => '0');
+ lcr_prev_val <= (others => '0');
+ an_idle_cntr <= (others => '0');
+ an_idle_match_int <= '0';
+ end if;
+
+-------------------------------------------------------------------------------
+-- Main RX PCS state machine
+-------------------------------------------------------------------------------
+ case rx_state is
+
+-------------------------------------------------------------------------------
+-- State NOFRAME: receiver is receiving IDLE pattern
+-------------------------------------------------------------------------------
+ when RX_NOFRAME =>
+
+ preamble_cntr <= "011";
+ pcs_fab_o.eof <= '0';
+ pcs_fab_o.error <= '0';
+ pcs_fab_o.bytesel <= '0';
+ pcs_fab_o.has_rx_timestamp <= '0';
+
+ rx_busy <= '0';
+ timestamp_trigger_p_a_o <= '0';
+
+ -- insert the RX timestamp into the FIFO
+ if(timestamp_pending /= "000") then
+ pcs_fab_o.dvalid <= '1';
+ else
+ pcs_fab_o.dvalid <= '0';
+ end if;
+
+ if(timestamp_pending(0) = '1')then
+ pcs_fab_o.data <= timestamp_i(31 downto 16);
+ pcs_fab_o.eof <= '0';
+ elsif(timestamp_pending(1) = '1')then
+ pcs_fab_o.data <= timestamp_i(15 downto 0);
+ pcs_fab_o.eof <= '0';
+ elsif(timestamp_pending(2) = '1')then
+ pcs_fab_o.data <= (others => 'X');
+ pcs_fab_o.eof <= '1';
+ end if;
+
+ timestamp_pending <= timestamp_pending(1 downto 0) & '0';
+
+ if (rx_synced = '0') then -- PCS is not synced: stay in NOFRAME state and ignore the incoming codes.
+ rx_state <= RX_NOFRAME;
+ else
+
+ if(d_is_spd_preamble = '1') then -- we've got a Start-of-Packet Delimeter
+ if(pcs_fifo_almostfull_i = '0') then
+ rx_state <= RX_SPD_PREAMBLE;
+ else
+ rx_state <= RX_NOFRAME;
+ rmon_rx_overrun_p_int <= '1';
+ end if;
+ end if;
+
+ if (d_is_lcr = '1') then
+ rx_state <= RX_CR;
+ an_idle_match_int <= '0';
+ an_idle_cntr <= (others => '0');
+ rx_busy <= '1';
+ end if;
+
+ if(d_is_idle = '1') then
+ lcr_ready <= '0';
+ an_idle_match_int <= '0';
+ an_idle_cntr <= (others => '0');
+ lcr_validity_cntr <= (others => '0');
+
+ if(an_idle_cntr = "11") then
+ an_idle_match_int <= '1';
+ else
+ an_idle_cntr <= an_idle_cntr + 1;
+ end if;
+ rx_busy <= '0';
+ end if;
+ end if;
+
+-- produce a pulse at every invalid 8b10b code.
+ rmon_invalid_code_p_int <= d_err;
+
+-------------------------------------------------------------------------------
+-- States CR3/CR4: reception of LCR register value.
+-------------------------------------------------------------------------------
+ when RX_CR => -- receives the 1st byte of Config_Reg and
+ -- checks if the subsequent Config_Reg
+ -- values are identical.
+
+-- an error? - abort the reception and go to NOFRAME state.
+ if(d_err = '1' or d_is_k /= "00" or rx_synced = '0') then
+ rx_state <= RX_NOFRAME;
+ rmon_invalid_code_p_int <= d_err;
+
+ -- reset the Config_Reg value and mark it as invalid
+ lcr_ready <= '0';
+ lcr_validity_cntr <= (others => '0');
+
+-- check if the autonegotiation unit has enabled the reception of LCR
+ elsif (an_rx_en_synced = '1') then
+ lcr_prev_val <= lcr_cur_val;
+
+-- check for 3 subsequent Configuration sequences with identical Config_Reg value
+ if(lcr_cur_val = lcr_prev_val) then
+ if(lcr_validity_cntr = "10") then
+-- we've got 3? Indicate that we have received valid Config_Reg.
+ lcr_ready <= '1';
+ lcr_final_val <= lcr_cur_val;
+ else
+ lcr_validity_cntr <= lcr_validity_cntr + 1;
+ lcr_ready <= '0';
+ end if;
+ else
+-- the subsequent values of Config_Reg are different?
+ lcr_validity_cntr <= (others => '0');
+ lcr_ready <= '0';
+ end if;
+
+ lcr_cur_val <= d_data(7 downto 0) & d_data(15 downto 8);
+ end if;
+
+ rx_state <= RX_NOFRAME;
+
+-------------------------------------------------------------------------------
+-- State SPD_PREAMBLE: we've received an Start-Of-Packet delimeter. Check for
+-- the valid preamble.
+-------------------------------------------------------------------------------
+ when RX_SPD_PREAMBLE =>
+
+ rx_busy <= '1';
+
+ if(d_err = '1' or rx_synced = '0') then -- check for encoding errors.
+ rx_state <= RX_NOFRAME;
+ rmon_invalid_code_p_int <= d_err;
+ else
+
+ -- keep looking for Ethernet SFD char (0xd5). If it occurs on
+ -- the right position, start receiving the frame payload
+ if d_is_preamble_sfd = '1' then
+-- generate the RX timestamp pulse
+ timestamp_trigger_p_a_o <= '1';
+
+-- we've got an SFD at proper offset from the beginning of the preamble
+ if (preamble_cntr = "010") or (preamble_cntr = "001") then
+
+-- indicate a start-of-packet condition in the RX FIFO and enable writing to
+-- the FIFO.
+ pcs_fab_o.sof <= '1';
+ rx_state <= RX_PAYLOAD;
+ end if;
+
+ elsif (d_is_preamble = '1') then
+ preamble_cntr <= preamble_cntr - 1;
+ -- got duplicated SPD code?
+ elsif (d_is_spd_preamble = '1') then
+ preamble_cntr <= "111";
+ else
+ rx_state <= RX_NOFRAME; -- not a preamble sequence?
+ rmon_invalid_code_p_int <= '1';
+ end if;
+
+ if(preamble_cntr = "000") then -- too long preamble - abort reception
+ rx_state <= RX_NOFRAME;
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State PAYLOAD: receives the full frame payload (including the MAC header and
+-- the CRC)
+-------------------------------------------------------------------------------
+
+ when RX_PAYLOAD =>
+
+ pcs_fab_o.sof <= '0';
+ pcs_fab_o.eof <= '0';
+ pcs_fab_o.has_rx_timestamp <= '0';
+ pcs_fab_o.data <= d_data;
+
+ -- check for errors.
+ if (d_err = '1' or rx_synced = '0' or pcs_fifo_almostfull_i = '1'
+ or (d_is_k /= "00" and d_is_eof_extend = '0' and d_is_eof = '0')) then
+
+ -- indicate an errorneous termination of the current frame in the
+ -- RX FIFO
+ pcs_fab_o.error <= '1';
+ pcs_fab_o.dvalid <= '0';
+ pcs_fab_o.bytesel <= 'X';
+
+ rmon_invalid_code_p_int <= d_err;
+ rmon_rx_overrun_p_int <= pcs_fifo_almostfull_i;
+
+ rx_state <= RX_NOFRAME;
+ elsif d_is_eof = '1' or d_is_eof_extend = '1' then
+
+ pcs_fab_o.error <= '0';
+
+ if d_is_eof = '1' then -- got EPD at even position
+ pcs_fab_o.bytesel <= '1';
+ pcs_fab_o.dvalid <= '1';
+ rx_state <= RX_EXTEND;
+ else
+ pcs_fab_o.bytesel <= '0';
+ pcs_fab_o.dvalid <= '0';
+ rx_state <= RX_EXTEND;
+ end if;
+
+ else
+ pcs_fab_o.bytesel <= '0';
+ pcs_fab_o.error <= '0';
+ pcs_fab_o.dvalid <= '1';
+ end if;
+
+
+-------------------------------------------------------------------------------
+-- State EXTEND: receive carrier extension
+-------------------------------------------------------------------------------
+
+ when RX_EXTEND =>
+
+ timestamp_trigger_p_a_o <= '0';
+ pcs_fab_o.dvalid <= '0';
+
+ if d_is_extend = '1' then -- got carrier extend. Just keep
+ -- receiving it.
+ rx_state <= RX_EXTEND;
+ pcs_fab_o.eof <= '0';
+ pcs_fab_o.error <= '0';
+ elsif d_is_idle = '1' then -- got comma, real end-of-frame
+ -- indicate the correct ending of the current frame in the RX FIFO
+ pcs_fab_o.eof <= not timestamp_stb_i;
+ pcs_fab_o.error <= '0';
+ pcs_fab_o.has_rx_timestamp <= timestamp_stb_i;
+ timestamp_pending <= (others => timestamp_stb_i);
+
+ rx_state <= RX_NOFRAME;
+ else
+ -- got anything else than comma (for example, the /V/ code):
+ pcs_fab_o.error <= '1';
+ rmon_invalid_code_p_int <= '1';
+ rx_state <= RX_NOFRAME;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ an_rx_val_o <= lcr_final_val;
+
+ U_sync_an_rx_ready : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => lcr_ready,
+ synced_o => an_rx_valid_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_an_idle_match : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => an_idle_match_int,
+ synced_o => an_idle_match_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_ext_rmon_1 : gc_extend_pulse
+ generic map (
+ g_width => 3)
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ pulse_i => rmon_invalid_code_p_int,
+ extended_o => rmon_rx_inv_code);
+
+ U_ext_rmon_2 : gc_extend_pulse
+ generic map (
+ g_width => 3)
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ pulse_i => rmon_rx_overrun_p_int,
+ extended_o => rmon_rx_overrun);
+
+-- drive the "RX PCS Sync Lost" event counter
+ rmon_rx_sync_lost <= rx_sync_lost_p and (not mdio_mcr_pdown_i);
+
+ pcs_fab_o.rx_timestamp_valid <= timestamp_valid_i;
+
+ nice_dbg_o.fsm <= "000" when (rx_state = RX_NOFRAME) else
+ "001" when (rx_state = RX_CR) else
+ "010" when (rx_state = RX_SPD_PREAMBLE) else
+ "011" when (rx_state = RX_PAYLOAD) else
+ "100" when (rx_state = RX_EXTEND) else
+ "111";
+
+end behavioral;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd
new file mode 100644
index 000000000..9310cf36a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_pcs_8bit.vhd
@@ -0,0 +1,858 @@
+-------------------------------------------------------------------------------
+-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_rx_pcs_tbi.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-16
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements the reception path for 1000BaseX PCS
+-- (Physical Coding Sublayer). It provides synchronization between the PHY RX
+-- clock and system reference clock, elastic buffering, preamble, SFD and other
+-- 8b10b patterns recognition. It also generates deterministic timestamping
+-- pulses for RXed packets.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-06-16 0.1 twlostow Created (no error propagation supported yet)
+-- 2010-10-25 0.2 twlostow Names updated to comply with the coding,
+-- added some comments
+-- 2010-11-18 0.4 twlostow Added support for Xilinx GTP transceivers.
+-- 2011-02-07 0.5 twlostow Tested on Spartan6 GTP
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+entity ep_rx_pcs_8bit is
+ generic (
+ g_simulation : boolean);
+ port (
+-- 62.5 MHz refclk divided by 2
+ clk_sys_i : in std_logic;
+
+-- reset (refclk2-synchronous)
+ rst_n_i : in std_logic;
+
+-- reset (phy_rx_clk_i sync)
+ rst_rxclk_n_i : in std_logic;
+
+ pcs_fifo_almostfull_i : in std_logic;
+-- RX path busy indicator (active HI).
+-- When asserted, the receiver is in the middle of reception of a frame
+ pcs_busy_o : out std_logic;
+-- data FIFO output
+ pcs_fab_o : out t_ep_internal_fabric;
+
+
+ timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping
+
+ timestamp_i : in std_logic_vector(31 downto 0);
+ timestamp_stb_i : in std_logic;
+ timestamp_valid_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- PHY interface
+-------------------------------------------------------------------------------
+
+ phy_rdy_i : in std_logic;
+ phy_rx_clk_i : in std_logic;
+ phy_rx_data_i : in std_logic_vector(7 downto 0);
+ phy_rx_k_i : in std_logic;
+ phy_rx_enc_err_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone registers
+-------------------------------------------------------------------------------
+
+ -- Receive control regsiter
+ mdio_mcr_reset_i : in std_logic;
+ mdio_mcr_pdown_i : in std_logic;
+ mdio_wr_spec_cal_crst_i : in std_logic;
+ mdio_wr_spec_rx_cal_stat_o : out std_logic;
+
+ synced_o : out std_logic;
+ sync_lost_o : out std_logic;
+
+ -- autonegotiation signals
+ an_rx_en_i : in std_logic;
+ an_rx_val_o : out std_logic_vector(15 downto 0);
+ an_rx_valid_o : out std_logic;
+ an_idle_match_o : out std_logic;
+
+ -- RMON events
+ rmon_rx_overrun : out std_logic;
+ rmon_rx_inv_code : out std_logic;
+ rmon_rx_sync_lost : out std_logic
+ );
+
+end ep_rx_pcs_8bit;
+
+architecture behavioral of ep_rx_pcs_8bit is
+
+-- RX state machine definitions
+ type t_tbif_rx_state is (RX_NOFRAME, RX_COMMA, RX_CR3, RX_CR4, RX_SPD_PREAMBLE, RX_PAYLOAD, RX_EXTEND);
+
+-- size of the calibrration pattern detection counter. It counts up every time
+-- a valid calibration pattern character is received and resets upon detecion
+-- of non-calibration character. The pattern is validated when the counter
+-- overflows (after 2**c_cal_pattern_counter_bits counts)
+
+
+ function f_calc_pattern_counter_bits
+ return integer is
+ begin -- f_calc_pattern_counter_bits
+ if(g_simulation) then
+ return 8; -- use smaller calibration counter to
+ -- speed up the simulation
+ else
+ return 17;
+ end if;
+ end f_calc_pattern_counter_bits;
+
+ constant c_cal_pattern_counter_bits : integer := f_calc_pattern_counter_bits;
+
+ component ep_sync_detect
+ port (
+ rst_n_i : in std_logic;
+ rbclk_i : in std_logic;
+ en_i : in std_logic;
+ data_i : in std_logic_vector(7 downto 0);
+ k_i : in std_logic;
+ err_i : in std_logic;
+ synced_o : out std_logic;
+ even_o : out std_logic;
+ cal_i : in std_logic);
+ end component;
+
+ signal rst_n_rx : std_logic;
+
+ signal rx_state : t_tbif_rx_state;
+ signal preamble_cntr : unsigned(2 downto 0);
+ signal rx_busy : std_logic;
+ signal rx_enable_synced : std_logic;
+ signal rx_rdreq, fifo_wrreq : std_logic;
+
+ -- 8b10b decoding and postprocessing signals
+ signal d_is_k, d_err, d_is_comma, d_is_epd : std_logic;
+ signal d_is_spd, d_is_extend, d_is_idle, d_is_lcr : std_logic;
+ signal d_is_sfd_char, d_is_preamble_char : std_logic;
+ signal d_data : std_logic_vector(7 downto 0);
+ signal d_is_even : std_logic;
+ signal d_is_cal : std_logic;
+
+ -- Clock alignment FIFO signals
+ signal fifo_wr_toggle : std_logic;
+ signal fifo_rx_data : std_logic_vector(15 downto 0);
+ signal fifo_mask_write : std_logic;
+ signal fifo_bytesel : std_logic;
+ signal fifo_sof, fifo_eof : std_logic;
+ signal fifo_error : std_logic;
+ signal fifo_almostfull : std_logic;
+ signal fifo_clear_n : std_logic;
+ signal fifo_with_rx_ts : std_logic;
+ signal fifo_ts_valid : std_logic;
+
+-- Synchronization detection FSM signals
+ signal rx_synced, rx_even : std_logic;
+ signal rx_sync_lost_p : std_logic;
+ signal rx_sync_status : std_logic;
+ signal rx_sync_enable : std_logic;
+
+-- Autonegotiation control signals
+ signal an_rx_en_synced : std_logic;
+
+ signal lcr_ready : std_logic;
+ signal lcr_prev_val : std_logic_vector(15 downto 0);
+ signal lcr_cur_val : std_logic_vector(15 downto 0);
+ signal lcr_final_val : std_logic_vector(15 downto 0);
+ signal lcr_validity_cntr : unsigned(1 downto 0);
+
+ signal an_idle_cntr : unsigned(1 downto 0);
+ signal an_idle_match_int : std_logic;
+
+-- RMON counter pulses
+ signal rmon_rx_overrun_p_int : std_logic;
+ signal rmon_invalid_code_p_int : std_logic;
+
+-- Misc. signals
+ signal cal_pattern_cntr : unsigned(c_cal_pattern_counter_bits-1 downto 0);
+ signal mdio_mcr_reset_synced : std_logic;
+ signal mdio_mcr_pdown_synced : std_logic;
+
+
+ signal pcs_valid_int : std_logic;
+ signal timestamp_pending : std_logic_vector(2 downto 0);
+
+begin
+-------------------------------------------------------------------------------
+-- synchronizer chains for Wishbone-accessible control signals
+-------------------------------------------------------------------------------
+
+ U_sync_pcs_busy : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => '1',
+ data_i => rx_busy,
+ synced_o => pcs_busy_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_an_rx_enable : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ data_i => an_rx_en_i,
+ synced_o => an_rx_en_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_mcr_reset : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_reset_i,
+ synced_o => mdio_mcr_reset_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_power_down : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_pdown_i,
+ synced_o => mdio_mcr_pdown_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ rx_sync_enable <= not mdio_mcr_pdown_synced;
+ rst_n_rx <= rst_rxclk_n_i and not mdio_mcr_reset_synced and phy_rdy_i;
+
+-------------------------------------------------------------------------------
+-- 802.3z Link Synchronization State Machine
+-------------------------------------------------------------------------------
+
+ U_SYNC_DET : ep_sync_detect
+ port map (
+ rst_n_i => rst_n_rx,
+ rbclk_i => phy_rx_clk_i,
+ en_i => rx_sync_enable,
+ data_i => phy_rx_data_i,
+ k_i => phy_rx_k_i,
+ err_i => phy_rx_enc_err_i,
+ synced_o => rx_synced,
+ even_o => rx_even,
+ cal_i => d_is_cal);
+
+ -- synchronizer chain for rx_synced signal, also serving as a loss-of-sync detector
+ U_sync_los : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => '1',
+ data_i => rx_synced,
+ synced_o => rx_sync_status,
+ npulse_o => rx_sync_lost_p,
+ ppulse_o => open);
+
+ synced_o <= rx_sync_status; -- drive the PCS outputs
+ sync_lost_o <= rx_sync_lost_p;
+
+-------------------------------------------------------------------------------
+-- Calibration pattern logic
+-------------------------------------------------------------------------------
+
+ -- process checks the presence of valid calibtaion pattern and controls the
+ -- state of CAL_STA bit in Receive Control Register.
+ --
+ -- reads: phy_rx_data_i, mdio_wr_spec_cal_crst_i
+ -- writes: mdio_wr_spec_rx_cal_stat_o
+ --
+ p_detect_cal : process(phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+ if rst_n_rx = '0' then
+ cal_pattern_cntr <= (others => '0');
+ d_is_cal <= '0';
+ else
+
+ if(phy_rx_data_i = c_k28_7 and phy_rx_k_i = '1') then
+ d_is_cal <= '1';
+ else
+ d_is_cal <= '0';
+ end if;
+
+ if(d_is_cal = '1' and mdio_wr_spec_cal_crst_i = '0') then
+
+-- we've got c_cal_pattern_threshold valid calibration characters - indicate
+-- that we're receiving a valid calibration pattern
+ if(cal_pattern_cntr(cal_pattern_cntr'high) = '1') then
+ mdio_wr_spec_rx_cal_stat_o <= '1';
+ else
+ mdio_wr_spec_rx_cal_stat_o <= '0';
+ cal_pattern_cntr <= cal_pattern_cntr + 1;
+ end if;
+-- we've got a non-calibration character or the pattern detection has been reset
+ else
+ mdio_wr_spec_rx_cal_stat_o <= '0';
+ cal_pattern_cntr <= (others => '0');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-------------------------------------------------------------------------------
+-- Clock adjustment FIFO
+-------------------------------------------------------------------------------
+
+ -- FIFO input data formatting
+ fifo_wrreq <= fifo_wr_toggle and fifo_mask_write;
+
+ pcs_fab_o.data <= fifo_rx_data;
+ pcs_fab_o.addr <= (others => '0');
+ pcs_fab_o.sof <= fifo_sof and fifo_wrreq;
+ pcs_fab_o.eof <= fifo_eof and fifo_wrreq;
+ pcs_fab_o.bytesel <= fifo_bytesel;
+ pcs_fab_o.error <= fifo_error and fifo_wrreq;
+ pcs_fab_o.has_rx_timestamp <= fifo_with_rx_ts;
+ pcs_fab_o.rx_timestamp_valid <= timestamp_valid_i;
+ pcs_fab_o.dvalid <= not (fifo_sof or fifo_eof or fifo_error) and fifo_wrreq;
+
+ fifo_almostfull <= pcs_fifo_almostfull_i;
+
+ -- process postprocesses the raw 8b10b decoder output (phy_rx_data_i, phy_rx_k_i, phy_rx_enc_err_ior)
+ -- providing 1-bit signals indicating various 8b10b control patterns
+ p_8b10b_postprocess : process(phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+
+ if(rst_n_rx = '0') then
+ d_data <= (others => '0');
+ d_is_comma <= '0';
+ d_is_spd <= '0';
+ d_is_extend <= '0';
+ d_is_lcr <= '0';
+ d_is_epd <= '0';
+ d_is_idle <= '0';
+ d_is_k <= '0';
+ d_err <= '0';
+ d_is_sfd_char <= '0';
+ d_is_preamble_char <= '0';
+ d_err <= '0';
+ else
+
+ -- store the odd/even field information from sync detection unit (U_SYNC_DET)
+ d_is_even <= rx_even;
+ d_data <= phy_rx_data_i;
+ d_is_k <= phy_rx_k_i;
+
+ if(phy_rx_enc_err_i = '0') then
+ d_err <= '0';
+
+-- decode commas and other control characters....
+ if(phy_rx_data_i = c_K28_5 and phy_rx_k_i = '1') then
+ d_is_comma <= '1';
+ else
+ d_is_comma <= '0';
+ end if;
+
+ if(phy_rx_data_i = c_k23_7 and phy_rx_k_i = '1') then
+ d_is_extend <= '1';
+ else
+ d_is_extend <= '0';
+ end if;
+
+ if(phy_rx_data_i = c_k27_7 and phy_rx_k_i = '1') then
+ d_is_spd <= '1';
+ else
+ d_is_spd <= '0';
+ end if;
+
+ if(phy_rx_data_i = c_K29_7 and phy_rx_k_i = '1') then
+ d_is_epd <= '1';
+ else
+ d_is_epd <= '0';
+ end if;
+
+ if((phy_rx_data_i = c_d21_5 or phy_rx_data_i = c_d2_2) and phy_rx_k_i = '0') then
+ d_is_lcr <= '1';
+ else
+ d_is_lcr <= '0';
+ end if;
+
+ if((phy_rx_data_i = c_d5_6 or phy_rx_data_i = c_d16_2) and phy_rx_k_i = '0') then
+ d_is_idle <= '1';
+ else
+ d_is_idle <= '0';
+ end if;
+
+ if(phy_rx_data_i = c_preamble_sfd and phy_rx_k_i = '0') then
+ d_is_sfd_char <= '1';
+ else
+ d_is_sfd_char <= '0';
+ end if;
+
+ if(phy_rx_data_i = c_preamble_char and phy_rx_k_i = '0') then
+ d_is_preamble_char <= '1';
+ else
+ d_is_preamble_char <= '0';
+ end if;
+
+-- invalid code received?
+ else
+ d_err <= '1';
+ d_is_sfd_char <= '0';
+ d_is_preamble_char <= '0';
+ d_is_comma <= '0';
+ d_is_spd <= '0';
+ d_is_extend <= '0';
+ d_is_lcr <= '0';
+ d_is_epd <= '0';
+ d_is_idle <= '0';
+ d_is_k <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- process: RBCLK-driven RX state machine. Implements the receive logic od 802.3z compliant
+-- 1000BaseX PCS.
+-- reads: almost everything
+-- writes: almost everything
+
+ rx_fsm : process (phy_rx_clk_i)
+ begin
+ if rising_edge(phy_rx_clk_i) then
+ -- reset or PCS disabled
+ if(rst_n_rx = '0' or mdio_mcr_pdown_synced = '1') then
+ rx_state <= RX_NOFRAME;
+ rx_busy <= '0';
+
+ fifo_sof <= '0';
+ fifo_eof <= '0';
+ fifo_error <= '0';
+ fifo_wr_toggle <= '0';
+ fifo_mask_write <= '0';
+ fifo_with_rx_ts <= '0';
+
+ lcr_ready <= '0';
+ lcr_cur_val <= (others => '0');
+ lcr_prev_val <= (others => '0');
+ -- lcr_final_val ===> DO NOT CLEAR on reset
+ lcr_validity_cntr <= (others => '0');
+ an_idle_cntr <= (others => '0');
+ an_idle_match_int <= '0';
+
+ rmon_rx_overrun_p_int <= '0';
+ rmon_invalid_code_p_int <= '0';
+
+ timestamp_trigger_p_a_o <= '0';
+ timestamp_pending <= "000";
+ else -- normal PCS operation
+
+ -- clear the autogotiation variables if the autonegotiation is disabled
+ if(an_rx_en_synced = '0') then
+ lcr_ready <= '0';
+ lcr_validity_cntr <= (others => '0');
+ lcr_prev_val <= (others => '0');
+ an_idle_cntr <= (others => '0');
+ an_idle_match_int <= '0';
+ end if;
+
+-------------------------------------------------------------------------------
+-- Main RX PCS state machine
+-------------------------------------------------------------------------------
+ case rx_state is
+
+-------------------------------------------------------------------------------
+-- State NOFRAME: receiver is receiving IDLE pattern
+-------------------------------------------------------------------------------
+ when RX_NOFRAME =>
+
+
+ fifo_sof <= '0';
+ fifo_eof <= '0';
+ fifo_error <= '0';
+ fifo_bytesel <= '0';
+
+ rx_busy <= '0';
+ timestamp_trigger_p_a_o <= '0';
+
+ -- insert the RX timestamp into the FIFO
+ if(timestamp_pending /= "000") then
+ fifo_mask_write <= '1';
+ fifo_wr_toggle <= '1';
+ else
+ fifo_mask_write <= '0';
+ fifo_wr_toggle <= '0';
+ end if;
+
+ if(timestamp_pending(0) = '1')then
+ fifo_rx_data <= timestamp_i(31 downto 16);
+ elsif(timestamp_pending(1) = '1')then
+ fifo_rx_data <= timestamp_i(15 downto 0);
+ elsif(timestamp_pending(2) = '1')then
+ fifo_eof <= '1';
+ end if;
+
+ timestamp_pending <= timestamp_pending(1 downto 0) & '0';
+
+ if (rx_synced = '0') then
+-- PCS is not synced: stay in NOFRAME state and ignore the incoming codes.
+ rx_state <= RX_NOFRAME;
+
+ elsif(d_is_comma = '1') then
+-- we've got a comma character: it's probably an idle sequence or a Config_Reg value,
+-- check the next code.
+ rx_state <= RX_COMMA;
+ elsif (d_is_spd = '1') then
+-- we've got a Start-of-Packet Delimeter
+
+ if(d_is_even = '1' and fifo_almostfull = '0') then
+ preamble_cntr <= "111";
+ rx_state <= RX_SPD_PREAMBLE;
+ elsif (fifo_almostfull = '1') then
+ rmon_rx_overrun_p_int <= '1';
+ end if;
+
+ end if;
+
+
+-- produce a pulse at every invalid 8b10b code.
+ rmon_invalid_code_p_int <= d_err;
+
+-------------------------------------------------------------------------------
+-- State COMMA: we've received a comma character followed by something else.
+-- Determine what's "something else"
+-------------------------------------------------------------------------------
+
+ when RX_COMMA =>
+-- received a code with error (or a control code group) or a misaligned code:
+-- go to the initial NOFRAME state and account the error.
+
+ fifo_mask_write <= '0';
+ fifo_wr_toggle <= '0';
+ fifo_with_rx_ts <= '0';
+
+ if (d_err = '1' or d_is_k = '1' or d_is_even = '1' or rx_synced = '0') then
+ rmon_invalid_code_p_int <= d_err;
+ rx_state <= RX_NOFRAME;
+
+ lcr_ready <= '0';
+ an_idle_match_int <= '0';
+ an_idle_cntr <= (others => '0');
+ else
+
+-- don't write anything to the PCS FIFO, it's a control character
+ fifo_mask_write <= '0';
+
+-- received D5.6 or D16.2 - it's an idle pattern. Simply ignore it.
+ if(d_is_idle = '1') then
+ rx_state <= RX_NOFRAME;
+ lcr_ready <= '0';
+
+
+ if(an_idle_cntr = "11") then
+ an_idle_match_int <= '1';
+ else
+ an_idle_cntr <= an_idle_cntr + 1;
+ end if;
+
+
+-- received D21.5 or D2.2 - it's a 802.3x autonegotiation Config_Reg (802.3 p.
+-- 36.2.4.10). Begin the reception of its value.
+ elsif(d_is_lcr = '1') then
+ an_idle_match_int <= '0';
+ an_idle_cntr <= (others => '0');
+ rx_busy <= '1';
+ rx_state <= RX_CR3;
+ else
+ lcr_ready <= '0';
+ an_idle_match_int <= '0';
+ an_idle_cntr <= (others => '0');
+ lcr_validity_cntr <= (others => '0');
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- States CR3/CR4: reception of LCR register value.
+-------------------------------------------------------------------------------
+ when RX_CR3 => -- receives the 1st byte of Config_Reg and
+ -- checks if the subsequent Config_Reg
+ -- values are identical.
+
+-- an error? - abort the reception and go to NOFRAME state.
+ if(d_err = '1' or d_is_k = '1' or d_is_even = '0' or rx_synced = '0') then
+ rx_state <= RX_NOFRAME;
+ rmon_invalid_code_p_int <= d_err;
+
+ -- reset the Config_Reg value and mark it as invalid
+ lcr_ready <= '0';
+ lcr_validity_cntr <= (others => '0');
+
+-- check if the autonegotiation unit has enabled the reception of LCR
+ elsif (an_rx_en_synced = '1') then
+ lcr_prev_val <= lcr_cur_val;
+
+-- check for 3 subsequent Configuration sequences with identical Config_Reg value
+ if(lcr_cur_val = lcr_prev_val) then
+ if(lcr_validity_cntr = "10") then
+-- we've got 3? Indicate that we have received valid Config_Reg.
+ lcr_ready <= '1';
+ lcr_final_val <= lcr_cur_val; -- only latched here, not even on reset
+ else
+ lcr_validity_cntr <= lcr_validity_cntr + 1;
+ lcr_ready <= '0';
+ end if;
+ else
+-- the subsequent values of Config_Reg are different?
+ lcr_validity_cntr <= (others => '0');
+ lcr_ready <= '0';
+ end if;
+
+ lcr_cur_val (7 downto 0) <= d_data;
+ end if;
+
+ rx_state <= RX_CR4;
+
+ when RX_CR4 => -- receives the 2nd byte of LCR
+
+ if(d_err = '1' or d_is_k = '1' or d_is_even = '1' or rx_synced = '0') then
+ -- in case of an error
+ rx_state <= RX_NOFRAME;
+ rmon_invalid_code_p_int <= d_err;
+ elsif (an_rx_en_synced = '1') then
+ -- store the value of the LSB of the Config_Reg
+ lcr_cur_val (15 downto 8) <= d_data;
+ end if;
+
+ rx_state <= RX_NOFRAME;
+
+-------------------------------------------------------------------------------
+-- State SPD_PREAMBLE: we've received an Start-Of-Packet delimeter. Check for
+-- the valid preamble.
+-------------------------------------------------------------------------------
+ when RX_SPD_PREAMBLE =>
+
+ rx_busy <= '1';
+
+ if(d_err = '1' or rx_synced = '0') then -- check for encoding errors.
+ rx_state <= RX_NOFRAME;
+ rmon_invalid_code_p_int <= d_err;
+ else
+
+ -- keep looking for Ethernet SFD char (0xd5). If it occurs on
+ -- the right position, start receiving the frame payload
+ if d_is_sfd_char = '1' then
+-- generate the RX timestamp pulse
+ timestamp_trigger_p_a_o <= '1';
+
+-- we've got an SFD at proper offset from the beginning of the preamble
+ if (preamble_cntr = "010") or (preamble_cntr = "001") then
+
+-- indicate a start-of-packet condition in the RX FIFO and enable writing to
+-- the FIFO.
+ fifo_sof <= '1';
+ fifo_mask_write <= '1';
+ fifo_wr_toggle <= '1';
+ rx_state <= RX_PAYLOAD;
+ end if;
+
+ elsif (d_is_preamble_char = '1') then
+ preamble_cntr <= preamble_cntr - 1;
+ -- got duplicated SPD code?
+ elsif (d_is_spd = '1') then
+ preamble_cntr <= "111";
+ end if;
+
+ if(preamble_cntr = "000") then -- too long preamble - abort reception
+ rx_state <= RX_NOFRAME;
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State PAYLOAD: receives the full frame payload (including the MAC header and
+-- the CRC)
+-------------------------------------------------------------------------------
+
+ when RX_PAYLOAD =>
+
+ fifo_sof <= '0';
+
+ -- check for errors.
+ if (d_err = '1' or rx_synced = '0' or fifo_almostfull = '1') then
+ rmon_invalid_code_p_int <= d_err;
+ rmon_rx_overrun_p_int <= fifo_almostfull;
+
+ rx_state <= RX_NOFRAME;
+
+ -- indicate an errorneous termination of the current frame in the
+ -- RX FIFO
+ fifo_error <= '1';
+ fifo_wr_toggle <= '1';
+
+ elsif d_is_k = '1' then
+ if d_is_epd = '1' then -- got an EPD (End-of-packet delimeter)
+
+ fifo_bytesel <= not fifo_wr_toggle;
+ fifo_wr_toggle <= not fifo_wr_toggle;
+
+ rx_state <= RX_EXTEND;
+
+ else
+ -- any other K-character in the middle of frame (premature
+ -- end)? - terminate the frame and indicate an error in the
+ -- RX FIFO.
+
+ if d_is_comma = '1' then -- got link idle inside frame
+ rx_state <= RX_COMMA;
+ else
+ rx_state <= RX_NOFRAME;
+ end if;
+
+ fifo_error <= '1';
+ fifo_wr_toggle <= '1';
+ end if;
+ else
+ -- got a data character. Every 2 characters, write them to the
+ -- 16-bit FIFO.
+
+ fifo_wr_toggle <= not fifo_wr_toggle;
+
+ if fifo_wr_toggle = '1' then
+ fifo_rx_data(15 downto 8) <= d_data;
+ else
+ fifo_rx_data(7 downto 0) <= d_data;
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State EXTEND: receive carrier extension
+-------------------------------------------------------------------------------
+
+ when RX_EXTEND =>
+
+ timestamp_trigger_p_a_o <= '0';
+
+ if d_is_extend = '1' then -- got carrier extend. Just keep
+ -- receiving it.
+ fifo_mask_write <= '0';
+ rx_state <= RX_EXTEND;
+ elsif d_is_comma = '1' then -- got comma, real end-of-frame
+ -- indicate the correct ending of the current frame in the RX FIFO
+ fifo_eof <= not timestamp_stb_i;
+ fifo_with_rx_ts <= timestamp_stb_i;
+ fifo_mask_write <= '1';
+ fifo_wr_toggle <= '1';
+ timestamp_pending <= (others => timestamp_stb_i);
+
+
+ rx_state <= RX_COMMA;
+
+ else
+ -- got anything else than comma (for example, the /V/ code):
+
+ rmon_invalid_code_p_int <= '1';
+ fifo_error <= '1';
+ fifo_mask_write <= '1';
+ fifo_wr_toggle <= '1';
+
+ rx_state <= RX_NOFRAME;
+ end if;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ an_rx_val_o <= lcr_final_val;
+
+ U_sync_an_rx_ready : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => lcr_ready,
+ synced_o => an_rx_valid_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_an_idle_match : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => an_idle_match_int,
+ synced_o => an_idle_match_o,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_ext_rmon_1 : gc_extend_pulse
+ generic map (
+ g_width => 3)
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ pulse_i => rmon_invalid_code_p_int,
+ extended_o => rmon_rx_inv_code);
+
+ U_ext_rmon_2 : gc_extend_pulse
+ generic map (
+ g_width => 3)
+ port map (
+ clk_i => phy_rx_clk_i,
+ rst_n_i => rst_n_rx,
+ pulse_i => rmon_rx_overrun_p_int,
+ extended_o => rmon_rx_overrun);
+
+-- drive the "RX PCS Sync Lost" event counter
+ rmon_rx_sync_lost <= rx_sync_lost_p and (not mdio_mcr_pdown_i);
+
+end behavioral;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd
new file mode 100644
index 000000000..974c2659b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_status_reg_insert.vhd
@@ -0,0 +1,153 @@
+-------------------------------------------------------------------------------
+-- Title : RX Status Register Inserter
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rx_status_reg_insert.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+
+entity ep_rx_status_reg_insert is
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ mbuf_valid_i : in std_logic;
+ mbuf_ack_o : out std_logic;
+ mbuf_drop_i : in std_logic;
+ mbuf_pclass_i : in std_logic_vector(7 downto 0);
+ mbuf_is_hp_i : in std_logic;
+ mbuf_is_pause_i : in std_logic;
+
+ rmon_pfilter_drop_o : out std_logic
+ );
+
+end ep_rx_status_reg_insert;
+
+architecture rtl of ep_rx_status_reg_insert is
+
+ type t_state is (WAIT_FRAME, WAIT_MBUF, GEN_STATUS);
+
+ signal dreq_mask : std_logic;
+ signal embed_status : std_logic;
+ signal sreg : t_wrf_status_reg;
+ signal state : t_state;
+ signal src_fab_out : t_ep_internal_fabric;
+
+ signal sof_mask : std_logic;
+
+begin -- rtl
+
+ embed_status <= '1' when (state = GEN_STATUS) else '0';
+ src_fab_out.data <= f_marshall_wrf_status(sreg) when (embed_status = '1') else snk_fab_i.data;
+ src_fab_out.addr <= c_WRF_STATUS when (embed_status = '1') else snk_fab_i.addr;
+
+ src_fab_out.eof <= snk_fab_i.eof;
+ src_fab_out.error <= snk_fab_i.error;
+ src_fab_out.bytesel <= snk_fab_i.bytesel;
+ src_fab_out.dvalid <= snk_fab_i.dvalid or (embed_status and src_dreq_i);
+
+ src_fab_out.has_rx_timestamp <= snk_fab_i.has_rx_timestamp;
+ src_fab_out.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid;
+
+ src_fab_o <= src_fab_out;
+
+ src_fab_out.sof <= '1' when (mbuf_valid_i = '1' and state = WAIT_MBUF and mbuf_drop_i = '0' and mbuf_is_pause_i = '0') else '0';
+ mbuf_ack_o <= '1' when (mbuf_valid_i = '1' and state = WAIT_MBUF) else '0';
+
+ snk_dreq_o <= src_dreq_i and dreq_mask and not snk_fab_i.sof;
+-- snk_dreq_o <= src_dreq_i and not snk_fab_i.sof;
+
+ p_gen_status : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ rmon_pfilter_drop_o <= '0';
+ state <= WAIT_FRAME;
+ dreq_mask <= '1';
+ sreg.match_class <= (others =>'0');
+ sreg.is_hp <= '0';
+ sreg.has_crc <= '0';
+ sreg.has_smac <= '0';
+ sreg.error <= '0';
+ else
+ case state is
+ when WAIT_FRAME =>
+ rmon_pfilter_drop_o <= '0';
+ if(snk_fab_i.sof = '1') then
+ state <= WAIT_MBUF;
+ dreq_mask <= '0';
+ end if;
+
+ when WAIT_MBUF =>
+ if(mbuf_valid_i = '1') then
+ rmon_pfilter_drop_o <= mbuf_drop_i;
+
+ if(mbuf_drop_i = '0' and mbuf_is_pause_i = '0') then
+ state <= GEN_STATUS;
+ dreq_mask <= '1';
+ else
+ state <= WAIT_FRAME;
+ dreq_mask <= '1';
+ end if;
+
+ sreg.match_class <= mbuf_pclass_i;
+ sreg.is_hp <= mbuf_is_hp_i;
+ sreg.has_crc <= '0';
+ sreg.has_smac <= '1';
+ sreg.error <= '0';
+ else
+ rmon_pfilter_drop_o <= '0';
+ --rmon_o.rx_path_timing_failure <= '0';
+ end if;
+
+ when GEN_STATUS =>
+ rmon_pfilter_drop_o <= '0';
+ if(src_dreq_i = '1') then
+ state <= WAIT_FRAME;
+ dreq_mask <= '1';
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd
new file mode 100644
index 000000000..ed027d6dc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_vlan_unit.vhd
@@ -0,0 +1,449 @@
+-------------------------------------------------------------------------------
+-- Title : RX VLAN unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_rx_vlan_unit.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2015 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+
+
+-- 3rd deframing pipeline stage - VLAN Unit
+
+entity ep_rx_vlan_unit is
+ port(clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ tclass_o : out std_logic_vector(2 downto 0);
+ vid_o : out std_logic_vector(11 downto 0);
+ tag_done_o : out std_logic;
+ is_tagged_o: out std_logic;
+
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers
+ );
+
+end ep_rx_vlan_unit;
+
+architecture behavioral of ep_rx_vlan_unit is
+
+
+ type t_tag_type is (NONE, PRIO, VLAN, NULL_VLAN);
+ type t_state is (WAIT_FRAME, DATA, FLUSH_STALL, DISCARD_FRAME, INSERT_TAG, END_FRAME);
+
+ signal dreq_mask : std_logic;
+ signal hdr_offset : std_logic_vector(11 downto 0);
+
+ signal comb_tag_type : t_tag_type;
+
+ signal tag_type : t_tag_type;
+ signal state : t_state;
+
+ signal at_ethertype : std_logic;
+ signal at_vid : std_logic;
+ signal at_tpid : std_logic;
+ signal is_tagged : std_logic;
+ signal stored_ethertype : std_logic_vector(15 downto 0);
+ signal stored_fab : t_ep_internal_fabric;
+
+ signal prio_int : std_logic_vector(2 downto 0);
+ signal force_dvalid : std_logic;
+
+ signal r_tcar_pcp_map : std_logic_vector(23 downto 0);
+ signal is_tag_inserted: std_logic;
+
+ procedure f_vlan_decision
+ (tag_type : t_tag_type;
+ qmode : in std_logic_vector(1 downto 0);
+ admit : out std_logic;
+ use_pvid : out std_logic;
+ use_fixed_prio : out std_logic) is
+ begin
+
+ use_pvid := 'X';
+ use_fixed_prio := 'X';
+ admit := '0';
+
+ -- From Jose's table. Thanks a lot!
+ case (qmode) is
+ when c_QMODE_PORT_ACCESS =>
+ case tag_type is
+ when NONE =>
+ admit := '1'; use_pvid := '1'; use_fixed_prio := '1';
+ when PRIO =>
+ admit := '1'; use_pvid := '1'; use_fixed_prio := '0';
+ when VLAN =>
+ admit := '0'; use_pvid := '0';
+ when NULL_VLAN =>
+ admit := '0';
+ end case;
+
+ when c_QMODE_PORT_TRUNK =>
+ case tag_type is
+ when NONE =>
+ admit := '0';
+ when PRIO =>
+ admit := '0';
+ when VLAN =>
+ admit := '1';
+ use_pvid := '0';
+ use_fixed_prio := '0';
+ when NULL_VLAN =>
+ admit := '0';
+ end case;
+
+ when c_QMODE_PORT_UNQUALIFIED =>
+
+ case tag_type is
+ when NONE =>
+ admit := '1';
+ use_pvid := '1'; use_fixed_prio := '1';
+ when PRIO =>
+ admit := '1';
+ use_pvid := '1'; use_fixed_prio := '0';
+ when VLAN =>
+ admit := '1';
+ use_pvid := '0'; use_fixed_prio := '0';
+ when NULL_VLAN =>
+ admit := '0';
+ end case;
+
+ when c_QMODE_PORT_VLAN_DISABLED =>
+ case tag_type is
+ when NONE =>
+ admit := '1';
+ use_pvid := '0';
+ use_fixed_prio := '1';
+ when PRIO =>
+ admit := '1';
+ use_pvid := '0';
+ use_fixed_prio := '0';
+ when VLAN =>
+ admit := '1';
+ use_pvid := '0';
+ use_fixed_prio := '0';
+ when NULL_VLAN =>
+ admit := '1';
+ use_pvid := '0';
+ use_fixed_prio := '0';
+ end case;
+ when others => null;
+ end case;
+ end procedure;
+
+
+begin -- behavioral
+
+ at_ethertype <= hdr_offset(6) and snk_fab_i.dvalid;
+ at_tpid <= hdr_offset(6) and snk_fab_i.dvalid and is_tagged;--unused
+ at_vid <= hdr_offset(7) and snk_fab_i.dvalid and is_tagged;
+
+ snk_dreq_o <= src_dreq_i and dreq_mask;-- and not at_ethertype;
+
+ p_decode_tag_type : process(snk_fab_i, is_tagged)
+ begin
+ if(is_tagged = '0') then
+ comb_tag_type <= NONE;
+ else
+ case snk_fab_i.data(11 downto 0) is
+ when x"000" => comb_tag_type <= PRIO;
+ when x"fff" => comb_tag_type <= NULL_VLAN;
+ when others => comb_tag_type <= VLAN;
+ end case;
+ end if;
+ end process;
+
+ p_tag_untag : process(clk_sys_i)
+ variable admit, use_pvid, use_fixed_prio : std_logic;
+ variable v_dreq_mask : std_logic;
+ variable v_stored_fab : t_ep_internal_fabric;
+ variable v_src_fab : t_ep_internal_fabric;
+ variable v_next_state : t_state;
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' then
+ hdr_offset(hdr_offset'left downto 1) <= (others => '0');
+ hdr_offset(0) <= '1';
+ state <= WAIT_FRAME;
+ dreq_mask <= '0';
+ vid_o <= (others =>'0');
+ is_tag_inserted <= '0';
+ is_tagged <= '0';
+ src_fab_o.eof <= '0';
+ src_fab_o.error <= '0';
+ src_fab_o.dvalid <= '0';
+
+ else
+ if(snk_fab_i.error = '1') then
+ state <= DISCARD_FRAME;
+ else
+
+ case state is
+ when WAIT_FRAME =>
+ dreq_mask <= '1';
+ src_fab_o.eof <= '0';
+ src_fab_o.error <= '0';
+ is_tagged <= '0';
+ is_tag_inserted <= '0';
+ prio_int <= regs_i.vcr0_prio_val_o;
+ vid_o <= (others =>'0');
+
+ if(snk_fab_i.sof = '1') then
+ hdr_offset(hdr_offset'left downto 1) <= (others => '0');
+ hdr_offset(0) <= '1';
+ state <= DATA;
+ end if;
+
+ when DATA =>
+
+ v_dreq_mask := '1';
+ v_src_fab.eof := '0';
+ v_src_fab.error := '0';
+ v_next_state := DATA;
+
+ if (snk_fab_i.dvalid = '1' and src_dreq_i = '0') then
+ v_stored_fab.bytesel := snk_fab_i.bytesel;
+ v_stored_fab.data := snk_fab_i.data;
+ v_stored_fab.addr := snk_fab_i.addr;
+ v_stored_fab.dvalid := '1';
+ v_next_state := FLUSH_STALL;
+ else
+ v_src_fab.addr := snk_fab_i.addr;
+ v_src_fab.data := snk_fab_i.data;
+ v_src_fab.dvalid := src_dreq_i and snk_fab_i.dvalid;
+ v_src_fab.bytesel := snk_fab_i.bytesel;
+ end if;
+
+ if(at_ethertype = '1') then
+ stored_ethertype <= snk_fab_i.data;
+
+ if(snk_fab_i.data = x"8100") then -- got a 802.1q tagged frame
+ is_tagged <= '1';
+ else
+ if (regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS) then
+ prio_int <= regs_i.vcr0_prio_val_o;
+ is_tag_inserted <= '1';
+ v_src_fab.dvalid := '0';
+ v_next_state := INSERT_TAG;
+ v_dreq_mask := '0';
+ elsif (regs_i.vcr0_qmode_o = c_QMODE_PORT_TRUNK) then
+ v_src_fab.dvalid := '0';
+ v_next_state := DISCARD_FRAME;
+ end if;
+ is_tagged <= '0';
+ end if;
+ end if;
+
+ if(snk_fab_i.eof = '1') then
+ if(src_dreq_i = '1') then
+ v_src_fab.eof := '1';
+ v_next_state := WAIT_FRAME;
+ else
+ v_next_state := END_FRAME;
+ end if;
+ end if;
+
+ if(at_vid = '1') then
+
+ -- decide what to do with the frame, basing on the port mode
+ -- (ACCESS, TRUNK, UNQUALIFIED), and whether the frame is tagged
+ -- or not.
+ f_vlan_decision(comb_tag_type, regs_i.vcr0_qmode_o, admit, use_pvid, use_fixed_prio);
+
+ -- assign the VID
+ if(admit = '0') then -- oops...
+ v_next_state := DISCARD_FRAME;
+ end if;
+
+ if(use_pvid = '1')then
+ v_stored_fab.data(11 downto 0) := regs_i.vcr0_pvid_o;
+ v_src_fab.data(11 downto 0) := regs_i.vcr0_pvid_o;
+ end if;
+ vid_o <= v_src_fab.data(11 downto 0);
+ -- assign the priority
+ if(regs_i.vcr0_fix_prio_o = '1' or use_fixed_prio = '1') then
+ -- Forced priority (or a non-priority tagged frame)? Take the priority
+ -- value from VCR0 register
+ prio_int <= regs_i.vcr0_prio_val_o;
+ else
+ -- Got a priority tag - use the value from the VLAN tag
+ prio_int <= snk_fab_i.data(15 downto 13);
+ end if;
+ end if;
+
+ if(snk_fab_i.dvalid = '1') then
+ hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0';
+ end if;
+
+ if(v_next_state = INSERT_TAG) then
+ src_fab_o.eof <= '0';
+ src_fab_o.dvalid <= '1';
+ src_fab_o.error <= '0';
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.data <= x"8100";
+ src_fab_o.bytesel <= '0';
+ else
+ src_fab_o.eof <= v_src_fab.eof;
+ src_fab_o.dvalid <= v_src_fab.dvalid;
+ src_fab_o.error <= v_src_fab.error;
+ src_fab_o.addr <= v_src_fab.addr;
+ src_fab_o.data <= v_src_fab.data;
+ src_fab_o.bytesel <= v_src_fab.bytesel;
+ end if;
+
+ dreq_mask <= v_dreq_mask;
+ stored_fab <= v_stored_fab;
+ state <= v_next_state;
+
+ when END_FRAME =>
+ if(src_dreq_i = '1')then
+ src_fab_o.eof <= '1';
+ src_fab_o.dvalid <= '0';
+ state <= WAIT_FRAME;
+ end if;
+
+ when DISCARD_FRAME =>
+ if(src_dreq_i = '1') then
+ src_fab_o.error <= '1';
+ src_fab_o.dvalid <= '0';
+ state <= WAIT_FRAME;
+ end if;
+
+ when FLUSH_STALL =>
+ if(src_dreq_i = '1')then
+ src_fab_o.addr <= stored_fab.addr;
+ src_fab_o.data <= stored_fab.data;
+ src_fab_o.dvalid <= stored_fab.dvalid;
+ src_fab_o.bytesel <= stored_fab.bytesel;
+ state <= DATA;
+ else
+ src_fab_o.DATA <= (others => 'X');
+ src_fab_o.dvalid <= '0';
+ end if;
+
+ when INSERT_TAG =>
+ src_fab_o.dvalid <= '0';
+
+ if(src_dreq_i = '1') then
+-- we are at 7th word from the beginning of the frame, but the sink reception
+-- is disabled, so we can insert the original ethertype as the TPID
+
+ if(hdr_offset(7) = '1') then
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.data <= regs_i.vcr0_prio_val_o & '0' & regs_i.vcr0_pvid_o;
+ src_fab_o.dvalid <= '1';
+ vid_o <= regs_i.vcr0_pvid_o; -- use the inserted PVID
+ dreq_mask <= '0';
+ stored_fab.bytesel <= snk_fab_i.bytesel;
+ stored_fab.data <= snk_fab_i.data;
+ stored_fab.addr <= snk_fab_i.addr;
+ stored_fab.dvalid <= snk_fab_i.dvalid;
+
+ end if;
+
+ if(hdr_offset(8) = '1') then
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.data <= stored_ethertype;
+ src_fab_o.dvalid <= '1';
+ dreq_mask <= '1';
+ end if;
+
+ if(hdr_offset(9) = '1') then
+ src_fab_o.addr <= stored_fab.addr;
+ src_fab_o.data <= stored_fab.data;
+ src_fab_o.dvalid <= stored_fab.dvalid;
+ src_fab_o.bytesel <= stored_fab.bytesel;
+ dreq_mask <= '1';
+ state <= DATA;
+ end if;
+
+ hdr_offset <= hdr_offset(hdr_offset'left-1 downto 0) & '0';
+ else
+ src_fab_o.dvalid <= '0';
+ end if;
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Process: p_map_prio_to_tc
+-- Maps the PCP value from the 802.1q header into a traffic class for further
+-- processing. The mapping table is stored in TCAR register.
+
+ regs_o.tcar_pcp_map_i <= r_tcar_pcp_map;
+
+ p_map_prio_to_tc : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+
+ if(regs_i.tcar_pcp_map_load_o = '1') then
+ r_tcar_pcp_map <= regs_i.tcar_pcp_map_o;
+ end if;
+
+ if(rst_n_i = '0' or regs_i.ecr_rx_en_o = '0' or snk_fab_i.sof = '1')then
+ tag_done_o <= '0';
+ tclass_o <= "000";
+ elsif(hdr_offset(9) = '1') then
+ -- we're already after the headers, so prio_int is
+ -- certainly valid
+ tag_done_o <= '1';
+ case prio_int is
+ when "000" => tclass_o <= r_tcar_pcp_map(2 downto 0);
+ when "001" => tclass_o <= r_tcar_pcp_map(5 downto 3);
+ when "010" => tclass_o <= r_tcar_pcp_map(8 downto 6);
+ when "011" => tclass_o <= r_tcar_pcp_map(11 downto 9);
+ when "100" => tclass_o <= r_tcar_pcp_map(14 downto 12);
+ when "101" => tclass_o <= r_tcar_pcp_map(17 downto 15);
+ when "110" => tclass_o <= r_tcar_pcp_map(20 downto 18);
+ when "111" => tclass_o <= r_tcar_pcp_map(23 downto 21);
+ when others => tclass_o <= "000";--"XXX"; -- packet probably contains porn
+ end case;
+ end if;
+ end if;
+ end process;
+
+ src_fab_o.sof <= regs_i.ecr_rx_en_o and snk_fab_i.sof;
+ is_tagged_o <= is_tagged or is_tag_inserted;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd
new file mode 100644
index 000000000..b496ee3b7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_rx_wb_master.vhd
@@ -0,0 +1,226 @@
+-------------------------------------------------------------------------------
+-- Title : White Rabbit MAC/Endpoint
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_rx_wb_master
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: RX Wishbone Master. Converts the internal fabric (DREQ-VALID
+-- throttling) to Pipelined Wishbone (b4)
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-08-22 0.1 twlostow Created
+------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+
+entity ep_rx_wb_master is
+ generic(
+ g_ignore_ack : boolean := true;
+ g_cyc_on_stall : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+-- physical coding sublayer (PCS) interface
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+-- Wishbone I/O (master)
+ src_wb_i : in t_wrf_source_in;
+ src_wb_o : out t_wrf_source_out
+ );
+
+end ep_rx_wb_master;
+
+architecture behavioral of ep_rx_wb_master is
+
+ type t_state is (IDLE, DATA, FLUSH_STALL, FINISH_CYCLE, THROW_ERROR);
+
+ signal state : t_state;
+ signal ack_count : unsigned(3 downto 0);
+ signal src_out_int : t_wrf_source_out;
+
+ signal tmp_sel : std_logic;
+ signal tmp_dat : std_logic_vector(15 downto 0);
+ signal tmp_adr : std_logic_vector(1 downto 0);
+ signal enter_idle : std_logic;
+ signal sof_reg : std_logic;
+
+begin -- behavioral
+
+ gen_cyc_on_stall: if g_cyc_on_stall = true generate
+ snk_dreq_o <= '1' when ((src_wb_i.stall = '0' and state /= FINISH_CYCLE and
+ state /= THROW_ERROR and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and snk_fab_i.sof = '0' and enter_idle = '0') or state = IDLE) else '0';
+ end generate;
+
+ gen_nocyc_on_stall: if g_cyc_on_stall = false generate
+-- snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and snk_fab_i.sof = '0' and enter_idle = '0') else '0';
+-- snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and snk_fab_i.eof = '0' and snk_fab_i.error = '0' and enter_idle = '0') else '0';
+ snk_dreq_o <= '1' when (src_wb_i.stall = '0' and state /= FINISH_CYCLE and
+ state /= THROW_ERROR and snk_fab_i.eof = '0' and snk_fab_i.error = '0') else '0';
+ end generate;
+
+ p_count_acks : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or src_out_int.cyc = '0' then
+ ack_count <= (others => '0');
+ else
+ if(src_out_int.stb = '1' and src_wb_i.stall = '0' and src_wb_i.ack = '0') then
+ ack_count <= ack_count + 1;
+ elsif(src_wb_i.ack = '1' and not(src_out_int.stb = '1' and src_wb_i.stall = '0')) then
+ ack_count <= ack_count - 1;
+ end if;
+
+ end if;
+ end if;
+ end process;
+
+ process(clk_sys_i)
+ variable stat : t_wrf_status_reg := c_wrf_status_init_value;
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= IDLE;
+ src_out_int.stb <= '0';
+ src_out_int.we <= '1';
+ src_out_int.adr <= c_WRF_DATA;
+ src_out_int.cyc <= '0';
+ enter_idle <= '1';
+ sof_reg <= '0';
+ else
+ case state is
+ when IDLE =>
+ enter_idle <= '0';
+ src_out_int.adr <= snk_fab_i.addr;
+ src_out_int.dat <= snk_fab_i.data;
+
+ if((snk_fab_i.sof='1' or sof_reg='1') and src_wb_i.err = '0') then
+ src_out_int.cyc <= '1';
+ state <= DATA;
+ end if;
+
+ when DATA =>
+ sof_reg <= '0';
+ if(src_wb_i.stall = '0') then
+ src_out_int.adr <= snk_fab_i.addr;
+ src_out_int.dat <= snk_fab_i.data;
+ src_out_int.stb <= snk_fab_i.dvalid;
+ src_out_int.sel(1) <= '1';
+ src_out_int.sel(0) <= not snk_fab_i.bytesel;
+ end if;
+
+
+ if(src_wb_i.err = '1') then
+ state <= IDLE;
+ enter_idle <= '1';
+ src_out_int.cyc <= '0';
+ src_out_int.stb <= '0';
+ elsif(snk_fab_i.error = '1') then
+ state <= THROW_ERROR;
+ elsif(src_wb_i.stall = '1' and snk_fab_i.dvalid = '1') then
+ state <= FLUSH_STALL;
+ end if;
+
+ if(snk_fab_i.eof = '1')then
+ state <= FINISH_CYCLE;
+ end if;
+
+
+
+ tmp_adr <= snk_fab_i.addr;
+ tmp_dat <= snk_fab_i.data;
+ tmp_sel <= snk_fab_i.bytesel;
+
+ when FLUSH_STALL =>
+ if(src_wb_i.err = '1') then
+ state <= IDLE;
+ enter_idle <= '1';
+ src_out_int.cyc <= '0';
+ src_out_int.stb <= '0';
+ elsif(src_wb_i.stall = '0') then
+ src_out_int.dat <= tmp_dat;
+ src_out_int.adr <= tmp_adr;
+ src_out_int.stb <= '1';
+ src_out_int.sel(1) <= '1';
+ src_out_int.sel(0) <= not tmp_sel;
+ state <= DATA;
+ end if;
+
+ when THROW_ERROR =>
+ if(snk_fab_i.sof='1') then
+ sof_reg <= '1';
+ end if;
+ if(src_wb_i.err = '1') then
+ enter_idle <= '1';
+ state <= IDLE;
+ src_out_int.cyc <= '0';
+ src_out_int.stb <= '0';
+ elsif(src_wb_i.stall = '0') then
+ stat.error := '1';
+ src_out_int.adr <= c_WRF_STATUS;
+ src_out_int.dat <= f_marshall_wrf_status(stat);
+ src_out_int.stb <= '1';
+ state <= FINISH_CYCLE;
+ end if;
+
+
+ when FINISH_CYCLE =>
+ if(snk_fab_i.sof='1') then
+ sof_reg <= '1';
+ end if;
+ if(src_wb_i.stall = '0') then
+ src_out_int.stb <= '0';
+ end if;
+
+ if(((ack_count = 0) or g_ignore_ack) and src_out_int.stb = '0') then
+ src_out_int.cyc <= '0';
+ enter_idle <= '1';
+ state <= IDLE;
+ end if;
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+
+ src_wb_o <= src_out_int;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd
new file mode 100644
index 000000000..cf0be4e9a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect.vhd
@@ -0,0 +1,280 @@
+-------------------------------------------------------------------------------
+-- Title : 802.3x 1000base-X compatible synchronization detect unit
+-- Project : WhiteRabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_sync_detect.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-05-28
+-- Last update: 2012-04-27
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: Module implements a link synchronization detect state machine
+-- compatible with 802.3x spec.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-05-28 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+
+entity ep_sync_detect is
+
+ port (
+-- reset, synchronous to rbclk_i, active LOW
+ rst_n_i : in std_logic;
+-- recovered byte clock
+ rbclk_i : in std_logic;
+-- enable, active HI
+ en_i : in std_logic;
+-- decoded data input, active HI
+ data_i : in std_logic_vector(7 downto 0);
+-- decoded K signal, active HI
+ k_i : in std_logic;
+-- 8b10b coding error indication, active HI
+ err_i : in std_logic;
+-- sync detect output, active HI
+ synced_o : out std_logic;
+-- odd/even field indicator (HI = even field)
+ even_o : out std_logic;
+
+ cal_i: in std_logic
+ );
+
+end ep_sync_detect;
+
+architecture behavioral of ep_sync_detect is
+
+ type t_sync_fsm_state is (LOSS_OF_SYNC, COMMA_DETECT_1, ACQUIRE_SYNC_1, COMMA_DETECT_2, ACQUIRE_SYNC_2, COMMA_DETECT_3, SYNC_ACQUIRED_1, SYNC_ACQUIRED_2, SYNC_ACQUIRED_3, SYNC_ACQUIRED_4, SYNC_ACQUIRED_2A, SYNC_ACQUIRED_3A, SYNC_ACQUIRED_4A);
+
+ signal state : t_sync_fsm_state;
+ signal cggood : std_logic;
+ signal cgbad : std_logic;
+ signal comma : std_logic;
+ signal rx_even : std_logic;
+ signal is_d : std_logic;
+ signal is_k : std_logic;
+ signal is_k28_5 : std_logic;
+ signal good_cgs : unsigned(2 downto 0);
+
+
+begin -- behavioral
+
+
+ is_k28_5 <= '1' when data_i = c_k28_5 else '0';
+ is_d <= (not k_i);
+
+ comma <= is_k28_5;
+
+-- cgbad <= err_i or (k_i and comma and rx_even);
+
+ cgbad <= err_i or (k_i and comma and (not rx_even));
+ cggood <= not (err_i or (k_i and comma and (not rx_even)));
+
+ even_o <= rx_even;
+
+-- fixme!
+
+ -- 1000base-x sync detect state machine
+ -- as defined in 802.3-2008, figure 36-9.
+
+
+ sync_fsm : process (rbclk_i, rst_n_i)
+ begin -- process sync_fsm
+ if rising_edge(rbclk_i) then
+ if(rst_n_i = '0') then
+ state <= LOSS_OF_SYNC;
+ synced_o <= '0';
+ rx_even <= '0';
+ good_cgs <= (others => '0');
+ else
+ if(en_i = '0') then
+ state <= LOSS_OF_SYNC;
+ synced_o <= '0';
+ rx_even <= '0';
+ good_cgs <= (others => '0');
+ else
+
+ -- prevents from
+ if(cal_i = '0') then
+
+ case state is
+ when LOSS_OF_SYNC =>
+ synced_o <= '0';
+ if(comma = '1') then
+ rx_even <= '0';
+ state <= COMMA_DETECT_1;
+ else
+ rx_even <= not rx_even;
+ end if;
+
+ when COMMA_DETECT_1 =>
+ rx_even <= not rx_even;
+ if(is_d = '1') then -- got data
+ state <= ACQUIRE_SYNC_1;
+ else
+ state <= LOSS_OF_SYNC;
+ end if;
+
+ when ACQUIRE_SYNC_1 =>
+ if(cgbad = '1') then
+ state <= LOSS_OF_SYNC;
+ rx_even <= not rx_even;
+ elsif (rx_even = '1' and comma = '1') then
+ rx_even <= '0'; -- was 1
+ state <= COMMA_DETECT_2;
+ else
+ rx_even <= not rx_even;
+ end if;
+
+ when COMMA_DETECT_2 =>
+ rx_even <= not rx_even;
+ if(is_d = '1') then
+ state <= ACQUIRE_SYNC_2;
+ else
+ state <= LOSS_OF_SYNC;
+ end if;
+
+ when ACQUIRE_SYNC_2 =>
+ if(cgbad = '1') then
+ rx_even <= not rx_even;
+ state <= LOSS_OF_SYNC;
+ elsif (rx_even = '1' and comma = '1') then
+ state <= COMMA_DETECT_3;
+ rx_even <= '0';
+ else
+ rx_even <= not rx_even;
+ end if;
+
+ when COMMA_DETECT_3 =>
+ rx_even <= not rx_even;
+ if(is_d = '1') then
+ state <= SYNC_ACQUIRED_1;
+ else
+ state <= LOSS_OF_SYNC;
+ end if;
+
+ when SYNC_ACQUIRED_1 =>
+ synced_o <= '1';
+ rx_even <= not rx_even;
+
+ if(cggood = '1') then
+ state <= SYNC_ACQUIRED_1;
+ end if;
+
+ if (cgbad = '1') then
+ state <= SYNC_ACQUIRED_2;
+ end if;
+
+ when SYNC_ACQUIRED_2 =>
+ rx_even <= not rx_even;
+ good_cgs <= (others => '0');
+
+ if(cggood = '1') then
+ state <= SYNC_ACQUIRED_2A;
+ end if;
+
+ if(cgbad = '1') then
+ state <= SYNC_ACQUIRED_3;
+ end if;
+
+ when SYNC_ACQUIRED_2A =>
+ rx_even <= not rx_even;
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and cggood = '1') then
+ state <= SYNC_ACQUIRED_1;
+ end if;
+
+ if(cgbad = '1') then
+ state <= SYNC_ACQUIRED_3;
+ end if;
+
+ when SYNC_ACQUIRED_3 =>
+ rx_even <= not rx_even;
+ good_cgs <= (others => '0');
+
+ if(cggood = '1') then
+ state <= SYNC_ACQUIRED_3A;
+ end if;
+
+ if(cgbad = '1') then
+ state <= SYNC_ACQUIRED_4;
+ end if;
+
+ when SYNC_ACQUIRED_3A =>
+ rx_even <= not rx_even;
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and cggood = '1') then
+ state <= SYNC_ACQUIRED_2;
+ end if;
+
+ if(cgbad = '1') then
+ state <= SYNC_ACQUIRED_4;
+ end if;
+
+ when SYNC_ACQUIRED_4 =>
+ rx_even <= not rx_even;
+ good_cgs <= (others => '0');
+
+ if(cggood = '1') then
+ state <= SYNC_ACQUIRED_4A;
+ end if;
+
+ if(cgbad = '1') then
+ state <= LOSS_OF_SYNC;
+ end if;
+
+ when SYNC_ACQUIRED_4A =>
+ rx_even <= not rx_even;
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and cggood = '1') then
+ state <= SYNC_ACQUIRED_3;
+ end if;
+
+ if (cgbad = '1') then
+ state <= LOSS_OF_SYNC;
+ end if;
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd
new file mode 100644
index 000000000..c49209499
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_sync_detect_16bit.vhd
@@ -0,0 +1,193 @@
+-------------------------------------------------------------------------------
+-- Title : 802.3x 1000base-X compatible synchronization detect unit
+-- Project : WhiteRabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_sync_detect.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-05-28
+-- Last update: 2012-01-18
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: Module implements a link synchronization detect state machine
+-- compatible with 802.3x spec.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-05-28 1.0 twlostow Created
+-------------------------------------------------------------------------------
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+
+entity ep_sync_detect_16bit is
+
+ port (
+-- reset, synchronous to rbclk_i, active LOW
+ rst_n_i : in std_logic;
+-- recovered byte clock
+ rbclk_i : in std_logic;
+-- enable, active HI
+ en_i : in std_logic;
+-- decoded data input, active HI
+ data_i : in std_logic_vector(15 downto 0);
+-- decoded K signal, active HI
+ k_i : in std_logic_vector(1 downto 0);
+-- 8b10b coding error indication, active HI
+ err_i : in std_logic;
+-- sync detect output, active HI
+ synced_o : out std_logic;
+
+ cal_i : in std_logic
+ );
+
+end ep_sync_detect_16bit;
+
+architecture behavioral of ep_sync_detect_16bit is
+
+ type t_sync_fsm_state is (LOSS_OF_SYNC, CD_ACQ_1, CD_ACQ_2, CD_ACQ_3, SYNC_ACQUIRED_1, SYNC_ACQUIRED_2, SYNC_ACQUIRED_3, SYNC_ACQUIRED_4, SYNC_ACQUIRED_2A, SYNC_ACQUIRED_3A, SYNC_ACQUIRED_4A);
+
+
+ function f_pick(sel : std_logic;
+ w1 : t_sync_fsm_state;
+ w0 : t_sync_fsm_state) return t_sync_fsm_state is
+
+ begin
+ if(sel = '1') then
+ return w1;
+ else
+ return w0;
+ end if;
+ end f_pick;
+
+
+
+ signal state : t_sync_fsm_state;
+ signal good_cgs : unsigned(2 downto 0);
+
+ signal valid_idle : std_logic;
+ signal invalid_code : std_logic;
+ signal valid_data : std_logic;
+
+begin -- behavioral
+
+ valid_idle <= '1' when (k_i = "10" and data_i(15 downto 8) = c_k28_5 and err_i = '0') else '0';
+ valid_data <= '1' when (k_i = "00" and err_i = '0') else '0';
+ invalid_code <= '1' when (err_i = '1' or (k_i(0) = '1' and data_i(7 downto 0) = c_k28_5)) else '0';
+
+
+ sync_fsm : process (rbclk_i, rst_n_i)
+ begin -- process sync_fsm
+ if rising_edge(rbclk_i) then
+ if(rst_n_i = '0') then
+ state <= LOSS_OF_SYNC;
+ synced_o <= '0';
+ good_cgs <= (others => '0');
+ else
+ if(en_i = '0') then
+ state <= LOSS_OF_SYNC;
+ synced_o <= '0';
+ good_cgs <= (others => '0');
+ else
+
+ -- prevents from
+ if(cal_i = '0') then
+
+ case state is
+ when LOSS_OF_SYNC =>
+ synced_o <= '0';
+ state <= f_pick(valid_idle, CD_ACQ_1, LOSS_OF_SYNC);
+ when CD_ACQ_1 =>
+ state <= f_pick(valid_idle or valid_data, CD_ACQ_2, LOSS_OF_SYNC);
+ when CD_ACQ_2 =>
+ state <= f_pick(valid_idle, CD_ACQ_3, LOSS_OF_SYNC);
+ when CD_ACQ_3 =>
+ state <= f_pick(valid_idle or valid_data, SYNC_ACQUIRED_1, LOSS_OF_SYNC);
+
+ when SYNC_ACQUIRED_1 =>
+ synced_o <= '1';
+ state <= f_pick(invalid_code, SYNC_ACQUIRED_2, SYNC_ACQUIRED_1);
+
+ when SYNC_ACQUIRED_2 =>
+ good_cgs <= (others => '0');
+ state <= f_pick(invalid_code, SYNC_ACQUIRED_3, SYNC_ACQUIRED_2A);
+
+ when SYNC_ACQUIRED_2A =>
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and invalid_code = '0') then
+ state <= SYNC_ACQUIRED_1;
+ end if;
+
+ if(invalid_code = '1') then
+ state <= SYNC_ACQUIRED_3;
+ end if;
+
+ when SYNC_ACQUIRED_3 =>
+ good_cgs <= (others => '0');
+ state <= f_pick(invalid_code, SYNC_ACQUIRED_4, SYNC_ACQUIRED_3A);
+
+
+ when SYNC_ACQUIRED_3A =>
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and invalid_code = '0') then
+ state <= SYNC_ACQUIRED_2;
+ end if;
+
+ if(invalid_code = '1') then
+ state <= SYNC_ACQUIRED_4;
+ end if;
+
+ when SYNC_ACQUIRED_4 =>
+ good_cgs <= (others => '0');
+ state <= f_pick(invalid_code, LOSS_OF_SYNC, SYNC_ACQUIRED_4A);
+
+ when SYNC_ACQUIRED_4A =>
+ good_cgs <= good_cgs + 1;
+
+ if(good_cgs = "011" and invalid_code = '0') then
+ state <= SYNC_ACQUIRED_3;
+ end if;
+
+ if (invalid_code = '1') then
+ state <= LOSS_OF_SYNC;
+ end if;
+ end case;
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd
new file mode 100644
index 000000000..0ea2cfd2b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_timestamping_unit.vhd
@@ -0,0 +1,424 @@
+-------------------------------------------------------------------------------
+-- Title : Optical 1000base-X endpoint - IEEE1588/WhiteRabbit
+-- timestamping unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_timestamping_unit.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL'87
+-------------------------------------------------------------------------------
+-- Description: Timestamping unit. Takes both TX and RX timestamps upon
+-- detection of rising edge on asynchronous timestamp strobe inputs.
+-- There are 2 timestamps taken:
+-- - rising edge timestamp (28 bits by default) - the main timestamp value
+-- - falling edge timestamp (4 least significant bits of the TS counter) which
+-- are used to detect metastabilities and setup/hold violations which may
+-- occur during sampling asynchronous timestamp strobes.
+-- Both timestamps are taken using refclk_i.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2012 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-06-22 0.1 twlostow Created
+-------------------------------------------------------------------------------
+
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_timestamping_unit is
+ generic (
+-- size of rising edge timestamp
+ g_timestamp_bits_r : natural := 28;
+-- size of falling edge timestamp
+ g_timestamp_bits_f : natural := 4;
+ g_ref_clock_rate : integer := 125000000
+ );
+
+ port (
+-- reference clock (for the timestamping counters)
+ clk_ref_i : in std_logic;
+
+-- reference / 2 (bus-side logic)
+ clk_sys_i : in std_logic;
+
+-- RX clock
+ clk_rx_i : in std_logic;
+
+ -- resets
+ rst_n_rx_i : in std_logic;
+ rst_n_ref_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+
+-- PPS pulse input (active HI for 1 clk_ref_i cycle) for internal TS counter synchronization
+ pps_csync_p1_i : in std_logic;
+
+ pps_valid_i : in std_logic;
+
+-- asynchronous TX/RX timestamp triggers (from PCS)
+ tx_timestamp_trigger_p_a_i : in std_logic;
+ rx_timestamp_trigger_p_a_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- RX Timestamp output (clk_rx_i clock domain)
+-------------------------------------------------------------------------------
+
+ -- RX timestamp (to RX deframer)
+ rxts_timestamp_o : out std_logic_vector(31 downto 0);
+
+ -- RX timestamp strobe (back to the PCSr). When HI,
+ -- rxts_timestamp_o and rxts_timestamp_valid_o contain information about
+ -- the RX timestamp and its validity
+ rxts_timestamp_stb_o : out std_logic;
+
+ -- RX timestamp valid (to RX deframer)
+ rxts_timestamp_valid_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- TX Timestamp output (clk_ref_i clock domain)
+-------------------------------------------------------------------------------
+
+ -- TX timestamp output (to TXTSU/Framer)
+ txts_timestamp_o : out std_logic_vector(31 downto 0);
+
+ -- TX timestamp strobe (to TXTSU/Framer). When HI,
+ -- txts_timestamp_o and txts_timestamp_valid_o contain information about
+ -- the TX timestamp and its validity
+ txts_timestamp_stb_o : out std_logic;
+
+ -- TX timestamp valid (to TXTSU/Framer)
+ txts_timestamp_valid_o : out std_logic;
+
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+
+-------------------------------------------------------------------------------
+-- Wishbone regs
+-------------------------------------------------------------------------------
+
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers
+ );
+
+end ep_timestamping_unit;
+
+
+
+architecture syn of ep_timestamping_unit is
+
+
+ component ep_ts_counter
+ generic (
+ g_num_bits_r : natural;
+ g_num_bits_f : natural;
+ g_init_value : natural;
+ g_max_value : natural);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ overflow_o : out std_logic := '0';
+ value_r_o : out std_logic_vector(g_num_bits_r-1 downto 0);
+ value_f_o : out std_logic_vector(g_num_bits_f-1 downto 0);
+ pps_p_i : in std_logic;
+ sync_start_p_i : in std_logic;
+ sync_done_o : out std_logic);
+ end component;
+
+ signal cntr_rx_r : std_logic_vector(g_timestamp_bits_r-1 downto 0);
+ signal cntr_rx_f : std_logic_vector(g_timestamp_bits_f-1 downto 0);
+ signal cntr_tx_r : std_logic_vector(g_timestamp_bits_r-1 downto 0);
+ signal cntr_tx_f : std_logic_vector(g_timestamp_bits_f-1 downto 0);
+
+ signal cntr_r : std_logic_vector(g_timestamp_bits_r-1 downto 0);
+ signal cntr_f : std_logic_vector(g_timestamp_bits_f-1 downto 0);
+
+ signal take_tx_synced_p, take_rx_synced_p : std_logic;
+ signal take_tx_synced_p_fedge, take_rx_synced_p_fedge : std_logic;
+
+ signal tx_sync_delay : std_logic_vector(4 downto 0);
+ signal rx_sync_delay : std_logic_vector(4 downto 0);
+ signal rx_ts_done : std_logic;
+ signal tx_ts_done : std_logic;
+
+ signal got_tx_oob : std_logic;
+ signal tx_oob_reg : std_logic_vector(15 downto 0);
+
+
+ signal rx_oob_reg : std_logic_vector(47 downto 0);
+ signal fid_valid : std_logic;
+
+ signal txts_valid : std_logic;
+
+ signal valid_rx, valid_tx : std_logic;
+
+
+ signal cal_count : unsigned(5 downto 0);
+ signal rx_trigger_mask, rx_trigger_a, rx_cal_pulse_a : std_logic;
+
+ signal regs_o_tscr_cs_done : std_logic;
+ signal regs_o_tscr_rx_cal_result : std_logic;
+
+begin -- syn
+
+ -- Instatniation of the timestamping counter
+ U_counter : ep_ts_counter
+ generic map (
+ g_num_bits_r => g_timestamp_bits_r,
+ g_num_bits_f => g_timestamp_bits_f,
+ g_init_value => 0,
+ g_max_value => g_ref_clock_rate-1)
+ port map (
+
+ clk_i => clk_ref_i,
+ rst_n_i => rst_n_ref_i,
+ pps_p_i => pps_csync_p1_i,
+ overflow_o => open,
+ value_r_o => cntr_r,
+ value_f_o => cntr_f,
+ sync_start_p_i => regs_i.tscr_cs_start_o,
+ sync_done_o => regs_o_tscr_cs_done
+ );
+
+
+ p_gen_regs_o: process (regs_o_tscr_cs_done, regs_o_tscr_rx_cal_result) is
+ begin
+ -- initial values
+ regs_o <= c_ep_in_registers_init_value;
+
+ -- override initial values
+ regs_o.tscr_cs_done_i <= regs_o_tscr_cs_done;
+ regs_o.tscr_rx_cal_result_i <= regs_o_tscr_rx_cal_result;
+
+ end process p_gen_regs_o;
+
+ p_rx_timestamper_calibration : process(clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if rst_n_rx_i = '0' then
+ cal_count <= (others => '0');
+ rx_cal_pulse_a <= '0';
+ rx_trigger_mask <= '1';
+
+ elsif(regs_i.tscr_rx_cal_start_o = '1') then
+ cal_count <= to_unsigned(1, 6);
+ rx_trigger_mask <= '0';
+ elsif(cal_count /= 0) then
+ cal_count <= cal_count + 1;
+
+ if(rx_ts_done = '1') then
+ if(cntr_rx_f /= cntr_rx_r(g_timestamp_bits_f-1 downto 0)) then
+ regs_o_tscr_rx_cal_result <= '1';
+ else
+ regs_o_tscr_rx_cal_result <= '0';
+ end if;
+ end if;
+
+ else
+
+ rx_trigger_mask <= '1';
+ end if;
+
+ if(cal_count (5 downto 4) = x"01") then
+ rx_cal_pulse_a <= '1';
+ else
+ rx_cal_pulse_a <= '0';
+ end if;
+
+ end if;
+ end process;
+
+
+ rx_trigger_a <= (rx_timestamp_trigger_p_a_i and rx_trigger_mask) or rx_cal_pulse_a;
+ -- Sync chains for timestamp strobes: 4 combinations - (TX-RX) -> (rising/falling)
+ sync_ffs_tx_r : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => rst_n_ref_i,
+ data_i => tx_timestamp_trigger_p_a_i,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => take_tx_synced_p);
+
+
+
+ sync_ffs_rx_r : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => rst_n_ref_i,
+ data_i => rx_trigger_a,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => take_rx_synced_p);
+
+
+ sync_ffs_tx_f : gc_sync_ffs
+ generic map (
+ g_sync_edge => "negative")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => rst_n_ref_i,
+ data_i => tx_timestamp_trigger_p_a_i,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => take_tx_synced_p_fedge);
+
+ sync_ffs_rx_f : gc_sync_ffs
+ generic map (
+ g_sync_edge => "negative")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => rst_n_ref_i,
+ data_i => rx_trigger_a,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => take_rx_synced_p_fedge);
+
+
+
+ take_r : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if(rst_n_ref_i = '0') then
+ cntr_rx_r <= (others => '0');
+ cntr_tx_r <= (others => '0');
+
+ rx_sync_delay <= (others => '0');
+ tx_sync_delay <= (others => '0');
+ else
+ -- shift reg
+
+ if take_rx_synced_p = '1' then
+ cntr_rx_r <= cntr_r;
+ valid_rx <= pps_valid_i;
+ rx_sync_delay(rx_sync_delay'length-1 downto rx_sync_delay'length-4) <= (others => '1');
+ else
+ rx_sync_delay <= '0' & rx_sync_delay(rx_sync_delay'length-1 downto 1);
+ end if;
+
+ if take_tx_synced_p = '1' then
+ cntr_tx_r <= cntr_r;
+ valid_tx <= pps_valid_i;
+ tx_sync_delay(tx_sync_delay'length-1 downto tx_sync_delay'length-4) <= (others => '1');
+ else
+ tx_sync_delay <= '0' & tx_sync_delay(tx_sync_delay'length-1 downto 1);
+ end if;
+
+ end if;
+ end if;
+ end process;
+
+ take_f : process(clk_ref_i)
+ begin
+ if falling_edge(clk_ref_i) then
+ if rst_n_ref_i = '0' then
+ cntr_rx_f <= (others => '0');
+ cntr_tx_f <= (others => '0');
+ else
+ if take_rx_synced_p_fedge = '1' then
+ cntr_rx_f <= cntr_f;
+ end if;
+ if take_tx_synced_p_fedge = '1' then
+ cntr_tx_f <= cntr_f;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ -- timestamping "done" signals sync chains (clk_ref -> clk_sys)
+ tx_done_gen : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_sys_i,
+ data_i => tx_sync_delay(0),
+ synced_o => open,
+ npulse_o => tx_ts_done,
+ ppulse_o => open);
+
+ -- timestamping "done" signals sync chains (clk_rx -> clk_sys)
+ rx_done_gen : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_rx_i,
+ rst_n_i => rst_n_rx_i,
+ data_i => rx_sync_delay(0),
+ synced_o => open,
+ npulse_o => rx_ts_done,
+ ppulse_o => open);
+
+ txts_o <= tx_ts_done; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o <= rx_ts_done; -- 2013-Nov-28 peterj added for debugging/calibration
+
+ p_output_rx_ts : process (clk_rx_i)
+ begin
+ if rising_edge(clk_rx_i) then
+ if(rst_n_rx_i = '0') then
+ rxts_timestamp_stb_o <= '0';
+ rxts_timestamp_o <= (others => '0');
+ rxts_timestamp_valid_o <= '0';
+ else
+ if(regs_i. tscr_en_rxts_o = '0') then
+ rxts_timestamp_stb_o <= '0';
+ elsif(rx_ts_done = '1' and regs_i.tscr_en_rxts_o = '1') then
+ rxts_timestamp_stb_o <= '1';
+ rxts_timestamp_valid_o <= valid_rx;
+ rxts_timestamp_o <= cntr_rx_f & cntr_rx_r;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ p_output_tx_ts : process (clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_sys_i = '0') then
+ txts_timestamp_o <= (others => '0');
+ txts_timestamp_stb_o <= '0';
+ txts_timestamp_valid_o <= '0';
+ elsif(tx_ts_done = '1' and regs_i.tscr_en_txts_o = '1') then
+ txts_timestamp_o <= cntr_tx_f & cntr_tx_r;
+ txts_timestamp_stb_o <= '1';
+ txts_timestamp_valid_o <= valid_tx;
+ end if;
+ end if;
+ end process;
+
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd
new file mode 100644
index 000000000..2b9589f5a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_ts_counter.vhd
@@ -0,0 +1,152 @@
+-------------------------------------------------------------------------------
+-- Title : Optical 1000base-X endpoint - IEEE1588 timestamping counter
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_ts_counter.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL'87
+-------------------------------------------------------------------------------
+-- Description: Implementation of dual-edge synchronous counter for
+-- PTP timestamping purposes. Falling edge counter always follows the value of
+-- rising edge counter. For space reasons only some LSBs of falling edge
+-- counter are outputted.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-06-22 1.0 twlostow Created
+-- 2010-09-01 1.0 twlostow Added PPS sync
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.endpoint_private_pkg.all;
+
+entity ep_ts_counter is
+
+ generic (
+-- number of bits for rising edge counter
+ g_num_bits_r : natural := 27;
+-- number of bits to copy for falling edge counter
+ g_num_bits_f : natural := 5;
+-- initial value of the counter (after reset)
+ g_init_value : natural := 124999990;
+-- max value of the counter after reaching which it goes back to 0
+ g_max_value : natural := 124999999
+ );
+
+ port (
+ -- counter clock
+ clk_i : in std_logic;
+ -- synchronous reset, active LOW
+ rst_n_i : in std_logic;
+-- overflow indicator, active HI when counter value = g_max_value
+ overflow_o : out std_logic := '0';
+-- counter values (rising and falling edge)
+ value_r_o : out std_logic_vector(g_num_bits_r-1 downto 0);
+ value_f_o : out std_logic_vector(g_num_bits_f-1 downto 0);
+
+-- PPS pulse input, active HI, synchronous to clk_i. Resets the counter when
+-- synchronization is enabled
+ pps_p_i : in std_logic;
+
+-- Synchronization enable: a HI pulse on this line will cause the counter to be
+-- synced to next incoming PPS pulse. After then, sync_done_o will become HI.
+ sync_start_p_i : in std_logic;
+
+-- Synchronization done: HI indicates that we've got a PPS pulse we've been waiting for
+-- and now the counter value equals 0 when PPS pulse is active.
+ sync_done_o : out std_logic
+ );
+
+end ep_ts_counter;
+
+architecture syn of ep_ts_counter is
+
+ signal cntr_r : unsigned(g_num_bits_r-1 downto 0) := (others => '0');
+ signal cntr_f : unsigned (g_num_bits_f-1 downto 0);
+
+begin -- syn
+
+
+ -- the main TS counter counts on rising clock edge.
+ rising_ctr : process (clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(rst_n_i = '0') then
+ cntr_r <= to_unsigned(g_init_value, g_num_bits_r);
+ sync_done_o <= '1';
+ else
+
+-- we've got a synchronization request
+ --if(sync_start_p_i = '1') then
+ -- sync_in_progress <= '1';
+ -- sync_done_o <= '0';
+-- so wait for the next PPS pulse, and then set the PPS counter to 1 (so it
+-- equals to 0 when PPS input is active)
+ --elsif(sync_in_progress = '1' and pps_p_i = '1') then
+ -- sync_in_progress <= '0';
+ -- sync_done_o <= '1';
+ -- cntr_r <= to_unsigned(1, g_num_bits_r);
+ --else
+
+
+ -- increment the counter, reset on overflow
+ if(cntr_r = to_unsigned(g_max_value, g_num_bits_r) or pps_p_i = '1') then
+ cntr_r <= (others => '0');
+ else
+ cntr_r <= cntr_r + 1;
+ end if;
+ end if;
+
+ -- generate overflow output
+ if(cntr_r = to_unsigned(0, g_num_bits_r)) then
+ overflow_o <= '1';
+ else
+ overflow_o <= '0';
+ end if;
+-- end if;
+ end if;
+ end process;
+
+
+-- the falling edge counter just copies the rising edge counter half a clock
+-- cycle after.
+ falling_ctr : process(clk_i)
+ begin
+ if falling_edge(clk_i)then
+ cntr_f <= cntr_r(g_num_bits_f-1 downto 0);
+ end if;
+ end process;
+
+ -- stupid VHDL type conversion mumbo-jumbo
+ value_r_o <= std_logic_vector(cntr_r);
+ value_f_o <= std_logic_vector(cntr_f);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd
new file mode 100644
index 000000000..a560f06e6
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_crc_inserter.vhd
@@ -0,0 +1,267 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_tx_crc_inserter.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Calculates and embeds the CRC into the transmitted frame.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2012 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+
+use work.gencores_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.ep_crc32_pkg.all;
+
+entity ep_tx_crc_inserter is
+ generic(
+ g_use_new_crc : boolean := false);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+ dbg_o : out std_logic_vector(2 downto 0)
+ );
+end ep_tx_crc_inserter;
+
+architecture behavioral of ep_tx_crc_inserter is
+
+ type t_state is (IDLE, WAIT_CRC, EMBED_1, EMBED_2, EMBED_3);
+
+-- general signals
+ signal state : t_state;
+
+-- CRC generator signals
+ signal crc_gen_reset : std_logic;
+ signal crc_gen_enable : std_logic;
+ signal crc_value : std_logic_vector(31 downto 0);
+
+ signal odd_length : std_logic;
+
+ signal embed_valid : std_logic;
+
+ signal stored_msb : std_logic_vector(7 downto 0);
+ signal in_payload : std_logic;
+ signal src_dreq_d0 : std_logic;
+
+ signal crc_p_value, crc_n_value : std_logic_vector(31 downto 0);
+ --signal crc_next, crc_new : std_logic_vector(31 downto 0);
+
+begin -- behavioral
+
+ dbg_o <= "111" when (state = IDLE) else
+ "110" when (state = WAIT_CRC) else
+ "101" when (state = EMBED_1) else
+ "100" when (state = EMBED_2) else
+ "011" when (state = EMBED_3) else
+ "000";
+
+ in_payload <= '1' when (state = IDLE or state = WAIT_CRC) else '0';
+-- ML: potential optimization (if desperate)
+-- in_payload <= '1' when (state = IDLE or state = WAIT_CRC) or (src_dreq_d0 = '1' and odd_length = '0' and state = EMBED_2)) else '0';
+ crc_gen_reset <= '1' when rst_n_i = '0' or snk_fab_i.sof = '1' else '0';
+ crc_gen_enable <= '1' when (snk_fab_i.dvalid = '1' and in_payload = '1') else '0';
+
+ gen_old_crc: if(g_use_new_crc = false) generate
+ U_tx_crc_generator : gc_crc_gen
+ generic map (
+ g_polynomial => x"04C11DB7",
+ g_init_value => x"ffffffff",
+ g_residue => x"38fb2284",
+ g_data_width => 16,
+ g_half_width => 8,
+ g_sync_reset => 1,
+ g_dual_width => 1,
+ g_registered_match_output => false,
+ g_registered_crc_output => true)
+ port map (
+ clk_i => clk_sys_i,
+ rst_i => crc_gen_reset,
+ en_i => crc_gen_enable,
+ half_i => snk_fab_i.bytesel,
+ data_i => snk_fab_i.data,
+ match_o => open,
+ crc_o => crc_value);
+ end generate;
+
+ gen_new_crc: if(g_use_new_crc = true) generate
+ p_check_crc_p: process(clk_sys_i)
+ begin
+ if falling_edge(clk_sys_i) then
+ if(crc_gen_reset = '1')then
+ crc_n_value <= c_CRC32_INIT_VALUE;
+ elsif(crc_gen_enable = '1') then
+ crc_n_value <= f_update_crc32_d8(crc_p_value, snk_fab_i.data(15 downto 8));
+ end if;
+ end if;
+ end process;
+
+ p_check_crc_n: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(crc_gen_reset = '1') then
+ crc_p_value <= c_CRC32_INIT_VALUE;
+ elsif(crc_gen_enable = '1' and snk_fab_i.bytesel = '0') then
+ crc_p_value <= f_update_crc32_d8(crc_n_value, snk_fab_i.data(7 downto 0));
+ end if;
+ end if;
+ end process;
+
+ crc_value <= crc_p_value when odd_length = '0' else
+ crc_n_value;
+
+ end generate;
+
+ p_delay_dreq: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ src_dreq_d0 <= src_dreq_i;
+ end if;
+ end process;
+
+ p_crc_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0' or snk_fab_i.error = '1') then
+ state <= IDLE;
+ else
+ case state is
+ when IDLE =>
+ odd_length <= '0';
+
+ if(snk_fab_i.sof = '1') then
+ state <= WAIT_CRC;
+ end if;
+
+ when WAIT_CRC =>
+ if(snk_fab_i.bytesel = '1') then
+ odd_length <= '1';
+ stored_msb <= snk_fab_i.data(15 downto 8);
+ end if;
+
+ if(snk_fab_i.eof = '1' or snk_fab_i.addr = c_WRF_OOB) then
+ state <= EMBED_1;
+ end if;
+
+ when EMBED_1 =>
+ if(src_dreq_d0 = '1') then
+ state <= EMBED_2;
+ end if;
+
+ when EMBED_2 =>
+ if(src_dreq_d0 = '1') then
+ if(odd_length = '1') then
+ state <= EMBED_3;
+ else
+ state <= IDLE;
+ end if;
+ end if;
+
+ when EMBED_3 =>
+ if(src_dreq_d0 = '1') then
+ state <= IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ p_drive_data_addr : process(state, crc_value, odd_length, stored_msb, snk_fab_i, src_dreq_d0)
+ begin
+
+ case state is
+ when EMBED_1 =>
+ if(odd_length = '1') then
+ src_fab_o.data <= stored_msb & crc_value(31 downto 24);
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.bytesel <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.eof <= '0';
+ else
+ src_fab_o.data <= crc_value(31 downto 16);
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.bytesel <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.eof <= '0';
+ end if;
+
+ when EMBED_2 =>
+ if(odd_length = '1') then
+ src_fab_o.data <= crc_value(23 downto 8);
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.bytesel <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.eof <= '0';
+ else
+ src_fab_o.data <= crc_value(15 downto 0);
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.bytesel <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.eof <= '1';
+ end if;
+
+ when EMBED_3 =>
+ src_fab_o.data <= crc_value(7 downto 0) & "XXXXXXXX";
+ src_fab_o.addr <= c_WRF_DATA;
+ src_fab_o.bytesel <= '1';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.eof <= '1';
+
+ when others =>
+ src_fab_o.data <= snk_fab_i.data;
+ src_fab_o.addr <= snk_fab_i.addr;
+ src_fab_o.bytesel <= '0';
+ src_fab_o.dvalid <= snk_fab_i.dvalid and not snk_fab_i.bytesel;
+ src_fab_o.eof <= '0';
+
+ end case;
+
+ src_fab_o.addr <= c_WRF_DATA;
+ end process;
+
+ snk_dreq_o <= src_dreq_i and in_payload;
+ src_fab_o.sof <= snk_fab_i.sof;
+ src_fab_o.error <= snk_fab_i.error;
+ src_fab_o.has_rx_timestamp <= snk_fab_i.has_rx_timestamp;
+ src_fab_o.rx_timestamp_valid <= snk_fab_i.rx_timestamp_valid;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd
new file mode 100644
index 000000000..233f0b130
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_header_processor.vhd
@@ -0,0 +1,723 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint - TX packet header processing unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_tx_header_processor.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-22
+-- Last update: 2017-02-02
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Processes headers and OOBs of the packets to be transmitted.
+-- - provides a Wishbone-B4 interface to the host
+-- - embeds source MAC addresses if they aren't defined by the host
+-- - decodes TX OOB data and passes it to the timestamping unit
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_tx_header_processor is
+ generic(
+ g_with_packet_injection : boolean;
+ g_with_timestamper : boolean;
+ g_force_gap_length : integer;
+ g_runt_padding : boolean
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+------------------------------------------------------------------------------
+-- Physical Coding Sublayer (PCS) interface
+------------------------------------------------------------------------------
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ pcs_busy_i : in std_logic;
+ pcs_error_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- WRF Sink (see WRF specification for the details)
+-------------------------------------------------------------------------------
+
+ wb_snk_i : in t_wrf_sink_in;
+ wb_snk_o : out t_wrf_sink_out;
+
+-------------------------------------------------------------------------------
+-- Flow Control Unit signals
+-------------------------------------------------------------------------------
+
+-- TX send pause frame - when active, the framer will send a PAUSE frame
+-- as soon as possible. The pause quanta must be provided on tx_pause_delay_i input.
+ fc_pause_req_i : in std_logic;
+ fc_pause_delay_i : in std_logic_vector(15 downto 0);
+
+-- TX send pause acknowledge - active after the current pause send request has
+-- been completed
+ fc_pause_ready_o : out std_logic;
+
+-- When active, the framer will allow for packet transmission.
+ fc_flow_enable_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- OOB/TSU signals
+-------------------------------------------------------------------------------
+
+-- Port ID value
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+-- Frame ID value
+ txtsu_fid_o : out std_logic_vector(16 -1 downto 0);
+-- Encoded timestamps
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+
+-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is
+-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness
+-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI
+-- until assertion of txtsu_ack_i.
+ txtsu_stb_o : out std_logic;
+
+-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received
+-- the timestamp
+ txtsu_ack_i : in std_logic;
+
+---------------------------------------------------------------------------
+-- Timestamp input from the timestamping unit
+---------------------------------------------------------------------------
+ txts_timestamp_i : in std_logic_vector(31 downto 0);
+ txts_timestamp_valid_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- Control registers
+-------------------------------------------------------------------------------
+ ep_ctrl_i : in std_logic;
+ regs_i : in t_ep_out_registers
+
+ );
+
+
+end ep_tx_header_processor;
+
+architecture behavioral of ep_tx_header_processor is
+
+ constant c_IFG_LENGTH : integer := g_force_gap_length ;--0;
+ constant c_MIN_FRAME_THR : integer := 30;
+ constant c_MIN_QFRAME_THR : integer := 32; -- we need to pad more 802.1q
+ -- tagged frame if it's going to be
+ -- untagged later in the tx_path
+
+ type t_tx_framer_state is (TXF_IDLE, TXF_DELAYED_SOF, TXF_ADDR, TXF_DATA, TXF_GAP, TXF_PAD, TXF_ABORT, TXF_STORE_TSTAMP);
+
+-- general signals
+ signal state : t_tx_framer_state;
+ signal counter : unsigned(13 downto 0);
+
+-- Flow Control-related signals
+ signal tx_pause_mode : std_logic;
+
+ signal snk_valid : std_logic;
+
+ signal sof_p1, eof_p1, abort_p1, error_p1 : std_logic;
+ signal snk_cyc_d0 : std_logic;
+
+ signal stored_status : t_wrf_status_reg;
+
+ type t_oob_fsm_state is (OOB_IDLE, OOB_1, OOB_2);
+
+ signal oob_state : t_oob_fsm_state;
+ signal oob : t_wrf_oob;
+
+ signal wb_out : t_wrf_sink_out;
+ signal decoded_status : t_wrf_status_reg;
+
+ signal abort_now : std_logic;
+ signal stall_int : std_logic;
+ signal tx_en : std_logic;
+ signal ep_ctrl : std_logic;
+ signal bitsel_d : std_logic;
+ signal needs_padding : std_logic;
+ signal to_be_untagged : std_logic;
+ signal sof_reg : std_logic;
+
+ function b2s (x : boolean)
+ return std_logic is
+ begin
+ if(x) then
+ return '1';
+ else
+ return '0';
+ end if;
+ end function;
+
+ function f_pick (cond : boolean; when_1 : std_logic_vector; when_0 : std_logic_vector)
+ return std_logic_vector is
+ begin
+ if(cond) then
+ return when_1;
+ else
+ return when_0;
+ end if;
+ end function;
+
+ function f_pick (cond : std_logic; when_1 : std_logic_vector; when_0 : std_logic_vector)
+ return std_logic_vector is
+ begin
+ if(cond = '1') then
+ return when_1;
+ else
+ return when_0;
+ end if;
+ end function;
+
+ function f_pick (cond : boolean; when_1 : std_logic ; when_0 : std_logic)
+ return std_logic is
+ begin
+ if(cond) then
+ return when_1;
+ else
+ return when_0;
+ end if;
+ end function;
+
+ function f_fabric_2_slv (
+ in_i : t_wrf_sink_in;
+ in_o : t_wrf_sink_out) return std_logic_vector is
+ variable tmp : std_logic_vector(31 downto 0);
+ begin
+ tmp(15 downto 0) := in_i.dat;
+ tmp(17 downto 16) := in_i.adr;
+ tmp(19 downto 18) := in_i.sel;
+ tmp(20) := in_i.cyc;
+ tmp(21) := in_i.stb;
+ tmp(22) := in_i.we;
+ tmp(23) := in_o.ack;
+ tmp(24) := in_o.stall;
+ tmp(25) := in_o.err;
+ tmp(26) := in_o.rty;
+ return tmp;
+ end f_fabric_2_slv;
+
+begin -- behavioral
+
+ p_detect_frame : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ snk_cyc_d0 <= '0';
+ else
+ snk_cyc_d0 <= wb_snk_i.cyc;
+ end if;
+ end if;
+ end process;
+
+ sof_p1 <= not snk_cyc_d0 and wb_snk_i.cyc;
+ eof_p1 <= snk_cyc_d0 and not wb_snk_i.cyc;
+
+ snk_valid <= (wb_snk_i.cyc and wb_snk_i.stb and wb_snk_i.we) and not wb_out.stall;
+
+ decoded_status <= f_unmarshall_wrf_status(wb_snk_i.dat);
+
+ error_p1 <= snk_valid and b2s(wb_snk_i.adr = c_WRF_STATUS) and decoded_status.error;
+
+-- abort_now <= '1' when (state /= TXF_IDLE and state /= TXF_GAP) and (regs_i.ecr_tx_en_o = '0' or error_p1 = '1') else '0';
+ abort_now <= '1' when (state /= TXF_IDLE and state /= TXF_GAP) and (tx_en = '0' or error_p1 = '1') else
+ '1' when (state = TXF_ABORT and wb_snk_i.cyc = '1' ) else
+ '0'; -- ML
+
+ GEN_PADDING: if(g_runt_padding) generate
+ needs_padding <= '1' when( (to_be_untagged = '1' and counter < c_MIN_QFRAME_THR) or
+ counter < c_MIN_FRAME_THR) else
+ '0';
+ end generate;
+ GEN_NOPADDING: if( not g_runt_padding) generate
+ -- even if padding is disabled, we still need to pad short 802.1q frames
+ -- that will be untagged
+ needs_padding <= '1' when (to_be_untagged = '1' and counter < c_MIN_QFRAME_THR) else
+ '0';
+ end generate;
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i='0') then
+ sof_reg <= '0';
+ elsif(sof_p1='1') then
+ sof_reg <= '1';
+ elsif(state = TXF_ADDR) then
+ sof_reg <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_store_status : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+
+ if rst_n_i = '0' or tx_pause_mode = '1' then
+ stored_status.has_smac <= '0';
+ stored_status.is_hp <= '0';
+ stored_status.has_crc <= '0';
+ else
+ if(snk_valid = '1' and wb_snk_i.adr = c_WRF_STATUS) then
+ stored_status <= f_unmarshall_wrf_status(wb_snk_i.dat);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -----------------------------------------------------------------------------
+ -- Out-of-band handling state machine. When a packet comes with OOB info
+ -- (frame ID), it is registered here. Then the main FSM waits until the TX
+ -- FIFO of the endpoint is completely empty and pushes the last timestamp
+ -- from the PCS to the TX Timestamping Unit
+ -----------------------------------------------------------------------------
+ gen_ts_supported : if(g_with_timestamper) generate
+ p_oob_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0' or state = TXF_ADDR) then
+ oob_state <= OOB_1;
+ oob.valid <= '0';
+ oob.oob_type <= (others => '0');
+ else
+
+ case oob_state is
+ when OOB_1 =>
+ if(snk_valid = '1' and wb_snk_i.adr = c_WRF_OOB) then
+ oob.oob_type <= wb_snk_i.dat(15 downto 12);
+ oob_state <= OOB_2;
+ oob.valid <= '0';
+ end if;
+
+ when OOB_2 =>
+ if(snk_valid = '1' and wb_snk_i.adr = c_WRF_OOB and oob.oob_type = c_WRF_OOB_TYPE_TX) then
+ oob.frame_id <= wb_snk_i.dat(15 downto 0);
+ oob_state <= OOB_IDLE;
+ oob.valid <= '1';
+ end if;
+
+ when OOB_IDLE =>
+ oob_state <= OOB_IDLE;
+ end case;
+ end if;
+ end if;
+ end process;
+ end generate gen_ts_supported;
+
+ p_tx_fsm : process (clk_sys_i)
+ begin -- process
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ state <= TXF_IDLE;
+
+ src_fab_o.has_rx_timestamp <= '0';
+ src_fab_o.rx_timestamp_valid <= '0';
+ src_fab_o.dvalid <= '0';
+ src_fab_o.ERROR <= '0';
+ src_fab_o.sof <= '0';
+ src_fab_o.eof <= '0';
+ src_fab_o.bytesel <= '0';
+
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+
+ tx_pause_mode <= '0';
+
+ fc_pause_ready_o <= '1';
+
+ txtsu_stb_o <= '0';
+ bitsel_d <= '0';
+ to_be_untagged <= '0';
+
+ else
+
+ -- we are in the middle of the frame and the framer has got suddenly
+ -- disabled or we've received an ABORT command or an error occured in the PCS:
+
+ if(pcs_error_i = '1') then
+ state <= TXF_IDLE;
+ wb_out.rty <= '1';
+ ----------------------------------------------------------------------------------
+ src_fab_o.error <= '1'; -- nasty-bug-fix: it might happen that PCS throws error
+ -- to a previous frame, but we already start sending
+ -- the next one, in this case the frame is stopped being
+ -- sent but PCS does not know why... in the end we see
+ -- two SOFs in PACs
+ ----------------------------------------------------------------------------------
+ elsif(abort_now = '1') then
+ -- abort the current frame
+ state <= TXF_ABORT;
+ src_fab_o.sof <= '0';
+ src_fab_o.dvalid <= '0';
+
+ else
+
+ case state is
+
+-------------------------------------------------------------------------------
+-- TX FSM state IDLE: awaits incoming TX frames
+-------------------------------------------------------------------------------
+
+ when TXF_IDLE => -- idle state - wait for the next frame
+
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+
+ txtsu_stb_o <= '0';
+ bitsel_d <= '0';
+
+ src_fab_o.error <= '0';
+ src_fab_o.eof <= '0';
+ src_fab_o.dvalid <= '0';
+ src_fab_o.bytesel <= '0';
+ to_be_untagged <= '0';
+
+ -- Check start-of-frame and send-pause signals and eventually
+ -- commence frame transmission
+
+-- if(src_dreq_i = '1' and (sof_p1 = '1' or fc_pause_req_i = '1') and tx_en = '1') then --ML:removed
+-- EXPLANATION: removed src_dreq_i = '1' as the cycle can start on stall HIGH (dreq_i LOW),
+-- it means that if we wait for dreq to be high.... we can miss SOF and thus entire frame.
+-- New state added to include a case where SOF (start of cycle) starts when dreq is LOW.
+-- (we cannot just go to TXF_ADDR... it is because the PCS needs the minimal gap to add CRC)
+ if((sof_p1 = '1' or sof_reg='1' or fc_pause_req_i = '1') and tx_en = '1') then --ML
+
+ fc_pause_ready_o <= '0';
+ tx_pause_mode <= fc_pause_req_i;
+
+ counter <= (others => '0');
+
+ if(src_dreq_i = '1') then
+ state <= TXF_ADDR;
+ src_fab_o.sof <= '1';
+ end if;
+
+ else
+ src_fab_o.sof <= '0';
+ end if;
+
+-------------------------------------------------------------------------------
+-- TX FSM (ML-added): this state takes into accunt the rare case where SOF happens
+-- when dreq is LOW (PCS not ready). So we wait for dreq HIGH and STALL in the
+-- meanttime (see process at the end)
+-------------------------------------------------------------------------------
+ when TXF_DELAYED_SOF =>
+
+ if(src_dreq_i = '1') then
+ state <= TXF_ADDR;
+ src_fab_o.sof <= '1';
+ end if;
+-------------------------------------------------------------------------------
+-- TX FSM state HEADER: processes the frame header, send pause frames
+-- if compiled without packet injection support.
+-------------------------------------------------------------------------------
+
+ when TXF_ADDR =>
+ src_fab_o.sof <= '0';
+
+ if (src_dreq_i = '1' and ((snk_valid = '1' and wb_snk_i.adr = c_WRF_DATA) or (tx_pause_mode = '1' and not g_with_packet_injection))) then
+
+ counter <= counter + 1;
+ src_fab_o.dvalid <= '1';
+
+ case counter(3 downto 0) is
+ when x"0" =>
+ src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"0180", wb_snk_i.dat);
+ when x"1" =>
+ src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"c200", wb_snk_i.dat);
+ when x"2" =>
+ src_fab_o.data <= f_pick(tx_pause_mode = '1' and not g_with_packet_injection, x"0001", wb_snk_i.dat);
+ when x"3" =>
+ src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.mach_o);
+ when x"4" =>
+ src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.macl_o(31 downto 16));
+ when x"5" =>
+ src_fab_o.data <= f_pick(stored_status.has_smac, wb_snk_i.dat, regs_i.macl_o(15 downto 0));
+ if(tx_pause_mode = '0' or g_with_packet_injection) then
+ state <= TXF_DATA;
+ end if;
+ when x"6" =>
+ src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", x"8808");
+ to_be_untagged <= f_pick(wb_snk_i.dat = x"8100" and
+ regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS, '1', '0');
+ when x"7" =>
+ src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", x"0001"); -- peterj: IEEE 802.3 Table 31A-1 MAC control codes PAUSE (Annex 31B)
+ when x"8" =>
+ src_fab_o.data <= f_pick(g_with_packet_injection, "XXXXXXXXXXXXXXXX", fc_pause_delay_i); -- ML: bug ??? (forget optcode: 0x0001)
+ state <= TXF_PAD;
+ when others =>
+ state <= TXF_PAD;
+ end case;
+
+ src_fab_o.addr <= c_WRF_DATA;
+
+ else
+ src_fab_o.dvalid <= '0';
+ src_fab_o.data <= (others => 'X');
+ src_fab_o.addr <= (others => 'X');
+ end if;
+
+-------------------------------------------------------------------------------
+-- TX FSM state PAD: pads a pause frame to 64 bytes.
+-------------------------------------------------------------------------------
+
+ when TXF_PAD =>
+
+ if(src_dreq_i = '1') then
+ counter <= counter + 1;
+
+ src_fab_o.data <= (others => '0');
+ src_fab_o.dvalid <= '1';
+ src_fab_o.addr <= (others => '0');
+
+ if( (to_be_untagged = '1' and counter = c_MIN_QFRAME_THR-1) or
+ (to_be_untagged = '0' and counter = c_MIN_FRAME_THR-1) ) then
+ state <= TXF_GAP;
+ src_fab_o.eof <= '1';
+ end if;
+
+ else
+ src_fab_o.data <= (others => '0');
+ src_fab_o.dvalid <= '0';
+ src_fab_o.addr <= (others => '0');
+ end if;
+
+-------------------------------------------------------------------------------
+-- TX FSM state DATA: trasmits frame payload
+-------------------------------------------------------------------------------
+
+ when TXF_DATA =>
+
+ -- ML: added this EOF force LOW to make sure that EOF is single cycle, withouth
+ -- this, it might have happened that we had eof_p1 but PCS was busy, so we set
+ -- src_fab_o.eof to HIGH but actually did not exit the TXF_DATA state... this
+ -- caused EOF to be longer than one cycle
+ src_fab_o.eof <= '0';
+
+ if (counter = x"6") then
+ to_be_untagged <= f_pick(wb_snk_i.dat = x"8100" and
+ regs_i.vcr0_qmode_o = c_QMODE_PORT_ACCESS, '1', '0');
+ end if;
+
+ if((wb_snk_i.adr = c_WRF_OOB or eof_p1='1') and needs_padding='1') then
+ state <= TXF_PAD;
+ elsif(eof_p1 = '1' and needs_padding='0') then
+ src_fab_o.eof <= '1';
+ counter <= (others => '0');
+
+ if(g_force_gap_length = 0 and bitsel_d = '1') then -- only for odd
+
+ -- Submit the TX timestamp to the TXTSU queue
+ if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then
+ if(pcs_busy_i = '0') then
+ txtsu_stb_o <= '1';
+ txtsu_ts_incorrect_o <= not txts_timestamp_valid_i;
+ txtsu_ts_value_o <= txts_timestamp_i;
+ txtsu_port_id_o <= regs_i.ecr_portid_o;
+ txtsu_fid_o <= oob.frame_id;
+ state <= TXF_STORE_TSTAMP;
+ else
+ -- wait in the GAP state for pcs_busy_i LOW
+ state <= TXF_GAP;
+ end if; ---if(pcs_busy_i = '0') then
+ else
+ -- dont need timestamp, don't need GAP, just go to IDLE
+ state <= TXF_IDLE;
+ end if; -- if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then
+ else -- need some GAP
+ state <= TXF_GAP;
+ end if; -- f(g_force_gap_length = 0 and bitsel_d = '1') then
+ end if; -- if(eof_p1 = '1') then
+
+ if(snk_valid = '1' and wb_snk_i.adr = c_WRF_DATA) then
+ src_fab_o.data <= wb_snk_i.dat;
+ src_fab_o.dvalid <= '1';
+ src_fab_o.bytesel <= (not wb_snk_i.sel(0)) and (not needs_padding);
+ counter <= counter + 1;
+ else
+ src_fab_o.dvalid <= '0';
+ src_fab_o.data <= (others => 'X');
+ src_fab_o.bytesel <= '0';
+ end if;
+
+ if(wb_snk_i.sel(0) = '0') then
+ bitsel_d <='1';
+ end if;
+
+ if(needs_padding='1') then
+ src_fab_o.addr <= (others=>'0');
+ else
+ src_fab_o.addr <= wb_snk_i.adr;
+ end if;
+
+-------------------------------------------------------------------------------
+-- TX FSM states: WAIT_CRC, EMBED_CRC: dealing with frame checksum field
+-------------------------------------------------------------------------------
+
+ when TXF_GAP =>
+ src_fab_o.eof <= '0';
+ src_fab_o.error <= '0';
+ src_fab_o.dvalid <= '0';
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+ src_fab_o.bytesel <= '0';
+
+ if(counter >= c_IFG_LENGTH or g_force_gap_length = 0) then
+
+ -- Submit the TX timestamp to the TXTSU queue
+ if(oob.valid = '1' and oob.oob_type = c_WRF_OOB_TYPE_TX) then
+ if(pcs_busy_i = '0') then
+ txtsu_stb_o <= '1';
+ txtsu_ts_incorrect_o <= not txts_timestamp_valid_i;
+ txtsu_ts_value_o <= txts_timestamp_i;
+ txtsu_port_id_o <= regs_i.ecr_portid_o;
+ txtsu_fid_o <= oob.frame_id;
+ state <= TXF_STORE_TSTAMP;
+ end if;
+ else
+ state <= TXF_IDLE;
+ end if;
+
+ else
+ counter <= counter + 1;
+ end if;
+
+ when TXF_STORE_TSTAMP => -- to slow ??? anyway, we can finish the frame
+
+ src_fab_o.eof <= '0';
+ src_fab_o.error <= '0';
+ src_fab_o.dvalid <= '0';
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+ src_fab_o.bytesel<= '0';
+
+ if(txtsu_ack_i = '1') then
+ txtsu_stb_o <= '0';
+ state <= TXF_IDLE;
+ end if;
+
+-------------------------------------------------------------------------------
+-- TX FSM state ABORT: signalize underlying PCS block to abort the frame
+-- immediately, corrupting its contents
+-------------------------------------------------------------------------------
+ when TXF_ABORT =>
+ src_fab_o.sof <= '0';
+ src_fab_o.dvalid <= '1';
+ src_fab_o.error <= '1';
+
+ counter <= (others => '0');
+ state <= TXF_IDLE;
+
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ tx_en <= regs_i.ecr_tx_en_o and ep_ctrl and ep_ctrl_i;
+
+ --p_gen_stall : process(src_dreq_i, state, regs_i, wb_snk_i, snk_cyc_d0, tx_en)
+ p_gen_stall : process(src_dreq_i, state, tx_en, wb_snk_i, eof_p1)
+ begin
+ --if(regs_i.ecr_tx_en_o = '0') then
+ if(tx_en = '0') then --ML
+ wb_out.stall <= '0'; -- /dev/null if TX disabled
+-- elsif((wb_snk_i.cyc xor snk_cyc_d0) = '1') then
+-- elsif(wb_snk_i.cyc = '1' and snk_cyc_d0 = '0') then -- ML: do it only at the SOF, not EOF
+-- wb_out.stall <= '1'; -- /block for 1 cycle right upon
+ -- detection of a packet, so the FSM
+ -- has time to catch up
+
+ -- stall at EOF - the SWcore should not send anything, but just in case, not to miss
+ -- SOF... the next cycle will be TXF_GAP (also stalling) or TXF_IDLE (can accept new frames)
+ elsif(eof_p1 = '1') then -- accept OOB as is
+ wb_out.stall <= '1';
+
+ -- when data is flowing (TXF_DATA) or we expect data (TXF_IDLE) stall only when no dreq_i
+ -- from other modules
+---------------------------------------------------------------------------------------------
+-- ML: when error at the very end of the frame (e.g. due to jambo frame), stall happenend
+-- at the last cycle before cyc DOWN, subsequently, cycle did not finish and switch hanged
+---------------------------------------------------------------------------------------------
+-- elsif(src_dreq_i = '1' and state /= TXF_GAP and state /= TXF_ABORT and state /= TXF_DELAYED_SOF and state /= TXF_STORE_TSTAMP) then
+---------------------------------------------------------------------------------------------
+ elsif(src_dreq_i = '1' and state /= TXF_PAD and state /= TXF_GAP and state /= TXF_DELAYED_SOF and state /= TXF_STORE_TSTAMP) then
+ wb_out.stall <= '0'; -- during data/header phase - whenever
+ -- the sink is ready to accept data
+
+ -- when we receive OOB, there we have always resources/possibilties to accept it
+ -- since it is dumped in here, so we prevent dreq_i going LOW from stopping
+ -- to receive OOB
+ elsif(wb_snk_i.adr = c_WRF_OOB and wb_snk_i.cyc = '1') then -- accept OOB as is
+ wb_out.stall <= '0';
+
+ -- one other option renderds stall
+ else
+ wb_out.stall <= '1';
+ end if;
+ end process;
+
+ p_gen_ack : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ wb_out.ack <= snk_valid;
+ end if;
+ end process;
+
+ -- in theory, this should not happen: we don't send frames to ports which are DOWN, but..
+ -- we make sure that we don't start sending frames on the PHY in the middle of the frame...
+ -- the TX is enabled only when we don't receive any frames from SWcore
+ p_ctrl: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ ep_ctrl <= '1';
+ else
+ if(ep_ctrl_i = '0') then
+ ep_ctrl <= '0';
+ elsif(ep_ctrl_i = '1' and wb_snk_i.cyc = '0') then
+ ep_ctrl <= '1';
+ end if; --ep_ctr
+ end if;-- rst
+ end if; -- clk
+ end process;
+
+ wb_snk_o <= wb_out;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd
new file mode 100644
index 000000000..766de7613
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_inject_ctrl.vhd
@@ -0,0 +1,235 @@
+-------------------------------------------------------------------------------
+-- Title : Controller of
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_tx_inject_ctrl.vhd
+-- Author : Maciej Lipinski
+-- Company : CERN BE-CO-HT
+-- Created : 2014-01-16
+-- Last update: 2014-01-16
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: this module enables to control HW packet injection in order
+-- to turn the Endpoint into simple traffic generator for testing purposes
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2014 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wr_fabric_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_tx_inject_ctrl is
+
+ generic(
+ g_min_if_gap_length : integer
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ inject_req_o : out std_logic;
+ inject_ready_i : in std_logic;
+ inject_packet_sel_o : out std_logic_vector(2 downto 0);
+ inject_user_value_o : out std_logic_vector(15 downto 0);
+ inject_ctr_ena_o : out std_logic;
+ inject_ctr_mode_o : out std_logic_vector(1 downto 0);
+
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers
+ );
+end ep_tx_inject_ctrl;
+
+architecture rtl of ep_tx_inject_ctrl is
+
+ -- there a lag between setting inject_req and SOF, this nees to be included
+ constant if_gap_offset : unsigned(15 downto 0) := x"0000"; -- unused
+ constant src_fab_null : t_ep_internal_fabric := (
+ sof => '0',
+ eof => '0',
+ error => '0',
+ dvalid => '0',
+ bytesel => '0',
+ has_rx_timestamp => '0',
+ rx_timestamp_valid => '0',
+ data => (others => '0'),
+ addr => (others => '0'));
+ type t_state is (IDLE, INJECT_REQ, INJECT, IFG, END_GEN);
+
+ -- Wishbone settings
+ signal if_gap_value : unsigned(15 downto 0);
+ signal pck_sel : std_logic_vector(2 downto 0);
+ signal gen_ena : std_logic;
+ signal inj_mode : std_logic_vector(1 downto 0);
+
+ signal if_gap_cnt : unsigned(15 downto 0);
+ signal frame_id_cnt : unsigned(15 downto 0);
+ signal within_packet : std_logic;
+ signal state : t_state;
+
+ -- translation betwen if_gap_value and real IFG:
+ -- | ----------------------------------------- |
+ -- | if_gap_value | gap in words | gap in time |
+ -- | 0 | 7 | 112 ns | disallowed
+ -- | ......................................... |
+ -- | 5 | 12 | 192 ns | minimal leagal
+ -- | 6 | 13 | 208 ns |
+ -- | ......................................... |
+ -- | 65536 | 65546 | 1.048ms | maximum allowed due to register size (16 bits)
+ -- | ----------------------------------------- |
+begin -- rtl
+
+ p_detect_within : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ within_packet <= '0';
+ else
+ if(snk_fab_i.sof = '1')then
+ within_packet <= '1';
+ elsif(snk_fab_i.eof = '1' or snk_fab_i.error = '1') then
+ within_packet <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_config_reg: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ if_gap_value <= (others=>'0');
+ pck_sel <= (others=>'0');
+ gen_ena <= '0';
+ inj_mode <= (others=>'0');
+ else
+ if(regs_i.inj_ctrl_pic_ena_load_o = '1') then -- writing the register
+ if (regs_i.inj_ctrl_pic_conf_valid_o = '1') then
+ if_gap_value <= unsigned(regs_i.inj_ctrl_pic_conf_ifg_o);
+ pck_sel <= regs_i.inj_ctrl_pic_conf_sel_o;
+ end if;
+ if(regs_i.inj_ctrl_pic_mode_valid_o = '1') then
+ inj_mode <= regs_i.inj_ctrl_pic_mode_id_o(1 downto 0);
+ end if;
+ gen_ena <= regs_i.inj_ctrl_pic_ena_o;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_ctrl_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= IDLE;
+ inject_req_o <= '0';
+ if_gap_cnt <= (others => '0');
+ frame_id_cnt <= (others => '0');
+ else
+ case state is
+ when IDLE =>
+
+ -- start when
+ -- 1) inject enabled, and
+ -- 2) no packet being received from SWcore and
+ -- 3) no packet being just started (otherwise, we could have two SOFs
+ if(gen_ena = '1' and within_packet = '0' and snk_fab_i.sof = '0') then
+ inject_req_o <= '1';
+ if_gap_cnt <= if_gap_offset;
+ frame_id_cnt <= (others => '0');
+ state <= INJECT_REQ;
+ end if;
+
+ when INJECT_REQ =>
+
+ inject_req_o <= '0';
+ state <= INJECT;
+
+ when INJECT =>
+
+ if(inject_ready_i = '1') then
+ frame_id_cnt <= frame_id_cnt + 1;
+ state <= IFG;
+ end if;
+
+ when IFG =>
+
+ if(gen_ena = '0' ) then --gen disabled
+ if_gap_cnt <= (others => '0');
+ frame_id_cnt <= (others => '0');
+ if(within_packet = '0') then -- if there is no frame being currently dumped
+ state <= IDLE; -- go to idle state
+ else -- if there is a frame being dumped,
+ state <= END_GEN; -- wait until it finishes
+ end if;
+ elsif(if_gap_cnt < if_gap_value) then
+ if_gap_cnt <= if_gap_cnt + 1;
+ else
+ inject_req_o <= '1';
+ if_gap_cnt <= if_gap_offset;
+ state <= INJECT_REQ;
+ end if;
+
+ when END_GEN =>
+
+ if(within_packet = '0') then -- now we can gracefully come back to normal functing
+ state <= IDLE;
+ end if;
+
+ when others =>
+
+ state <= IDLE;
+ if_gap_cnt <= (others => '0');
+ frame_id_cnt <= (others => '0');
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+ inject_user_value_o <= std_logic_vector(frame_id_cnt);
+ inject_packet_sel_o <= pck_sel;
+ inject_ctr_ena_o <= gen_ena;
+ inject_ctr_mode_o <= inj_mode;
+ snk_dreq_o <= src_dreq_i when (state = IDLE) else '1'; -- dev/null if gen
+ src_fab_o <= snk_fab_i when (state = IDLE) else src_fab_null;-- dev/null if gen
+ regs_o.inj_ctrl_pic_conf_ifg_i <= std_logic_vector(if_gap_value);
+ regs_o.inj_ctrl_pic_conf_sel_i <= pck_sel;
+ regs_o.inj_ctrl_pic_conf_valid_i <= '0';
+ regs_o.inj_ctrl_pic_ena_i <= gen_ena;
+ regs_o.inj_ctrl_pic_mode_id_i <= '0' & inj_mode;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd
new file mode 100644
index 000000000..08e40970c
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_packet_injection.vhd
@@ -0,0 +1,251 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint - TX packet injection unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_tx_packet_injection.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-11-01
+-- Last update: 2013-03-12
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Asynchronously sends pre-defined packets upon a hardware request.
+-- Packet contents are defined in a buffer accessible via Wishbone. The buffer
+-- is shared with the TX VLAN unit and can contain templates of up to 8 packets
+-- of up to 128 bytes of size. It is possible to replace a selected 16-bit word
+-- within each template with a user-provided value.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2012-11-01 1.0 twlostow Created
+-- 2013-03-12 1.1 mlipinsk added empty-template protaciton
+-- prepared signals for RMON
+-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+entity ep_tx_packet_injection is
+
+ port
+ (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+ inject_req_i : in std_logic;
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0);
+ inject_user_value_i : in std_logic_vector(15 downto 0);
+ inject_mode_i : in std_logic_vector(1 downto 0);
+ -- 0 : default
+ -- 1 : corrupt
+ -- 2 : unused
+ -- 3 : unused
+
+ mem_addr_o : out std_logic_vector(9 downto 0);
+ mem_data_i : in std_logic_vector(17 downto 0)
+ );
+
+end ep_tx_packet_injection;
+
+architecture rtl of ep_tx_packet_injection is
+
+ type t_state is (WAIT_IDLE, SOF, DO_INJECT, EOF);
+
+ alias template_last : std_logic is mem_data_i(16);
+ alias template_first : std_logic is mem_data_i(16);
+ alias template_user : std_logic is mem_data_i(17);
+
+ signal state : t_state;
+ signal counter : unsigned(8 downto 0);
+
+ signal within_packet : std_logic;
+ signal select_inject : std_logic;
+
+ signal inj_src : t_ep_internal_fabric;
+ signal inject_req_latched : std_logic;
+ signal first_word : std_logic; -- ML: used for masking the first word (we use the
+ -- same bit for SOF and EOF
+ -- ML: singals for RMON counters
+ signal no_template_error : std_logic; -- ML: indicates that injection was attempted with no valid template
+ signal inject_done : std_logic; -- ML: indicates that requrested injection was successful
+
+begin -- rtl
+
+ snk_dreq_o <= '0' when (state = DO_INJECT) else src_dreq_i;
+ inject_done <= '1' when (state = EOF and src_dreq_i = '1') else '0';
+
+ p_detect_within : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ within_packet <= '0';
+ else
+ if(snk_fab_i.sof = '1')then
+ within_packet <= '1';
+ end if;
+
+ if(snk_fab_i.eof = '1' or snk_fab_i.error = '1') then
+ within_packet <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_injection_request_ready : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ inject_ready_o <= '1';
+ inject_req_latched <= '0';
+ else
+ if(inject_req_i = '1') then
+ inject_ready_o <= '0';
+ inject_req_latched <= '1';
+ elsif(state = EOF and src_dreq_i = '1' ) then
+ inject_ready_o <= '1';
+ inject_req_latched <= '0';
+ elsif(no_template_error = '1') then
+ inject_ready_o <= '1';
+ inject_req_latched <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_injection_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= WAIT_IDLE;
+ select_inject <= '0';
+ no_template_error <= '0';
+ inj_src.sof <= '0';
+ inj_src.eof <= '0';
+ inj_src.dvalid <= '0';
+ inj_src.error <= '0';
+ first_word <= '0';
+ else
+ case state is
+ when WAIT_IDLE =>
+ inj_src.sof <= '0';
+ inj_src.eof <= '0';
+ inj_src.dvalid <= '0';
+ inj_src.error <= '0';
+ no_template_error <= '0';
+ first_word <= '0';
+
+ if(inject_req_i = '1') then --ML: we make sure that we remember the packet_sel_i
+ -- only when req_i HIGH
+ counter(8 downto 6) <= unsigned(inject_packet_sel_i);
+ counter(5 downto 0) <= (others => '0');
+ end if;
+
+ if(within_packet = '0' and inject_req_latched = '1' and no_template_error = '0') then
+ state <= SOF;
+ select_inject <= '1';
+ else
+ select_inject <= '0';
+ end if;
+
+ when SOF =>
+ if(template_first = '0') then -- ML: check that the first word is valid, abort if error
+ state <= WAIT_IDLE;
+ no_template_error <= '1';
+ elsif(src_dreq_i = '1') then
+ first_word <= '1'; -- since the same bit is for SOF and EOF, we need to mask SOF
+ -- during first word
+ inj_src.sof <= '1';
+ state <= DO_INJECT;
+ end if;
+
+ when DO_INJECT =>
+ inj_src.sof <= '0';
+
+ if(src_dreq_i = '1') then
+
+ inj_src.dvalid <= '1';
+ counter <= counter + 1;
+
+ else
+ inj_src.dvalid <= '0';
+ end if;
+
+ if(first_word = '1' and template_first = '0') then -- ML: first word read
+ first_word <= '0';
+ end if;
+
+ if(template_last = '1' and inj_src.dvalid = '1' and first_word = '0' and src_dreq_i = '1') then
+ inj_src.dvalid <= '0';
+ state <= EOF;
+ if(inject_mode_i = "01") then
+ inj_src.error <= '1';
+ else
+ inj_src.eof <= '1';
+ end if;
+ end if;
+
+ when EOF =>
+ inj_src.eof <= '0';
+ inj_src.error <= '0';
+ if(src_dreq_i = '1') then
+ state <= WAIT_IDLE;
+ select_inject <= '0';
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+-- inj_src.bytesel <= '0';
+ -- the last word cannot be user-defined as we use the user bit to indicate odd size
+ inj_src.bytesel <= template_user when (template_last = '1' and first_word = '0') else '0';
+-- inj_src.error <= '0';
+
+ p_inj_src_data : process(template_user, inject_user_value_i, mem_data_i,template_last,first_word)
+ begin
+ if(template_user = '1' and template_last = '0' and first_word = '0') then
+ inj_src.data <= inject_user_value_i;
+ else
+ inj_src.data <= mem_data_i(15 downto 0);
+ end if;
+ end process;
+
+ src_fab_o <= inj_src when select_inject = '1' else snk_fab_i;
+
+
+ mem_addr_o <= '1' & std_logic_vector(counter);
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd
new file mode 100644
index 000000000..ceba9c0a2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_path.vhd
@@ -0,0 +1,352 @@
+-------------------------------------------------------------------------------
+-- Title : Complete Transmit Path
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_tx_path.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-11-01
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Full transmit path of the endpoint (excluding the PCS).
+-- Chains the wishbone interface and header processor, followed by the VLAN unit
+-- (optional), packet injector (optional) and CRC inserter.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009 - 2012 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.wr_fabric_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_tx_path is
+
+ generic(
+ g_with_vlans : boolean;
+ g_with_timestamper : boolean;
+ g_with_packet_injection : boolean;
+ g_with_inj_ctrl : boolean := true;
+ g_force_gap_length : integer;
+ g_runt_padding : boolean;
+ g_use_new_crc : boolean
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+------------------------------------------------------------------------------
+-- Physical Coding Sublayer (PCS) interface
+------------------------------------------------------------------------------
+
+ pcs_fab_o : out t_ep_internal_fabric;
+ pcs_error_i : in std_logic;
+ pcs_busy_i : in std_logic;
+ pcs_dreq_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- WRF Sink (see WRF specification for the details)
+-------------------------------------------------------------------------------
+
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+
+-------------------------------------------------------------------------------
+-- Flow Control Unit signals
+-------------------------------------------------------------------------------
+
+-- TX send pause frame - when active, the framer will send a PAUSE frame
+-- as soon as possible. The pause quanta must be provided on tx_pause_delay_i input.
+ fc_pause_req_i : in std_logic;
+ fc_pause_delay_i : in std_logic_vector(15 downto 0);
+
+-- TX send pause acknowledge - active after the current pause send request has
+-- been completed
+ fc_pause_ready_o : out std_logic;
+
+-- When active, the framer will allow for packet transmission.
+ fc_flow_enable_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- OOB/TSU signals
+-------------------------------------------------------------------------------
+
+-- Port ID value
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+-- Frame ID value
+ txtsu_fid_o : out std_logic_vector(16 -1 downto 0);
+-- Encoded timestamps
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+
+-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is
+-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness
+-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI
+-- until assertion of txtsu_ack_i.
+ txtsu_stb_o : out std_logic;
+
+-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received
+-- the timestamp
+ txtsu_ack_i : in std_logic;
+
+------------------------------------------------------------------------------
+-- Timestamp input from the timestamping unit
+------------------------------------------------------------------------------
+ txts_timestamp_i : in std_logic_vector(31 downto 0);
+ txts_timestamp_valid_i : in std_logic;
+
+------------------------------------------------------------------------------
+-- Packet Injector (for TRU & HW-RSTP)
+------------------------------------------------------------------------------
+
+ inject_req_i : in std_logic := '0';
+ inject_ready_o : out std_logic;
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+
+
+-------------------------------------------------------------------------------
+-- Control registers
+-------------------------------------------------------------------------------
+ ep_ctrl_i : in std_logic :='1';
+ regs_i : in t_ep_out_registers;
+ regs_o : out t_ep_in_registers;
+ dbg_o : out std_logic_vector(33 downto 0)
+ );
+
+
+end ep_tx_path;
+
+architecture rtl of ep_tx_path is
+
+ type t_fab_pipe is array(integer range <>) of t_ep_internal_fabric;
+
+ signal fab_pipe : t_fab_pipe(4 downto 0);
+ signal dreq_pipe : std_logic_vector(4 downto 0);
+
+ signal vlan_mem_addr : std_logic_vector(9 downto 0);
+ signal vlan_mem_data : std_logic_vector(17 downto 0);
+
+ signal txtsu_stb : std_logic;
+
+ signal inject_req : std_logic;
+ signal inject_ready : std_logic;
+ signal inject_packet_sel : std_logic_vector(2 downto 0);
+ signal inject_user_value : std_logic_vector(15 downto 0);
+ signal inject_mode : std_logic_vector( 1 downto 0);
+
+ signal inj_ctr_req : std_logic;
+ signal inj_ctr_packet_sel : std_logic_vector(2 downto 0);
+ signal inj_ctr_user_value : std_logic_vector(15 downto 0);
+ signal inj_ctr_ena : std_logic;
+ signal inj_ctr_mode : std_logic_vector( 1 downto 0);
+
+
+begin -- rtl
+
+ U_Header_Processor : ep_tx_header_processor
+ generic map (
+ g_with_packet_injection => g_with_packet_injection,
+ g_with_timestamper => g_with_timestamper,
+ g_force_gap_length => g_force_gap_length,
+ g_runt_padding => g_runt_padding)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ src_fab_o => fab_pipe(0),
+ src_dreq_i => dreq_pipe(0),
+ pcs_busy_i => pcs_busy_i,
+ pcs_error_i => pcs_error_i,
+ wb_snk_i => snk_i,
+ wb_snk_o => snk_o,
+ fc_pause_req_i => fc_pause_req_i,
+ fc_pause_delay_i => fc_pause_delay_i,
+ fc_pause_ready_o => fc_pause_ready_o,
+ fc_flow_enable_i => fc_flow_enable_i,
+ txtsu_port_id_o => txtsu_port_id_o,
+ txtsu_fid_o => txtsu_fid_o,
+ txtsu_ts_value_o => txtsu_ts_value_o,
+ txtsu_ts_incorrect_o => txtsu_ts_incorrect_o,
+ txtsu_stb_o => txtsu_stb, --txtsu_stb_o,
+ txtsu_ack_i => txtsu_ack_i,
+ txts_timestamp_i => txts_timestamp_i,
+ txts_timestamp_valid_i => txts_timestamp_valid_i,
+ ep_ctrl_i => ep_ctrl_i,
+ regs_i => regs_i);
+
+ txtsu_stb_o <= txtsu_stb;
+
+ assert not (g_with_packet_injection and not g_with_vlans)
+ report "wr_endpoint: packet injection requires VLAN support to be enabled" severity failure;
+
+ gen_with_inj_ctrl: if(g_with_inj_ctrl and g_with_packet_injection) generate
+ -- the injector control has two main purposes:
+ -- 1) control ep_tx_packet_injector so that it continuously generatres frames with
+ -- desired interframe gap
+ -- 2) block the possible traffic coming from SWcore
+ -- - so that it does not disturb generation which is done only between frames from SWcore
+ -- - each frame coming from SWcore is "scanned" by Ethertype in the RAM which is used
+ -- for generation -> if ep_tx_vlan_unit is used (if dev/null was done after this module)
+ -- when ep_tx_packet_injection is used to genrate frame... we have problem cause two
+ -- modules read from the same RAM
+ U_Injector_ctr: ep_tx_inject_ctrl
+ generic map (
+ g_min_if_gap_length => 5)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_fab_i => fab_pipe(0),
+ snk_dreq_o => dreq_pipe(0),
+ src_fab_o => fab_pipe(1),
+ src_dreq_i => dreq_pipe(1),
+ inject_req_o => inj_ctr_req,
+ inject_ready_i => inject_ready,
+ inject_packet_sel_o => inj_ctr_packet_sel,
+ inject_user_value_o => inj_ctr_user_value,
+ inject_ctr_ena_o => inj_ctr_ena,
+ inject_ctr_mode_o => inj_ctr_mode,
+ regs_i => regs_i,
+ regs_o => regs_o);
+ end generate gen_with_inj_ctrl;
+
+ inject_req <= inj_ctr_req when (inj_ctr_ena ='1') else inject_req_i;
+ inject_packet_sel <= inj_ctr_packet_sel when (inj_ctr_ena ='1') else inject_packet_sel_i;
+ inject_ready_o <= inject_ready;
+
+ gen_without_inj_ctrl: if((not g_with_inj_ctrl) or (not g_with_packet_injection)) generate
+ fab_pipe(1) <= fab_pipe(0);
+ dreq_pipe(0) <= dreq_pipe(1);
+ inj_ctr_req <= '0';
+ inj_ctr_mode <= (others => '0');
+ inj_ctr_packet_sel <= (others => '0');
+ inj_ctr_user_value <= (others => '0');
+ inj_ctr_ena <= '0';
+ regs_o <= c_ep_in_registers_init_value;
+ end generate gen_without_inj_ctrl;
+
+ gen_with_vlan_unit : if(g_with_vlans) generate
+ U_VLAN_Unit : ep_tx_vlan_unit
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_fab_i => fab_pipe(1),
+ snk_dreq_o => dreq_pipe(1),
+ src_fab_o => fab_pipe(2),
+ src_dreq_i => dreq_pipe(2),
+ inject_mem_addr_i => vlan_mem_addr,
+ inject_mem_data_o => vlan_mem_data,
+ uram_offset_wr_i => regs_i.vcr1_offset_wr_o,
+ uram_offset_i => regs_i.vcr1_offset_o,
+ uram_data_i => regs_i.vcr1_data_o);
+ end generate gen_with_vlan_unit;
+
+ gen_without_vlan_unit : if(not g_with_vlans) generate
+ fab_pipe(2) <= fab_pipe(1);
+ dreq_pipe(1) <= dreq_pipe(2);
+ end generate gen_without_vlan_unit;
+
+ gen_with_injection : if(g_with_packet_injection) generate
+
+ inject_user_value <= inj_ctr_user_value when (inj_ctr_ena ='1') else inject_user_value_i;
+ inject_mode <= inj_ctr_mode when (inj_ctr_ena ='1') else "00";
+
+ U_Injector : ep_tx_packet_injection
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_fab_i => fab_pipe(2),
+ snk_dreq_o => dreq_pipe(2),
+ src_fab_o => fab_pipe(3),
+ src_dreq_i => dreq_pipe(3),
+ inject_req_i => inject_req,
+ inject_ready_o => inject_ready,
+ inject_packet_sel_i => inject_packet_sel,
+ inject_user_value_i => inject_user_value,
+ inject_mode_i => inject_mode,
+ mem_addr_o => vlan_mem_addr,
+ mem_data_i => vlan_mem_data);
+ end generate gen_with_injection;
+
+ gen_without_injection : if (not g_with_packet_injection) generate
+ fab_pipe(3) <= fab_pipe(2);
+ dreq_pipe(2) <= dreq_pipe(3);
+ inject_ready <= '0';
+ end generate gen_without_injection;
+
+ U_Insert_CRC : ep_tx_crc_inserter
+ generic map(
+ g_use_new_crc => g_use_new_crc)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_fab_i => fab_pipe(3),
+ snk_dreq_o => dreq_pipe(3),
+ src_fab_o => fab_pipe(4),
+ src_dreq_i => dreq_pipe(4),
+ dbg_o => dbg_o(33 downto 31));
+
+ pcs_fab_o <= fab_pipe(4);
+ dreq_pipe(4) <= pcs_dreq_i;
+
+-- GEN_DBG: for i in 0 to 3 generate
+-- dbg_o(i) <= fab_pipe(i).sof;
+-- dbg_o(i+4) <= fab_pipe(i).eof;
+-- end generate GEN_DBG;
+
+ dbg_o(0) <= fab_pipe(0).sof; -- 64
+ dbg_o(1) <= fab_pipe(2).sof; -- 65
+ dbg_o(2) <= fab_pipe(3).sof; -- 66
+ dbg_o(3) <= fab_pipe(4).sof; -- 67
+ dbg_o(4) <= fab_pipe(0).eof; -- 68
+ dbg_o(5) <= fab_pipe(2).eof; -- 69
+ dbg_o(6) <= fab_pipe(3).eof; -- 70
+ dbg_o(7) <= fab_pipe(4).eof; -- 71
+
+ dbg_o(8) <= dreq_pipe(0); -- 72
+ dbg_o(9) <= dreq_pipe(2); -- 73
+ dbg_o(10) <= dreq_pipe(3); -- 74
+ dbg_o(11) <= fab_pipe(0).dvalid; -- 75
+ dbg_o(12) <= fab_pipe(4).dvalid; -- 32
+ -- new 4 bits
+ dbg_o(13) <= dreq_pipe(4); -- 33
+ dbg_o(14) <= txtsu_stb; -- 34
+ dbg_o(15) <= txtsu_ack_i; -- 35
+ dbg_o(16) <= fab_pipe(2).dvalid; -- 36
+-- dbg_o(28 downto 13) <= fab_pipe(2).data;
+ dbg_o(17) <= inj_ctr_req; -- 37
+ dbg_o(18) <= inject_req; -- 38
+ dbg_o(19) <= inject_ready; -- 39 inj_ctr_user_value;
+ dbg_o(20) <= inj_ctr_ena; -- 40
+ dbg_o(23 downto 21) <= inject_packet_sel; -- 41-43
+ dbg_o(24) <= inject_req_i; -- 43
+ dbg_o(28 downto 25) <= fab_pipe(3).data(3 downto 0);
+-- dbg_o(28 downto 17) <= fab_pipe(3).data(11 downto 0);
+ dbg_o(30 downto 29) <= fab_pipe(3).addr;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd
new file mode 100644
index 000000000..0bc801ee2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_16bit.vhd
@@ -0,0 +1,546 @@
+-------------------------------------------------------------------------------
+-- Title : 16-bit transmit path for 1000Base-X PCS
+-- Project : White Rabbit MAC/Endpoint
+-------------------------------------------------------------------------------
+-- File : ep_tx_pcs_16bit.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT section
+-- Created : 2009-06-16
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements a 16-bit transmit path for 802.3z 1000BaseX PCS.
+-- This block interfaces the Ethernet framer to TX PMA (Physical Medium Attachment).
+-- It performs preamble generation, insertion of idle patterns, all the low-level
+-- signalling. Strobing signal for taking TX timestamps is also generated.
+--
+-- Module uses two separate clocks: 62.5 MHz phy_tx_clk_i
+-- (Transmit clock for PHY) which clocks 8b10b signalling layer, and an async
+-- (clk_sys_i) which is used for data exchange with the rest of MAC data path. Data
+-- exchange between these clock domains is done using an async FIFO.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2011-10-15 0.2 twlostow 16-bit version for Virtex 6 GTX
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+
+entity ep_tx_pcs_16bit is
+
+ port (
+-- reset (synchronous to clk_sys_i, active LO)
+ rst_n_i : in std_logic;
+
+-- system clock (faster than reference)
+ clk_sys_i : in std_logic;
+
+-- reset (phy_tx_clk_i sync)
+ rst_txclk_n_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- TX Framer inteface
+-------------------------------------------------------------------------------
+
+-- TX Fabric input
+ pcs_fab_i : in t_ep_internal_fabric;
+
+-- HI pulse indicates an error during transmission of a frame (buffer underrun)
+ pcs_error_o : out std_logic;
+
+-- HI indicates that the PCS is busy (transmitting a frame or during autonegotiation)
+ pcs_busy_o : out std_logic;
+
+-- HI indicates that PCS FIFO is almost full.
+ pcs_dreq_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- WB controller control signals
+-------------------------------------------------------------------------------
+
+ mdio_mcr_reset_i : in std_logic;
+-- Transmit Control Register, EN_PCS field
+ mdio_mcr_pdown_i : in std_logic;
+-- Transmit Control Register, TX_CAL field
+ mdio_wr_spec_tx_cal_i : in std_logic;
+
+-- autonegotiation control
+ an_tx_en_i : in std_logic;
+ an_tx_val_i : in std_logic_vector(15 downto 0);
+
+-- Timestamp strobe
+ timestamp_trigger_p_a_o : out std_logic;
+
+-- RMON events
+ rmon_tx_underrun : out std_logic;
+
+-------------------------------------------------------------------------------
+-- PHY Interface
+-------------------------------------------------------------------------------
+
+ phy_tx_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(15 downto 0);
+ phy_tx_k_o : out std_logic_vector(1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+
+ dbg_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_rd_count_o : out std_logic_vector(5+4 downto 0)
+ );
+
+end ep_tx_pcs_16bit;
+
+
+architecture behavioral of ep_tx_pcs_16bit is
+
+-- TX state machine definitions
+ type t_tbif_tx_state is (TX_COMMA_IDLE, TX_CAL, TX_CR12, TX_CR34, TX_SPD_PREAMBLE, TX_DATA, TX_PREAMBLE, TX_SFD, TX_EPD, TX_EXTEND, TX_GEN_ERROR);
+
+-- TX state machine signals
+
+ signal tx_is_k : std_logic_vector(1 downto 0);
+ signal tx_odata_reg : std_logic_vector(15 downto 0);
+ signal tx_catch_disparity : std_logic;
+ signal tx_state : t_tbif_tx_state;
+ signal tx_cntr : unsigned(3 downto 0);
+ signal tx_cr_alternate : std_logic;
+
+-- TX clock alignment FIFO signals
+ signal fifo_packed_in, fifo_packed_out : std_logic_vector(17 downto 0);
+ signal fifo_empty : std_logic;
+ signal fifo_almost_empty : std_logic;
+ signal fifo_almost_full : std_logic;
+ signal fifo_enough_data : std_logic;
+ signal fifo_wr : std_logic;
+ signal fifo_rd : std_logic := '0';
+ signal fifo_ready : std_logic;
+ signal fifo_clear_n, fifo_clear_n_d0, fifo_clear_n_d1, fifo_clear_n_d2, fifo_clear_n_d3, fifo_clear_n_d4 : std_logic;
+ signal fifo_read_int : std_logic;
+ signal fifo_fab : t_ep_internal_fabric;
+
+ signal tx_busy : std_logic;
+ signal tx_error : std_logic;
+ signal rst_n_tx : std_logic;
+
+ signal mdio_mcr_reset_synced : std_logic;
+ signal mdio_mcr_pdown_synced : std_logic;
+
+ signal an_tx_en_synced : std_logic;
+ signal wr_count : std_logic_vector(6 downto 0);
+ signal rd_count : std_logic_vector(6 downto 0);
+
+ constant tx_interframe_gap: unsigned(3 downto 0) := x"2"; --ML changed from "1000" to 0010
+ -- effectively it is 6 cycles for IFG:
+ -- last data (CRC) of the previous frame
+ -- -----------------------------------------
+ -- 3 cycles for count down (2 downto 0)
+ -- 1 cycle fifo_rd
+ -- 1 read SOF from FIFO
+ -- 1 cycle in TX_SPD_PREAMBLE
+ -- -----------------------------------------
+ -- just now we send Preamble
+ --
+begin
+
+ U_sync_pcs_busy_o : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => tx_busy,
+ synced_o => pcs_busy_o);
+
+ U_sync_pcs_error_o : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => tx_error,
+ ppulse_o => pcs_error_o);
+
+ U_sync_an_tx_en : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => rst_n_i,
+ data_i => an_tx_en_i,
+ synced_o => an_tx_en_synced);
+
+ U_sync_mcr_reset : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_reset_i,
+ synced_o => mdio_mcr_reset_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_power_down : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_pdown_i,
+ synced_o => mdio_mcr_pdown_synced);
+
+ phy_tx_data_o <= tx_odata_reg;
+ phy_tx_k_o <= tx_is_k;
+
+ rst_n_tx <= rst_txclk_n_i and not mdio_mcr_reset_synced;
+
+-------------------------------------------------------------------------------
+-- Clock alignment FIFO
+-------------------------------------------------------------------------------
+
+
+ -------------------------------------------------------------------------------------------
+ -- some hacks to make pdown (in particular killing the link) work with Xilix native FIFOs
+ -- (the rst signal can be set (LOW) only after 4 cycles after rd_i is "unset" (LOW)
+ -------------------------------------------------------------------------------------------
+ fifo_clear_n_d0 <= '0' when (rst_n_i = '0') or (mdio_mcr_pdown_synced = '1') else '1';
+ p_fifo_clean : process(phy_tx_clk_i)
+ begin
+ if rising_edge(phy_tx_clk_i) then
+ fifo_clear_n_d1 <= fifo_clear_n_d0;
+ fifo_clear_n_d2 <= fifo_clear_n_d1;
+ fifo_clear_n_d3 <= fifo_clear_n_d2;
+ fifo_clear_n_d4 <= fifo_clear_n_d3;
+ end if;
+ end process;
+
+ fifo_clear_n <= fifo_clear_n_d4 when (fifo_clear_n_d0 = '0') else
+ fifo_clear_n_d0;
+ fifo_read_int <= fifo_rd and not (fifo_fab.eof or fifo_fab.error or fifo_fab.sof) and
+ fifo_clear_n_d0;
+ -------------------------------------------------------------------------------------------
+ f_pack_fifo_contents(pcs_fab_i, fifo_packed_in, fifo_wr, true);
+
+
+
+ U_TX_FIFO : generic_async_fifo
+ generic map (
+ g_data_width => 18,
+ g_size => 128,--64,
+ g_with_rd_empty => true,
+ g_with_rd_almost_empty => true,
+ g_with_wr_almost_full => true,
+ g_almost_empty_threshold => 20, -- must be not more/equal then mini-frame size (so 64/2),
+ -- therwise frames get stuck in PCS 40,
+
+ -- ML this is a hack: we have a problem, the native FIFO that was used here
+ -- is not working ocrrectly (probably something with full/empty/etc signals
+ -- If this flags here are defined, another fifo (v6_hwfifo) is used, it is
+ -- not the best for resources... but works. We tried increaseing the size
+ -- of the FIFO, changing thresholds... not works very well.
+ -- The native FIFO works somehow better with the following parameters
+ -- g_size = 1000
+ -- g_almost_full_threshold = 900
+ -- but it is still not good enough to use it
+ --
+ g_with_rd_count => true, -- ML debug
+ g_with_wr_count => true, -- ML debug
+
+ g_almost_full_threshold => 100) -- fixme: make this a generic (or WB register)
+ port map (
+ rst_n_i => fifo_clear_n,
+ clk_wr_i => clk_sys_i,
+ d_i => fifo_packed_in,
+ we_i => fifo_wr,
+ wr_empty_o => dbg_wr_count_o(0), --open,
+ wr_full_o => dbg_wr_count_o(1), --open,
+ wr_almost_empty_o => dbg_wr_count_o(2), --open,
+ wr_almost_full_o => fifo_almost_full,
+ wr_count_o => wr_count,
+ clk_rd_i => phy_tx_clk_i,
+ q_o => fifo_packed_out,
+ rd_i => fifo_read_int,
+ rd_empty_o => fifo_empty,
+ rd_full_o => dbg_rd_count_o(1) ,--open,
+ rd_almost_empty_o => fifo_almost_empty,
+ rd_almost_full_o => dbg_rd_count_o(3),
+ rd_count_o => rd_count); --rd_count);--dbg_rd_count_o); --open);
+
+ dbg_wr_count_o(3) <= fifo_almost_full;
+ dbg_rd_count_o(0) <= fifo_empty;
+ dbg_rd_count_o(2) <= fifo_almost_empty;
+
+ dbg_wr_count_o(9 downto 4) <= wr_count(5 downto 0);
+ dbg_rd_count_o(9 downto 4) <= rd_count(5 downto 0);
+
+ fifo_enough_data <= not fifo_almost_empty;
+
+ p_gen_fifo_ready_flag : process(phy_tx_clk_i)
+ begin
+ if rising_edge(phy_tx_clk_i) then
+ fifo_ready <= fifo_read_int;
+ end if;
+ end process;
+
+ f_unpack_fifo_contents(fifo_packed_out, fifo_ready, fifo_fab, true);
+
+ -----------------------------------------------------------------------------
+ -- TX PCS state machine
+ -----------------------------------------------------------------------------
+ p_tx_fsm : process (phy_tx_clk_i)
+ begin
+
+ if rising_edge(phy_tx_clk_i) then
+
+-- The PCS is reset or disabled
+ if(rst_n_tx = '0' or mdio_mcr_pdown_synced = '1') then
+ tx_state <= TX_COMMA_IDLE;
+ timestamp_trigger_p_a_o <= '0';
+ fifo_rd <= '0';
+ tx_error <= '0';
+ tx_odata_reg <= (others => '0');
+ tx_is_k <= "00";
+ tx_cr_alternate <= '0';
+ tx_catch_disparity <= '0';
+ tx_cntr <= (others => '0');
+ rmon_tx_underrun <= '0';
+ else
+ case tx_state is
+-------------------------------------------------------------------------------
+-- State COMMA: sends the /I/ sequence (K28.5 + D5.6/D16.2)
+-------------------------------------------------------------------------------
+ when TX_COMMA_IDLE =>
+
+ -- clear the RMON/error pulse after 2 cycles (DATA->COMMA->IDLE) to
+ -- make sure is't long enough to trigger the event counter
+ rmon_tx_underrun <= '0';
+ tx_error <= '0';
+
+ tx_is_k <= "10";
+ tx_odata_reg(15 downto 8) <= c_K28_5;
+
+ if (phy_tx_disparity_i = '1' and tx_catch_disparity = '1') then
+ tx_odata_reg(7 downto 0) <= c_d5_6;
+ else
+ tx_odata_reg(7 downto 0) <= c_d16_2;
+ end if;
+
+
+-- endpoint wants to send Config_Reg
+ if(an_tx_en_synced = '1') then
+ tx_state <= TX_CR12;
+ tx_cr_alternate <= '0';
+ fifo_rd <= '0';
+
+-- we've got a new frame in the FIFO
+ elsif (fifo_fab.sof = '1' and fifo_ready = '1' and tx_cntr = "0000")then
+ fifo_rd <= '0';
+ tx_state <= TX_SPD_PREAMBLE;
+ tx_cntr <= "0001";
+
+-- host requested a calibration pattern
+ elsif(mdio_wr_spec_tx_cal_i = '1') then
+ tx_state <= TX_CAL;
+ fifo_rd <= '0';
+ tx_cr_alternate <= '0';
+ else
+-- continue sending idle sequences and checking if something has arrived in the
+-- FIFO
+ if(tx_cntr /= "0000") then
+ fifo_rd <= '0';
+ else
+ fifo_rd <= (not fifo_empty) and fifo_enough_data;
+ end if;
+ tx_state <= TX_COMMA_IDLE;
+ end if;
+
+ tx_catch_disparity <= '0';
+
+ if(tx_cntr /= "0000") then
+ tx_cntr <= tx_cntr - 1;
+ end if;
+-------------------------------------------------------------------------------
+-- State: CAL: transmit the calibration sequence
+-------------------------------------------------------------------------------
+
+ when TX_CAL =>
+ tx_is_k <= "11";
+ tx_odata_reg <= c_k28_7 & c_k28_7;
+ tx_cr_alternate <= '1';
+ if(mdio_wr_spec_tx_cal_i = '0' and tx_cr_alternate = '1') then
+ tx_state <= TX_COMMA_IDLE;
+ end if;
+
+-------------------------------------------------------------------------------
+-- States: CR1, CR2, CR3, CR4: send the /C/ Configuration code set
+-------------------------------------------------------------------------------
+
+ when TX_CR12 =>
+ fifo_rd <= not fifo_empty;
+
+ tx_is_k <= "10";
+ tx_odata_reg(15 downto 8) <= c_k28_5;
+
+ if (tx_cr_alternate = '1') then
+ tx_odata_reg(7 downto 0) <= c_d21_5;
+ else
+ tx_odata_reg(7 downto 0) <= c_d2_2;
+ end if;
+
+ tx_cr_alternate <= not tx_cr_alternate;
+ tx_state <= TX_CR34;
+
+ when TX_CR34 =>
+ fifo_rd <= not fifo_empty;
+
+ tx_is_k <= "00";
+ tx_odata_reg(15 downto 8) <= an_tx_val_i(7 downto 0);
+ tx_odata_reg(7 downto 0) <= an_tx_val_i(15 downto 8);
+
+ if(an_tx_en_synced = '1') then
+ tx_state <= TX_CR12;
+ else
+ tx_state <= TX_COMMA_IDLE;
+ end if;
+
+
+-------------------------------------------------------------------------------
+-- State SPD: sends a start-of-packet delimeter
+-------------------------------------------------------------------------------
+ when TX_SPD_PREAMBLE =>
+ fifo_rd <= '0';
+ tx_is_k <= "10";
+ tx_odata_reg <= c_k27_7 & c_preamble_char;
+ tx_state <= TX_PREAMBLE;
+
+-------------------------------------------------------------------------------
+-- State PREAMBLE: produces an Ethernet preamble
+-------------------------------------------------------------------------------
+ when TX_PREAMBLE =>
+ tx_is_k <= "00";
+ tx_odata_reg <= c_preamble_char & c_preamble_char;
+
+ if (tx_cntr = "0000") then
+ tx_state <= TX_SFD;
+ fifo_rd <= '1';
+ end if;
+
+ tx_cntr <= tx_cntr - 1;
+
+-------------------------------------------------------------------------------
+-- State SFD: outputs the start-of-frame delimeter (last byte of the preamble)
+-------------------------------------------------------------------------------
+ when TX_SFD =>
+ tx_is_k <= "00";
+ tx_odata_reg <= c_preamble_char & c_preamble_sfd;
+ timestamp_trigger_p_a_o <= '1';
+ tx_state <= TX_DATA;
+
+ when TX_DATA =>
+
+ if((fifo_empty = '1' or fifo_fab.error = '1') and fifo_fab.eof = '0') then -- FIFO underrun?
+ tx_odata_reg <= c_k30_7 & c_k23_7; -- emit error propagation code
+ tx_is_k <= "11";
+ tx_state <= TX_GEN_ERROR;
+ tx_error <= not fifo_fab.error;
+ rmon_tx_underrun <= '1';
+ fifo_rd <= '0';
+ else
+
+ if(fifo_fab.bytesel = '1') then
+ tx_odata_reg <= fifo_fab.DATA(15 downto 8) & c_k29_7;
+ tx_is_k <= "01";
+ else
+ tx_odata_reg <= fifo_fab.DATA;
+ tx_is_k <= "00";
+ end if;
+
+ if (fifo_fab.eof = '1') then
+ if(fifo_fab.bytesel = '1') then
+ tx_state <= TX_EXTEND;
+ else
+ tx_state <= TX_EPD;
+ end if;
+ fifo_rd <= '0';
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State EPD: send End-of-frame delimeter
+-------------------------------------------------------------------------------
+ when TX_EPD =>
+ timestamp_trigger_p_a_o <= '0';
+ tx_is_k <= "11";
+ tx_odata_reg <= c_k29_7 & c_k23_7;
+ tx_catch_disparity <= '1';
+ tx_cntr <= tx_interframe_gap;
+ tx_state <= TX_COMMA_IDLE;
+
+--------------------------------------------------------------------------------
+-- State EXTEND: send the carrier extension
+-------------------------------------------------------------------------------
+ when TX_EXTEND =>
+ timestamp_trigger_p_a_o <= '0';
+ tx_is_k <= "11";
+ tx_odata_reg <= c_k23_7 & c_k23_7;
+ tx_catch_disparity <= '1';
+ tx_cntr <= tx_interframe_gap-1;--"0100";
+ tx_state <= TX_COMMA_IDLE;
+
+-------------------------------------------------------------------------------
+-- State GEN_ERROR: entered when an error occured. Just terminates the frame.
+-------------------------------------------------------------------------------
+ when TX_GEN_ERROR =>
+ tx_state <= TX_EPD;
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+ process(phy_tx_clk_i)
+ begin
+ if rising_edge(phy_tx_clk_i) then
+ if fifo_empty = '0' or (tx_state /= TX_CR12 and tx_state /= TX_CR34 and tx_state /= TX_COMMA_IDLE) then
+ tx_busy <= '1';
+ else
+ tx_busy <= '0';
+ end if;
+ end if;
+ end process;
+
+ pcs_dreq_o <= not fifo_almost_full;
+
+end behavioral;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd
new file mode 100644
index 000000000..db19a419a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_pcs_8bit.vhd
@@ -0,0 +1,514 @@
+-------------------------------------------------------------------------------
+-- Title : 1000BaseT/X MAC Endpoint - receive path PCS for 1000BaseX
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : ep_tx_pcs_tbi.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2009-06-16
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements the transmit path for 802.3z 1000BaseX PCS.
+-- This block interfaces the Ethernet framer to TX PMA (Physical Medium Attachment).
+-- It performs preamble generation, insertion of idle patterns, all the low-level
+-- signalling (including 8b10b coding). Strobing signal for taking TX timestamps
+-- is also generated.
+--
+-- Module uses two separate clocks: 125 MHz tbi_tx_clk (or gtp_tx_clk)
+-- (Transmit clock for PHY) which clocks 8b10b signalling layer, and 62.5 MHz
+-- (clk_sys_i) which is used for data exchange with the rest of switch. Data
+-- exchange between these clock domains is done using an async FIFO.
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2009-06-16 0.1 twlostow Created (no error propagation supported yet)
+-- 2010-04-06 0.2 twlostow Cleanup, new timestamping/LCR scheme
+-- 2010-07-30 0.2 twlostow Fixed preamble length bug
+-- 2010-11-18 0.4 twlostow Added support for Xilinx GTP transceivers.
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+
+
+entity ep_tx_pcs_8bit is
+
+ port (
+-- reset (synchronous to refclk2, active LO)
+ rst_n_i : in std_logic;
+
+-- 62.5 MHz clock (refclk/2)
+ clk_sys_i : in std_logic;
+
+-- reset (phy_tx_clk_i sync)
+ rst_txclk_n_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- TX Framer inteface
+-------------------------------------------------------------------------------
+
+-- TX Fabric input
+ pcs_fab_i : in t_ep_internal_fabric;
+
+-- HI pulse indicates an error during transmission of a frame (buffer underrun)
+ pcs_error_o : out std_logic;
+
+-- HI indicates that the PCS is busy (transmitting a frame or during autonegotiation)
+ pcs_busy_o : out std_logic;
+
+-- HI indicates that PCS FIFO is almost full.
+ pcs_dreq_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- WB controller control signals
+-------------------------------------------------------------------------------
+
+ mdio_mcr_reset_i : in std_logic;
+-- Transmit Control Register, EN_PCS field
+ mdio_mcr_pdown_i : in std_logic;
+-- Transmit Control Register, TX_CAL field
+ mdio_wr_spec_tx_cal_i : in std_logic;
+
+-- autonegotiation control
+ an_tx_en_i : in std_logic;
+ an_tx_val_i : in std_logic_vector(15 downto 0);
+
+-- Timestamp strobe
+ timestamp_trigger_p_a_o : out std_logic;
+
+-- RMON events
+ rmon_tx_underrun : out std_logic;
+
+-------------------------------------------------------------------------------
+-- PHY Interface
+-------------------------------------------------------------------------------
+
+ phy_tx_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(7 downto 0);
+ phy_tx_k_o : out std_logic;
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic
+ );
+
+end ep_tx_pcs_8bit;
+
+
+architecture behavioral of ep_tx_pcs_8bit is
+
+-- TX state machine definitions
+ type t_tbif_tx_state is (TX_COMMA, TX_CAL, TX_CR1, TX_CR2, TX_CR3, TX_CR4, TX_SPD, TX_IDLE, TX_DATA, TX_PREAMBLE, TX_SFD, TX_EPD, TX_EXTEND, TX_GOTO_COMMA, TX_GEN_ERROR);
+
+-- TX state machine signals
+
+ signal tx_is_k : std_logic;
+ signal tx_catch_disparity : std_logic;
+ signal tx_odata_reg : std_logic_vector(7 downto 0);
+ signal tx_state : t_tbif_tx_state;
+ signal tx_cntr : unsigned(3 downto 0);
+ signal tx_cr_alternate : std_logic;
+
+-- TX clock alignment FIFO signals
+ signal fifo_packed_in, fifo_packed_out : std_logic_vector(17 downto 0);
+ signal fifo_empty : std_logic;
+ signal fifo_almost_empty : std_logic;
+ signal fifo_almost_full : std_logic;
+ signal fifo_enough_data : std_logic;
+ signal fifo_wr : std_logic;
+ signal fifo_rd : std_logic;
+ signal fifo_ready : std_logic;
+ signal fifo_clear_n : std_logic;
+ signal fifo_fab : t_ep_internal_fabric;
+
+ signal tx_rdreq_toggle : std_logic;
+ signal tx_odd_length : std_logic;
+
+ signal tx_busy : std_logic;
+ signal tx_error : std_logic;
+ signal rst_n_tx : std_logic;
+
+ signal mdio_mcr_reset_synced : std_logic;
+ signal mdio_mcr_pdown_synced : std_logic;
+ signal an_tx_en_synced : std_logic;
+
+begin
+
+ U_sync_pcs_busy_o : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => tx_busy,
+ synced_o => pcs_busy_o);
+
+ U_sync_pcs_error_o : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => tx_error,
+ ppulse_o => pcs_error_o);
+
+ U_sync_an_tx_en : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => '1',
+ data_i => an_tx_en_i,
+ synced_o => an_tx_en_synced);
+
+ U_sync_mcr_reset : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_reset_i,
+ synced_o => mdio_mcr_reset_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ U_sync_power_down : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk_i,
+ rst_n_i => '1',
+ data_i => mdio_mcr_pdown_i,
+ synced_o => mdio_mcr_pdown_synced);
+
+ phy_tx_data_o <= tx_odata_reg;
+ phy_tx_k_o <= tx_is_k;
+
+ rst_n_tx <= rst_txclk_n_i and not mdio_mcr_reset_synced;
+
+-------------------------------------------------------------------------------
+-- Clock alignment FIFO
+-------------------------------------------------------------------------------
+
+ fifo_clear_n <= '0' when (rst_n_i = '0') or (mdio_mcr_pdown_synced = '1') else '1';
+
+ f_pack_fifo_contents(pcs_fab_i, fifo_packed_in, fifo_wr, true);
+
+ U_TX_FIFO : generic_async_fifo
+ generic map (
+ g_data_width => 18,
+ g_size => 64,
+ g_with_rd_empty => true,
+ g_with_rd_almost_empty => true,
+ g_with_rd_count => true,
+ g_with_wr_almost_full => true,
+ g_almost_empty_threshold => 16,
+ g_almost_full_threshold => 56) -- fixme: make this a generic (or WB register)
+ port map (
+ rst_n_i => fifo_clear_n,
+ clk_wr_i => clk_sys_i,
+ d_i => fifo_packed_in,
+ we_i => fifo_wr,
+ wr_empty_o => open,
+ wr_full_o => open,
+ wr_almost_empty_o => open,
+ wr_almost_full_o => fifo_almost_full,
+ wr_count_o => open,
+ clk_rd_i => phy_tx_clk_i,
+ q_o => fifo_packed_out,
+ rd_i => fifo_rd,
+ rd_empty_o => fifo_empty,
+ rd_full_o => open,
+ rd_almost_empty_o => fifo_almost_empty,
+ rd_almost_full_o => open,
+ rd_count_o => open);
+
+ fifo_enough_data <= not fifo_almost_empty;
+
+ f_unpack_fifo_contents(fifo_packed_out, '1', fifo_fab, true);
+
+ -----------------------------------------------------------------------------
+ -- TX PCS state machine
+ -----------------------------------------------------------------------------
+
+ p_tx_fsm : process (phy_tx_clk_i)
+ begin
+
+ if rising_edge(phy_tx_clk_i) then
+
+-- The PCS is reset or disabled
+ if(rst_n_tx = '0' or mdio_mcr_pdown_synced = '1') then
+ tx_state <= TX_COMMA;
+ timestamp_trigger_p_a_o <= '0';
+ fifo_rd <= '0';
+ tx_error <= '0';
+ tx_odata_reg <= (others => '0');
+ tx_is_k <= '0';
+ tx_cr_alternate <= '0';
+ tx_catch_disparity <= '0';
+ tx_cntr <= (others => '0');
+ tx_odd_length <= '0';
+ tx_rdreq_toggle <= '0';
+ rmon_tx_underrun <= '0';
+
+ else
+
+ case tx_state is
+
+-------------------------------------------------------------------------------
+-- State COMMA: sends K28.5 comma character (first byte of /I/ sequence)
+-------------------------------------------------------------------------------
+ when TX_COMMA =>
+ tx_is_k <= '1';
+ tx_odata_reg <= c_K28_5;
+ tx_state <= TX_IDLE;
+ fifo_rd <= '0';
+ fifo_ready <= fifo_rd;
+
+-------------------------------------------------------------------------------
+-- State IDLE: sends the second code of the /I/ sequence with proper disparity\
+-------------------------------------------------------------------------------
+ when TX_IDLE =>
+
+ -- clear the RMON/error pulse after 2 cycles (DATA->COMMA->IDLE) to
+ -- make sure is't long enough to trigger the event counter
+ rmon_tx_underrun <= '0';
+ tx_error <= '0';
+
+-- endpoint wants to send Config_Reg
+ if(an_tx_en_synced = '1') then
+ tx_state <= TX_CR1;
+ tx_cr_alternate <= '0';
+ fifo_rd <= '0';
+
+-- we've got a new frame in the FIFO
+ elsif (fifo_fab.sof = '1' and fifo_ready = '1' and tx_cntr = "0000")then
+ fifo_rd <= '1';
+ tx_state <= TX_SPD;
+ tx_cntr <= "0101";
+
+-- host requested a calibration pattern
+ elsif(mdio_wr_spec_tx_cal_i = '1') then
+ tx_state <= TX_CAL;
+ fifo_rd <= '0';
+ tx_cr_alternate <= '0';
+ else
+-- continue sending idle sequences and checking if something has arrived in the
+-- FIFO
+ if(tx_cntr /= "0000") then
+ fifo_rd <= '0';
+ else
+ fifo_rd <= (not fifo_empty) and fifo_enough_data;
+ end if;
+ tx_state <= TX_COMMA;
+ end if;
+
+ tx_is_k <= '0';
+
+-- check the disparity of the previously emitted code and choose whether to send
+-- /I1/ or /I2/
+ if (phy_tx_disparity_i = '1' and tx_catch_disparity = '1') then
+ tx_odata_reg <= c_d5_6;
+ else
+ tx_odata_reg <= c_d16_2;
+ end if;
+
+ tx_catch_disparity <= '0';
+
+ if(tx_cntr /= "0000") then
+ tx_cntr <= tx_cntr - 1;
+ end if;
+-------------------------------------------------------------------------------
+-- State: CAL: transmit the calibration sequence
+-------------------------------------------------------------------------------
+
+ when TX_CAL =>
+ tx_odata_reg <= c_k28_7;
+ tx_is_k <= '1';
+ if(mdio_wr_spec_tx_cal_i = '0' and tx_cr_alternate = '1') then
+ tx_state <= TX_COMMA;
+ end if;
+
+ tx_cr_alternate <= not tx_cr_alternate;
+
+-------------------------------------------------------------------------------
+-- States: CR1, CR2, CR3, CR4: send the /C/ Configuration code set
+-------------------------------------------------------------------------------
+
+ when TX_CR1 =>
+ tx_is_k <= '1';
+ tx_odata_reg <= c_k28_5;
+ tx_state <= TX_CR2;
+
+ when TX_CR2 =>
+ tx_is_k <= '0';
+ if (tx_cr_alternate = '1') then
+ tx_odata_reg <= c_d21_5;
+ else
+ tx_odata_reg <= c_d2_2;
+ end if;
+ tx_cr_alternate <= not tx_cr_alternate;
+ tx_state <= TX_CR3;
+
+ when TX_CR3 =>
+ tx_odata_reg <= an_tx_val_i(7 downto 0);
+ tx_state <= TX_CR4;
+
+ when TX_CR4 =>
+ tx_odata_reg <= an_tx_val_i(15 downto 8);
+
+-- check if the autonegotiation control still wants the Config_Reg to be sent
+ if(an_tx_en_synced = '1') then
+ tx_state <= TX_CR1;
+ else
+ tx_state <= TX_COMMA;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State SPD: sends a start-of-packet delimeter
+-------------------------------------------------------------------------------
+ when TX_SPD =>
+ fifo_rd <= '0';
+ tx_is_k <= '1';
+ tx_odata_reg <= c_k27_7;
+ tx_state <= TX_PREAMBLE;
+
+-------------------------------------------------------------------------------
+-- State PREAMBLE: produces an Ethernet preamble
+-------------------------------------------------------------------------------
+ when TX_PREAMBLE =>
+ tx_is_k <= '0';
+ tx_odata_reg <= c_preamble_char;
+
+ if (tx_cntr = "0000") then
+ tx_state <= TX_SFD;
+ tx_rdreq_toggle <= '1';
+ end if;
+
+ tx_cntr <= tx_cntr - 1;
+
+
+-------------------------------------------------------------------------------
+-- State SFD: outputs the start-of-frame delimeter (last byte of the preamble)
+-------------------------------------------------------------------------------
+ when TX_SFD =>
+
+ tx_odata_reg <= c_preamble_sfd;
+ tx_rdreq_toggle <= '1';
+ tx_state <= TX_DATA;
+ timestamp_trigger_p_a_o <= '1';
+
+ when TX_DATA =>
+
+
+ -- toggle the TX FIFO request line, so we read a 16-bit word
+ -- every 2 phy_tx_clk_i periods
+
+ fifo_rd <= tx_rdreq_toggle and not (fifo_empty or fifo_fab.eof);
+
+ if((fifo_empty = '1' or fifo_fab.error = '1') and fifo_fab.eof = '0') then --
+ -- FIFO underrun?
+ tx_odata_reg <= c_k30_7; -- emit error propagation code
+ tx_is_k <= '1';
+ tx_state <= TX_GEN_ERROR;
+ tx_error <= not fifo_fab.error;
+ rmon_tx_underrun <= '1';
+ else
+
+ if tx_rdreq_toggle = '1' then -- send 16-bit word MSB or LSB
+ tx_odata_reg <= fifo_fab.data(15 downto 8);
+ else
+ tx_odata_reg <= fifo_fab.data(7 downto 0);
+ end if;
+
+ tx_rdreq_toggle <= not tx_rdreq_toggle;
+
+ -- handle the end of frame both for even- and odd-length frames
+ tx_odd_length <= fifo_fab.bytesel;
+
+ if (fifo_fab.eof = '1' and (tx_rdreq_toggle = '0' or (tx_rdreq_toggle = '1' and fifo_fab.bytesel = '1'))) then
+ tx_state <= TX_EPD;
+ fifo_rd <= '0';
+ end if;
+ end if;
+
+-------------------------------------------------------------------------------
+-- State EPD: send End-of-frame delimeter
+-------------------------------------------------------------------------------
+ when TX_EPD =>
+ timestamp_trigger_p_a_o <= '0';
+
+ tx_is_k <= '1';
+ tx_odata_reg <= c_k29_7;
+ tx_state <= TX_EXTEND;
+
+--------------------------------------------------------------------------------
+-- State EXTEND: send the carrier extension
+-------------------------------------------------------------------------------
+ when TX_EXTEND =>
+ tx_odata_reg <= c_k23_7;
+ if(tx_odd_length = '0')then
+ tx_state <= TX_COMMA;
+ tx_catch_disparity <= '1';
+ else
+ tx_odd_length <= '0';
+ end if;
+
+ tx_cntr <= "1000";
+
+-------------------------------------------------------------------------------
+-- State GEN_ERROR: entered when an error occured. Just terminates the frame.
+-------------------------------------------------------------------------------
+ when TX_GEN_ERROR =>
+ tx_state <= TX_EPD;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ process(phy_tx_clk_i)
+ begin
+ if rising_edge(phy_tx_clk_i) then
+ if fifo_empty = '0' or (tx_state /= TX_IDLE and tx_state /= TX_COMMA) then
+ tx_busy <= '1';
+ else
+ tx_busy <= '0';
+ end if;
+ end if;
+ end process;
+
+ pcs_dreq_o <= not fifo_almost_full;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd
new file mode 100644
index 000000000..97e1355ea
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_tx_vlan_unit.vhd
@@ -0,0 +1,305 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint - TX VLAN unit
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : ep_tx_vlan_unit.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-11-01
+-- Last update: 2012-11-16
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Performs VLAN untagging, if the VID of the egress packet is in
+-- the VLAN untagged set.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- FIXME: redo ram split between VLAN/PCK_INJ to use the unused 256 words and
+-- enable storing full-size frame (now max is 1024 bits, if we add 2x256
+-- bytes it will be exactly what we need) -> this requires chagnes in
+-- HDL+SW+SV
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2012-11-01 1.0 twlostow Created
+-- 2013-04-24 1.1 mlipinsk corrected VLAN untagging
+-- 2013-09-02 1.2 mlipinsk optimized by 1-cycle
+-- 2014-02-14 1.3 greg.d Bufixed to use in WRSW NIC
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+
+entity ep_tx_vlan_unit is
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ snk_fab_i : in t_ep_internal_fabric;
+ snk_dreq_o : out std_logic;
+
+ src_fab_o : out t_ep_internal_fabric;
+ src_dreq_i : in std_logic;
+
+-- Shared buffer interface to the packet injection unit
+ inject_mem_addr_i : in std_logic_vector(9 downto 0);
+ inject_mem_data_o : out std_logic_vector(17 downto 0);
+
+ uram_offset_wr_i : in std_logic;
+ uram_offset_i : in std_logic_vector(9 downto 0);
+ uram_data_i : in std_logic_vector(17 downto 0)
+ );
+
+
+end ep_tx_vlan_unit;
+
+architecture behavioral of ep_tx_vlan_unit is
+
+
+ type t_state is (IDLE, CHECK_ETHERTYPE, PUSH_QHEADER_1, POP_QHEADER_2, POP_QHEADER_3, POP_ETHERTYPE);
+
+-- general signals
+ signal state : t_state;
+ signal counter : unsigned(2 downto 0);
+
+ signal vut_rd_vid : std_logic_vector(11 downto 0);
+ signal vut_wr_vid : std_logic_vector(11 downto 0);
+ signal vut_untag, vut_untag_reg : std_logic;
+
+ signal vut_stored_tag : std_logic_vector(15 downto 0);
+ signal vut_stored_ethertype : std_logic_vector(15 downto 0);
+ signal flush_ethertype : std_logic;
+ signal flushed : std_logic;
+
+ signal mem_addr_muxed : std_logic_vector(9 downto 0);
+ signal mem_rdata : std_logic_vector(17 downto 0);
+ signal src_dreq_d0 : std_logic;
+
+begin -- behavioral
+
+ vut_rd_vid <= snk_fab_i.data(11 downto 0);
+
+ -- FIXME:
+ -- ML: currently 256 words of the ram are not used and we don't have space to store
+ -- max size frame (max tempalte is 512x2bytes = 1024 bytes)
+ -- we can use the unused bytes, just that some changes to sw+hw are needed
+ mem_addr_muxed <= ("00" & vut_rd_vid(11 downto 4)) when state /= IDLE else inject_mem_addr_i;
+
+ U_Untagged_Set_RAM : generic_dpram
+ generic map (
+ g_data_width => 18,
+ g_size => 1024,
+ g_dual_clock => false)
+ port map (
+ rst_n_i => rst_n_i,
+ clka_i => clk_sys_i,
+ clkb_i => '0',
+ wea_i => '0',
+ aa_i => mem_addr_muxed,
+ qa_o => mem_rdata,
+ web_i => uram_offset_wr_i,
+ ab_i => uram_offset_i,
+ db_i => uram_data_i);
+
+ inject_mem_data_o <= mem_rdata;
+
+ vut_untag <= mem_rdata(to_integer(unsigned(vut_stored_tag(3 downto 0))));
+
+ p_delay_signals : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ src_dreq_d0 <= src_dreq_i;
+
+ end if;
+ end process;
+
+ p_main_fsm : process (clk_sys_i)
+ begin -- process
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= IDLE;
+ else
+ case state is
+ when IDLE =>
+ flushed <= '0';
+ if(snk_fab_i.sof = '1') then
+ counter <= (others => '0');
+ end if;
+ if(snk_fab_i.dvalid = '1' and snk_fab_i.addr = c_WRF_DATA and counter /= 6) then
+ counter <= counter + 1;
+ end if;
+ if(src_dreq_i='1') then
+ flush_ethertype <= '0';
+ end if;
+
+ if(snk_fab_i.dvalid = '1' and counter = 5) then
+ state <= CHECK_ETHERTYPE;
+ end if;
+
+ when CHECK_ETHERTYPE =>
+ vut_stored_ethertype <= snk_fab_i.data;
+
+ if(snk_fab_i.dvalid = '1') then
+
+ if(snk_fab_i.data = x"8100") then
+ state <= PUSH_QHEADER_1;
+ else
+ state <= IDLE;
+ end if;
+ end if;
+
+ when PUSH_QHEADER_1 =>
+ vut_untag_reg <= '0';
+
+ if(snk_fab_i.dvalid = '1') then
+ vut_stored_tag <= snk_fab_i.data;
+ state <= POP_ETHERTYPE;
+ end if;
+
+ when POP_ETHERTYPE =>
+ if(vut_untag = '1') then
+ vut_untag_reg <= '1';
+ end if;
+ if(snk_fab_i.dvalid = '1') then
+ vut_stored_ethertype <= snk_fab_i.data;
+ end if;
+ -- if dreq is '1' in POP_ETHERTYPE, that means we have passed
+ -- ethertype to src_fab_o and we don't need to do it after going to
+ -- IDLE.
+ if(src_dreq_d0 = '1') then
+ flush_ethertype <= '0';
+ elsif(src_dreq_i = '0' and flushed = '0') then
+ flush_ethertype <= '1';
+ end if;
+ if(src_dreq_d0 = '1') then
+ flushed <= '1';
+ end if;
+ if( (vut_untag = '1' or vut_untag_reg = '1') and src_dreq_i = '1') then
+ state <= IDLE;
+ end if;
+ if(vut_untag='0' and vut_untag_reg='0' and src_dreq_d0='1') then
+ state <= POP_QHEADER_2;
+ end if;
+
+ when POP_QHEADER_2 =>
+ if(src_dreq_d0 = '1') then
+ state <= POP_QHEADER_3;
+ end if;
+
+ when POP_QHEADER_3 =>
+ if(src_dreq_d0 = '1') then
+ state <= IDLE;
+ end if;
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+
+-- p_main_fsm_comb : process(snk_fab_i, src_dreq_d0, state, vut_stored_tag, vut_stored_ethertype, counter,vut_untag)
+ p_main_fsm_comb : process(snk_fab_i,src_dreq_i, src_dreq_d0, state, vut_stored_tag, vut_stored_ethertype, counter,vut_untag, flush_ethertype)
+ begin
+
+ case state is
+ when IDLE =>
+ src_fab_o.sof <= snk_fab_i.sof;
+ src_fab_o.eof <= snk_fab_i.eof;
+ src_fab_o.error <= snk_fab_i.error;
+ src_fab_o.bytesel <= snk_fab_i.bytesel;
+ when others =>
+ src_fab_o.sof <= '0';
+ src_fab_o.eof <= '0';
+ src_fab_o.error <= '0';
+ src_fab_o.bytesel <= '0';
+ end case;
+
+ case state is
+ when IDLE =>
+ snk_dreq_o <= src_dreq_i;
+ -- validate Ethertype from POP_ETHERTYPE state if dreq was high
+ src_fab_o.dvalid <= snk_fab_i.dvalid or flush_ethertype;
+ src_fab_o.addr <= snk_fab_i.addr;
+ if(flush_ethertype = '1') then
+ src_fab_o.data <= vut_stored_ethertype;
+ else
+ src_fab_o.data <= snk_fab_i.data;
+ end if;
+
+ when CHECK_ETHERTYPE =>
+ snk_dreq_o <= src_dreq_i;
+ if(snk_fab_i.data /= x"8100") then
+ src_fab_o.dvalid <= snk_fab_i.dvalid;
+ else
+ src_fab_o.dvalid <= '0';
+ end if;
+ src_fab_o.data <= snk_fab_i.data;
+ src_fab_o.addr <= snk_fab_i.addr;
+
+ when PUSH_QHEADER_1 =>
+ snk_dreq_o <= '1';
+ src_fab_o.dvalid <= '0';
+ src_fab_o.data <= (others => 'X');
+ src_fab_o.addr <= c_WRF_DATA;
+-- when CHECK_UNTAG =>
+-- snk_dreq_o <= '0';
+-- src_fab_o.dvalid <= '0';
+-- src_fab_o.data <= (others => 'X');
+
+ when POP_ETHERTYPE =>
+ if(vut_untag = '1') then
+ snk_dreq_o <= src_dreq_i and src_dreq_d0;
+ src_fab_o.dvalid <= snk_fab_i.dvalid and src_dreq_d0;
+ src_fab_o.data <= snk_fab_i.data;
+ else
+ src_fab_o.data <= x"8100";
+ snk_dreq_o <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ end if;
+ src_fab_o.addr <= c_WRF_DATA;
+
+ when POP_QHEADER_2 =>
+ snk_dreq_o <= '0';
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.data <= vut_stored_tag;--vut_stored_ethertype;
+ src_fab_o.addr <= c_WRF_DATA;
+
+ when POP_QHEADER_3 =>
+ snk_dreq_o <= src_dreq_i and src_dreq_d0;
+ src_fab_o.dvalid <= src_dreq_d0;
+ src_fab_o.data <= vut_stored_ethertype; --vut_stored_tag;
+ src_fab_o.addr <= c_WRF_DATA;
+ end case;
+ end process;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd
new file mode 100644
index 000000000..b58e0cfdc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/ep_wishbone_controller.vhd
@@ -0,0 +1,861 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR switch endpoint controller
+---------------------------------------------------------------------------------------
+-- File : ep_wishbone_controller.vhd
+-- Author : auto-generated by wbgen2 from ep_wishbone_controller.wb
+-- Created : Wed Aug 16 22:43:41 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE ep_wishbone_controller.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.ep_wbgen2_pkg.all;
+
+
+entity ep_wishbone_controller is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ tx_clk_i : in std_logic;
+ rx_clk_i : in std_logic;
+ regs_i : in t_ep_in_registers;
+ regs_o : out t_ep_out_registers
+ );
+end ep_wishbone_controller;
+
+architecture syn of ep_wishbone_controller is
+
+signal ep_ecr_portid_int : std_logic_vector(4 downto 0);
+signal ep_ecr_rst_cnt_dly0 : std_logic ;
+signal ep_ecr_rst_cnt_int : std_logic ;
+signal ep_ecr_tx_en_int : std_logic ;
+signal ep_ecr_rx_en_int : std_logic ;
+signal ep_tscr_en_txts_int : std_logic ;
+signal ep_tscr_en_rxts_int : std_logic ;
+signal ep_tscr_cs_start_int : std_logic ;
+signal ep_tscr_cs_start_int_delay : std_logic ;
+signal ep_tscr_cs_start_sync0 : std_logic ;
+signal ep_tscr_cs_start_sync1 : std_logic ;
+signal ep_tscr_cs_start_sync2 : std_logic ;
+signal ep_tscr_cs_done_sync0 : std_logic ;
+signal ep_tscr_cs_done_sync1 : std_logic ;
+signal ep_tscr_rx_cal_start_int : std_logic ;
+signal ep_tscr_rx_cal_start_int_delay : std_logic ;
+signal ep_tscr_rx_cal_start_sync0 : std_logic ;
+signal ep_tscr_rx_cal_start_sync1 : std_logic ;
+signal ep_tscr_rx_cal_start_sync2 : std_logic ;
+signal ep_rfcr_a_runt_int : std_logic ;
+signal ep_rfcr_a_giant_int : std_logic ;
+signal ep_rfcr_a_hp_int : std_logic ;
+signal ep_rfcr_keep_crc_int : std_logic ;
+signal ep_rfcr_hpap_int : std_logic_vector(7 downto 0);
+signal ep_rfcr_mru_int : std_logic_vector(13 downto 0);
+signal ep_vcr0_qmode_int : std_logic_vector(1 downto 0);
+signal ep_vcr0_fix_prio_int : std_logic ;
+signal ep_vcr0_prio_val_int : std_logic_vector(2 downto 0);
+signal ep_vcr0_pvid_int : std_logic_vector(11 downto 0);
+signal ep_pfcr0_enable_int : std_logic ;
+signal ep_fcr_rxpause_int : std_logic ;
+signal ep_fcr_txpause_int : std_logic ;
+signal ep_fcr_rxpause_802_1q_int : std_logic ;
+signal ep_fcr_txpause_802_1q_int : std_logic ;
+signal ep_fcr_tx_thr_int : std_logic_vector(7 downto 0);
+signal ep_fcr_tx_quanta_int : std_logic_vector(15 downto 0);
+signal ep_mach_int : std_logic_vector(15 downto 0);
+signal ep_macl_int : std_logic_vector(31 downto 0);
+signal ep_mdio_cr_addr_int : std_logic_vector(7 downto 0);
+signal ep_mdio_cr_rw_int : std_logic ;
+signal ep_mdio_asr_phyad_int : std_logic_vector(7 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(4 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ ep_ecr_portid_int <= "00000";
+ ep_ecr_rst_cnt_int <= '0';
+ ep_ecr_tx_en_int <= '0';
+ ep_ecr_rx_en_int <= '0';
+ ep_tscr_en_txts_int <= '0';
+ ep_tscr_en_rxts_int <= '0';
+ ep_tscr_cs_start_int <= '0';
+ ep_tscr_cs_start_int_delay <= '0';
+ ep_tscr_rx_cal_start_int <= '0';
+ ep_tscr_rx_cal_start_int_delay <= '0';
+ ep_rfcr_a_runt_int <= '0';
+ ep_rfcr_a_giant_int <= '0';
+ ep_rfcr_a_hp_int <= '0';
+ ep_rfcr_keep_crc_int <= '0';
+ ep_rfcr_hpap_int <= "00000000";
+ ep_rfcr_mru_int <= "00000000000000";
+ ep_vcr0_qmode_int <= "00";
+ ep_vcr0_fix_prio_int <= '0';
+ ep_vcr0_prio_val_int <= "000";
+ ep_vcr0_pvid_int <= "000000000000";
+ regs_o.vcr1_offset_wr_o <= '0';
+ regs_o.vcr1_data_wr_o <= '0';
+ regs_o.pfcr0_mm_addr_wr_o <= '0';
+ regs_o.pfcr0_mm_write_wr_o <= '0';
+ ep_pfcr0_enable_int <= '0';
+ regs_o.pfcr0_mm_data_msb_wr_o <= '0';
+ regs_o.pfcr1_mm_data_lsb_wr_o <= '0';
+ regs_o.tcar_pcp_map_load_o <= '0';
+ ep_fcr_rxpause_int <= '0';
+ ep_fcr_txpause_int <= '0';
+ ep_fcr_rxpause_802_1q_int <= '0';
+ ep_fcr_txpause_802_1q_int <= '0';
+ ep_fcr_tx_thr_int <= "00000000";
+ ep_fcr_tx_quanta_int <= "0000000000000000";
+ ep_mach_int <= "0000000000000000";
+ ep_macl_int <= "00000000000000000000000000000000";
+ regs_o.mdio_cr_data_wr_o <= '0';
+ ep_mdio_cr_addr_int <= "00000000";
+ ep_mdio_cr_rw_int <= '0';
+ ep_mdio_asr_phyad_int <= "00000000";
+ regs_o.dsr_lact_load_o <= '0';
+ regs_o.dmcr_en_load_o <= '0';
+ regs_o.dmcr_n_avg_load_o <= '0';
+ regs_o.dmsr_ps_rdy_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_sel_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_id_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_ena_load_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ ep_ecr_rst_cnt_int <= '0';
+ regs_o.vcr1_offset_wr_o <= '0';
+ regs_o.vcr1_data_wr_o <= '0';
+ regs_o.pfcr0_mm_addr_wr_o <= '0';
+ regs_o.pfcr0_mm_write_wr_o <= '0';
+ regs_o.pfcr0_mm_data_msb_wr_o <= '0';
+ regs_o.pfcr1_mm_data_lsb_wr_o <= '0';
+ regs_o.tcar_pcp_map_load_o <= '0';
+ regs_o.mdio_cr_data_wr_o <= '0';
+ regs_o.dsr_lact_load_o <= '0';
+ regs_o.dmcr_en_load_o <= '0';
+ regs_o.dmcr_n_avg_load_o <= '0';
+ regs_o.dmsr_ps_rdy_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_sel_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_id_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_ena_load_o <= '0';
+ ack_in_progress <= '0';
+ else
+ ep_tscr_cs_start_int <= ep_tscr_cs_start_int_delay;
+ ep_tscr_cs_start_int_delay <= '0';
+ ep_tscr_rx_cal_start_int <= ep_tscr_rx_cal_start_int_delay;
+ ep_tscr_rx_cal_start_int_delay <= '0';
+ regs_o.vcr1_offset_wr_o <= '0';
+ regs_o.vcr1_data_wr_o <= '0';
+ regs_o.pfcr0_mm_addr_wr_o <= '0';
+ regs_o.pfcr0_mm_write_wr_o <= '0';
+ regs_o.pfcr0_mm_data_msb_wr_o <= '0';
+ regs_o.pfcr1_mm_data_lsb_wr_o <= '0';
+ regs_o.tcar_pcp_map_load_o <= '0';
+ regs_o.mdio_cr_data_wr_o <= '0';
+ regs_o.dsr_lact_load_o <= '0';
+ regs_o.dmcr_en_load_o <= '0';
+ regs_o.dmcr_n_avg_load_o <= '0';
+ regs_o.dmsr_ps_rdy_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_ifg_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_sel_load_o <= '0';
+ regs_o.inj_ctrl_pic_conf_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_id_load_o <= '0';
+ regs_o.inj_ctrl_pic_mode_valid_load_o <= '0';
+ regs_o.inj_ctrl_pic_ena_load_o <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(4 downto 0) is
+ when "00000" =>
+ if (wb_we_i = '1') then
+ ep_ecr_portid_int <= wrdata_reg(4 downto 0);
+ ep_ecr_rst_cnt_int <= wrdata_reg(5);
+ ep_ecr_tx_en_int <= wrdata_reg(6);
+ ep_ecr_rx_en_int <= wrdata_reg(7);
+ end if;
+ rddata_reg(4 downto 0) <= ep_ecr_portid_int;
+ rddata_reg(5) <= '0';
+ rddata_reg(6) <= ep_ecr_tx_en_int;
+ rddata_reg(7) <= ep_ecr_rx_en_int;
+ rddata_reg(24) <= regs_i.ecr_feat_vlan_i;
+ rddata_reg(25) <= regs_i.ecr_feat_dmtd_i;
+ rddata_reg(26) <= regs_i.ecr_feat_ptp_i;
+ rddata_reg(27) <= regs_i.ecr_feat_dpi_i;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "00001" =>
+ if (wb_we_i = '1') then
+ ep_tscr_en_txts_int <= wrdata_reg(0);
+ ep_tscr_en_rxts_int <= wrdata_reg(1);
+ ep_tscr_cs_start_int <= wrdata_reg(2);
+ ep_tscr_cs_start_int_delay <= wrdata_reg(2);
+ ep_tscr_rx_cal_start_int <= wrdata_reg(4);
+ ep_tscr_rx_cal_start_int_delay <= wrdata_reg(4);
+ end if;
+ rddata_reg(0) <= ep_tscr_en_txts_int;
+ rddata_reg(1) <= ep_tscr_en_rxts_int;
+ rddata_reg(2) <= '0';
+ rddata_reg(3) <= ep_tscr_cs_done_sync1;
+ rddata_reg(4) <= '0';
+ rddata_reg(5) <= regs_i.tscr_rx_cal_result_i;
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(4) <= '1';
+ ack_in_progress <= '1';
+ when "00010" =>
+ if (wb_we_i = '1') then
+ ep_rfcr_a_runt_int <= wrdata_reg(0);
+ ep_rfcr_a_giant_int <= wrdata_reg(1);
+ ep_rfcr_a_hp_int <= wrdata_reg(2);
+ ep_rfcr_keep_crc_int <= wrdata_reg(3);
+ ep_rfcr_hpap_int <= wrdata_reg(11 downto 4);
+ ep_rfcr_mru_int <= wrdata_reg(25 downto 12);
+ end if;
+ rddata_reg(0) <= ep_rfcr_a_runt_int;
+ rddata_reg(1) <= ep_rfcr_a_giant_int;
+ rddata_reg(2) <= ep_rfcr_a_hp_int;
+ rddata_reg(3) <= ep_rfcr_keep_crc_int;
+ rddata_reg(11 downto 4) <= ep_rfcr_hpap_int;
+ rddata_reg(25 downto 12) <= ep_rfcr_mru_int;
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00011" =>
+ if (wb_we_i = '1') then
+ ep_vcr0_qmode_int <= wrdata_reg(1 downto 0);
+ ep_vcr0_fix_prio_int <= wrdata_reg(2);
+ ep_vcr0_prio_val_int <= wrdata_reg(6 downto 4);
+ ep_vcr0_pvid_int <= wrdata_reg(27 downto 16);
+ end if;
+ rddata_reg(1 downto 0) <= ep_vcr0_qmode_int;
+ rddata_reg(2) <= ep_vcr0_fix_prio_int;
+ rddata_reg(6 downto 4) <= ep_vcr0_prio_val_int;
+ rddata_reg(27 downto 16) <= ep_vcr0_pvid_int;
+ rddata_reg(3) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00100" =>
+ if (wb_we_i = '1') then
+ regs_o.vcr1_offset_wr_o <= '1';
+ regs_o.vcr1_data_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00101" =>
+ if (wb_we_i = '1') then
+ regs_o.pfcr0_mm_addr_wr_o <= '1';
+ regs_o.pfcr0_mm_write_wr_o <= '1';
+ ep_pfcr0_enable_int <= wrdata_reg(7);
+ regs_o.pfcr0_mm_data_msb_wr_o <= '1';
+ end if;
+ rddata_reg(7) <= ep_pfcr0_enable_int;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00110" =>
+ if (wb_we_i = '1') then
+ regs_o.pfcr1_mm_data_lsb_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00111" =>
+ if (wb_we_i = '1') then
+ regs_o.tcar_pcp_map_load_o <= '1';
+ end if;
+ rddata_reg(23 downto 0) <= regs_i.tcar_pcp_map_i;
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01000" =>
+ if (wb_we_i = '1') then
+ ep_fcr_rxpause_int <= wrdata_reg(0);
+ ep_fcr_txpause_int <= wrdata_reg(1);
+ ep_fcr_rxpause_802_1q_int <= wrdata_reg(2);
+ ep_fcr_txpause_802_1q_int <= wrdata_reg(3);
+ ep_fcr_tx_thr_int <= wrdata_reg(15 downto 8);
+ ep_fcr_tx_quanta_int <= wrdata_reg(31 downto 16);
+ end if;
+ rddata_reg(0) <= ep_fcr_rxpause_int;
+ rddata_reg(1) <= ep_fcr_txpause_int;
+ rddata_reg(2) <= ep_fcr_rxpause_802_1q_int;
+ rddata_reg(3) <= ep_fcr_txpause_802_1q_int;
+ rddata_reg(15 downto 8) <= ep_fcr_tx_thr_int;
+ rddata_reg(31 downto 16) <= ep_fcr_tx_quanta_int;
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01001" =>
+ if (wb_we_i = '1') then
+ ep_mach_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= ep_mach_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01010" =>
+ if (wb_we_i = '1') then
+ ep_macl_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= ep_macl_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01011" =>
+ if (wb_we_i = '1') then
+ regs_o.mdio_cr_data_wr_o <= '1';
+ ep_mdio_cr_addr_int <= wrdata_reg(23 downto 16);
+ ep_mdio_cr_rw_int <= wrdata_reg(31);
+ end if;
+ rddata_reg(23 downto 16) <= ep_mdio_cr_addr_int;
+ rddata_reg(31) <= ep_mdio_cr_rw_int;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01100" =>
+ if (wb_we_i = '1') then
+ ep_mdio_asr_phyad_int <= wrdata_reg(23 downto 16);
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.mdio_asr_rdata_i;
+ rddata_reg(23 downto 16) <= ep_mdio_asr_phyad_int;
+ rddata_reg(31) <= regs_i.mdio_asr_ready_i;
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= "11001010111111101011101010111110";
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01110" =>
+ if (wb_we_i = '1') then
+ regs_o.dsr_lact_load_o <= '1';
+ end if;
+ rddata_reg(0) <= regs_i.dsr_lstatus_i;
+ rddata_reg(1) <= regs_i.dsr_lact_i;
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01111" =>
+ if (wb_we_i = '1') then
+ regs_o.dmcr_en_load_o <= '1';
+ regs_o.dmcr_n_avg_load_o <= '1';
+ end if;
+ rddata_reg(0) <= regs_i.dmcr_en_i;
+ rddata_reg(27 downto 16) <= regs_i.dmcr_n_avg_i;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10000" =>
+ if (wb_we_i = '1') then
+ regs_o.dmsr_ps_rdy_load_o <= '1';
+ end if;
+ rddata_reg(23 downto 0) <= regs_i.dmsr_ps_val_i;
+ rddata_reg(24) <= regs_i.dmsr_ps_rdy_i;
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10001" =>
+ if (wb_we_i = '1') then
+ regs_o.inj_ctrl_pic_conf_ifg_load_o <= '1';
+ regs_o.inj_ctrl_pic_conf_sel_load_o <= '1';
+ regs_o.inj_ctrl_pic_conf_valid_load_o <= '1';
+ regs_o.inj_ctrl_pic_mode_id_load_o <= '1';
+ regs_o.inj_ctrl_pic_mode_valid_load_o <= '1';
+ regs_o.inj_ctrl_pic_ena_load_o <= '1';
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.inj_ctrl_pic_conf_ifg_i;
+ rddata_reg(18 downto 16) <= regs_i.inj_ctrl_pic_conf_sel_i;
+ rddata_reg(19) <= regs_i.inj_ctrl_pic_conf_valid_i;
+ rddata_reg(22 downto 20) <= regs_i.inj_ctrl_pic_mode_id_i;
+ rddata_reg(23) <= regs_i.inj_ctrl_pic_mode_valid_i;
+ rddata_reg(24) <= regs_i.inj_ctrl_pic_ena_i;
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Port identifier
+ regs_o.ecr_portid_o <= ep_ecr_portid_int;
+-- Reset event counters
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ep_ecr_rst_cnt_dly0 <= '0';
+ regs_o.ecr_rst_cnt_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ ep_ecr_rst_cnt_dly0 <= ep_ecr_rst_cnt_int;
+ regs_o.ecr_rst_cnt_o <= ep_ecr_rst_cnt_int and (not ep_ecr_rst_cnt_dly0);
+ end if;
+ end process;
+
+
+-- Transmit path enable
+ regs_o.ecr_tx_en_o <= ep_ecr_tx_en_int;
+-- Receive path enable
+ regs_o.ecr_rx_en_o <= ep_ecr_rx_en_int;
+-- Feature present: VLAN tagging
+-- Feature present: DDMTD phase measurement
+-- Feature present: IEEE1588 timestamper
+-- Feature present: DPI packet classifier
+-- Transmit timestamping enable
+ regs_o.tscr_en_txts_o <= ep_tscr_en_txts_int;
+-- Receive timestamping enable
+ regs_o.tscr_en_rxts_o <= ep_tscr_en_rxts_int;
+-- Timestamping counter synchronization start
+ process (tx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ regs_o.tscr_cs_start_o <= '0';
+ ep_tscr_cs_start_sync0 <= '0';
+ ep_tscr_cs_start_sync1 <= '0';
+ ep_tscr_cs_start_sync2 <= '0';
+ elsif rising_edge(tx_clk_i) then
+ ep_tscr_cs_start_sync0 <= ep_tscr_cs_start_int;
+ ep_tscr_cs_start_sync1 <= ep_tscr_cs_start_sync0;
+ ep_tscr_cs_start_sync2 <= ep_tscr_cs_start_sync1;
+ regs_o.tscr_cs_start_o <= ep_tscr_cs_start_sync2 and (not ep_tscr_cs_start_sync1);
+ end if;
+ end process;
+
+
+-- Timestamping counter synchronization done
+-- synchronizer chain for field : Timestamping counter synchronization done (type RO/WO, tx_clk_i -> clk_sys_i)
+ process (tx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ep_tscr_cs_done_sync0 <= '0';
+ ep_tscr_cs_done_sync1 <= '0';
+ elsif rising_edge(tx_clk_i) then
+ ep_tscr_cs_done_sync0 <= regs_i.tscr_cs_done_i;
+ ep_tscr_cs_done_sync1 <= ep_tscr_cs_done_sync0;
+ end if;
+ end process;
+
+
+-- Start calibration of RX timestamper
+ process (rx_clk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ regs_o.tscr_rx_cal_start_o <= '0';
+ ep_tscr_rx_cal_start_sync0 <= '0';
+ ep_tscr_rx_cal_start_sync1 <= '0';
+ ep_tscr_rx_cal_start_sync2 <= '0';
+ elsif rising_edge(rx_clk_i) then
+ ep_tscr_rx_cal_start_sync0 <= ep_tscr_rx_cal_start_int;
+ ep_tscr_rx_cal_start_sync1 <= ep_tscr_rx_cal_start_sync0;
+ ep_tscr_rx_cal_start_sync2 <= ep_tscr_rx_cal_start_sync1;
+ regs_o.tscr_rx_cal_start_o <= ep_tscr_rx_cal_start_sync2 and (not ep_tscr_rx_cal_start_sync1);
+ end if;
+ end process;
+
+
+-- RX timestamper calibration result flag
+-- RX accept runts
+ regs_o.rfcr_a_runt_o <= ep_rfcr_a_runt_int;
+-- RX accept giants
+ regs_o.rfcr_a_giant_o <= ep_rfcr_a_giant_int;
+-- RX accept HP
+ regs_o.rfcr_a_hp_o <= ep_rfcr_a_hp_int;
+-- RX keep CRC
+ regs_o.rfcr_keep_crc_o <= ep_rfcr_keep_crc_int;
+-- RX Fiter HP Priorities
+ regs_o.rfcr_hpap_o <= ep_rfcr_hpap_int;
+-- Maximum receive unit (MRU)
+ regs_o.rfcr_mru_o <= ep_rfcr_mru_int;
+-- RX 802.1q port mode
+ regs_o.vcr0_qmode_o <= ep_vcr0_qmode_int;
+-- Force 802.1q priority
+ regs_o.vcr0_fix_prio_o <= ep_vcr0_fix_prio_int;
+-- Port-assigned 802.1q priority
+ regs_o.vcr0_prio_val_o <= ep_vcr0_prio_val_int;
+-- Port-assigned VID
+ regs_o.vcr0_pvid_o <= ep_vcr0_pvid_int;
+-- VLAN Untagged Set/Injection Buffer offset
+-- pass-through field: VLAN Untagged Set/Injection Buffer offset in register: VLAN Control Register 1
+ regs_o.vcr1_offset_o <= wrdata_reg(9 downto 0);
+-- VLAN Untagged Set/Injection Buffer value
+-- pass-through field: VLAN Untagged Set/Injection Buffer value in register: VLAN Control Register 1
+ regs_o.vcr1_data_o <= wrdata_reg(27 downto 10);
+-- Microcode Memory Address
+-- pass-through field: Microcode Memory Address in register: Packet Filter Control Register 0
+ regs_o.pfcr0_mm_addr_o <= wrdata_reg(5 downto 0);
+-- Microcode Memory Write Enable
+-- pass-through field: Microcode Memory Write Enable in register: Packet Filter Control Register 0
+ regs_o.pfcr0_mm_write_o <= wrdata_reg(6);
+-- Packet Filter Enable
+ regs_o.pfcr0_enable_o <= ep_pfcr0_enable_int;
+-- Microcode Memory Data (24 MSBs)
+-- pass-through field: Microcode Memory Data (24 MSBs) in register: Packet Filter Control Register 0
+ regs_o.pfcr0_mm_data_msb_o <= wrdata_reg(31 downto 8);
+-- Microcode Memory Data (12 LSBs)
+-- pass-through field: Microcode Memory Data (12 LSBs) in register: Packet Filter Control Register 1
+ regs_o.pfcr1_mm_data_lsb_o <= wrdata_reg(11 downto 0);
+-- 802.1Q priority tag to Traffic Class map
+ regs_o.tcar_pcp_map_o <= wrdata_reg(23 downto 0);
+-- RX Pause 802.3 enable
+ regs_o.fcr_rxpause_o <= ep_fcr_rxpause_int;
+-- TX Pause 802.3 enable
+ regs_o.fcr_txpause_o <= ep_fcr_txpause_int;
+-- Rx Pause 802.1Q enable
+ regs_o.fcr_rxpause_802_1q_o <= ep_fcr_rxpause_802_1q_int;
+-- Tx Pause 802.1Q enable (not implemented)
+ regs_o.fcr_txpause_802_1q_o <= ep_fcr_txpause_802_1q_int;
+-- TX pause threshold
+ regs_o.fcr_tx_thr_o <= ep_fcr_tx_thr_int;
+-- TX pause quanta
+ regs_o.fcr_tx_quanta_o <= ep_fcr_tx_quanta_int;
+-- MAC Address
+ regs_o.mach_o <= ep_mach_int;
+-- MAC Address
+ regs_o.macl_o <= ep_macl_int;
+-- MDIO Register Value
+-- pass-through field: MDIO Register Value in register: MDIO Control Register
+ regs_o.mdio_cr_data_o <= wrdata_reg(15 downto 0);
+-- MDIO Register Address
+ regs_o.mdio_cr_addr_o <= ep_mdio_cr_addr_int;
+-- MDIO Read/Write select
+ regs_o.mdio_cr_rw_o <= ep_mdio_cr_rw_int;
+-- MDIO Read Value
+-- MDIO PHY Address
+ regs_o.mdio_asr_phyad_o <= ep_mdio_asr_phyad_int;
+-- MDIO Ready
+-- Link status
+-- Link activity
+ regs_o.dsr_lact_o <= wrdata_reg(1);
+-- DMTD Phase measurement enable
+ regs_o.dmcr_en_o <= wrdata_reg(0);
+-- DMTD averaging samples
+ regs_o.dmcr_n_avg_o <= wrdata_reg(27 downto 16);
+-- DMTD Phase shift value
+-- DMTD Phase shift value ready
+ regs_o.dmsr_ps_rdy_o <= wrdata_reg(24);
+-- Config: Interframe GAP
+ regs_o.inj_ctrl_pic_conf_ifg_o <= wrdata_reg(15 downto 0);
+-- Config: packet pattern sel id
+ regs_o.inj_ctrl_pic_conf_sel_o <= wrdata_reg(18 downto 16);
+-- Config: valid
+ regs_o.inj_ctrl_pic_conf_valid_o <= wrdata_reg(19);
+-- Mode: packet generate mode
+ regs_o.inj_ctrl_pic_mode_id_o <= wrdata_reg(22 downto 20);
+-- Mode: valid
+ regs_o.inj_ctrl_pic_mode_valid_o <= wrdata_reg(23);
+-- Frame Generation Enabled
+ regs_o.inj_ctrl_pic_ena_o <= wrdata_reg(24);
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd
new file mode 100644
index 000000000..f014eab9f
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/wr_endpoint.vhd
@@ -0,0 +1,1001 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : wr_endpoint.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-04-26
+-- Last update: 2017-02-20
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: Module implements the top level for the White Rabbit Endpoint
+-- It's basically an extended Ethernet MAC providing extra timing/switch-specific
+-- features such as:
+-- - VLANs: inserting/removing tags (for ACCESS/TRUNK port support)
+-- - RX/TX precise timestaping
+-- - full PCS for optical Gigabit Ethernet
+-- - decodes MAC addresses, VIDs and priorities and passes them to the RTU.
+-- Refer to the manual for more details.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+
+use work.gencores_pkg.all;
+use work.endpoint_private_pkg.all;
+use work.endpoint_pkg.all;
+use work.ep_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.wishbone_pkg.all;
+
+entity wr_endpoint is
+
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_tx_force_gap_length : integer := 0;
+ g_tx_runt_padding : boolean := true;
+ g_simulation : boolean := false;
+ g_pcs_16bit : boolean := true;
+ g_rx_buffer_size : integer := 1024;
+ g_with_rx_buffer : boolean := true;
+ g_with_flow_control : boolean := true;
+ g_with_timestamper : boolean := true;
+ g_with_dpi_classifier : boolean := false;
+ g_with_vlans : boolean := true;
+ g_with_rtu : boolean := true;
+ g_with_leds : boolean := true;
+ g_with_dmtd : boolean := false;
+ g_with_packet_injection : boolean := false;
+ g_use_new_rxcrc : boolean := false;
+ g_use_new_txcrc : boolean := false;
+ g_with_stop_traffic : boolean := false
+ );
+ port (
+
+-------------------------------------------------------------------------------
+-- Clocks
+-------------------------------------------------------------------------------
+
+-- Endpoint transmit reference clock. Must be 125 MHz +- 100 ppm
+ clk_ref_i : in std_logic;
+
+-- reference clock / 2 (62.5 MHz, in-phase with refclk)
+ clk_sys_i : in std_logic;
+
+-- DMTD offset clock for phase tracking - used only if g_with_dmtd == true
+ clk_dmtd_i : in std_logic;
+
+-- resets for various clock domains
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+
+-- PPS input (1 clk_ref_i cycle HI) for synchronizing timestamp counter
+ pps_csync_p1_i : in std_logic;
+
+-- PPS valid input (clk_ref_i domain), when 1, the external PPS generator/servo
+-- is not adjusting the time scale, so we can safely timestamp.
+ pps_valid_i : in std_logic := '1';
+
+-------------------------------------------------------------------------------
+-- PHY Interace (8/16 bit PCS)
+-------------------------------------------------------------------------------
+
+ phy_rst_o : out std_logic;
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic;
+ phy_sfp_los_i : in std_logic;
+ phy_sfp_tx_disable_o : out std_logic;
+ phy_rdy_i : in std_logic;
+
+ phy_ref_clk_i : in std_logic;
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_clk_i : in std_logic;
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_enc_err_i : in std_logic;
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0);
+
+-------------------------------------------------------------------------------
+-- GMII Interface (8-bit)
+-------------------------------------------------------------------------------
+
+ gmii_tx_clk_i : in std_logic := '0';
+ gmii_txd_o : out std_logic_vector(7 downto 0);
+ gmii_tx_en_o : out std_logic;
+ gmii_tx_er_o : out std_logic;
+
+ gmii_rx_clk_i : in std_logic := '0';
+ gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00";
+ gmii_rx_er_i : in std_logic := '0';
+ gmii_rx_dv_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- Wishbone I/O
+ ---------------------------------------------------------------------------
+
+ src_dat_o : out std_logic_vector(15 downto 0);
+ src_adr_o : out std_logic_vector(1 downto 0);
+ src_sel_o : out std_logic_vector(1 downto 0);
+ src_cyc_o : out std_logic;
+ src_stb_o : out std_logic;
+ src_we_o : out std_logic;
+ src_stall_i : in std_logic;
+ src_ack_i : in std_logic;
+ src_err_i : in std_logic;
+
+ snk_dat_i : in std_logic_vector(15 downto 0);
+ snk_adr_i : in std_logic_vector(1 downto 0);
+ snk_sel_i : in std_logic_vector(1 downto 0);
+ snk_cyc_i : in std_logic;
+ snk_stb_i : in std_logic;
+ snk_we_i : in std_logic;
+ snk_stall_o : out std_logic;
+ snk_ack_o : out std_logic;
+ snk_err_o : out std_logic;
+ snk_rty_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- TX timestamping unit interface
+-------------------------------------------------------------------------------
+
+-- Port ID value
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+-- Frame ID value
+ txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0);
+
+-- TX Timestamp and correctness info
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+
+-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is
+-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness
+-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI
+-- until assertion of txtsu_ack_i.
+ txtsu_stb_o : out std_logic;
+
+-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received
+-- the timestamp
+ txtsu_ack_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- RTU interface
+-------------------------------------------------------------------------------
+
+-- 1 indicates that coresponding RTU port is full.
+ rtu_full_i : in std_logic;
+
+-- 1 indicates that coresponding RTU port is almost full.
+ rtu_almost_full_i : in std_logic;
+
+-- request strobe, single HI pulse begins evaluation of the request.
+ rtu_rq_strobe_p1_o : out std_logic;
+
+ rtu_rq_abort_o : out std_logic;
+
+-- source and destination MAC addresses extracted from the packet header
+ rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0);
+
+-- VLAN id (extracted from the header for TRUNK ports and assigned by the port
+-- for ACCESS ports)
+ rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0);
+
+-- HI means that packet has valid assigned a valid VID (low - packet is untagged)
+ rtu_rq_has_vid_o : out std_logic;
+
+-- packet priority (either extracted from the header or assigned per port).
+ rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0);
+
+-- HI indicates that packet has assigned priority.
+ rtu_rq_has_prio_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone bus
+-------------------------------------------------------------------------------
+
+ wb_cyc_i : in std_logic;
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_adr_i : in std_logic_vector(7 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- direct output of packet filter (for TRU/HW-RSTP)
+-------------------------------------------------------------------------------
+
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- control of PAUSE sending (ML: not used and not tested... TRU uses packet injection) --
+-------------------------------------------------------------------------------
+
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- information about received PAUSE (for SWcore)
+-------------------------------------------------------------------------------
+
+ fc_rx_pause_start_p_o : out std_logic;
+ fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0);
+-------------------------------------------------------------------------------
+-- Packet Injection Interface (for TRU/HW-RSTP)
+-------------------------------------------------------------------------------
+
+-- injection request: triggers transmission of the packet to be injected,
+-- allowed when inject_ready = 1
+ inject_req_i : in std_logic := '0';
+
+-- injection ready flag: when true, user application can request asynchronous
+-- injection of a predefined packet
+ inject_ready_o : out std_logic;
+
+-- injection template selection (8 available)
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+
+-- user-defined value to be embedded in the injected packet at a predefined
+-- location
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+
+-------------------------------------------------------------------------------
+-- Misc stuff
+-------------------------------------------------------------------------------
+ rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0);
+
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+
+ led_link_o : out std_logic;
+ led_act_o : out std_logic;
+
+-- HI physically kills the link (turn of laser)
+ link_kill_i : in std_logic := '0';
+
+-- HI indicates that link is up (so cable connected), LOW indicates that link is faulty
+-- (e.g.: cable disconnected)
+ link_up_o : out std_logic;
+
+ stop_traffic_i : in std_logic := '0';
+
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep
+ );
+
+end wr_endpoint;
+
+architecture syn of wr_endpoint is
+
+ constant c_zeros : std_logic_vector(63 downto 0) := (others => '0');
+ constant c_ones : std_logic_vector(63 downto 0) := (others => '0');
+
+-------------------------------------------------------------------------------
+ component dmtd_phase_meas
+ generic (
+ g_deglitcher_threshold : integer;
+ g_counter_bits : integer);
+ port (
+ rst_sys_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ clk_a_i : in std_logic;
+ clk_b_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+ en_i : in std_logic;
+ navg_i : in std_logic_vector(11 downto 0);
+ phase_meas_o : out std_logic_vector(31 downto 0);
+ phase_meas_p_o : out std_logic);
+ end component;
+
+-------------------------------------------------------------------------------
+-- TX FRAMER -> TX PCS signals
+-------------------------------------------------------------------------------
+
+ signal txpcs_fab : t_ep_internal_fabric;
+ signal txpcs_dreq : std_logic;
+ signal txpcs_error : std_logic;
+ signal txpcs_busy : std_logic;
+
+-------------------------------------------------------------------------------
+-- Timestamping/OOB signals
+-------------------------------------------------------------------------------
+
+ signal txoob_fid_value : std_logic_vector(15 downto 0);
+ signal txoob_fid_stb : std_logic;
+
+ signal txpcs_timestamp_trigger_p_a : std_logic;
+
+ signal txts_timestamp_stb : std_logic;
+ signal txts_timestamp_valid : std_logic;
+ signal txts_timestamp_value : std_logic_vector(31 downto 0);
+
+
+ signal rxpcs_timestamp_stb : std_logic;
+ signal rxpcs_timestamp_trigger_p_a : std_logic;
+ signal rxpcs_timestamp_valid : std_logic;
+ signal rxpcs_timestamp_value : std_logic_vector(31 downto 0);
+
+
+-------------------------------------------------------------------------------
+-- RX PCS -> RX DEFRAMER signals
+-------------------------------------------------------------------------------
+
+ signal rxpcs_fab : t_ep_internal_fabric;
+ signal rxpath_fab : t_ep_internal_fabric;
+ signal rxpcs_busy : std_logic;
+ signal rxpcs_fifo_almostfull : std_logic;
+
+-------------------------------------------------------------------------------
+-- WB slave signals
+-------------------------------------------------------------------------------
+
+ signal regs_fromwb : t_ep_out_registers;
+ signal regs_towb : t_ep_in_registers;
+ signal regs_towb_ep : t_ep_in_registers;
+ signal regs_towb_tsu : t_ep_in_registers;
+ signal regs_towb_rpath : t_ep_in_registers;
+ signal regs_towb_tpath : t_ep_in_registers;
+ signal regs_towb_dmtd : t_ep_in_registers;
+
+-------------------------------------------------------------------------------
+-- flow control signals
+-------------------------------------------------------------------------------
+
+ signal txfra_flow_enable : std_logic;
+ signal rxfra_pause_p : std_logic;
+ signal rxfra_pause_delay : std_logic_vector(15 downto 0);
+
+ signal txfra_pause_req : std_logic;
+ signal txfra_pause_ready : std_logic;
+ signal txfra_pause_delay : std_logic_vector(15 downto 0);
+
+ signal link_ok : std_logic;
+
+ signal txfra_enable : std_logic;
+ signal mdio_addr : std_logic_vector(15 downto 0);
+
+ signal sink_in : t_wrf_sink_in;
+ signal sink_out : t_wrf_sink_out;
+
+ signal src_in : t_wrf_source_in;
+ signal src_out : t_wrf_source_out;
+
+ signal rst_n_rx : std_logic;
+
+ signal wb_in : t_wishbone_slave_in;
+ signal wb_out : t_wishbone_slave_out;
+
+ signal extended_ADDR : std_logic_vector(c_wishbone_address_width-1 downto 0);
+
+ signal phase_meas : std_logic_vector(31 downto 0);
+ signal phase_meas_p : std_logic;
+ signal validity_cntr : unsigned(1 downto 0);
+ signal r_dmcr_en : std_logic;
+ signal r_dmcr_n_avg : std_logic_vector(11 downto 0);
+
+
+ signal rtu_rq : t_ep_internal_rtu_request;
+ signal dvalid_tx, dvalid_rx : std_logic;
+
+-------------------------------------------------------------------------------
+-- TRU stuff
+-------------------------------------------------------------------------------
+ signal ep_ctrl : std_logic;
+ signal pfilter_pclass : std_logic_vector(7 downto 0);
+ signal pfilter_drop : std_logic;
+ signal pfilter_done : std_logic;
+ signal tx_pclass : std_logic_vector(7 downto 0);
+
+-------------------------------------------------------------------------------
+-- RMON signals
+-------------------------------------------------------------------------------
+ signal pcs_rmon : t_rmon_triggers;
+ signal rx_path_rmon : t_rmon_triggers;
+ signal rmon : t_rmon_triggers;
+
+-------------------------------------------------------------------------------
+-- chipscope (for desperates)
+-------------------------------------------------------------------------------
+ signal CONTROL0 : std_logic_vector(35 downto 0);
+ signal TRIG0, TRIG1, TRIG2, TRIG3 : std_logic_vector(31 downto 0);
+
+ component chipscope_icon
+ port (
+ CONTROL0 : inout std_logic_vector(35 downto 0));
+ end component;
+
+ component chipscope_ila
+ port (
+ CONTROL : inout std_logic_vector(35 downto 0);
+ CLK : in std_logic;
+ TRIG0 : in std_logic_vector(31 downto 0);
+ TRIG1 : in std_logic_vector(31 downto 0);
+ TRIG2 : in std_logic_vector(31 downto 0);
+ TRIG3 : in std_logic_vector(31 downto 0));
+ end component;
+
+begin
+
+ rst_n_rx <= rst_rxclk_n_i and phy_rdy_i;
+
+-------------------------------------------------------------------------------
+-- 1000Base-X PCS
+-------------------------------------------------------------------------------
+
+ mdio_addr <= regs_fromwb.mdio_asr_phyad_o & regs_fromwb.mdio_cr_addr_o;
+
+ U_PCS_1000BASEX : ep_1000basex_pcs
+ generic map (
+ g_simulation => g_simulation,
+ g_16bit => g_pcs_16bit)
+ port map (
+ rst_sys_n_i => rst_sys_n_i,
+ rst_rxclk_n_i => rst_rxclk_n_i,
+ rst_txclk_n_i => rst_txclk_n_i,
+ clk_sys_i => clk_sys_i,
+
+ rxpcs_fab_o => rxpcs_fab,
+ rxpcs_busy_o => rxpcs_busy,
+ rxpcs_fifo_almostfull_i => rxpcs_fifo_almostfull,
+
+ rxpcs_timestamp_trigger_p_a_o => rxpcs_timestamp_trigger_p_a,
+ rxpcs_timestamp_i => rxpcs_timestamp_value,
+ rxpcs_timestamp_stb_i => rxpcs_timestamp_stb,
+ rxpcs_timestamp_valid_i => rxpcs_timestamp_valid,
+
+ txpcs_fab_i => txpcs_fab,
+ txpcs_busy_o => txpcs_busy,
+ txpcs_dreq_o => txpcs_dreq,
+ txpcs_error_o => txpcs_error,
+
+ txpcs_timestamp_trigger_p_a_o => txpcs_timestamp_trigger_p_a,
+
+ link_ok_o => link_ok,
+ link_ctr_i => ep_ctrl,
+
+ serdes_rst_o => phy_rst_o,
+ serdes_loopen_o => phy_loopen_o,
+ serdes_loopen_vec_o => phy_loopen_vec_o,
+ serdes_tx_prbs_sel_o => phy_tx_prbs_sel_o,
+ serdes_sfp_tx_fault_i => phy_sfp_tx_fault_i,
+ serdes_sfp_los_i => phy_sfp_los_i,
+ serdes_sfp_tx_disable_o => phy_sfp_tx_disable_o,
+ serdes_rdy_i => phy_rdy_i,
+
+ serdes_tx_clk_i => phy_ref_clk_i,
+ serdes_tx_data_o => phy_tx_data_o,
+ serdes_tx_k_o => phy_tx_k_o,
+ serdes_tx_disparity_i => phy_tx_disparity_i,
+ serdes_tx_enc_err_i => phy_tx_enc_err_i,
+ serdes_rx_data_i => phy_rx_data_i,
+ serdes_rx_clk_i => phy_rx_clk_i,
+ serdes_rx_k_i => phy_rx_k_i,
+ serdes_rx_enc_err_i => phy_rx_enc_err_i,
+ serdes_rx_bitslide_i => phy_rx_bitslide_i,
+
+ rmon_o => pcs_rmon,
+
+ mdio_addr_i => mdio_addr,
+ mdio_data_i => regs_fromwb.mdio_cr_data_o,
+ mdio_data_o => regs_towb_ep.mdio_asr_rdata_i,
+ mdio_stb_i => regs_fromwb.mdio_cr_data_wr_o,
+ mdio_rw_i => regs_fromwb.mdio_cr_rw_o,
+ mdio_ready_o => regs_towb_ep.mdio_asr_ready_i,
+ dbg_tx_pcs_wr_count_o => dbg_tx_pcs_wr_count_o,
+ dbg_tx_pcs_rd_count_o => dbg_tx_pcs_rd_count_o,
+ nice_dbg_o => nice_dbg_o.pcs);
+
+
+-------------------------------------------------------------------------------
+-- TX FRAMER
+-------------------------------------------------------------------------------
+
+-- txfra_enable <= link_ok and regs_fromwb.ecr_tx_en_o;
+
+-- txfra_pause_req <= '0';
+
+ U_Tx_Path : ep_tx_path
+ generic map (
+ g_with_packet_injection => g_with_packet_injection,
+ g_with_vlans => g_with_vlans,
+ g_with_timestamper => g_with_timestamper,
+ g_force_gap_length => g_tx_force_gap_length,
+ g_runt_padding => g_tx_runt_padding,
+ g_use_new_crc => g_use_new_txcrc)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_sys_n_i,
+ pcs_error_i => txpcs_error,
+ pcs_busy_i => txpcs_busy,
+ pcs_fab_o => txpcs_fab,
+ pcs_dreq_i => txpcs_dreq,
+ snk_i => sink_in,
+ snk_o => sink_out,
+ fc_pause_req_i => txfra_pause_req,
+ fc_pause_ready_o => txfra_pause_ready,
+ fc_pause_delay_i => txfra_pause_delay,
+ fc_flow_enable_i => txfra_flow_enable,
+ ep_ctrl_i => ep_ctrl,
+ regs_i => regs_fromwb,
+ regs_o => regs_towb_tpath,
+
+ txts_timestamp_i => txts_timestamp_value,
+ txts_timestamp_valid_i => txts_timestamp_valid,
+
+ txtsu_port_id_o => txtsu_port_id_o,
+ txtsu_fid_o => txtsu_frame_id_o,
+ txtsu_ts_value_o => txtsu_ts_value_o,
+ txtsu_ts_incorrect_o => txtsu_ts_incorrect_o,
+ txtsu_stb_o => txtsu_stb_o,
+ txtsu_ack_i => txtsu_ack_i,
+
+ inject_req_i => inject_req_i,
+ inject_user_value_i => inject_user_value_i,
+ inject_packet_sel_i => inject_packet_sel_i,
+ inject_ready_o => inject_ready_o);
+
+
+ txfra_flow_enable <= '1';
+
+ sink_in.dat <= snk_dat_i;
+ sink_in.adr <= snk_adr_i;
+ sink_in.sel <= snk_sel_i;
+ sink_in.cyc <= snk_cyc_i;
+ sink_in.stb <= snk_stb_i;
+ sink_in.we <= snk_we_i;
+ snk_stall_o <= sink_out.stall;
+ snk_ack_o <= sink_out.ack;
+ snk_err_o <= sink_out.err;
+ snk_rty_o <= sink_out.rty;
+
+
+-------------------------------------------------------------------------------
+-- RX deframer
+-------------------------------------------------------------------------------
+
+ U_Rx_Path : ep_rx_path
+ generic map (
+ g_with_vlans => g_with_vlans,
+ g_with_dpi_classifier => g_with_dpi_classifier,
+ g_with_rtu => g_with_rtu,
+ g_with_rx_buffer => g_with_rx_buffer,
+ g_rx_buffer_size => g_rx_buffer_size,
+ g_use_new_crc => g_use_new_rxcrc)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_rx_i => phy_rx_clk_i,
+
+ rst_n_sys_i => rst_sys_n_i,
+ rst_n_rx_i => rst_n_rx,
+
+ pcs_fab_i => rxpath_fab,
+ pcs_fifo_almostfull_o => rxpcs_fifo_almostfull,
+ pcs_busy_i => rxpcs_busy,
+
+ fc_pause_p_o => fc_rx_pause_start_p_o, --rxfra_pause_p,
+ fc_pause_quanta_o => fc_rx_pause_quanta_o, --rxfra_pause_delay,
+ fc_pause_prio_mask_o => fc_rx_pause_prio_mask_o,
+ fc_buffer_occupation_o => fc_rx_buffer_occupation_o,
+
+ rmon_o => rx_path_rmon,
+ regs_i => regs_fromwb,
+ regs_o => regs_towb_rpath,
+
+ pfilter_pclass_o => pfilter_pclass,
+ pfilter_drop_o => pfilter_drop,
+ pfilter_done_o => pfilter_done,
+
+ rtu_full_i => rtu_full_i,
+ rtu_rq_o => rtu_rq,
+ rtu_rq_valid_o => rtu_rq_strobe_p1_o,
+ rtu_rq_abort_o => rtu_rq_abort_o,
+ src_wb_o => src_out,
+ src_wb_i => src_in,
+ nice_dbg_o => nice_dbg_o.rxpath);
+
+
+ rtu_rq_smac_o <= rtu_rq.smac;
+ rtu_rq_dmac_o <= rtu_rq.dmac;
+ rtu_rq_vid_o <= rtu_rq.vid;
+ rtu_rq_prio_o <= rtu_rq.prio;
+ rtu_rq_has_vid_o <= rtu_rq.has_vid;
+ rtu_rq_has_prio_o <= rtu_rq.has_prio;
+
+ src_dat_o <= src_out.dat;
+ src_adr_o <= src_out.adr;
+ src_sel_o <= src_out.sel;
+ src_cyc_o <= src_out.cyc;
+ src_stb_o <= src_out.stb;
+ src_we_o <= src_out.we;
+ src_in.stall <= src_stall_i;
+ src_in.ack <= src_ack_i;
+ src_in.err <= src_err_i;
+ src_in.rty <= '0';
+
+-------------------------------------------------------------------------------
+-- Flow control unit
+-------------------------------------------------------------------------------
+
+ --U_FLOW_CTL : ep_flow_control
+ -- port map (
+ -- clk_sys_i => clk_sys_i,
+ -- rst_n_i => rst_n_i,
+
+ -- rx_pause_p1_i => rxfra_pause_p,
+ -- rx_pause_delay_i => rxfra_pause_delay,
+
+ -- tx_pause_o => txfra_pause,
+ -- tx_pause_delay_o => txfra_pause_delay,
+ -- tx_pause_ack_i => txfra_pause_ack,
+
+ -- tx_flow_enable_o => txfra_flow_enable,
+
+ -- rx_buffer_used_i => rx_buffer_used,
+
+ -- ep_fcr_txpause_i => regs.fcr_txpause_o,
+ -- ep_fcr_rxpause_i => regs.fcr_rxpause_o,
+ -- ep_fcr_tx_thr_i => regs.fcr_tx_thr_o,
+ -- ep_fcr_tx_quanta_i => regs.fcr_tx_quanta_o,
+ -- rmon_rcvd_pause_o => rmon.rx_pause,
+ -- rmon_sent_pause_o => rmon.tx_pause
+ -- );
+
+-------------------------------------------------------------------------------
+-- Timestamping unit
+-------------------------------------------------------------------------------
+
+ U_EP_TSU : ep_timestamping_unit
+ generic map (
+ g_timestamp_bits_r => 28,
+ g_timestamp_bits_f => 4,
+ g_ref_clock_rate => f_pcs_clock_rate(g_pcs_16bit))
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_rx_i => phy_rx_clk_i,
+ clk_sys_i => clk_sys_i,
+ rst_n_rx_i => rst_rxclk_n_i,
+ rst_n_sys_i => rst_sys_n_i,
+ rst_n_ref_i => rst_ref_n_i,
+ pps_csync_p1_i => pps_csync_p1_i,
+ pps_valid_i => pps_valid_i,
+
+ tx_timestamp_trigger_p_a_i => txpcs_timestamp_trigger_p_a,
+ rx_timestamp_trigger_p_a_i => rxpcs_timestamp_trigger_p_a,
+
+ rxts_timestamp_o => rxpcs_timestamp_value,
+ rxts_timestamp_valid_o => rxpcs_timestamp_valid,
+ rxts_timestamp_stb_o => rxpcs_timestamp_stb,
+
+ txts_timestamp_o => txts_timestamp_value,
+ txts_timestamp_valid_o => txts_timestamp_valid,
+
+ txts_o => txts_o, -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o => rxts_o, -- 2013-Nov-28 peterj added for debugging/calibration
+
+ regs_i => regs_fromwb,
+ regs_o => regs_towb_tsu);
+
+
+-------------------------------------------------------------------------------
+-- Wishbone controller & IO registers
+-------------------------------------------------------------------------------
+
+ extended_ADDR <= std_logic_vector(resize(unsigned(wb_adr_i), c_wishbone_address_width));
+
+ U_Slave_adapter : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_sys_n_i,
+ sl_adr_i => extended_ADDR,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_stall_o => wb_stall_o,
+ master_i => wb_out,
+ master_o => wb_in);
+
+ U_WB_SLAVE : ep_wishbone_controller
+ port map (
+ rst_n_i => rst_sys_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_in.adr(4 downto 0),
+ wb_dat_i => wb_in.dat,
+ wb_dat_o => wb_out.dat,
+ wb_cyc_i => wb_in.cyc,
+ wb_sel_i => wb_in.sel,
+ wb_stb_i => wb_in.stb,
+ wb_we_i => wb_in.we,
+ wb_ack_o => wb_out.ack,
+ wb_stall_o => open,
+
+ tx_clk_i => clk_ref_i,
+ rx_clk_i => phy_rx_clk_i,
+
+ regs_o => regs_fromwb,
+ regs_i => regs_towb
+ );
+
+ wb_out.stall <= '0';
+ wb_out.rty <= '0';
+ wb_out.err <= '0';
+ wb_out.int <= '0';
+
+ regs_towb <= regs_towb_ep or regs_towb_tsu or regs_towb_rpath or regs_towb_tpath or regs_towb_dmtd;
+
+
+ p_link_activity : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+
+ if(rst_sys_n_i = '0') or
+ (regs_fromwb.dsr_lact_o = '1' and regs_fromwb.dsr_lact_load_o = '1') then
+ regs_towb_ep.dsr_lact_i <= '0';
+ else
+ regs_towb_ep.dsr_lact_i <= dvalid_rx or dvalid_tx;
+ end if;
+ end if;
+ end process;
+
+ -- drive unused regs_towb_ep signals
+ regs_towb_ep.ecr_feat_vlan_i <= '0';
+ regs_towb_ep.ecr_feat_dmtd_i <= '0';
+ regs_towb_ep.ecr_feat_ptp_i <= '0';
+ regs_towb_ep.ecr_feat_dpi_i <= '0';
+ regs_towb_ep.tscr_cs_done_i <= '0';
+ regs_towb_ep.tscr_rx_cal_result_i <= '0';
+ regs_towb_ep.tcar_pcp_map_i <= (others => '0');
+ regs_towb_ep.dsr_lstatus_i <= '0';
+ regs_towb_ep.dmcr_en_i <= '0';
+ regs_towb_ep.dmcr_n_avg_i <= (others => '0');
+ regs_towb_ep.inj_ctrl_pic_conf_ifg_i <= (others => '0');
+ regs_towb_ep.inj_ctrl_pic_conf_sel_i <= (others => '0');
+ regs_towb_ep.inj_ctrl_pic_conf_valid_i <= '0';
+ regs_towb_ep.inj_ctrl_pic_mode_id_i <= (others => '0');
+ regs_towb_ep.inj_ctrl_pic_mode_valid_i <= '0';
+ regs_towb_ep.inj_ctrl_pic_ena_i <= '0';
+
+-------------------------------------------------------------------------------
+-- DMTD phase meter
+------------------------------------------------------------------------------
+
+ gen_with_dmtd : if(g_with_dmtd) generate
+ U_DMTD : dmtd_phase_meas
+ generic map (
+ g_counter_bits => 14,
+ g_deglitcher_threshold => 1000)
+ port map (
+ clk_sys_i => clk_sys_i,
+
+ clk_a_i => phy_ref_clk_i,
+ clk_b_i => phy_rx_clk_i,
+ clk_dmtd_i => clk_dmtd_i,
+
+ rst_sys_n_i => rst_sys_n_i,
+ rst_dmtd_n_i => rst_dmtd_n_i,
+
+ en_i => r_dmcr_en,
+ navg_i => r_dmcr_n_avg,
+ phase_meas_o => phase_meas,
+ phase_meas_p_o => phase_meas_p);
+
+
+
+ regs_towb_dmtd.dmcr_en_i <= r_dmcr_en;
+ regs_towb_dmtd.dmcr_n_avg_i <= r_dmcr_n_avg;
+
+ p_dmtd_update : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_sys_n_i = '0' then
+ validity_cntr <= (others => '0');
+ regs_towb_ep.dmsr_ps_rdy_i <= '0';
+ else
+
+ if(regs_fromwb.dmcr_en_load_o = '1') then
+ r_dmcr_en <= regs_fromwb.dmcr_en_o;
+ r_dmcr_n_avg <= regs_fromwb.dmcr_n_avg_o;
+ end if;
+
+ if(r_dmcr_en = '0') then
+ validity_cntr <= (others => '0');
+ regs_towb_ep.dmsr_ps_rdy_i <= '0';
+ elsif(regs_fromwb.dmsr_ps_rdy_o = '1' and regs_fromwb.dmsr_ps_rdy_load_o = '1') then
+ regs_towb_ep.dmsr_ps_rdy_i <= '0';
+ elsif(phase_meas_p = '1') then
+
+ if(validity_cntr = "11") then
+ regs_towb_ep.dmsr_ps_rdy_i <= '1';
+ regs_towb_ep.dmsr_ps_val_i <= phase_meas(23 downto 0); -- discard few
+ else
+ regs_towb_ep.dmsr_ps_rdy_i <= '0';
+ validity_cntr <= validity_cntr + 1;
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ end generate gen_with_dmtd;
+
+ gen_without_dmtd : if(not g_with_dmtd) generate
+ regs_towb_ep.dmsr_ps_rdy_i <= '0';
+ regs_towb_ep.dmsr_ps_val_i <= (others => 'X');
+ regs_towb_dmtd <= c_ep_in_registers_init_value;
+ end generate gen_without_dmtd;
+
+ dvalid_tx <= snk_cyc_i and snk_stb_i and link_ok;
+ dvalid_rx <= src_out.cyc and src_out.stb and link_ok;
+
+ gen_leds : if g_with_leds generate
+ U_Led_Ctrl : ep_leds_controller
+ generic map (
+ g_blink_period_log2 => 22)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_sys_n_i,
+ dvalid_tx_i => dvalid_tx,
+ dvalid_rx_i => dvalid_rx,
+ link_ok_i => link_ok,
+ led_link_o => led_link_o,
+ led_act_o => led_act_o);
+ end generate gen_leds;
+
+ -------------------------- TRU stuff -----------------------------------
+ link_up_o <= link_ok; -- indicates that link is UP
+
+ pfilter_pclass_o <= pfilter_pclass;
+ pfilter_done_o <= pfilter_done;
+ pfilter_drop_o <= pfilter_drop;
+
+ txfra_pause_req <= fc_tx_pause_req_i;
+ fc_tx_pause_ready_o <= txfra_pause_ready;
+ txfra_pause_delay <= fc_tx_pause_delay_i;
+
+ -- TRU needs to be able to share the control of ouput path, i.e. turn off the laser
+ p_ep_ctrl : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_sys_n_i = '0' then
+ ep_ctrl <= '1';
+ else
+ ep_ctrl <= not link_kill_i;
+ end if;
+ end if;
+ end process;
+
+ GEN_STOP: if(g_with_stop_traffic) generate
+ rxpath_fab.sof <= rxpcs_fab.sof when(stop_traffic_i='0') else '0';
+ rxpath_fab.dvalid <= rxpcs_fab.dvalid when(stop_traffic_i='0') else '0';
+ rxpath_fab.eof <= rxpcs_fab.eof;
+ rxpath_fab.error <= rxpcs_fab.error;
+ rxpath_fab.bytesel <= rxpcs_fab.bytesel;
+ rxpath_fab.has_rx_timestamp <= rxpcs_fab.has_rx_timestamp;
+ rxpath_fab.rx_timestamp_valid <= rxpcs_fab.rx_timestamp_valid;
+ rxpath_fab.data <= rxpcs_fab.data;
+ rxpath_fab.addr <= rxpcs_fab.addr;
+ end generate;
+
+ GEN_NO_STOP: if(not g_with_stop_traffic) generate
+ rxpath_fab <= rxpcs_fab;
+ end generate;
+
+ -------------------------- RMON events -----------------------------------
+ rmon.rx_pcs_err <= rx_path_rmon.rx_pcs_err; --from ep_rx_path
+ rmon.rx_giant <= rx_path_rmon.rx_giant;
+ rmon.rx_runt <= rx_path_rmon.rx_runt;
+ rmon.rx_crc_err <= rx_path_rmon.rx_crc_err;
+ rmon.rx_pause <= rx_path_rmon.rx_pause;
+ rmon.rx_pfilter_drop <= rx_path_rmon.rx_pfilter_drop;
+ rmon.rx_pclass <= rx_path_rmon.rx_pclass;
+ rmon.rx_tclass <= rx_path_rmon.rx_tclass;
+ rmon.rx_drop_at_rtu_full <= rx_path_rmon.rx_drop_at_rtu_full;
+ rmon.tx_underrun <= pcs_rmon.tx_underrun;
+ rmon.rx_overrun <= pcs_rmon.rx_overrun;
+ rmon.rx_invalid_code <= pcs_rmon.rx_invalid_code;
+ rmon.rx_sync_lost <= pcs_rmon.rx_sync_lost;
+
+
+ rmon_event_tx : gc_sync_ffs
+ generic map(
+ g_sync_edge => "negative")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_sys_n_i,
+ data_i => txpcs_timestamp_trigger_p_a,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon.tx_frame);
+
+ rmon_event_rx : gc_sync_ffs
+ generic map(
+ g_sync_edge => "negative")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_sys_n_i,
+ data_i => rxpcs_timestamp_trigger_p_a,
+ synced_o => open,
+ npulse_o => open,
+ ppulse_o => rmon.rx_frame);
+
+ f_pack_rmon_triggers(rmon, rmon_events_o(c_epevents_sz-1 downto 0));
+
+-- CS_ICON : chipscope_icon
+-- port map (
+-- CONTROL0 => CONTROL0);
+-- CS_ILA : chipscope_ila
+-- port map (
+-- CONTROL => CONTROL0,
+-- CLK => phy_ref_clk_i,
+-- TRIG0 => TRIG0,
+-- TRIG1 => TRIG1,
+-- TRIG2 => TRIG2,
+-- TRIG3 => TRIG3);
+--
+-- TRIG0(15 downto 0) <= phy_rx_data_i;
+-- TRIG0(17 downto 16) <= phy_rx_k_i;
+-- TRIG0( 18) <= phy_rx_enc_err_i;
+-- TRIG0(23 downto 19) <= phy_rx_bitslide_i;
+
+ -- Drive unsued GMII outputs
+ gmii_txd_o <= (others => '0');
+ gmii_tx_en_o <= '0';
+ gmii_tx_er_o <= '0';
+
+end syn;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd
new file mode 100644
index 000000000..b5d64008a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_endpoint/xwr_endpoint.vhd
@@ -0,0 +1,533 @@
+-------------------------------------------------------------------------------
+-- Title : 1000base-X MAC/Endpoint - top level
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : xwr_endpoint.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-04-26
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+-------------------------------------------------------------------------------
+-- Description: Struct-ized wrapper for WR Endpoint.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2011 - 2012 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.wishbone_pkg.all;
+
+entity xwr_endpoint is
+
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_simulation : boolean := false;
+ g_tx_force_gap_length : integer := 0;
+ g_tx_runt_padding : boolean := false;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_rx_buffer_size : integer := 1024;
+ g_with_rx_buffer : boolean := true;
+ g_with_flow_control : boolean := true;
+ g_with_timestamper : boolean := true;
+ g_with_dpi_classifier : boolean := true;
+ g_with_vlans : boolean := true;
+ g_with_rtu : boolean := true;
+ g_with_leds : boolean := true;
+ g_with_dmtd : boolean := true;
+ g_with_packet_injection : boolean := false;
+ g_use_new_rxcrc : boolean := false;
+ g_use_new_txcrc : boolean := false;
+ g_with_stop_traffic : boolean := false
+ );
+ port (
+
+-------------------------------------------------------------------------------
+-- Clocks
+-------------------------------------------------------------------------------
+
+-- Endpoint transmit reference clock. Must be 125 MHz +- 100 ppm
+ clk_ref_i : in std_logic;
+
+-- reference clock / 2 (62.5 MHz, in-phase with refclk)
+ clk_sys_i : in std_logic;
+
+ clk_dmtd_i : in std_logic := '0';
+
+-- resets for various clock domains
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ rst_txclk_n_i : in std_logic;
+ rst_rxclk_n_i : in std_logic;
+
+-- PPS input (1 clk_ref_i cycle HI) for synchronizing timestamp counter
+ pps_csync_p1_i : in std_logic := '0';
+
+-- PPS valid input (clk_ref_i domain), when 1, the external PPS generator/servo
+-- is not adjusting the time scale, so we can safely timestamp.
+ pps_valid_i : in std_logic := '1';
+
+-------------------------------------------------------------------------------
+-- PHY Interace (8/16 bit PCS)
+-------------------------------------------------------------------------------
+
+ -- 1st option is to use std_logic based I/Os
+ phy_rst_o : out std_logic;
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic;
+ phy_sfp_los_i : in std_logic;
+ phy_sfp_tx_disable_o : out std_logic;
+ phy_rdy_i : in std_logic;
+
+ phy_ref_clk_i : in std_logic := '0';
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic := '0';
+ phy_tx_enc_err_i : in std_logic := '0';
+
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_clk_i : in std_logic := '0';
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_enc_err_i : in std_logic := '0';
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+
+ -- 2nd option is to use record-based I/Os
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc;
+
+-------------------------------------------------------------------------------
+-- GMII Interface (8-bit)
+-------------------------------------------------------------------------------
+
+ gmii_tx_clk_i : in std_logic := '0';
+ gmii_txd_o : out std_logic_vector(7 downto 0);
+ gmii_tx_en_o : out std_logic;
+ gmii_tx_er_o : out std_logic;
+
+ gmii_rx_clk_i : in std_logic := '0';
+ gmii_rxd_i : in std_logic_vector(7 downto 0) := x"00";
+ gmii_rx_er_i : in std_logic := '0';
+ gmii_rx_dv_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- Wishbone I/O
+ ---------------------------------------------------------------------------
+
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+
+ snk_o : out t_wrf_sink_out;
+ snk_i : in t_wrf_sink_in;
+
+-------------------------------------------------------------------------------
+-- TX timestamping unit interface
+-------------------------------------------------------------------------------
+
+-- Port ID value
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+-- Frame ID value
+ txtsu_frame_id_o : out std_logic_vector(16 -1 downto 0);
+
+-- TX Timestamp and correctness info
+ txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+
+-- TX timestamp strobe: HI tells the TX timestamping unit that a timestamp is
+-- available on txtsu_ts_value_o, txtsu_fid_o andd txtsu_port_id_o. The correctness
+-- of the timestamping is indiacted on txtsu_ts_incorrect_o. Line remains HI
+-- until assertion of txtsu_ack_i.
+ txtsu_stb_o : out std_logic;
+
+-- TX timestamp acknowledge: HI indicates that TXTSU has successfully received
+-- the timestamp
+ txtsu_ack_i : in std_logic := '1';
+
+-------------------------------------------------------------------------------
+-- RTU interface
+-------------------------------------------------------------------------------
+
+-- 1 indicates that coresponding RTU port is full.
+ rtu_full_i : in std_logic := '0';
+
+-- 1 indicates that coresponding RTU port is almost full.
+ rtu_almost_full_i : in std_logic := '0';
+
+-- request strobe, single HI pulse begins evaluation of the request.
+ rtu_rq_strobe_p1_o : out std_logic;
+ rtu_rq_abort_o : out std_logic;
+
+-- source and destination MAC addresses extracted from the packet header
+ rtu_rq_smac_o : out std_logic_vector(48 - 1 downto 0);
+ rtu_rq_dmac_o : out std_logic_vector(48 - 1 downto 0);
+
+-- VLAN id (extracted from the header for TRUNK ports and assigned by the port
+-- for ACCESS ports)
+ rtu_rq_vid_o : out std_logic_vector(12 - 1 downto 0);
+
+-- HI means that packet has valid assigned a valid VID (low - packet is untagged)
+ rtu_rq_has_vid_o : out std_logic;
+
+-- packet priority (either extracted from the header or assigned per port).
+ rtu_rq_prio_o : out std_logic_vector(3 - 1 downto 0);
+
+-- HI indicates that packet has assigned priority.
+ rtu_rq_has_prio_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone bus
+-------------------------------------------------------------------------------
+
+ wb_i : in t_wishbone_slave_in;
+ wb_o : out t_wishbone_slave_out;
+
+-------------------------------------------------------------------------------
+-- direct output of packet filter (for TRU/HW-RSTP)
+-------------------------------------------------------------------------------
+
+ pfilter_pclass_o : out std_logic_vector(7 downto 0);
+ pfilter_drop_o : out std_logic;
+ pfilter_done_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- control of PAUSE sending (ML: not used and not tested... TRU uses packet injection) --
+-------------------------------------------------------------------------------
+
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- information about received PAUSE (for SWcore)
+-------------------------------------------------------------------------------
+
+ fc_rx_pause_start_p_o : out std_logic;
+ fc_rx_pause_quanta_o : out std_logic_vector(15 downto 0);
+ fc_rx_pause_prio_mask_o : out std_logic_vector(7 downto 0);
+ fc_rx_buffer_occupation_o : out std_logic_vector(7 downto 0);
+-------------------------------------------------------------------------------
+-- Packet Injection Interface (for TRU/HW-RSTP)
+-------------------------------------------------------------------------------
+
+-- injection request: triggers transmission of the packet to be injected,
+-- allowed when inject_ready = 1
+ inject_req_i : in std_logic := '0';
+
+-- injection ready flag: when true, user application can request asynchronous
+-- injection of a predefined packet
+ inject_ready_o : out std_logic;
+
+-- injection template selection (8 available)
+ inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000";
+
+-- user-defined value to be embedded in the injected packet at a predefined
+-- location
+ inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000";
+
+-------------------------------------------------------------------------------
+-- Misc stuff
+-------------------------------------------------------------------------------
+ rmon_events_o : out std_logic_vector(c_epevents_sz-1 downto 0);
+
+ txts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o : out std_logic; -- 2013-Nov-28 peterj added for debugging/calibration
+
+ led_link_o : out std_logic;
+ led_act_o : out std_logic;
+
+ link_kill_i : in std_logic := '0';
+ link_up_o : out std_logic;
+ stop_traffic_i : in std_logic := '0';
+ dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0);
+ dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0);
+ nice_dbg_o : out t_dbg_ep);
+
+end xwr_endpoint;
+
+architecture syn of xwr_endpoint is
+
+ signal phy_rst : std_logic;
+ signal phy_loopen : std_logic;
+ signal phy_loopen_vec : std_logic_vector(2 downto 0);
+ signal phy_tx_data : std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ signal phy_tx_k : std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ signal phy_tx_prbs_sel : std_logic_vector(2 downto 0);
+ signal sfp_tx_disable : std_logic;
+ signal phy_tx_clk : std_logic;
+
+ signal phy_tx_disparity : std_logic;
+ signal phy_tx_enc_err : std_logic;
+ signal phy_rx_data : std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ signal phy_rx_clk : std_logic;
+ signal phy_rx_k : std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ signal phy_rx_enc_err : std_logic;
+ signal phy_rx_bts : std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0);
+ signal phy_rdy : std_logic;
+ signal sfp_tx_fault : std_logic;
+ signal sfp_los : std_logic;
+
+begin
+
+ U_Wrapped_Endpoint : wr_endpoint
+ generic map (
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_tx_force_gap_length => g_tx_force_gap_length,
+ g_tx_runt_padding => g_tx_runt_padding,
+ g_simulation => g_simulation,
+ g_pcs_16bit => g_pcs_16bit,
+ g_rx_buffer_size => g_rx_buffer_size,
+ g_with_rx_buffer => g_with_rx_buffer,
+ g_with_flow_control => g_with_flow_control,
+ g_with_timestamper => g_with_timestamper,
+ g_with_dpi_classifier => g_with_dpi_classifier,
+ g_with_vlans => g_with_vlans,
+ g_with_rtu => g_with_rtu,
+ g_with_leds => g_with_leds,
+ g_with_dmtd => g_with_dmtd,
+ g_with_packet_injection => g_with_packet_injection,
+ g_use_new_rxcrc => g_use_new_rxcrc,
+ g_use_new_txcrc => g_use_new_txcrc,
+ g_with_stop_traffic => g_with_stop_traffic)
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+ clk_dmtd_i => clk_dmtd_i,
+ rst_sys_n_i => rst_sys_n_i,
+ rst_ref_n_i => rst_ref_n_i,
+ rst_dmtd_n_i => rst_dmtd_n_i,
+ rst_txclk_n_i => rst_txclk_n_i,
+ rst_rxclk_n_i => rst_rxclk_n_i,
+ pps_csync_p1_i => pps_csync_p1_i,
+ pps_valid_i => pps_valid_i,
+
+ phy_rst_o => phy_rst,
+ phy_loopen_o => phy_loopen,
+ phy_loopen_vec_o => phy_loopen_vec,
+ phy_tx_prbs_sel_o => phy_tx_prbs_sel,
+ phy_rdy_i => phy_rdy,
+
+ phy_sfp_tx_fault_i => sfp_tx_fault,
+ phy_sfp_los_i => sfp_los,
+ phy_sfp_tx_disable_o => sfp_tx_disable,
+
+ phy_ref_clk_i => phy_tx_clk,
+ phy_tx_data_o => phy_tx_data,
+ phy_tx_k_o => phy_tx_k,
+ phy_tx_disparity_i => phy_tx_disparity,
+ phy_tx_enc_err_i => phy_tx_enc_err,
+ phy_rx_data_i => phy_rx_data,
+ phy_rx_clk_i => phy_rx_clk,
+ phy_rx_k_i => phy_rx_k,
+ phy_rx_enc_err_i => phy_rx_enc_err,
+ phy_rx_bitslide_i => phy_rx_bts,
+
+ gmii_tx_clk_i => gmii_tx_clk_i,
+ gmii_txd_o => gmii_txd_o,
+ gmii_tx_en_o => gmii_tx_en_o,
+ gmii_tx_er_o => gmii_tx_er_o,
+ gmii_rx_clk_i => gmii_rx_clk_i,
+ gmii_rxd_i => gmii_rxd_i,
+ gmii_rx_er_i => gmii_rx_er_i,
+ gmii_rx_dv_i => gmii_rx_dv_i,
+ src_dat_o => src_o.dat,
+ src_adr_o => src_o.adr,
+ src_sel_o => src_o.sel,
+ src_cyc_o => src_o.cyc,
+ src_stb_o => src_o.stb,
+ src_we_o => src_o.we,
+ src_stall_i => src_i.stall,
+ src_ack_i => src_i.ack,
+ src_err_i => src_i.err,
+ snk_dat_i => snk_i.dat,
+ snk_adr_i => snk_i.adr,
+ snk_sel_i => snk_i.sel,
+ snk_cyc_i => snk_i.cyc,
+ snk_stb_i => snk_i.stb,
+ snk_we_i => snk_i.we,
+ snk_stall_o => snk_o.stall,
+ snk_ack_o => snk_o.ack,
+ snk_err_o => snk_o.err,
+ snk_rty_o => snk_o.rty,
+ txtsu_port_id_o => txtsu_port_id_o,
+ txtsu_frame_id_o => txtsu_frame_id_o,
+ txtsu_ts_value_o => txtsu_ts_value_o,
+ txtsu_ts_incorrect_o => txtsu_ts_incorrect_o,
+ txtsu_stb_o => txtsu_stb_o,
+ txtsu_ack_i => txtsu_ack_i,
+ rtu_full_i => rtu_full_i,
+ rtu_almost_full_i => rtu_almost_full_i,
+ rtu_rq_strobe_p1_o => rtu_rq_strobe_p1_o,
+ rtu_rq_abort_o => rtu_rq_abort_o,
+ rtu_rq_smac_o => rtu_rq_smac_o,
+ rtu_rq_dmac_o => rtu_rq_dmac_o,
+ rtu_rq_vid_o => rtu_rq_vid_o,
+ rtu_rq_has_vid_o => rtu_rq_has_vid_o,
+ rtu_rq_prio_o => rtu_rq_prio_o,
+ rtu_rq_has_prio_o => rtu_rq_has_prio_o,
+ wb_cyc_i => wb_i.cyc,
+ wb_stb_i => wb_i.stb,
+ wb_we_i => wb_i.we,
+ wb_sel_i => wb_i.sel,
+ wb_adr_i => wb_i.adr(7 downto 0),
+ wb_dat_i => wb_i.dat,
+ wb_dat_o => wb_o.dat,
+ wb_ack_o => wb_o.ack,
+ wb_stall_o => wb_o.stall,
+ rmon_events_o => rmon_events_o,
+ txts_o => txts_o, -- 2013-Nov-28 peterj added for debugging/calibration
+ rxts_o => rxts_o, -- 2013-Nov-28 peterj added for debugging/calibration
+ led_link_o => led_link_o,
+ led_act_o => led_act_o,
+ link_up_o => link_up_o,
+ link_kill_i => link_kill_i,
+ pfilter_pclass_o => pfilter_pclass_o,
+ pfilter_drop_o => pfilter_drop_o,
+ pfilter_done_o => pfilter_done_o,
+ fc_tx_pause_req_i => fc_tx_pause_req_i,
+ fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+ fc_rx_pause_start_p_o => fc_rx_pause_start_p_o,
+ fc_rx_pause_quanta_o => fc_rx_pause_quanta_o,
+ fc_rx_pause_prio_mask_o => fc_rx_pause_prio_mask_o,
+ fc_rx_buffer_occupation_o =>fc_rx_buffer_occupation_o,
+ inject_req_i => inject_req_i,
+ inject_user_value_i => inject_user_value_i,
+ inject_packet_sel_i => inject_packet_sel_i,
+ inject_ready_o => inject_ready_o,
+ stop_traffic_i => stop_traffic_i,
+ dbg_tx_pcs_wr_count_o=>dbg_tx_pcs_wr_count_o,
+ dbg_tx_pcs_rd_count_o=>dbg_tx_pcs_rd_count_o,
+ nice_dbg_o => nice_dbg_o);
+
+ wb_o.err <= '0';
+ wb_o.rty <= '0';
+ wb_o.int <= '0';
+
+
+ -- Record-based PHY connections, depending on 8/16-bit PCS
+ GEN_16BIT_IF: if g_pcs_16bit and g_records_for_phy generate
+ phy16_o.rst <= phy_rst;
+ phy16_o.loopen <= phy_loopen;
+ phy16_o.loopen_vec <= phy_loopen_vec;
+ phy16_o.tx_data <= phy_tx_data;
+ phy16_o.tx_k <= phy_tx_k;
+ phy16_o.tx_prbs_sel <= phy_tx_prbs_sel;
+ phy16_o.sfp_tx_disable <= sfp_tx_disable;
+
+ phy_tx_clk <= phy16_i.ref_clk;
+ phy_tx_disparity <= phy16_i.tx_disparity;
+ phy_tx_enc_err <= phy16_i.tx_enc_err;
+ phy_rx_data <= phy16_i.rx_data;
+ phy_rx_clk <= phy16_i.rx_clk;
+ phy_rx_k <= phy16_i.rx_k;
+ phy_rx_enc_err <= phy16_i.rx_enc_err;
+ phy_rx_bts <= phy16_i.rx_bitslide;
+ phy_rdy <= phy16_i.rdy;
+ sfp_tx_fault <= phy16_i.sfp_tx_fault;
+ sfp_los <= phy16_i.sfp_los;
+
+ -- drive unused ports with dummy values
+ phy8_o <= c_dummy_phy8_from_wrc;
+ phy_rst_o <= '0';
+ phy_loopen_o <= '0';
+ phy_tx_data_o <= (others => '0');
+ phy_tx_k_o <= (others => '0');
+ phy_loopen_vec_o <= (others => '0');
+ phy_tx_prbs_sel_o <= (others => '0');
+ phy_sfp_tx_disable_o <= '0';
+ end generate;
+
+ GEN_8BIT_IF: if not g_pcs_16bit and g_records_for_phy generate
+ phy8_o.rst <= phy_rst;
+ phy8_o.loopen <= phy_loopen;
+ phy8_o.loopen_vec <= phy_loopen_vec;
+ phy8_o.tx_data <= phy_tx_data;
+ phy8_o.tx_k <= phy_tx_k;
+ phy8_o.tx_prbs_sel <= phy_tx_prbs_sel;
+ phy8_o.sfp_tx_disable <= sfp_tx_disable;
+
+ phy_tx_clk <= phy8_i.ref_clk;
+ phy_tx_disparity <= phy8_i.tx_disparity;
+ phy_tx_enc_err <= phy8_i.tx_enc_err;
+ phy_rx_data <= phy8_i.rx_data;
+ phy_rx_clk <= phy8_i.rx_clk;
+ phy_rx_k <= phy8_i.rx_k;
+ phy_rx_enc_err <= phy8_i.rx_enc_err;
+ phy_rx_bts <= phy8_i.rx_bitslide;
+ phy_rdy <= phy8_i.rdy;
+ sfp_tx_fault <= phy8_i.sfp_tx_fault;
+ sfp_los <= phy8_i.sfp_los;
+
+ -- drive unused ports with dummy values
+ phy16_o <= c_dummy_phy16_from_wrc;
+ phy_rst_o <= '0';
+ phy_loopen_o <= '0';
+ phy_tx_data_o <= (others => '0');
+ phy_tx_k_o <= (others => '0');
+ phy_loopen_vec_o <= (others => '0');
+ phy_tx_prbs_sel_o <= (others => '0');
+ phy_sfp_tx_disable_o <= '0';
+ end generate;
+
+ -- backwards compatibility
+ GEN_STD_IF: if not g_records_for_phy generate
+ phy_rst_o <= phy_rst;
+ phy_loopen_o <= phy_loopen;
+ phy_loopen_vec_o <= phy_loopen_vec;
+ phy_tx_data_o <= phy_tx_data;
+ phy_tx_k_o <= phy_tx_k;
+ phy_tx_prbs_sel_o <= phy_tx_prbs_sel;
+ phy_sfp_tx_disable_o <= sfp_tx_disable;
+
+ phy_tx_clk <= phy_ref_clk_i;
+ phy_tx_disparity <= phy_tx_disparity_i;
+ phy_tx_enc_err <= phy_tx_enc_err_i;
+ phy_rx_data <= phy_rx_data_i;
+ phy_rx_clk <= phy_rx_clk_i;
+ phy_rx_k <= phy_rx_k_i;
+ phy_rx_enc_err <= phy_rx_enc_err_i;
+ phy_rx_bts <= phy_rx_bitslide_i;
+ phy_rdy <= phy_rdy_i;
+ sfp_tx_fault <= phy_sfp_tx_fault_i;
+ sfp_los <= phy_sfp_los_i;
+
+ -- drive unused ports with dummy values
+ phy8_o <= c_dummy_phy8_from_wrc;
+ phy16_o <= c_dummy_phy16_from_wrc;
+ end generate;
+
+end syn;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd
new file mode 100644
index 000000000..1a2db96a2
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wb_slave.vhd
@@ -0,0 +1,602 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for Mini NIC for WhiteRabbit
+---------------------------------------------------------------------------------------
+-- File : minic_wb_slave.vhd
+-- Author : auto-generated by wbgen2 from mini_nic.wb
+-- Created : Wed Aug 16 22:41:57 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE mini_nic.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wbgen2_pkg.all;
+
+use work.minic_wbgen2_pkg.all;
+
+
+entity minic_wb_slave is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic;
+ tx_ts_read_ack_o : out std_logic;
+ irq_tx_i : in std_logic;
+ irq_tx_ack_o : out std_logic;
+ irq_tx_mask_o : out std_logic;
+ irq_rx_i : in std_logic;
+ irq_rx_ack_o : out std_logic;
+ irq_txts_i : in std_logic;
+ regs_i : in t_minic_in_registers;
+ regs_o : out t_minic_out_registers
+ );
+end minic_wb_slave;
+
+architecture syn of minic_wb_slave is
+
+signal minic_mcr_tx_start_dly0 : std_logic ;
+signal minic_mcr_tx_start_int : std_logic ;
+signal minic_mcr_rx_en_int : std_logic ;
+signal minic_mcr_rx_class_int : std_logic_vector(7 downto 0);
+signal minic_mprot_lo_int : std_logic_vector(15 downto 0);
+signal minic_mprot_hi_int : std_logic_vector(15 downto 0);
+signal eic_idr_int : std_logic_vector(2 downto 0);
+signal eic_idr_write_int : std_logic ;
+signal eic_ier_int : std_logic_vector(2 downto 0);
+signal eic_ier_write_int : std_logic ;
+signal eic_imr_int : std_logic_vector(2 downto 0);
+signal eic_isr_clear_int : std_logic_vector(2 downto 0);
+signal eic_isr_status_int : std_logic_vector(2 downto 0);
+signal eic_irq_ack_int : std_logic_vector(2 downto 0);
+signal eic_isr_write_int : std_logic ;
+signal irq_inputs_vector_int : std_logic_vector(2 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(4 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ minic_mcr_tx_start_int <= '0';
+ minic_mcr_rx_en_int <= '0';
+ minic_mcr_rx_class_int <= "00000000";
+ regs_o.tx_fifo_dat_wr_o <= '0';
+ regs_o.tx_fifo_type_wr_o <= '0';
+ tx_ts_read_ack_o <= '0';
+ minic_mprot_lo_int <= "0000000000000000";
+ minic_mprot_hi_int <= "0000000000000000";
+ eic_idr_write_int <= '0';
+ eic_ier_write_int <= '0';
+ eic_isr_write_int <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ minic_mcr_tx_start_int <= '0';
+ regs_o.tx_fifo_dat_wr_o <= '0';
+ regs_o.tx_fifo_type_wr_o <= '0';
+ tx_ts_read_ack_o <= '0';
+ eic_idr_write_int <= '0';
+ eic_ier_write_int <= '0';
+ eic_isr_write_int <= '0';
+ ack_in_progress <= '0';
+ else
+ regs_o.tx_fifo_dat_wr_o <= '0';
+ regs_o.tx_fifo_type_wr_o <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(4 downto 0) is
+ when "00000" =>
+ if (wb_we_i = '1') then
+ minic_mcr_tx_start_int <= wrdata_reg(0);
+ minic_mcr_rx_en_int <= wrdata_reg(10);
+ minic_mcr_rx_class_int <= wrdata_reg(23 downto 16);
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= regs_i.mcr_tx_idle_i;
+ rddata_reg(2) <= regs_i.mcr_tx_error_i;
+ rddata_reg(3) <= regs_i.mcr_tx_empty_i;
+ rddata_reg(4) <= regs_i.mcr_tx_full_i;
+ rddata_reg(8) <= regs_i.mcr_rx_ready_i;
+ rddata_reg(9) <= regs_i.mcr_rx_error_i;
+ rddata_reg(10) <= minic_mcr_rx_en_int;
+ rddata_reg(11) <= regs_i.mcr_tx_ts_ready_i;
+ rddata_reg(12) <= regs_i.mcr_rx_empty_i;
+ rddata_reg(13) <= regs_i.mcr_rx_full_i;
+ rddata_reg(23 downto 16) <= minic_mcr_rx_class_int;
+ rddata_reg(27 downto 24) <= regs_i.mcr_ver_i;
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "00001" =>
+ if (wb_we_i = '1') then
+ regs_o.tx_fifo_dat_wr_o <= '1';
+ regs_o.tx_fifo_type_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.rx_fifo_dat_i;
+ rddata_reg(17 downto 16) <= regs_i.rx_fifo_type_i;
+ rddata_reg(30) <= regs_i.rx_fifo_empty_i;
+ rddata_reg(31) <= regs_i.rx_fifo_full_i;
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= regs_i.tsr0_valid_i;
+ rddata_reg(5 downto 1) <= regs_i.tsr0_pid_i;
+ rddata_reg(21 downto 6) <= regs_i.tsr0_fid_i;
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.tsr1_tsval_i;
+ tx_ts_read_ack_o <= '1';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(23 downto 0) <= regs_i.dbgr_irq_cnt_i;
+ rddata_reg(24) <= regs_i.dbgr_wb_irq_val_i;
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01000" =>
+ if (wb_we_i = '1') then
+ minic_mprot_lo_int <= wrdata_reg(15 downto 0);
+ minic_mprot_hi_int <= wrdata_reg(31 downto 16);
+ end if;
+ rddata_reg(15 downto 0) <= minic_mprot_lo_int;
+ rddata_reg(31 downto 16) <= minic_mprot_hi_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10000" =>
+ if (wb_we_i = '1') then
+ eic_idr_write_int <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10001" =>
+ if (wb_we_i = '1') then
+ eic_ier_write_int <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(2 downto 0) <= eic_imr_int(2 downto 0);
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10011" =>
+ if (wb_we_i = '1') then
+ eic_isr_write_int <= '1';
+ end if;
+ rddata_reg(2 downto 0) <= eic_isr_status_int(2 downto 0);
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- TX DMA start
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ minic_mcr_tx_start_dly0 <= '0';
+ regs_o.mcr_tx_start_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ minic_mcr_tx_start_dly0 <= minic_mcr_tx_start_int;
+ regs_o.mcr_tx_start_o <= minic_mcr_tx_start_int and (not minic_mcr_tx_start_dly0);
+ end if;
+ end process;
+
+
+-- TX DMA idle
+-- TX DMA error
+-- TX_FIFO_EMPTY
+-- TX_FIFO_FULL
+-- RX DMA ready
+-- RX DMA error
+-- RX DMA enable
+ regs_o.mcr_rx_en_o <= minic_mcr_rx_en_int;
+-- TX TS ready
+-- RX_FIFO_EMPTY
+-- RX_FIFO_FULL
+-- RX Accepted Packet Classes
+ regs_o.mcr_rx_class_o <= minic_mcr_rx_class_int;
+-- Regs map version
+-- Data to send
+-- pass-through field: Data to send in register: TX FIFO Register
+ regs_o.tx_fifo_dat_o <= wrdata_reg(15 downto 0);
+-- Data type
+-- pass-through field: Data type in register: TX FIFO Register
+ regs_o.tx_fifo_type_o <= wrdata_reg(17 downto 16);
+-- Data to send
+-- Data type
+-- RX_FIFO_EMPTY
+-- RX_FIFO_FULL
+-- Timestamp valid
+-- Port ID
+-- Frame ID
+-- Timestamp value
+-- interrupt counter
+-- status of wb_irq_o line
+-- address range lo
+ regs_o.mprot_lo_o <= minic_mprot_lo_int;
+-- address range hi
+ regs_o.mprot_hi_o <= minic_mprot_hi_int;
+-- extra code for reg/fifo/mem: Interrupt disable register
+ eic_idr_int(2 downto 0) <= wrdata_reg(2 downto 0);
+-- extra code for reg/fifo/mem: Interrupt enable register
+ eic_ier_int(2 downto 0) <= wrdata_reg(2 downto 0);
+-- extra code for reg/fifo/mem: Interrupt status register
+ eic_isr_clear_int(2 downto 0) <= wrdata_reg(2 downto 0);
+-- extra code for reg/fifo/mem: IRQ_CONTROLLER
+ eic_irq_controller_inst : wbgen2_eic
+ generic map (
+ g_num_interrupts => 3,
+ g_irq00_mode => 3,
+ g_irq01_mode => 3,
+ g_irq02_mode => 3,
+ g_irq03_mode => 0,
+ g_irq04_mode => 0,
+ g_irq05_mode => 0,
+ g_irq06_mode => 0,
+ g_irq07_mode => 0,
+ g_irq08_mode => 0,
+ g_irq09_mode => 0,
+ g_irq0a_mode => 0,
+ g_irq0b_mode => 0,
+ g_irq0c_mode => 0,
+ g_irq0d_mode => 0,
+ g_irq0e_mode => 0,
+ g_irq0f_mode => 0,
+ g_irq10_mode => 0,
+ g_irq11_mode => 0,
+ g_irq12_mode => 0,
+ g_irq13_mode => 0,
+ g_irq14_mode => 0,
+ g_irq15_mode => 0,
+ g_irq16_mode => 0,
+ g_irq17_mode => 0,
+ g_irq18_mode => 0,
+ g_irq19_mode => 0,
+ g_irq1a_mode => 0,
+ g_irq1b_mode => 0,
+ g_irq1c_mode => 0,
+ g_irq1d_mode => 0,
+ g_irq1e_mode => 0,
+ g_irq1f_mode => 0
+ )
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ irq_i => irq_inputs_vector_int,
+ irq_ack_o => eic_irq_ack_int,
+ reg_imr_o => eic_imr_int,
+ reg_ier_i => eic_ier_int,
+ reg_ier_wr_stb_i => eic_ier_write_int,
+ reg_idr_i => eic_idr_int,
+ reg_idr_wr_stb_i => eic_idr_write_int,
+ reg_isr_o => eic_isr_status_int,
+ reg_isr_i => eic_isr_clear_int,
+ reg_isr_wr_stb_i => eic_isr_write_int,
+ wb_irq_o => wb_int_o
+ );
+
+ irq_inputs_vector_int(0) <= irq_tx_i;
+ irq_tx_ack_o <= eic_irq_ack_int(0);
+ irq_tx_mask_o <= eic_imr_int(0);
+ irq_inputs_vector_int(1) <= irq_rx_i;
+ irq_rx_ack_o <= eic_irq_ack_int(1);
+ irq_inputs_vector_int(2) <= irq_txts_i;
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd
new file mode 100644
index 000000000..585a0513d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/minic_wbgen2_pkg.vhd
@@ -0,0 +1,145 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for Mini NIC for WhiteRabbit
+---------------------------------------------------------------------------------------
+-- File : minic_wbgen2_pkg.vhd
+-- Author : auto-generated by wbgen2 from mini_nic.wb
+-- Created : Wed Aug 16 22:41:57 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE mini_nic.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wbgen2_pkg.all;
+
+package minic_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_minic_in_registers is record
+ mcr_tx_idle_i : std_logic;
+ mcr_tx_error_i : std_logic;
+ mcr_tx_empty_i : std_logic;
+ mcr_tx_full_i : std_logic;
+ mcr_rx_ready_i : std_logic;
+ mcr_rx_error_i : std_logic;
+ mcr_tx_ts_ready_i : std_logic;
+ mcr_rx_empty_i : std_logic;
+ mcr_rx_full_i : std_logic;
+ mcr_ver_i : std_logic_vector(3 downto 0);
+ rx_fifo_dat_i : std_logic_vector(15 downto 0);
+ rx_fifo_type_i : std_logic_vector(1 downto 0);
+ rx_fifo_empty_i : std_logic;
+ rx_fifo_full_i : std_logic;
+ tsr0_valid_i : std_logic;
+ tsr0_pid_i : std_logic_vector(4 downto 0);
+ tsr0_fid_i : std_logic_vector(15 downto 0);
+ tsr1_tsval_i : std_logic_vector(31 downto 0);
+ dbgr_irq_cnt_i : std_logic_vector(23 downto 0);
+ dbgr_wb_irq_val_i : std_logic;
+ end record;
+
+ constant c_minic_in_registers_init_value: t_minic_in_registers := (
+ mcr_tx_idle_i => '0',
+ mcr_tx_error_i => '0',
+ mcr_tx_empty_i => '0',
+ mcr_tx_full_i => '0',
+ mcr_rx_ready_i => '0',
+ mcr_rx_error_i => '0',
+ mcr_tx_ts_ready_i => '0',
+ mcr_rx_empty_i => '0',
+ mcr_rx_full_i => '0',
+ mcr_ver_i => (others => '0'),
+ rx_fifo_dat_i => (others => '0'),
+ rx_fifo_type_i => (others => '0'),
+ rx_fifo_empty_i => '0',
+ rx_fifo_full_i => '0',
+ tsr0_valid_i => '0',
+ tsr0_pid_i => (others => '0'),
+ tsr0_fid_i => (others => '0'),
+ tsr1_tsval_i => (others => '0'),
+ dbgr_irq_cnt_i => (others => '0'),
+ dbgr_wb_irq_val_i => '0'
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_minic_out_registers is record
+ mcr_tx_start_o : std_logic;
+ mcr_rx_en_o : std_logic;
+ mcr_rx_class_o : std_logic_vector(7 downto 0);
+ tx_fifo_dat_o : std_logic_vector(15 downto 0);
+ tx_fifo_dat_wr_o : std_logic;
+ tx_fifo_type_o : std_logic_vector(1 downto 0);
+ tx_fifo_type_wr_o : std_logic;
+ mprot_lo_o : std_logic_vector(15 downto 0);
+ mprot_hi_o : std_logic_vector(15 downto 0);
+ end record;
+
+ constant c_minic_out_registers_init_value: t_minic_out_registers := (
+ mcr_tx_start_o => '0',
+ mcr_rx_en_o => '0',
+ mcr_rx_class_o => (others => '0'),
+ tx_fifo_dat_o => (others => '0'),
+ tx_fifo_dat_wr_o => '0',
+ tx_fifo_type_o => (others => '0'),
+ tx_fifo_type_wr_o => '0',
+ mprot_lo_o => (others => '0'),
+ mprot_hi_o => (others => '0')
+ );
+ function "or" (left, right: t_minic_in_registers) return t_minic_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body minic_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_minic_in_registers) return t_minic_in_registers is
+variable tmp: t_minic_in_registers;
+begin
+tmp.mcr_tx_idle_i := f_x_to_zero(left.mcr_tx_idle_i) or f_x_to_zero(right.mcr_tx_idle_i);
+tmp.mcr_tx_error_i := f_x_to_zero(left.mcr_tx_error_i) or f_x_to_zero(right.mcr_tx_error_i);
+tmp.mcr_tx_empty_i := f_x_to_zero(left.mcr_tx_empty_i) or f_x_to_zero(right.mcr_tx_empty_i);
+tmp.mcr_tx_full_i := f_x_to_zero(left.mcr_tx_full_i) or f_x_to_zero(right.mcr_tx_full_i);
+tmp.mcr_rx_ready_i := f_x_to_zero(left.mcr_rx_ready_i) or f_x_to_zero(right.mcr_rx_ready_i);
+tmp.mcr_rx_error_i := f_x_to_zero(left.mcr_rx_error_i) or f_x_to_zero(right.mcr_rx_error_i);
+tmp.mcr_tx_ts_ready_i := f_x_to_zero(left.mcr_tx_ts_ready_i) or f_x_to_zero(right.mcr_tx_ts_ready_i);
+tmp.mcr_rx_empty_i := f_x_to_zero(left.mcr_rx_empty_i) or f_x_to_zero(right.mcr_rx_empty_i);
+tmp.mcr_rx_full_i := f_x_to_zero(left.mcr_rx_full_i) or f_x_to_zero(right.mcr_rx_full_i);
+tmp.mcr_ver_i := f_x_to_zero(left.mcr_ver_i) or f_x_to_zero(right.mcr_ver_i);
+tmp.rx_fifo_dat_i := f_x_to_zero(left.rx_fifo_dat_i) or f_x_to_zero(right.rx_fifo_dat_i);
+tmp.rx_fifo_type_i := f_x_to_zero(left.rx_fifo_type_i) or f_x_to_zero(right.rx_fifo_type_i);
+tmp.rx_fifo_empty_i := f_x_to_zero(left.rx_fifo_empty_i) or f_x_to_zero(right.rx_fifo_empty_i);
+tmp.rx_fifo_full_i := f_x_to_zero(left.rx_fifo_full_i) or f_x_to_zero(right.rx_fifo_full_i);
+tmp.tsr0_valid_i := f_x_to_zero(left.tsr0_valid_i) or f_x_to_zero(right.tsr0_valid_i);
+tmp.tsr0_pid_i := f_x_to_zero(left.tsr0_pid_i) or f_x_to_zero(right.tsr0_pid_i);
+tmp.tsr0_fid_i := f_x_to_zero(left.tsr0_fid_i) or f_x_to_zero(right.tsr0_fid_i);
+tmp.tsr1_tsval_i := f_x_to_zero(left.tsr1_tsval_i) or f_x_to_zero(right.tsr1_tsval_i);
+tmp.dbgr_irq_cnt_i := f_x_to_zero(left.dbgr_irq_cnt_i) or f_x_to_zero(right.dbgr_irq_cnt_i);
+tmp.dbgr_wb_irq_val_i := f_x_to_zero(left.dbgr_wb_irq_val_i) or f_x_to_zero(right.dbgr_wb_irq_val_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd
new file mode 100644
index 000000000..3ca72931f
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/wr_mini_nic.vhd
@@ -0,0 +1,817 @@
+-------------------------------------------------------------------------------
+-- Title : Mini Embedded DMA Network Interface Controller
+-- Project : WhiteRabbit Core
+-------------------------------------------------------------------------------
+-- File : wrsw_mini_nic.vhd
+-- Author : Grzegorz Daniluk, Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-07-26
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: Module implements a simple NIC with DMA controller. It
+-- sends/receives the packets using WR switch fabric interface (see the
+-- wrsw_endpoint.vhd for the details). Packets are stored and read from the
+-- system memory via simple memory bus. WR endpoint-compatible TX timestamping
+-- unit is also included.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010-2016 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-07-26 1.0 twlostow Created
+-- 2010-08-16 1.0 twlostow Bugfixes, linux compatibility added
+-- 2011-08-03 2.0 greg.d rewritten to use pipelined Wishbone
+-- 2011-10-45 2.1 twlostow bugfixes...
+-- 2016-10-27 3.0 greg.d rewritten with Tx/Rx FIFOs
+-------------------------------------------------------------------------------
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wr_fabric_pkg.all;
+use work.wishbone_pkg.all;
+use work.genram_pkg.all;
+use work.minic_wbgen2_pkg.all;
+
+
+entity wr_mini_nic is
+
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_tx_fifo_size : integer := 1024;
+ g_rx_fifo_size : integer := 2048;
+ g_buffer_little_endian : boolean := false);
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- Pipelined Wishbone interface
+-------------------------------------------------------------------------------
+
+ -- WBP Master (TX)
+ src_dat_o : out std_logic_vector(15 downto 0);
+ src_adr_o : out std_logic_vector(1 downto 0);
+ src_sel_o : out std_logic_vector(1 downto 0);
+ src_cyc_o : out std_logic;
+ src_stb_o : out std_logic;
+ src_we_o : out std_logic;
+ src_stall_i : in std_logic;
+ src_err_i : in std_logic;
+ src_ack_i : in std_logic;
+
+ -- WBP Slave (RX)
+ snk_dat_i : in std_logic_vector(15 downto 0);
+ snk_adr_i : in std_logic_vector(1 downto 0);
+ snk_sel_i : in std_logic_vector(1 downto 0);
+ snk_cyc_i : in std_logic;
+ snk_stb_i : in std_logic;
+ snk_we_i : in std_logic;
+ snk_stall_o : out std_logic;
+ snk_err_o : out std_logic;
+ snk_ack_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- TXTSU i/f
+-------------------------------------------------------------------------------
+
+ txtsu_port_id_i : in std_logic_vector(4 downto 0);
+ txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0);
+ txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_tsincorrect_i : in std_logic;
+ txtsu_stb_i : in std_logic;
+ txtsu_ack_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone slave
+-------------------------------------------------------------------------------
+
+ wb_cyc_i : in std_logic;
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic
+ );
+end wr_mini_nic;
+
+architecture behavioral of wr_mini_nic is
+
+ constant c_NTX_TIMEOUT : integer := 100;
+ constant c_WRF_BYTESEL : std_logic_vector(1 downto 0) := "11";
+
+ component minic_wb_slave
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic;
+ tx_ts_read_ack_o : out std_logic;
+ irq_tx_i : in std_logic;
+ irq_tx_ack_o : out std_logic;
+ irq_tx_mask_o : out std_logic;
+ irq_rx_i : in std_logic;
+ irq_rx_ack_o : out std_logic;
+ irq_txts_i : in std_logic;
+ regs_i : in t_minic_in_registers;
+ regs_o : out t_minic_out_registers
+ );
+ end component;
+
+ function f_swap_endian_16
+ (
+ data : std_logic_vector(15 downto 0)
+ ) return std_logic_vector is
+ begin
+ if(g_buffer_little_endian = true) then
+ return data(7 downto 0) & data(15 downto 8);
+ else
+ return data;
+ end if;
+ end function f_swap_endian_16;
+
+
+ signal src_cyc_int : std_logic;
+ signal src_stb_int : std_logic;
+ signal snk_stall_int : std_logic;
+
+
+-----------------------------------------------------------------------------
+-- FIFO interface signals
+-----------------------------------------------------------------------------
+
+ signal tx_fifo_d : std_logic_vector(17 downto 0);
+ signal tx_fifo_q : std_logic_vector(17 downto 0);
+ alias txf_type is tx_fifo_q(17 downto 16);
+ alias txf_data is tx_fifo_q(15 downto 0);
+ signal tx_fifo_we, tx_fifo_rd : std_logic;
+ signal tx_fifo_empty, tx_fifo_full : std_logic;
+ signal rx_fifo_d : std_logic_vector(17 downto 0);
+ signal rx_fifo_q : std_logic_vector(17 downto 0);
+ signal rx_fifo_we, rx_fifo_rd : std_logic;
+ signal rx_fifo_empty, rx_fifo_full : std_logic;
+ signal rx_fifo_afull : std_logic;
+
+ signal txf_ferror : std_logic;
+ signal txf_fnew : std_logic;
+ signal tx_status_word : t_wrf_status_reg;
+
+
+-------------------------------------------------------------------------------
+-- TX FSM stuff
+-------------------------------------------------------------------------------
+
+ type t_tx_fsm_state is (TX_IDLE, TX_STATUS, TX_PACKET, TX_FLUSH, TX_END_PACKET);
+
+ signal ntx_timeout_is_zero : std_logic;
+ signal ntx_timeout : unsigned(7 downto 0);
+
+ signal ntx_ack_count : unsigned(2 downto 0);
+
+ signal ntx_state : t_tx_fsm_state;
+ signal ntx_rst_ts_ready : std_logic;
+
+ signal ntx_stored_dat : std_logic_vector(15 downto 0);
+ signal ntx_stored_type : std_logic_vector(1 downto 0);
+ signal ntx_flush_last : std_logic;
+
+-------------------------------------------------------------------------------
+-- RX FSM stuff
+-------------------------------------------------------------------------------
+
+ signal snk_cyc_d0 : std_logic;
+ signal nrx_sof : std_logic;
+ signal nrx_eof : std_logic;
+ alias rxf_type is rx_fifo_d(17 downto 16);
+ alias rxf_data is rx_fifo_d(15 downto 0);
+
+ type t_rx_fsm_state is (RX_WAIT_FRAME, RX_FRAME, RX_FULL);
+ signal nrx_state : t_rx_fsm_state;
+
+-------------------------------------------------------------------------------
+-- Classic Wishbone slave signals
+-------------------------------------------------------------------------------
+
+ signal regs_in : t_minic_in_registers;
+ signal regs_out : t_minic_out_registers;
+
+ signal wb_in : t_wishbone_master_in;
+ signal wb_out : t_wishbone_master_out;
+
+ signal irq_tx : std_logic;
+ signal irq_rx_ack : std_logic;
+ signal irq_rx : std_logic;
+
+ signal nrx_newpacket, nrx_newpacket_d0 : std_logic;
+ signal ntx_newpacket, ntx_newpacket_d0 : std_logic;
+
+ signal irq_txts : std_logic;
+ signal irq_tx_ack : std_logic;
+ signal irq_tx_mask : std_logic;
+
+
+ --component chipscope_ila
+ -- port (
+ -- CONTROL : inout std_logic_vector(35 downto 0);
+ -- CLK : in std_logic;
+ -- TRIG0 : in std_logic_vector(31 downto 0);
+ -- TRIG1 : in std_logic_vector(31 downto 0);
+ -- TRIG2 : in std_logic_vector(31 downto 0);
+ -- TRIG3 : in std_logic_vector(31 downto 0));
+ --end component;
+
+ --signal CONTROL : std_logic_vector(35 downto 0);
+ --signal CLK : std_logic;
+ --signal TRIG0 : std_logic_vector(31 downto 0);
+ --signal TRIG1 : std_logic_vector(31 downto 0);
+ --signal TRIG2 : std_logic_vector(31 downto 0);
+ --signal TRIG3 : std_logic_vector(31 downto 0);
+
+ --component chipscope_icon
+ -- port (
+ -- CONTROL0 : inout std_logic_vector (35 downto 0));
+ --end component;
+
+begin -- behavioral
+
+ --chipscope_ila_1 : chipscope_ila
+ -- port map (
+ -- CONTROL => CONTROL,
+ -- CLK => clk_sys_i,
+ -- TRIG0 => TRIG0,
+ -- TRIG1 => TRIG1,
+ -- TRIG2 => TRIG2,
+ -- TRIG3 => TRIG3);
+
+ --chipscope_icon_1 : chipscope_icon
+ -- port map (
+ -- CONTROL0 => CONTROL);
+
+ regs_in.mcr_ver_i <= x"1";
+ regs_in.dbgr_irq_cnt_i <= (others => '0');
+ regs_in.dbgr_wb_irq_val_i <= '0';
+
+-------------------------------------------------------------------------------
+-- Tx / Rx FIFO
+-----------------------------------------------------------------------------
+ TX_FIFO: generic_sync_fifo
+ generic map(
+ g_data_width => 18,
+ g_size => g_tx_fifo_size,
+ g_with_almost_empty => false,
+ g_with_almost_full => false,
+ g_with_count => false,
+ g_show_ahead => true)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_sys_i,
+ d_i => tx_fifo_d,
+ we_i => tx_fifo_we,
+ q_o => tx_fifo_q,
+ rd_i => tx_fifo_rd,
+ empty_o => tx_fifo_empty,
+ full_o => tx_fifo_full);
+
+ RX_FIFO: generic_sync_fifo
+ generic map(
+ g_data_width => 18,
+ g_size => g_rx_fifo_size,
+ g_with_almost_empty => false,
+ g_with_almost_full => true,
+ g_with_count => false,
+ g_almost_full_threshold => g_rx_fifo_size/2,
+ g_show_ahead => true)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_sys_i,
+ d_i => rx_fifo_d,
+ we_i => rx_fifo_we,
+ q_o => rx_fifo_q,
+ rd_i => rx_fifo_rd,
+ empty_o => rx_fifo_empty,
+ full_o => rx_fifo_full,
+ almost_full_o => rx_fifo_afull);
+
+ tx_fifo_d <= regs_out.tx_fifo_type_o & regs_out.tx_fifo_dat_o;
+ tx_fifo_we <= regs_out.tx_fifo_dat_wr_o and regs_out.tx_fifo_type_wr_o;
+ regs_in.mcr_tx_empty_i <= tx_fifo_empty;
+ regs_in.mcr_tx_full_i <= tx_fifo_full;
+
+ regs_in.mcr_rx_empty_i <= rx_fifo_empty;
+ regs_in.rx_fifo_empty_i <= rx_fifo_empty;
+ regs_in.mcr_rx_full_i <= rx_fifo_full;
+ regs_in.rx_fifo_full_i <= rx_fifo_full;
+ regs_in.rx_fifo_type_i <= rx_fifo_q(17 downto 16);
+ regs_in.rx_fifo_dat_i <= rx_fifo_q(15 downto 0);
+
+ -- sniff wb access to generate rx_fifo_rd every time the RX_FIFO register is
+ -- read
+ rx_fifo_rd <= '1' when(wb_out.cyc='1' and wb_out.stb='1' and wb_out.adr(7 downto 0)=x"02" and wb_in.ack='1') else
+ '0';
+
+-------------------------------------------------------------------------------
+-- TX Path (Host -> Fabric)
+-------------------------------------------------------------------------------
+
+-- helper signals to avoid big IF conditions in the FSM
+ ntx_timeout_is_zero <= '1' when (ntx_timeout = to_unsigned(0, ntx_timeout'length)) else '0';
+
+ p_count_acks : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' or src_cyc_int = '0' or src_err_i = '1' then
+ ntx_ack_count <= (others => '0');
+ else
+ if(src_stb_int = '1' and src_stall_i = '0' and src_ack_i = '0') then
+ ntx_ack_count <= ntx_ack_count + 1;
+ elsif(src_ack_i = '1' and not(src_stb_int = '1' and src_stall_i = '0')) then
+ ntx_ack_count <= ntx_ack_count - 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ tx_status_word <= f_unmarshall_wrf_status(tx_fifo_q(15 downto 0));
+ -- signals error in transmitted frame (set by software
+ -- by writing again status register to TX Fifo
+ txf_ferror <= '1' when (tx_fifo_empty = '0' and txf_type = c_WRF_STATUS and tx_status_word.error = '1') else
+ '0';
+ txf_fnew <= '1' when (tx_fifo_empty = '0' and txf_type = c_WRF_STATUS and tx_status_word.error = '0') else
+ '0';
+
+ p_tx_fsm: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0') then
+ src_cyc_int <= '0';
+ src_stb_int <= '0';
+ src_sel_o <= "11";
+ src_adr_o <= c_WRF_DATA;
+ tx_fifo_rd <= '0';
+ ntx_rst_ts_ready <= '0';
+ ntx_state <= TX_IDLE;
+ ntx_stored_dat <= (others=>'0');
+ ntx_stored_type <= (others=>'0');
+ ntx_flush_last <= '0';
+ ntx_newpacket <= '0';
+ else
+ case ntx_state is
+ when TX_IDLE =>
+ regs_in.mcr_tx_error_i <= '0';
+ src_cyc_int <= '0';
+ src_stb_int <= '0';
+ src_sel_o <= "11";
+ src_adr_o <= txf_type;
+ ntx_timeout <= to_unsigned(c_NTX_TIMEOUT, ntx_timeout'length);
+ ntx_flush_last <= '0';
+ ntx_newpacket <= '0';
+ if (tx_fifo_empty = '0' and txf_fnew = '0') then
+ -- if there is something in the fifo but it's not a status word,
+ -- we read until we find a valid status. In this case we indicate
+ -- that Minic is busy by driving wbreg bit tx_idle to 0.
+ tx_fifo_rd <= '1';
+ ntx_rst_ts_ready <= '0';
+ regs_in.mcr_tx_idle_i <= '0';
+ elsif (tx_fifo_empty = '0' and txf_fnew = '1' and regs_out.mcr_tx_start_o = '1') then
+ -- we have a new frame to be sent, proceed..
+ src_cyc_int <= '1';
+ tx_fifo_rd <= '1';
+ ntx_rst_ts_ready <= '1';
+ regs_in.mcr_tx_idle_i <= '0';
+ ntx_state <= TX_STATUS;
+ else
+ -- wait quietly for something to be written to FIFO
+ tx_fifo_rd <= '0';
+ ntx_rst_ts_ready <= '0';
+ regs_in.mcr_tx_idle_i <= '1';
+ end if;
+
+ when TX_STATUS =>
+ -- read first word of the frame from fifo and start transmission
+ regs_in.mcr_tx_idle_i <= '0';
+ ntx_rst_ts_ready <= '0';
+ src_cyc_int <= '1';
+ src_stb_int <= '1';
+ src_sel_o <= "11";
+ src_adr_o <= c_WRF_STATUS;
+ src_dat_o <= f_swap_endian_16(txf_data);
+ tx_fifo_rd <= '1';
+ ntx_flush_last <= '0';
+ ntx_newpacket <= '0';
+ ntx_state <= TX_PACKET;
+
+ when TX_PACKET =>
+ regs_in.mcr_tx_idle_i <= '0';
+ ntx_rst_ts_ready <= '0';
+ src_cyc_int <= '1';
+ ntx_newpacket <= '0';
+ if (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_DATA) then
+ -- normal situation, we send the payload of a frame
+ src_adr_o <= c_WRF_DATA;
+ src_dat_o <= f_swap_endian_16(txf_data);
+ src_sel_o <= "11";
+ src_stb_int <= '1';
+ tx_fifo_rd <= '1';
+ ntx_flush_last <= '0';
+ elsif (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_BYTESEL) then
+ -- almost normal situation, only one byte of data is valid
+ src_adr_o <= c_WRF_DATA;
+ src_dat_o <= f_swap_endian_16(txf_data);
+ src_sel_o <= "10";
+ src_stb_int <= '1';
+ tx_fifo_rd <= '1';
+ ntx_flush_last <= '0';
+ elsif (tx_fifo_empty = '0' and src_stall_i = '0' and txf_ferror = '0' and txf_type = c_WRF_OOB) then
+ -- we got OOB in TXed frame, let's send it
+ src_adr_o <= c_WRF_OOB;
+ src_dat_o <= f_swap_endian_16(txf_data);
+ src_sel_o <= "11";
+ src_stb_int <= '1';
+ tx_fifo_rd <= '1';
+ ntx_flush_last <= '0';
+ elsif ((tx_fifo_empty = '1' or txf_fnew = '1') and src_stall_i = '0') then
+ -- we done with this frame
+ src_adr_o <= c_WRF_DATA;
+ src_dat_o <= f_swap_endian_16(txf_data);
+ src_stb_int <= '0';
+ src_sel_o <= "11";
+ tx_fifo_rd <= '0';
+ ntx_flush_last <= '0';
+ ntx_state <= TX_END_PACKET;
+ else
+ -- e.g. snk is stalling, we wait
+ tx_fifo_rd <= '0';
+ src_stb_int <= '1';
+ ntx_stored_dat <= txf_data;
+ ntx_stored_type <= txf_type;
+ if (tx_fifo_empty = '1') then
+ ntx_flush_last <= '1';
+ else
+ ntx_flush_last <= '0';
+ end if;
+ ntx_state <= TX_FLUSH;
+ end if;
+
+ when TX_FLUSH =>
+ regs_in.mcr_tx_idle_i <= '0';
+ ntx_rst_ts_ready <= '0';
+ src_cyc_int <= '1';
+ ntx_newpacket <= '0';
+ if (src_stall_i = '0' and (ntx_stored_type = c_WRF_DATA or ntx_stored_type = c_WRF_OOB)) then
+ src_adr_o <= ntx_stored_type;
+ src_dat_o <= f_swap_endian_16(ntx_stored_dat);
+ src_sel_o <= "11";
+ elsif (src_stall_i = '0' and ntx_stored_type = c_WRF_BYTESEL) then
+ src_adr_o <= c_WRF_DATA;
+ src_dat_o <= f_swap_endian_16(ntx_stored_dat);
+ src_sel_o <= "10";
+ else
+ src_stb_int <= '1';
+ tx_fifo_rd <= '0';
+ end if;
+
+ if (ntx_flush_last = '0' and src_stall_i = '0') then
+ src_stb_int <= '1';
+ tx_fifo_rd <= '1';
+ ntx_state <= TX_PACKET;
+ elsif (ntx_flush_last = '1' and src_stall_i = '0') then
+ src_stb_int <= '0';
+ tx_fifo_rd <= '0';
+ ntx_state <= TX_END_PACKET;
+ else
+ src_stb_int <= '1';
+ tx_fifo_rd <= '0';
+ ntx_state <= TX_FLUSH;
+ end if;
+
+ when TX_END_PACKET =>
+ regs_in.mcr_tx_idle_i <= '0';
+ ntx_rst_ts_ready <= '0';
+ src_stb_int <= '0';
+ -- timeout counter in case we never get all ACKs.
+ ntx_timeout <= ntx_timeout - 1;
+ if (ntx_ack_count = 0 or ntx_timeout_is_zero = '1') then
+ regs_in.mcr_tx_error_i <= ntx_timeout_is_zero;
+ src_cyc_int <= '0';
+ src_sel_o <= "11";
+ tx_fifo_rd <= '0';
+ ntx_newpacket <= '1';
+ ntx_state <= TX_IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+-- these are never used:
+ src_we_o <= '1';
+ src_stb_o <= src_stb_int;
+ src_cyc_o <= src_cyc_int;
+
+-------------------------------------------------------------------------------
+-- RX Path (Fabric -> Host)
+-------------------------------------------------------------------------------
+
+ p_rx_gen_ack : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ snk_ack_o <= '0';
+ else
+ if(snk_cyc_i = '1' and snk_stb_i = '1' and snk_stall_int = '0') then
+ snk_ack_o <= '1';
+ else
+ snk_ack_o <= '0';
+ end if;
+ end if;
+ end if;
+
+ end process;
+
+ nrx_sof <= '1' when(snk_cyc_d0 = '0' and snk_cyc_i = '1') else
+ '0';
+ nrx_eof <= '1' when(snk_cyc_d0 = '1' and snk_cyc_i = '0') else
+ '0';
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if (rst_n_i = '0') then
+ snk_cyc_d0 <= '0';
+ rx_fifo_we <= '0';
+ rxf_type <= (others=>'0');
+ rxf_data <= (others=>'0');
+ snk_stall_int <= '0';
+ regs_in.mcr_rx_ready_i <= '0';
+ nrx_newpacket <= '0';
+ nrx_state <= RX_WAIT_FRAME;
+
+ else
+ snk_cyc_d0 <= snk_cyc_i;
+
+ case nrx_state is
+ when RX_WAIT_FRAME =>
+ rx_fifo_we <= '0';
+ rxf_type <= (others=>'0');
+ rxf_data <= (others=>'0');
+ regs_in.mcr_rx_error_i <= '0';
+ nrx_newpacket <= '0';
+ if (regs_out.mcr_rx_en_o = '1') then
+ snk_stall_int <= not nrx_sof;
+ else
+ -- RX path is disabled, don't stall any traffic
+ snk_stall_int <= '0';
+ end if;
+
+ -- wait for software to enable RX path and a start of new frame
+ if (regs_out.mcr_rx_en_o = '1' and nrx_sof = '1' and rx_fifo_full = '0') then
+ nrx_state <= RX_FRAME;
+ end if;
+
+ when RX_FRAME =>
+ snk_stall_int <= '0';
+ -- receive frame, write it to FIFO
+ if (snk_stb_i = '1' and snk_sel_i = "11") then
+ rxf_type <= snk_adr_i;
+ rxf_data <= f_swap_endian_16(snk_dat_i);
+ rx_fifo_we <= '1';
+ elsif (snk_stb_i = '1' and snk_sel_i = "10") then
+ rxf_type <= c_WRF_BYTESEL;
+ rxf_data <= f_swap_endian_16(snk_dat_i);
+ rx_fifo_we <= '1';
+ else
+ rxf_type <= (others=>'0');
+ rxf_data <= (others=>'0');
+ rx_fifo_we <= '0';
+ end if;
+
+ if ((regs_out.mcr_rx_en_o = '0' or nrx_eof = '1') and rx_fifo_full = '0') then
+ -- stop writing FIFO if sw disables RX path
+ -- or if we're done with current frame
+ regs_in.mcr_rx_ready_i <= '1';
+ regs_in.mcr_rx_error_i <= '0';
+ nrx_newpacket <= '1';
+ nrx_state <= RX_WAIT_FRAME;
+ elsif ((regs_out.mcr_rx_en_o = '0' or nrx_eof = '1') and rx_fifo_full = '1') then
+ -- the difference with the previous condition is that if the fifo
+ -- is full on the last word, we don't set rx_error, because the
+ -- frame was not cut (it fits in the FIFO). Besides that, we have
+ -- to go to RX_FULL state to wait for the FIFO to be half-empty
+ -- and receive more frames.
+ regs_in.mcr_rx_ready_i <= '1';
+ regs_in.mcr_rx_error_i <= '0';
+ nrx_newpacket <= '1';
+ nrx_state <= RX_FULL;
+ elsif (rx_fifo_full = '1') then
+ -- error if fifo gets full needs to be recovered
+ regs_in.mcr_rx_ready_i <= '1';
+ regs_in.mcr_rx_error_i <= '1';
+ nrx_newpacket <= '1';
+ nrx_state <= RX_FULL;
+ else
+ regs_in.mcr_rx_ready_i <= '0';
+ regs_in.mcr_rx_error_i <= '0';
+ nrx_newpacket <= '0';
+
+ end if;
+
+ when RX_FULL =>
+ snk_stall_int <= '0';
+ rx_fifo_we <= '0';
+ rxf_type <= (others=>'0');
+ rxf_data <= (others=>'0');
+ nrx_newpacket <= '0';
+
+ -- recovering means disabling RX path and reading everything from
+ -- the FIFO
+ --if (regs_out.mcr_rx_en_o = '0' and rx_fifo_empty = '1') then
+ -- nrx_state <= RX_WAIT_FRAME;
+ --end if;
+ if (snk_cyc_i = '0' and rx_fifo_afull = '0') then
+ nrx_state <= RX_WAIT_FRAME;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+
+ snk_stall_o <= snk_stall_int;
+ snk_err_o <= '0';
+
+-------------------------------------------------------------------------------
+-- TX Timestamping unit
+-------------------------------------------------------------------------------
+ tsu_fsm : process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ regs_in.mcr_tx_ts_ready_i <= '0';
+ regs_in.tsr0_valid_i <= '0';
+ regs_in.tsr0_pid_i <= (others => '0');
+ regs_in.tsr0_fid_i <= (others => '0');
+ regs_in.tsr1_tsval_i <= (others => '0');
+ txtsu_ack_o <= '0';
+ else
+ -- Make sure the timestamp is written to the FIFO only once.
+
+ if(ntx_rst_ts_ready = '1') then
+ regs_in.mcr_tx_ts_ready_i <= '0';
+ elsif(txtsu_stb_i = '1') then
+ regs_in.mcr_tx_ts_ready_i <= '1';
+ regs_in.tsr0_valid_i <= not txtsu_tsincorrect_i;
+ regs_in.tsr0_fid_i <= txtsu_frame_id_i;
+ regs_in.tsr0_pid_i <= txtsu_port_id_i;
+ regs_in.tsr1_tsval_i <= txtsu_tsval_i;
+ txtsu_ack_o <= '1';
+ else
+ txtsu_ack_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ handle_irqs: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ irq_tx <= '0';
+ irq_rx <= '0';
+ ntx_newpacket_d0 <= '0';
+ nrx_newpacket_d0 <= '0';
+ else
+ ntx_newpacket_d0 <= ntx_newpacket;
+ nrx_newpacket_d0 <= nrx_newpacket;
+
+ if (ntx_newpacket_d0 = '0' and ntx_newpacket = '1' and irq_tx_mask = '1') then
+ irq_tx <= '1';
+ elsif (irq_tx_mask = '0' or irq_tx_ack = '1') then
+ irq_tx <= '0';
+ end if;
+
+ if (nrx_newpacket_d0 = '0' and nrx_newpacket = '1') then
+ irq_rx <= '1';
+ elsif (irq_rx_ack = '1') then
+ irq_rx <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ irq_txts <= '0';
+
+ U_Slave_Adapter : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ sl_adr_i => wb_adr_i,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_stall_o => wb_stall_o,
+ master_i => wb_in,
+ master_o => wb_out);
+
+ U_WB_Slave : minic_wb_slave
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_out.adr(4 downto 0),
+ wb_dat_i => wb_out.dat,
+ wb_dat_o => wb_in.dat,
+ wb_cyc_i => wb_out.cyc,
+ wb_sel_i => wb_out.sel,
+ wb_stb_i => wb_out.stb,
+ wb_we_i => wb_out.we,
+ wb_ack_o => wb_in.ack,
+ wb_stall_o => wb_in.stall,
+ wb_int_o => wb_int_o,
+ regs_i => regs_in,
+ regs_o => regs_out,
+ tx_ts_read_ack_o => open,
+ irq_tx_i => irq_tx,
+ irq_tx_ack_o => irq_tx_ack,
+ irq_tx_mask_o => irq_tx_mask,
+ irq_rx_i => irq_rx,
+ irq_rx_ack_o => irq_rx_ack,
+ irq_txts_i => irq_txts);
+
+ wb_in.err <= '0';
+ wb_in.rty <= '0';
+ wb_in.int <= '0';
+
+ --TRIG0(0) <= regs_out.mcr_rx_en_o;
+ --TRIG0(1) <= rx_fifo_empty;
+ --TRIG0(2) <= rx_fifo_full;
+ --TRIG0(3) <= rx_fifo_rd;
+ --TRIG0(4) <= rx_fifo_we;
+ --TRIG0(6 downto 5) <= rx_fifo_q(17 downto 16);
+ --TRIG0(22 downto 7) <= rx_fifo_q(15 downto 0);
+ --TRIG0(24 downto 23) <= "00" when(nrx_state = RX_WAIT_FRAME) else
+ -- "01" when(nrx_state = RX_FRAME) else
+ -- "10" when(nrx_state = RX_FULL) else
+ -- "11";
+ --TRIG0(25) <= nrx_sof;
+ --TRIG0(26) <= nrx_eof;
+ --TRIG0(27) <= snk_cyc_i;
+ --TRIG0(28) <= snk_stb_i;
+ --TRIG0(29) <= snk_stall_int;
+ --TRIG0(31 downto 30) <= snk_adr_i;
+
+ --TRIG1(15 downto 0) <= snk_dat_i;
+ --TRIG1(16) <= rx_fifo_afull;
+ --TRIG1(17) <= wb_out.cyc;
+ --TRIG1(18) <= wb_out.stb;
+ --TRIG1(19) <= wb_in.ack;
+ --TRIG1(20) <= irq_rx;
+
+ --TRIG2(31 downto 0) <= wb_out.adr;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd
new file mode 100644
index 000000000..1cbbe9dfe
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_mini_nic/xwr_mini_nic.vhd
@@ -0,0 +1,186 @@
+-------------------------------------------------------------------------------
+-- Title : Mini Embedded DMA Network Interface Controller
+-- Project : WhiteRabbit Core
+-------------------------------------------------------------------------------
+-- File : xwrsw_mini_nic.vhd
+-- Author : Grzegorz Daniluk, Tomasz Wlostowski
+-- Company : CERN BE-Co-HT
+-- Created : 2010-07-26
+-- Last update: 2017-02-03
+-- Platform : FPGA-generic
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010-2016 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+use work.wr_fabric_pkg.all;
+use work.wishbone_pkg.all;
+
+entity xwr_mini_nic is
+
+ generic (
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_tx_fifo_size : integer := 1024;
+ g_rx_fifo_size : integer := 2048;
+ g_buffer_little_endian : boolean := false);
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+-------------------------------------------------------------------------------
+-- Pipelined Wishbone interface
+-------------------------------------------------------------------------------
+
+ -- WBP Master (TX)
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+
+ -- WBP Slave (RX)
+ snk_o : out t_wrf_sink_out;
+ snk_i : in t_wrf_sink_in;
+
+-------------------------------------------------------------------------------
+-- TXTSU i/f
+-------------------------------------------------------------------------------
+
+ txtsu_port_id_i : in std_logic_vector(4 downto 0);
+ txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0);
+ txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_tsincorrect_i : in std_logic;
+ txtsu_stb_i : in std_logic;
+ txtsu_ack_o : out std_logic;
+
+-------------------------------------------------------------------------------
+-- Wishbone slave
+-------------------------------------------------------------------------------
+
+ wb_i : in t_wishbone_slave_in;
+ wb_o : out t_wishbone_slave_out
+ );
+end xwr_mini_nic;
+
+architecture wrapper of xwr_mini_nic is
+
+ component wr_mini_nic
+ generic (
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_tx_fifo_size : integer;
+ g_rx_fifo_size : integer;
+ g_buffer_little_endian : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_dat_o : out std_logic_vector(15 downto 0);
+ src_adr_o : out std_logic_vector(1 downto 0);
+ src_sel_o : out std_logic_vector(1 downto 0);
+ src_cyc_o : out std_logic;
+ src_stb_o : out std_logic;
+ src_we_o : out std_logic;
+ src_stall_i : in std_logic;
+ src_err_i : in std_logic;
+ src_ack_i : in std_logic;
+ snk_dat_i : in std_logic_vector(15 downto 0);
+ snk_adr_i : in std_logic_vector(1 downto 0);
+ snk_sel_i : in std_logic_vector(1 downto 0);
+ snk_cyc_i : in std_logic;
+ snk_stb_i : in std_logic;
+ snk_we_i : in std_logic;
+ snk_stall_o : out std_logic;
+ snk_err_o : out std_logic;
+ snk_ack_o : out std_logic;
+ txtsu_port_id_i : in std_logic_vector(4 downto 0);
+ txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0);
+ txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_tsincorrect_i : in std_logic;
+ txtsu_stb_i : in std_logic;
+ txtsu_ack_o : out std_logic;
+ wb_cyc_i : in std_logic;
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic);
+ end component;
+
+begin -- wrapper
+
+ U_Wrapped_Minic : wr_mini_nic
+ generic map (
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_tx_fifo_size => g_tx_fifo_size,
+ g_rx_fifo_size => g_rx_fifo_size,
+ g_buffer_little_endian => g_buffer_little_endian)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ src_dat_o => src_o.dat,
+ src_adr_o => src_o.adr,
+ src_sel_o => src_o.sel,
+ src_cyc_o => src_o.cyc,
+ src_stb_o => src_o.stb,
+ src_we_o => src_o.we,
+ src_stall_i => src_i.stall,
+ src_err_i => src_i.err,
+ src_ack_i => src_i.ack,
+ snk_dat_i => snk_i.dat,
+ snk_adr_i => snk_i.adr,
+ snk_sel_i => snk_i.sel,
+ snk_cyc_i => snk_i.cyc,
+ snk_stb_i => snk_i.stb,
+ snk_we_i => snk_i.we,
+ snk_stall_o => snk_o.stall,
+ snk_err_o => snk_o.err,
+ snk_ack_o => snk_o.ack,
+ txtsu_port_id_i => txtsu_port_id_i,
+ txtsu_frame_id_i => txtsu_frame_id_i,
+ txtsu_tsval_i => txtsu_tsval_i,
+ txtsu_tsincorrect_i => txtsu_tsincorrect_i,
+ txtsu_stb_i => txtsu_stb_i,
+ txtsu_ack_o => txtsu_ack_o,
+ wb_cyc_i => wb_i.cyc,
+ wb_stb_i => wb_i.stb,
+ wb_we_i => wb_i.we,
+ wb_sel_i => wb_i.sel,
+ wb_adr_i => wb_i.adr,
+ wb_dat_i => wb_i.dat,
+ wb_dat_o => wb_o.dat,
+ wb_ack_o => wb_o.ack,
+ wb_stall_o => wb_o.stall,
+ wb_int_o => wb_o.int);
+
+
+ wb_o.err <= '0';
+ wb_o.rty <= '0';
+
+ snk_o.rty <= '0';
+
+end wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd
new file mode 100644
index 000000000..d9866aeab
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/pps_gen_wb.vhd
@@ -0,0 +1,820 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Switch PPS generator and RTC
+---------------------------------------------------------------------------------------
+-- File : pps_gen_wb.vhd
+-- Author : auto-generated by wbgen2 from pps_gen_wb.wb
+-- Created : Wed Aug 16 22:41:09 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE pps_gen_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity pps_gen_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ refclk_i : in std_logic;
+-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Reset counter' in reg: 'Control Register'
+ ppsg_cr_cnt_rst_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) BIT field: 'Enable counter' in reg: 'Control Register'
+ ppsg_cr_cnt_en_o : out std_logic;
+-- Ports for asynchronous (clock: refclk_i) RW/RW BIT field: 'Adjust offset' in reg: 'Control Register'
+ ppsg_cr_cnt_adj_o : out std_logic;
+ ppsg_cr_cnt_adj_i : in std_logic;
+ ppsg_cr_cnt_adj_load_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set time' in reg: 'Control Register'
+ ppsg_cr_cnt_set_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'PPS Pulse width' in reg: 'Control Register'
+ ppsg_cr_pwidth_o : out std_logic_vector(27 downto 0);
+-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'Nanosecond counter' in reg: 'Nanosecond counter register'
+ ppsg_cntr_nsec_i : in std_logic_vector(27 downto 0);
+-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'UTC Counter' in reg: 'UTC Counter register (least-significant part)'
+ ppsg_cntr_utclo_i : in std_logic_vector(31 downto 0);
+-- Port for asynchronous (clock: refclk_i) std_logic_vector field: 'UTC Counter' in reg: 'UTC Counter register (most-significant part)'
+ ppsg_cntr_utchi_i : in std_logic_vector(7 downto 0);
+-- Ports for PASS_THROUGH field: 'Nanosecond adjustment' in reg: 'Nanosecond adjustment register'
+ ppsg_adj_nsec_o : out std_logic_vector(27 downto 0);
+ ppsg_adj_nsec_wr_o : out std_logic;
+-- Ports for PASS_THROUGH field: 'UTC Counter adjustment' in reg: 'UTC Adjustment register (least-significant part)'
+ ppsg_adj_utclo_o : out std_logic_vector(31 downto 0);
+ ppsg_adj_utclo_wr_o : out std_logic;
+-- Ports for PASS_THROUGH field: 'UTC Counter adjustment' in reg: 'UTC Adjustment register (most-significant part)'
+ ppsg_adj_utchi_o : out std_logic_vector(7 downto 0);
+ ppsg_adj_utchi_wr_o : out std_logic;
+-- Ports for asynchronous (clock: refclk_i) RW/RW BIT field: 'Sync to external PPS input' in reg: 'External sync control register'
+ ppsg_escr_sync_o : out std_logic;
+ ppsg_escr_sync_i : in std_logic;
+ ppsg_escr_sync_load_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) BIT field: 'PPS unmask output' in reg: 'External sync control register'
+ ppsg_escr_pps_unmask_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) BIT field: 'PPS output valid' in reg: 'External sync control register'
+ ppsg_escr_pps_valid_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) BIT field: 'Timecode output(UTC+cycles) valid' in reg: 'External sync control register'
+ ppsg_escr_tm_valid_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set seconds counter' in reg: 'External sync control register'
+ ppsg_escr_sec_set_o : out std_logic;
+-- Port for asynchronous (clock: refclk_i) MONOSTABLE field: 'Set nanoseconds counter' in reg: 'External sync control register'
+ ppsg_escr_nsec_set_o : out std_logic
+ );
+end pps_gen_wb;
+
+architecture syn of pps_gen_wb is
+
+signal ppsg_cr_cnt_rst_int : std_logic ;
+signal ppsg_cr_cnt_rst_int_delay : std_logic ;
+signal ppsg_cr_cnt_rst_sync0 : std_logic ;
+signal ppsg_cr_cnt_rst_sync1 : std_logic ;
+signal ppsg_cr_cnt_rst_sync2 : std_logic ;
+signal ppsg_cr_cnt_en_int : std_logic ;
+signal ppsg_cr_cnt_en_sync0 : std_logic ;
+signal ppsg_cr_cnt_en_sync1 : std_logic ;
+signal ppsg_cr_cnt_adj_int_read : std_logic ;
+signal ppsg_cr_cnt_adj_int_write : std_logic ;
+signal ppsg_cr_cnt_adj_lw : std_logic ;
+signal ppsg_cr_cnt_adj_lw_delay : std_logic ;
+signal ppsg_cr_cnt_adj_lw_read_in_progress : std_logic ;
+signal ppsg_cr_cnt_adj_lw_s0 : std_logic ;
+signal ppsg_cr_cnt_adj_lw_s1 : std_logic ;
+signal ppsg_cr_cnt_adj_lw_s2 : std_logic ;
+signal ppsg_cr_cnt_adj_rwsel : std_logic ;
+signal ppsg_cr_cnt_set_int : std_logic ;
+signal ppsg_cr_cnt_set_int_delay : std_logic ;
+signal ppsg_cr_cnt_set_sync0 : std_logic ;
+signal ppsg_cr_cnt_set_sync1 : std_logic ;
+signal ppsg_cr_cnt_set_sync2 : std_logic ;
+signal ppsg_cr_pwidth_int : std_logic_vector(27 downto 0);
+signal ppsg_cr_pwidth_swb : std_logic ;
+signal ppsg_cr_pwidth_swb_delay : std_logic ;
+signal ppsg_cr_pwidth_swb_s0 : std_logic ;
+signal ppsg_cr_pwidth_swb_s1 : std_logic ;
+signal ppsg_cr_pwidth_swb_s2 : std_logic ;
+signal ppsg_cntr_nsec_int : std_logic_vector(27 downto 0);
+signal ppsg_cntr_nsec_lwb : std_logic ;
+signal ppsg_cntr_nsec_lwb_delay : std_logic ;
+signal ppsg_cntr_nsec_lwb_in_progress : std_logic ;
+signal ppsg_cntr_nsec_lwb_s0 : std_logic ;
+signal ppsg_cntr_nsec_lwb_s1 : std_logic ;
+signal ppsg_cntr_nsec_lwb_s2 : std_logic ;
+signal ppsg_cntr_utclo_int : std_logic_vector(31 downto 0);
+signal ppsg_cntr_utclo_lwb : std_logic ;
+signal ppsg_cntr_utclo_lwb_delay : std_logic ;
+signal ppsg_cntr_utclo_lwb_in_progress : std_logic ;
+signal ppsg_cntr_utclo_lwb_s0 : std_logic ;
+signal ppsg_cntr_utclo_lwb_s1 : std_logic ;
+signal ppsg_cntr_utclo_lwb_s2 : std_logic ;
+signal ppsg_cntr_utchi_int : std_logic_vector(7 downto 0);
+signal ppsg_cntr_utchi_lwb : std_logic ;
+signal ppsg_cntr_utchi_lwb_delay : std_logic ;
+signal ppsg_cntr_utchi_lwb_in_progress : std_logic ;
+signal ppsg_cntr_utchi_lwb_s0 : std_logic ;
+signal ppsg_cntr_utchi_lwb_s1 : std_logic ;
+signal ppsg_cntr_utchi_lwb_s2 : std_logic ;
+signal ppsg_escr_sync_int_read : std_logic ;
+signal ppsg_escr_sync_int_write : std_logic ;
+signal ppsg_escr_sync_lw : std_logic ;
+signal ppsg_escr_sync_lw_delay : std_logic ;
+signal ppsg_escr_sync_lw_read_in_progress : std_logic ;
+signal ppsg_escr_sync_lw_s0 : std_logic ;
+signal ppsg_escr_sync_lw_s1 : std_logic ;
+signal ppsg_escr_sync_lw_s2 : std_logic ;
+signal ppsg_escr_sync_rwsel : std_logic ;
+signal ppsg_escr_pps_unmask_int : std_logic ;
+signal ppsg_escr_pps_unmask_sync0 : std_logic ;
+signal ppsg_escr_pps_unmask_sync1 : std_logic ;
+signal ppsg_escr_pps_valid_int : std_logic ;
+signal ppsg_escr_pps_valid_sync0 : std_logic ;
+signal ppsg_escr_pps_valid_sync1 : std_logic ;
+signal ppsg_escr_tm_valid_int : std_logic ;
+signal ppsg_escr_tm_valid_sync0 : std_logic ;
+signal ppsg_escr_tm_valid_sync1 : std_logic ;
+signal ppsg_escr_sec_set_int : std_logic ;
+signal ppsg_escr_sec_set_int_delay : std_logic ;
+signal ppsg_escr_sec_set_sync0 : std_logic ;
+signal ppsg_escr_sec_set_sync1 : std_logic ;
+signal ppsg_escr_sec_set_sync2 : std_logic ;
+signal ppsg_escr_nsec_set_int : std_logic ;
+signal ppsg_escr_nsec_set_int_delay : std_logic ;
+signal ppsg_escr_nsec_set_sync0 : std_logic ;
+signal ppsg_escr_nsec_set_sync1 : std_logic ;
+signal ppsg_escr_nsec_set_sync2 : std_logic ;
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(2 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ ppsg_cr_cnt_rst_int <= '0';
+ ppsg_cr_cnt_rst_int_delay <= '0';
+ ppsg_cr_cnt_en_int <= '0';
+ ppsg_cr_cnt_adj_lw <= '0';
+ ppsg_cr_cnt_adj_lw_delay <= '0';
+ ppsg_cr_cnt_adj_lw_read_in_progress <= '0';
+ ppsg_cr_cnt_adj_rwsel <= '0';
+ ppsg_cr_cnt_adj_int_write <= '0';
+ ppsg_cr_cnt_set_int <= '0';
+ ppsg_cr_cnt_set_int_delay <= '0';
+ ppsg_cr_pwidth_int <= "0000000000000000000000000000";
+ ppsg_cr_pwidth_swb <= '0';
+ ppsg_cr_pwidth_swb_delay <= '0';
+ ppsg_cntr_nsec_lwb <= '0';
+ ppsg_cntr_nsec_lwb_delay <= '0';
+ ppsg_cntr_nsec_lwb_in_progress <= '0';
+ ppsg_cntr_utclo_lwb <= '0';
+ ppsg_cntr_utclo_lwb_delay <= '0';
+ ppsg_cntr_utclo_lwb_in_progress <= '0';
+ ppsg_cntr_utchi_lwb <= '0';
+ ppsg_cntr_utchi_lwb_delay <= '0';
+ ppsg_cntr_utchi_lwb_in_progress <= '0';
+ ppsg_adj_nsec_wr_o <= '0';
+ ppsg_adj_utclo_wr_o <= '0';
+ ppsg_adj_utchi_wr_o <= '0';
+ ppsg_escr_sync_lw <= '0';
+ ppsg_escr_sync_lw_delay <= '0';
+ ppsg_escr_sync_lw_read_in_progress <= '0';
+ ppsg_escr_sync_rwsel <= '0';
+ ppsg_escr_sync_int_write <= '0';
+ ppsg_escr_pps_unmask_int <= '0';
+ ppsg_escr_pps_valid_int <= '0';
+ ppsg_escr_tm_valid_int <= '0';
+ ppsg_escr_sec_set_int <= '0';
+ ppsg_escr_sec_set_int_delay <= '0';
+ ppsg_escr_nsec_set_int <= '0';
+ ppsg_escr_nsec_set_int_delay <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ ppsg_adj_nsec_wr_o <= '0';
+ ppsg_adj_utclo_wr_o <= '0';
+ ppsg_adj_utchi_wr_o <= '0';
+ ack_in_progress <= '0';
+ else
+ ppsg_cr_cnt_rst_int <= ppsg_cr_cnt_rst_int_delay;
+ ppsg_cr_cnt_rst_int_delay <= '0';
+ ppsg_cr_cnt_adj_lw <= ppsg_cr_cnt_adj_lw_delay;
+ ppsg_cr_cnt_adj_lw_delay <= '0';
+ if ((ack_sreg(1) = '1') and (ppsg_cr_cnt_adj_lw_read_in_progress = '1')) then
+ rddata_reg(2) <= ppsg_cr_cnt_adj_int_read;
+ ppsg_cr_cnt_adj_lw_read_in_progress <= '0';
+ end if;
+ ppsg_cr_cnt_set_int <= ppsg_cr_cnt_set_int_delay;
+ ppsg_cr_cnt_set_int_delay <= '0';
+ ppsg_cr_pwidth_swb <= ppsg_cr_pwidth_swb_delay;
+ ppsg_cr_pwidth_swb_delay <= '0';
+ ppsg_cntr_nsec_lwb <= ppsg_cntr_nsec_lwb_delay;
+ ppsg_cntr_nsec_lwb_delay <= '0';
+ if ((ack_sreg(1) = '1') and (ppsg_cntr_nsec_lwb_in_progress = '1')) then
+ rddata_reg(27 downto 0) <= ppsg_cntr_nsec_int;
+ ppsg_cntr_nsec_lwb_in_progress <= '0';
+ end if;
+ ppsg_cntr_utclo_lwb <= ppsg_cntr_utclo_lwb_delay;
+ ppsg_cntr_utclo_lwb_delay <= '0';
+ if ((ack_sreg(1) = '1') and (ppsg_cntr_utclo_lwb_in_progress = '1')) then
+ rddata_reg(31 downto 0) <= ppsg_cntr_utclo_int;
+ ppsg_cntr_utclo_lwb_in_progress <= '0';
+ end if;
+ ppsg_cntr_utchi_lwb <= ppsg_cntr_utchi_lwb_delay;
+ ppsg_cntr_utchi_lwb_delay <= '0';
+ if ((ack_sreg(1) = '1') and (ppsg_cntr_utchi_lwb_in_progress = '1')) then
+ rddata_reg(7 downto 0) <= ppsg_cntr_utchi_int;
+ ppsg_cntr_utchi_lwb_in_progress <= '0';
+ end if;
+ ppsg_adj_nsec_wr_o <= '0';
+ ppsg_adj_utclo_wr_o <= '0';
+ ppsg_adj_utchi_wr_o <= '0';
+ ppsg_escr_sync_lw <= ppsg_escr_sync_lw_delay;
+ ppsg_escr_sync_lw_delay <= '0';
+ if ((ack_sreg(1) = '1') and (ppsg_escr_sync_lw_read_in_progress = '1')) then
+ rddata_reg(0) <= ppsg_escr_sync_int_read;
+ ppsg_escr_sync_lw_read_in_progress <= '0';
+ end if;
+ ppsg_escr_sec_set_int <= ppsg_escr_sec_set_int_delay;
+ ppsg_escr_sec_set_int_delay <= '0';
+ ppsg_escr_nsec_set_int <= ppsg_escr_nsec_set_int_delay;
+ ppsg_escr_nsec_set_int_delay <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(2 downto 0) is
+ when "000" =>
+ if (wb_we_i = '1') then
+ ppsg_cr_cnt_rst_int <= wrdata_reg(0);
+ ppsg_cr_cnt_rst_int_delay <= wrdata_reg(0);
+ ppsg_cr_cnt_en_int <= wrdata_reg(1);
+ ppsg_cr_cnt_adj_int_write <= wrdata_reg(2);
+ ppsg_cr_cnt_adj_lw <= '1';
+ ppsg_cr_cnt_adj_lw_delay <= '1';
+ ppsg_cr_cnt_adj_lw_read_in_progress <= '0';
+ ppsg_cr_cnt_adj_rwsel <= '1';
+ ppsg_cr_cnt_set_int <= wrdata_reg(3);
+ ppsg_cr_cnt_set_int_delay <= wrdata_reg(3);
+ ppsg_cr_pwidth_int <= wrdata_reg(31 downto 4);
+ ppsg_cr_pwidth_swb <= '1';
+ ppsg_cr_pwidth_swb_delay <= '1';
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= ppsg_cr_cnt_en_int;
+ if (wb_we_i = '0') then
+ rddata_reg(2) <= 'X';
+ ppsg_cr_cnt_adj_lw <= '1';
+ ppsg_cr_cnt_adj_lw_delay <= '1';
+ ppsg_cr_cnt_adj_lw_read_in_progress <= '1';
+ ppsg_cr_cnt_adj_rwsel <= '0';
+ end if;
+ rddata_reg(3) <= '0';
+ rddata_reg(31 downto 4) <= ppsg_cr_pwidth_int;
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when "001" =>
+ if (wb_we_i = '1') then
+ end if;
+ if (wb_we_i = '0') then
+ ppsg_cntr_nsec_lwb <= '1';
+ ppsg_cntr_nsec_lwb_delay <= '1';
+ ppsg_cntr_nsec_lwb_in_progress <= '1';
+ end if;
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when "010" =>
+ if (wb_we_i = '1') then
+ end if;
+ if (wb_we_i = '0') then
+ ppsg_cntr_utclo_lwb <= '1';
+ ppsg_cntr_utclo_lwb_delay <= '1';
+ ppsg_cntr_utclo_lwb_in_progress <= '1';
+ end if;
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when "011" =>
+ if (wb_we_i = '1') then
+ end if;
+ if (wb_we_i = '0') then
+ ppsg_cntr_utchi_lwb <= '1';
+ ppsg_cntr_utchi_lwb_delay <= '1';
+ ppsg_cntr_utchi_lwb_in_progress <= '1';
+ end if;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when "100" =>
+ if (wb_we_i = '1') then
+ ppsg_adj_nsec_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "101" =>
+ if (wb_we_i = '1') then
+ ppsg_adj_utclo_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "110" =>
+ if (wb_we_i = '1') then
+ ppsg_adj_utchi_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "111" =>
+ if (wb_we_i = '1') then
+ ppsg_escr_sync_int_write <= wrdata_reg(0);
+ ppsg_escr_sync_lw <= '1';
+ ppsg_escr_sync_lw_delay <= '1';
+ ppsg_escr_sync_lw_read_in_progress <= '0';
+ ppsg_escr_sync_rwsel <= '1';
+ ppsg_escr_pps_unmask_int <= wrdata_reg(1);
+ ppsg_escr_pps_valid_int <= wrdata_reg(2);
+ ppsg_escr_tm_valid_int <= wrdata_reg(3);
+ ppsg_escr_sec_set_int <= wrdata_reg(4);
+ ppsg_escr_sec_set_int_delay <= wrdata_reg(4);
+ ppsg_escr_nsec_set_int <= wrdata_reg(5);
+ ppsg_escr_nsec_set_int_delay <= wrdata_reg(5);
+ end if;
+ if (wb_we_i = '0') then
+ rddata_reg(0) <= 'X';
+ ppsg_escr_sync_lw <= '1';
+ ppsg_escr_sync_lw_delay <= '1';
+ ppsg_escr_sync_lw_read_in_progress <= '1';
+ ppsg_escr_sync_rwsel <= '0';
+ end if;
+ rddata_reg(1) <= ppsg_escr_pps_unmask_int;
+ rddata_reg(2) <= ppsg_escr_pps_valid_int;
+ rddata_reg(3) <= ppsg_escr_tm_valid_int;
+ rddata_reg(4) <= '0';
+ rddata_reg(5) <= '0';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(5) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Reset counter
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cr_cnt_rst_o <= '0';
+ ppsg_cr_cnt_rst_sync0 <= '0';
+ ppsg_cr_cnt_rst_sync1 <= '0';
+ ppsg_cr_cnt_rst_sync2 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_cr_cnt_rst_sync0 <= ppsg_cr_cnt_rst_int;
+ ppsg_cr_cnt_rst_sync1 <= ppsg_cr_cnt_rst_sync0;
+ ppsg_cr_cnt_rst_sync2 <= ppsg_cr_cnt_rst_sync1;
+ ppsg_cr_cnt_rst_o <= ppsg_cr_cnt_rst_sync2 and (not ppsg_cr_cnt_rst_sync1);
+ end if;
+ end process;
+
+
+-- Enable counter
+-- synchronizer chain for field : Enable counter (type RW/RO, clk_sys_i <-> refclk_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cr_cnt_en_o <= '0';
+ ppsg_cr_cnt_en_sync0 <= '0';
+ ppsg_cr_cnt_en_sync1 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_cr_cnt_en_sync0 <= ppsg_cr_cnt_en_int;
+ ppsg_cr_cnt_en_sync1 <= ppsg_cr_cnt_en_sync0;
+ ppsg_cr_cnt_en_o <= ppsg_cr_cnt_en_sync1;
+ end if;
+ end process;
+
+
+-- Adjust offset
+-- asynchronous BIT register : Adjust offset (type RW/WO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cr_cnt_adj_lw_s0 <= '0';
+ ppsg_cr_cnt_adj_lw_s1 <= '0';
+ ppsg_cr_cnt_adj_lw_s2 <= '0';
+ ppsg_cr_cnt_adj_int_read <= '0';
+ ppsg_cr_cnt_adj_load_o <= '0';
+ ppsg_cr_cnt_adj_o <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_cr_cnt_adj_lw_s0 <= ppsg_cr_cnt_adj_lw;
+ ppsg_cr_cnt_adj_lw_s1 <= ppsg_cr_cnt_adj_lw_s0;
+ ppsg_cr_cnt_adj_lw_s2 <= ppsg_cr_cnt_adj_lw_s1;
+ if ((ppsg_cr_cnt_adj_lw_s2 = '0') and (ppsg_cr_cnt_adj_lw_s1 = '1')) then
+ if (ppsg_cr_cnt_adj_rwsel = '1') then
+ ppsg_cr_cnt_adj_o <= ppsg_cr_cnt_adj_int_write;
+ ppsg_cr_cnt_adj_load_o <= '1';
+ else
+ ppsg_cr_cnt_adj_load_o <= '0';
+ ppsg_cr_cnt_adj_int_read <= ppsg_cr_cnt_adj_i;
+ end if;
+ else
+ ppsg_cr_cnt_adj_load_o <= '0';
+ end if;
+ end if;
+ end process;
+
+
+-- Set time
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cr_cnt_set_o <= '0';
+ ppsg_cr_cnt_set_sync0 <= '0';
+ ppsg_cr_cnt_set_sync1 <= '0';
+ ppsg_cr_cnt_set_sync2 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_cr_cnt_set_sync0 <= ppsg_cr_cnt_set_int;
+ ppsg_cr_cnt_set_sync1 <= ppsg_cr_cnt_set_sync0;
+ ppsg_cr_cnt_set_sync2 <= ppsg_cr_cnt_set_sync1;
+ ppsg_cr_cnt_set_o <= ppsg_cr_cnt_set_sync2 and (not ppsg_cr_cnt_set_sync1);
+ end if;
+ end process;
+
+
+-- PPS Pulse width
+-- asynchronous std_logic_vector register : PPS Pulse width (type RW/RO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cr_pwidth_swb_s0 <= '0';
+ ppsg_cr_pwidth_swb_s1 <= '0';
+ ppsg_cr_pwidth_swb_s2 <= '0';
+ ppsg_cr_pwidth_o <= "0000000000000000000000000000";
+ elsif rising_edge(refclk_i) then
+ ppsg_cr_pwidth_swb_s0 <= ppsg_cr_pwidth_swb;
+ ppsg_cr_pwidth_swb_s1 <= ppsg_cr_pwidth_swb_s0;
+ ppsg_cr_pwidth_swb_s2 <= ppsg_cr_pwidth_swb_s1;
+ if ((ppsg_cr_pwidth_swb_s2 = '0') and (ppsg_cr_pwidth_swb_s1 = '1')) then
+ ppsg_cr_pwidth_o <= ppsg_cr_pwidth_int;
+ end if;
+ end if;
+ end process;
+
+
+-- Nanosecond counter
+-- asynchronous std_logic_vector register : Nanosecond counter (type RO/WO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cntr_nsec_lwb_s0 <= '0';
+ ppsg_cntr_nsec_lwb_s1 <= '0';
+ ppsg_cntr_nsec_lwb_s2 <= '0';
+ ppsg_cntr_nsec_int <= "0000000000000000000000000000";
+ elsif rising_edge(refclk_i) then
+ ppsg_cntr_nsec_lwb_s0 <= ppsg_cntr_nsec_lwb;
+ ppsg_cntr_nsec_lwb_s1 <= ppsg_cntr_nsec_lwb_s0;
+ ppsg_cntr_nsec_lwb_s2 <= ppsg_cntr_nsec_lwb_s1;
+ if ((ppsg_cntr_nsec_lwb_s1 = '1') and (ppsg_cntr_nsec_lwb_s2 = '0')) then
+ ppsg_cntr_nsec_int <= ppsg_cntr_nsec_i;
+ end if;
+ end if;
+ end process;
+
+
+-- UTC Counter
+-- asynchronous std_logic_vector register : UTC Counter (type RO/WO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cntr_utclo_lwb_s0 <= '0';
+ ppsg_cntr_utclo_lwb_s1 <= '0';
+ ppsg_cntr_utclo_lwb_s2 <= '0';
+ ppsg_cntr_utclo_int <= "00000000000000000000000000000000";
+ elsif rising_edge(refclk_i) then
+ ppsg_cntr_utclo_lwb_s0 <= ppsg_cntr_utclo_lwb;
+ ppsg_cntr_utclo_lwb_s1 <= ppsg_cntr_utclo_lwb_s0;
+ ppsg_cntr_utclo_lwb_s2 <= ppsg_cntr_utclo_lwb_s1;
+ if ((ppsg_cntr_utclo_lwb_s1 = '1') and (ppsg_cntr_utclo_lwb_s2 = '0')) then
+ ppsg_cntr_utclo_int <= ppsg_cntr_utclo_i;
+ end if;
+ end if;
+ end process;
+
+
+-- UTC Counter
+-- asynchronous std_logic_vector register : UTC Counter (type RO/WO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_cntr_utchi_lwb_s0 <= '0';
+ ppsg_cntr_utchi_lwb_s1 <= '0';
+ ppsg_cntr_utchi_lwb_s2 <= '0';
+ ppsg_cntr_utchi_int <= "00000000";
+ elsif rising_edge(refclk_i) then
+ ppsg_cntr_utchi_lwb_s0 <= ppsg_cntr_utchi_lwb;
+ ppsg_cntr_utchi_lwb_s1 <= ppsg_cntr_utchi_lwb_s0;
+ ppsg_cntr_utchi_lwb_s2 <= ppsg_cntr_utchi_lwb_s1;
+ if ((ppsg_cntr_utchi_lwb_s1 = '1') and (ppsg_cntr_utchi_lwb_s2 = '0')) then
+ ppsg_cntr_utchi_int <= ppsg_cntr_utchi_i;
+ end if;
+ end if;
+ end process;
+
+
+-- Nanosecond adjustment
+-- pass-through field: Nanosecond adjustment in register: Nanosecond adjustment register
+ ppsg_adj_nsec_o <= wrdata_reg(27 downto 0);
+-- UTC Counter adjustment
+-- pass-through field: UTC Counter adjustment in register: UTC Adjustment register (least-significant part)
+ ppsg_adj_utclo_o <= wrdata_reg(31 downto 0);
+-- UTC Counter adjustment
+-- pass-through field: UTC Counter adjustment in register: UTC Adjustment register (most-significant part)
+ ppsg_adj_utchi_o <= wrdata_reg(7 downto 0);
+-- Sync to external PPS input
+-- asynchronous BIT register : Sync to external PPS input (type RW/WO, refclk_i <-> clk_sys_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_sync_lw_s0 <= '0';
+ ppsg_escr_sync_lw_s1 <= '0';
+ ppsg_escr_sync_lw_s2 <= '0';
+ ppsg_escr_sync_int_read <= '0';
+ ppsg_escr_sync_load_o <= '0';
+ ppsg_escr_sync_o <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_sync_lw_s0 <= ppsg_escr_sync_lw;
+ ppsg_escr_sync_lw_s1 <= ppsg_escr_sync_lw_s0;
+ ppsg_escr_sync_lw_s2 <= ppsg_escr_sync_lw_s1;
+ if ((ppsg_escr_sync_lw_s2 = '0') and (ppsg_escr_sync_lw_s1 = '1')) then
+ if (ppsg_escr_sync_rwsel = '1') then
+ ppsg_escr_sync_o <= ppsg_escr_sync_int_write;
+ ppsg_escr_sync_load_o <= '1';
+ else
+ ppsg_escr_sync_load_o <= '0';
+ ppsg_escr_sync_int_read <= ppsg_escr_sync_i;
+ end if;
+ else
+ ppsg_escr_sync_load_o <= '0';
+ end if;
+ end if;
+ end process;
+
+
+-- PPS unmask output
+-- synchronizer chain for field : PPS unmask output (type RW/RO, clk_sys_i <-> refclk_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_pps_unmask_o <= '0';
+ ppsg_escr_pps_unmask_sync0 <= '0';
+ ppsg_escr_pps_unmask_sync1 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_pps_unmask_sync0 <= ppsg_escr_pps_unmask_int;
+ ppsg_escr_pps_unmask_sync1 <= ppsg_escr_pps_unmask_sync0;
+ ppsg_escr_pps_unmask_o <= ppsg_escr_pps_unmask_sync1;
+ end if;
+ end process;
+
+
+-- PPS output valid
+-- synchronizer chain for field : PPS output valid (type RW/RO, clk_sys_i <-> refclk_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_pps_valid_o <= '0';
+ ppsg_escr_pps_valid_sync0 <= '0';
+ ppsg_escr_pps_valid_sync1 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_pps_valid_sync0 <= ppsg_escr_pps_valid_int;
+ ppsg_escr_pps_valid_sync1 <= ppsg_escr_pps_valid_sync0;
+ ppsg_escr_pps_valid_o <= ppsg_escr_pps_valid_sync1;
+ end if;
+ end process;
+
+
+-- Timecode output(UTC+cycles) valid
+-- synchronizer chain for field : Timecode output(UTC+cycles) valid (type RW/RO, clk_sys_i <-> refclk_i)
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_tm_valid_o <= '0';
+ ppsg_escr_tm_valid_sync0 <= '0';
+ ppsg_escr_tm_valid_sync1 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_tm_valid_sync0 <= ppsg_escr_tm_valid_int;
+ ppsg_escr_tm_valid_sync1 <= ppsg_escr_tm_valid_sync0;
+ ppsg_escr_tm_valid_o <= ppsg_escr_tm_valid_sync1;
+ end if;
+ end process;
+
+
+-- Set seconds counter
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_sec_set_o <= '0';
+ ppsg_escr_sec_set_sync0 <= '0';
+ ppsg_escr_sec_set_sync1 <= '0';
+ ppsg_escr_sec_set_sync2 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_sec_set_sync0 <= ppsg_escr_sec_set_int;
+ ppsg_escr_sec_set_sync1 <= ppsg_escr_sec_set_sync0;
+ ppsg_escr_sec_set_sync2 <= ppsg_escr_sec_set_sync1;
+ ppsg_escr_sec_set_o <= ppsg_escr_sec_set_sync2 and (not ppsg_escr_sec_set_sync1);
+ end if;
+ end process;
+
+
+-- Set nanoseconds counter
+ process (refclk_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ppsg_escr_nsec_set_o <= '0';
+ ppsg_escr_nsec_set_sync0 <= '0';
+ ppsg_escr_nsec_set_sync1 <= '0';
+ ppsg_escr_nsec_set_sync2 <= '0';
+ elsif rising_edge(refclk_i) then
+ ppsg_escr_nsec_set_sync0 <= ppsg_escr_nsec_set_int;
+ ppsg_escr_nsec_set_sync1 <= ppsg_escr_nsec_set_sync0;
+ ppsg_escr_nsec_set_sync2 <= ppsg_escr_nsec_set_sync1;
+ ppsg_escr_nsec_set_o <= ppsg_escr_nsec_set_sync2 and (not ppsg_escr_nsec_set_sync1);
+ end if;
+ end process;
+
+
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd
new file mode 100644
index 000000000..f79dd0641
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/wr_pps_gen.vhd
@@ -0,0 +1,518 @@
+-------------------------------------------------------------------------------
+-- Title : PPS Generator & UTC Realtime clock
+-- Project : WhiteRabbit Switch
+-------------------------------------------------------------------------------
+-- File : wr_pps_gen.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN (BE-CO-HT)
+-- Created : 2010-09-02
+-- Last update: 2017-02-20
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-09-02 1.0 twlostow Created
+-- 2011-05-09 1.1 twlostow Added external PPS input
+-- 2011-10-26 1.2 greg.d Added wb slave adapter
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+
+entity wr_pps_gen is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_ref_clock_rate : integer := 125000000;
+ g_ext_clock_rate : integer := 10000000;
+ g_with_ext_clock_input : boolean := false
+ );
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ -- Link status indicator (used for fast masking of PPS output when link
+ -- goes down
+ link_ok_i : in std_logic;
+
+ -- External PPS input. Warning! This signal is treated as synchronous to
+ -- the clk_ref_i (or the external 10 MHz reference) to prevent sync chain
+ -- delay uncertainities. Setup/hold times must be respected!
+ pps_in_i : in std_logic;
+
+ -- Single-pulse PPS output for synchronizing endpoints to
+ pps_csync_o : out std_logic;
+ pps_out_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ pps_valid_o : out std_logic;
+
+ tm_utc_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ tm_time_valid_o : out std_logic
+ );
+end wr_pps_gen;
+
+architecture behavioral of wr_pps_gen is
+
+ alias rst_n_i : std_logic is rst_sys_n_i;
+
+ constant c_PERIOD : integer := g_ref_clock_rate;
+
+ component pps_gen_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(2 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ refclk_i : in std_logic;
+ ppsg_cr_cnt_rst_o : out std_logic;
+ ppsg_cr_cnt_en_o : out std_logic;
+ ppsg_cr_cnt_adj_o : out std_logic;
+ ppsg_cr_cnt_adj_i : in std_logic;
+ ppsg_cr_cnt_adj_load_o : out std_logic;
+ ppsg_cr_cnt_set_o : out std_logic;
+ ppsg_cr_pwidth_o : out std_logic_vector(27 downto 0);
+ ppsg_cntr_nsec_i : in std_logic_vector(27 downto 0);
+ ppsg_cntr_utclo_i : in std_logic_vector(31 downto 0);
+ ppsg_cntr_utchi_i : in std_logic_vector(7 downto 0);
+ ppsg_adj_nsec_o : out std_logic_vector(27 downto 0);
+ ppsg_adj_nsec_wr_o : out std_logic;
+ ppsg_adj_utclo_o : out std_logic_vector(31 downto 0);
+ ppsg_adj_utclo_wr_o : out std_logic;
+ ppsg_adj_utchi_o : out std_logic_vector(7 downto 0);
+ ppsg_adj_utchi_wr_o : out std_logic;
+ ppsg_escr_sync_o : out std_logic;
+ ppsg_escr_sync_i : in std_logic;
+ ppsg_escr_sync_load_o : out std_logic;
+ ppsg_escr_pps_valid_o : out std_logic;
+ ppsg_escr_tm_valid_o : out std_logic;
+ ppsg_escr_sec_set_o : out std_logic;
+ ppsg_escr_nsec_set_o : out std_logic;
+ ppsg_escr_pps_unmask_o : out std_logic);
+ end component pps_gen_wb;
+
+-- Wisbone slave signals
+ signal ppsg_cr_cnt_rst : std_logic;
+ signal ppsg_cr_cnt_en : std_logic;
+
+ signal ppsg_cr_cnt_adj_o : std_logic;
+ signal ppsg_cr_cnt_adj_i : std_logic;
+ signal ppsg_cr_cnt_adj_load : std_logic;
+
+ signal ppsg_cr_cnt_set_p : std_logic;
+ signal ppsg_cr_pwidth : std_logic_vector(27 downto 0);
+
+ signal ppsg_cntr_nsec : std_logic_vector(27 downto 0);
+ signal ppsg_cntr_utclo : std_logic_vector(31 downto 0);
+ signal ppsg_cntr_utchi : std_logic_vector(7 downto 0);
+
+ signal ppsg_adj_nsec : std_logic_vector(27 downto 0);
+ signal ppsg_adj_nsec_wr : std_logic;
+ signal ppsg_adj_utclo : std_logic_vector(31 downto 0);
+ signal ppsg_adj_utclo_wr : std_logic;
+ signal ppsg_adj_utchi : std_logic_vector(7 downto 0);
+ signal ppsg_adj_utchi_wr : std_logic;
+ signal ppsg_escr_sync_load : std_logic;
+ signal ppsg_escr_sync_in : std_logic;
+ signal ppsg_escr_sync_out : std_logic;
+ signal ppsg_escr_sec_set : std_logic;
+ signal ppsg_escr_nsec_set : std_logic;
+
+ signal ppsg_escr_pps_valid : std_logic;
+ signal ppsg_escr_tm_valid : std_logic;
+ signal ppsg_escr_pps_unmask : std_logic;
+
+ signal cntr_nsec : unsigned (27 downto 0);
+ signal cntr_utc : unsigned (39 downto 0);
+ signal cntr_pps_ext : unsigned (24 downto 0);
+
+ signal ns_overflow : std_logic;
+ signal ns_overflow_adv : std_logic;
+ signal cntr_adjust_p : std_logic;
+
+ signal adj_nsec : unsigned(27 downto 0);
+ signal adj_utc : unsigned(39 downto 0);
+
+ signal adjust_in_progress_nsec : std_logic;
+
+ signal adjust_in_progress_utc : std_logic;
+
+ signal width_cntr : unsigned(27 downto 0);
+
+ signal sync_in_progress : std_logic;
+ signal ext_sync_p : std_logic;
+
+ signal resized_addr : std_logic_vector(c_wishbone_address_width-1 downto 0);
+ signal wb_out : t_wishbone_slave_out;
+ signal wb_in : t_wishbone_slave_in;
+
+ signal ns_overflow_2nd : std_logic;
+ signal pps_in_d0, pps_ext_d0 : std_logic;
+
+ signal retime_counter : unsigned(4 downto 0);
+ signal pps_valid_int : std_logic;
+
+ signal pps_out_int : std_logic;
+ signal pps_in_refclk : std_logic;
+
+
+
+begin -- behavioral
+
+
+ resized_addr(4 downto 0) <= wb_adr_i;
+ resized_addr(c_wishbone_address_width-1 downto 5) <= (others => '0');
+
+ U_Adapter : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ master_i => wb_out,
+ master_o => wb_in,
+ sl_adr_i => resized_addr,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_stall_o => wb_stall_o);
+
+
+ U_Sync_pps_refclk : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => '1',
+ data_i => pps_in_i,
+ ppulse_o => pps_in_refclk);
+
+
+ ppsg_cntr_nsec <= std_logic_vector(cntr_nsec);
+ ppsg_cntr_utclo <= std_logic_vector(cntr_utc(31 downto 0));
+ ppsg_cntr_utchi <= std_logic_vector(cntr_utc(39 downto 32));
+
+
+ -- loads adjustment values into internal regsiters
+ p_wishbone_loads : process(clk_sys_i, rst_n_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ adj_nsec <= (others => '0');
+ adj_utc <= (others => '0');
+ else
+ if(ppsg_adj_utchi_wr = '1') then
+ adj_utc(39 downto 32) <= unsigned(ppsg_adj_utchi);
+ end if;
+
+ if(ppsg_adj_utclo_wr = '1') then
+ adj_utc(31 downto 0) <= unsigned(ppsg_adj_utclo);
+ end if;
+
+ if(ppsg_adj_nsec_wr = '1') then
+ adj_nsec <= unsigned(ppsg_adj_nsec);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ gen_without_external_clock_input : if(not g_with_ext_clock_input) generate
+ ext_sync_p <= '0';
+ sync_in_progress <= '0';
+ ppsg_escr_sync_in <= '0';
+ end generate gen_without_external_clock_input;
+
+ gen_with_external_clock_input : if(g_with_ext_clock_input) generate
+
+ p_external_sync : process(clk_ref_i)
+ begin
+ if falling_edge(clk_ref_i) then
+ if(rst_ref_n_i = '0') then
+ sync_in_progress <= '0';
+ ppsg_escr_sync_in <= '0';
+ else
+ if(ppsg_escr_sync_load = '1') then
+ sync_in_progress <= ppsg_escr_sync_out;
+ ppsg_escr_sync_in <= '0';
+ else
+ if(sync_in_progress = '1' and pps_in_refclk = '1')
+ then
+ ext_sync_p <= '1';
+ sync_in_progress <= '0';
+ ppsg_escr_sync_in <= '1';
+ else
+ ext_sync_p <= '0';
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ end generate gen_with_external_clock_input;
+-- Nanosecond counter. Counts from 0 to c_PERIOD-1 every clk_ref_i cycle.
+
+ p_count_nsec : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then
+ cntr_nsec <= (others => '0');
+ ns_overflow <= '0';
+ ns_overflow_adv <= '0';
+ adjust_in_progress_nsec <= '0';
+
+ -- counter is enabled?
+ elsif(ppsg_cr_cnt_en = '1') then
+
+ -- got ADJUST OFFSET command
+ if(cntr_adjust_p = '1') then
+
+-- start waiting for next counter overflow
+ adjust_in_progress_nsec <= '1';
+ end if;
+
+-- got SET TIME command - load the counter with new value
+ if(ppsg_cr_cnt_set_p = '1' or ext_sync_p = '1' or ppsg_escr_nsec_set = '1') then
+ cntr_nsec <= adj_nsec;
+ ns_overflow <= '0';
+ ns_overflow_adv <= '0';
+
+-- got counter overflow:
+ elsif(cntr_nsec = to_unsigned(c_PERIOD-3, cntr_nsec'length)) then
+ ns_overflow <= '0';
+ ns_overflow_adv <= '1';
+ cntr_nsec <= cntr_nsec + 1;
+ elsif(cntr_nsec = to_unsigned(c_PERIOD-2, cntr_nsec'length)) then
+ ns_overflow <= '1';
+ ns_overflow_adv <= '0';
+ cntr_nsec <= cntr_nsec + 1;
+ elsif(cntr_nsec = to_unsigned(c_PERIOD-1, cntr_nsec'length)) then
+ ns_overflow <= '0';
+ ns_overflow_adv <= '0';
+ -- we're in the middle of offset adjustment - load the counter with
+ -- offset value instead of resetting it. This equals to subtracting the offset
+ -- but takes less logic.
+ if(adjust_in_progress_nsec = '1') then
+ cntr_nsec <= adj_nsec;
+ adjust_in_progress_nsec <= '0';
+ else
+ -- normal counter reset. Generate overflow pulse.
+ cntr_nsec <= (others => '0');
+ end if;
+ else
+ ns_overflow <= '0';
+ ns_overflow_adv <= '0';
+ cntr_nsec <= cntr_nsec + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ p_drive_pps_valid : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then
+ pps_valid_int <= '0';
+ ns_overflow_2nd <= '0';
+ else
+ if(sync_in_progress = '1' or adjust_in_progress_nsec = '1' or adjust_in_progress_utc = '1') then
+ pps_valid_int <= '0';
+ ns_overflow_2nd <= '0';
+ elsif(adjust_in_progress_utc = '0' and adjust_in_progress_nsec = '0' and sync_in_progress = '0') then
+
+ if(ns_overflow = '1') then
+ ns_overflow_2nd <= '1';
+ if(ns_overflow_2nd = '1') then
+ pps_valid_int <= '1';
+ end if;
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_count_utc : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if rst_ref_n_i = '0' or ppsg_cr_cnt_rst = '1' then
+ cntr_utc <= (others => '0');
+ adjust_in_progress_utc <= '0';
+ elsif(ppsg_cr_cnt_en = '1') then
+
+ if(ppsg_cr_cnt_set_p = '1' or ppsg_escr_sec_set = '1') then
+ cntr_utc <= adj_utc;
+ elsif(cntr_adjust_p = '1') then
+ adjust_in_progress_utc <= '1';
+
+ if(ns_overflow = '1') then
+ cntr_utc <= cntr_utc +1;
+ end if;
+
+ elsif(adjust_in_progress_utc = '1' and ns_overflow = '1') then
+ cntr_utc <= cntr_utc + adj_utc + 1;
+ adjust_in_progress_utc <= '0';
+ elsif(ns_overflow = '1') then
+ cntr_utc <= cntr_utc + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+-- generate single-cycle PPS pulses for synchronizing endpoint TS counters
+ pps_csync_o <= ns_overflow;
+
+ -- generates variable-width PPS pulses for PPS external output
+ p_gen_pps_out : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if rst_ref_n_i = '0' then
+ pps_out_int <= '0';
+ pps_led_o <= '0';
+ width_cntr <= (others => '0');
+ else
+
+ if(ns_overflow_adv = '1') then
+ pps_out_int <= ppsg_escr_pps_valid and
+ (link_ok_i or ppsg_escr_pps_unmask);
+ width_cntr <= unsigned(ppsg_cr_pwidth);
+ elsif(ns_overflow = '1') then
+ pps_led_o <= ppsg_escr_pps_valid;
+ else
+ if(width_cntr = to_unsigned(0, width_cntr'length)) then
+ pps_out_int <= '0';
+ pps_led_o <= '0';
+ else
+ width_cntr <= width_cntr -1;
+ end if;
+ end if;
+ end if;
+ end if;
+
+ end process;
+
+ process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if rst_ref_n_i = '0' then
+ pps_out_o <= '0';
+ else
+ pps_out_o <= pps_out_int;
+ end if;
+ end if;
+ end process;
+
+ Uwb_slave : pps_gen_wb
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_in.adr(2 downto 0),
+ wb_dat_i => wb_in.dat,
+ wb_dat_o => wb_out.dat,
+ wb_cyc_i => wb_in.cyc,
+ wb_sel_i => wb_in.sel,
+ wb_stb_i => wb_in.stb,
+ wb_we_i => wb_in.we,
+ wb_ack_o => wb_out.ack,
+ refclk_i => clk_ref_i,
+ ppsg_cr_cnt_rst_o => ppsg_cr_cnt_rst,
+ ppsg_cr_cnt_en_o => ppsg_cr_cnt_en,
+ ppsg_cr_cnt_adj_o => ppsg_cr_cnt_adj_o,
+ ppsg_cr_cnt_adj_i => ppsg_cr_cnt_adj_i,
+ ppsg_cr_cnt_adj_load_o => ppsg_cr_cnt_adj_load,
+ ppsg_escr_sync_o => ppsg_escr_sync_out,
+ ppsg_escr_sync_i => ppsg_escr_sync_in,
+ ppsg_escr_sync_load_o => ppsg_escr_sync_load,
+ ppsg_cr_cnt_set_o => ppsg_cr_cnt_set_p,
+ ppsg_cr_pwidth_o => ppsg_cr_pwidth,
+ ppsg_cntr_nsec_i => ppsg_cntr_nsec,
+ ppsg_cntr_utclo_i => ppsg_cntr_utclo,
+ ppsg_cntr_utchi_i => ppsg_cntr_utchi,
+ ppsg_adj_nsec_o => ppsg_adj_nsec,
+ ppsg_adj_nsec_wr_o => ppsg_adj_nsec_wr,
+ ppsg_adj_utclo_o => ppsg_adj_utclo,
+ ppsg_adj_utclo_wr_o => ppsg_adj_utclo_wr,
+ ppsg_adj_utchi_o => ppsg_adj_utchi,
+ ppsg_adj_utchi_wr_o => ppsg_adj_utchi_wr,
+ ppsg_escr_pps_valid_o => ppsg_escr_pps_valid,
+ ppsg_escr_tm_valid_o => ppsg_escr_tm_valid,
+ ppsg_escr_sec_set_o => ppsg_escr_sec_set,
+ ppsg_escr_nsec_set_o => ppsg_escr_nsec_set,
+ ppsg_escr_pps_unmask_o => ppsg_escr_pps_unmask);
+
+-- drive unused signals
+ wb_out.rty <= '0';
+ wb_out.stall <= '0';
+ wb_out.int <= '0';
+ wb_out.err <= '0';
+
+-- start the adjustment upon write of 1 to CNT_ADJ bit
+ cntr_adjust_p <= ppsg_cr_cnt_adj_load and ppsg_cr_cnt_adj_o;
+
+-- drive the readout value of CNT_ADJ to 1 when the adjustment is over
+ ppsg_cr_cnt_adj_i <= pps_valid_int;
+
+ pps_valid_o <= pps_valid_int;
+
+ tm_utc_o <= std_logic_vector(cntr_utc);
+ tm_cycles_o <= std_logic_vector(cntr_nsec);
+ tm_time_valid_o <= ppsg_escr_tm_valid;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd
new file mode 100644
index 000000000..547a19ab9
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_pps_gen/xwr_pps_gen.vhd
@@ -0,0 +1,162 @@
+-------------------------------------------------------------------------------
+-- Title : PPS Generator & UTC Realtime clock
+-- Project : WhiteRabbit Switch
+-------------------------------------------------------------------------------
+-- File : xwb_pps_gen.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN (BE-CO-HT)
+-- Created : 2010-09-02
+-- Last update: 2017-02-20
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-09-02 1.0 twlostow Created
+-- 2011-05-09 1.1 twlostow Added external PPS input
+-- 2011-10-26 1.2 greg.d xwb module
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.wishbone_pkg.all;
+
+entity xwr_pps_gen is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD;
+ g_ref_clock_rate : integer := 125000000;
+ g_ext_clock_rate : integer := 10000000;
+ g_with_ext_clock_input : boolean := FALSE
+ );
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ link_ok_i : in std_logic;
+
+ pps_in_i : in std_logic;
+
+ -- Single-pulse PPS output for synchronizing endpoints to
+ pps_csync_o : out std_logic;
+ pps_out_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ pps_valid_o : out std_logic;
+
+ tm_utc_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ tm_time_valid_o : out std_logic
+
+ );
+end xwr_pps_gen;
+
+architecture behavioral of xwr_pps_gen is
+
+ component wr_pps_gen is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_ref_clock_rate : integer;
+ g_ext_clock_rate : integer := 10000000;
+ g_with_ext_clock_input : boolean := FALSE
+ );
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ link_ok_i : in std_logic;
+ pps_in_i : in std_logic;
+ pps_csync_o : out std_logic;
+ pps_out_o : out std_logic;
+ pps_led_o : out std_logic;
+ pps_valid_o : out std_logic;
+ tm_utc_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ tm_time_valid_o : out std_logic
+ );
+ end component;
+
+begin -- behavioral
+
+
+ WRAPPED_PPSGEN : wr_pps_gen
+ generic map(
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_ref_clock_rate => g_ref_clock_rate,
+ g_ext_clock_rate => g_ext_clock_rate,
+ g_with_ext_clock_input => g_with_ext_clock_input
+ )
+ port map(
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+ rst_ref_n_i => rst_ref_n_i,
+ rst_sys_n_i => rst_sys_n_i,
+ wb_adr_i => slave_i.adr(4 downto 0),
+ wb_dat_i => slave_i.dat,
+ wb_dat_o => slave_o.dat,
+ wb_cyc_i => slave_i.cyc,
+ wb_sel_i => slave_i.sel,
+ wb_stb_i => slave_i.stb,
+ wb_we_i => slave_i.we,
+ wb_ack_o => slave_o.ack,
+ wb_stall_o => slave_o.stall,
+ link_ok_i => link_ok_i,
+ pps_in_i => pps_in_i,
+ pps_csync_o => pps_csync_o,
+ pps_out_o => pps_out_o,
+ pps_led_o => pps_led_o,
+ pps_valid_o => pps_valid_o,
+ tm_utc_o => tm_utc_o,
+ tm_cycles_o => tm_cycles_o,
+ tm_time_valid_o => tm_time_valid_o
+ );
+
+
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+ slave_o.int <= '0';
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd
new file mode 100644
index 000000000..0fdac142b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/softpll_pkg.vhd
@@ -0,0 +1,31 @@
+library ieee;
+
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package softpll_pkg is
+
+ constant c_softpll_max_aux_clocks : integer := 8;
+
+ type t_softpll_phase_detector_type is (CH_DDMTD, CH_BANGBANG);
+
+ type t_softpll_channel_config_array is array(0 to c_softpll_max_aux_clocks-1) of t_softpll_phase_detector_type;
+
+ constant c_softpll_default_channel_config : t_softpll_channel_config_array := (others => CH_DDMTD);
+
+ -- External 10 MHz input divider parameters.
+ constant c_softpll_ext_div_ref : integer := 8;
+ constant c_softpll_ext_div_fb : integer := 50;
+ constant c_softpll_ext_log2_gating : integer := 13;
+
+ constant c_softpll_out_status_off : std_logic_vector(3 downto 0) := "0000";
+ constant c_softpll_out_status_locking : std_logic_vector(3 downto 0) := "0001";
+ constant c_softpll_out_status_locked : std_logic_vector(3 downto 0) := "0010";
+ constant c_softpll_out_status_aligning : std_logic_vector(3 downto 0) := "0011";
+ constant c_softpll_out_status_holdover : std_logic_vector(3 downto 0) := "0100";
+
+end package;
+
+package body softpll_pkg is
+
+end softpll_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd
new file mode 100644
index 000000000..941279c02
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_aligner.vhd
@@ -0,0 +1,180 @@
+-------------------------------------------------------------------------------
+-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : spll_aligner.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.gencores_pkg.all;
+
+entity spll_aligner is
+ generic (
+ g_counter_width : integer := 28;
+ g_ref_clock_rate : integer := 125000000;
+ g_in_clock_rate : integer := 10000000;
+ g_sample_rate : integer := 100
+ );
+ port (
+ clk_sys_i : in std_logic;
+ clk_in_i : in std_logic;
+ clk_ref_i : in std_logic;
+
+ rst_n_sys_i : in std_logic;
+ rst_n_ref_i : in std_logic;
+ rst_n_ext_i : in std_logic;
+
+ pps_ext_a_i : in std_logic;
+ pps_csync_p1_i : in std_logic;
+
+ sample_cref_o : out std_logic_vector(g_counter_width-1 downto 0);
+ sample_cin_o : out std_logic_vector(g_counter_width-1 downto 0);
+ sample_valid_o : out std_logic;
+ sample_ack_i : in std_logic
+ );
+
+end spll_aligner;
+
+architecture rtl of spll_aligner is
+
+ constant c_div_ticks : integer := g_ref_clock_rate / g_sample_rate;
+
+ signal cnt_ref_bin, cnt_in_bin, cnt_in_bin_x : unsigned(g_counter_width-1 downto 0);
+ signal cnt_in_gray, cnt_in_gray_x, cnt_in_gray_xd : std_logic_vector(g_counter_width-1 downto 0);
+
+ signal cnt_ref_div : unsigned(g_counter_width-1 downto 0);
+ signal pps_ext_p, pps_ext_d0 : std_logic;
+ signal ref_div_p : std_logic;
+ signal sample_ready_p : std_logic;
+begin
+
+ p_ref_counter : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if pps_csync_p1_i = '1' or rst_n_ref_i = '0' then
+ cnt_ref_bin <= to_unsigned(0, g_counter_width);
+ elsif(cnt_ref_bin = g_ref_clock_rate - 1) then
+ cnt_ref_bin <= (others => '0');
+ else
+ cnt_ref_bin <= cnt_ref_bin + 1;
+ end if;
+ end if;
+ end process;
+
+ p_samplerate_divider : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ if pps_csync_p1_i = '1' or rst_n_ref_i = '0' then
+ ref_div_p <= '0';
+ cnt_ref_div <= to_unsigned(0, g_counter_width);
+ elsif (cnt_ref_div = c_div_ticks - 2) then
+ ref_div_p <= '1';
+ cnt_ref_div <= cnt_ref_div + 1;
+ elsif (cnt_ref_div = c_div_ticks - 1) then
+ ref_div_p <= '0';
+ cnt_ref_div <= (others => '0');
+ else
+ ref_div_p <= '0';
+ cnt_ref_div <= cnt_ref_div + 1;
+ end if;
+ end if;
+ end process;
+
+ p_delay_ext_pps : process(clk_in_i)
+ begin
+ if rising_edge(clk_in_i) then
+ pps_ext_d0 <= pps_ext_a_i;
+ end if;
+ end process;
+
+ pps_ext_p <= not pps_ext_d0 and pps_ext_a_i;
+
+ p_in_counter : process(clk_in_i)
+ begin
+ if rising_edge(clk_in_i) then
+ if pps_ext_p = '1' or rst_n_ext_i = '0' then
+ cnt_in_bin <= to_unsigned(2, g_counter_width);
+ elsif(cnt_in_bin = g_in_clock_rate - 1) then
+ cnt_in_bin <= (others => '0');
+ else
+ cnt_in_bin <= cnt_in_bin + 1;
+ end if;
+ end if;
+ end process;
+
+ p_in_bin2gray : process (clk_in_i)
+ begin
+ if rising_edge(clk_in_i) then
+ cnt_in_gray <= f_gray_encode (std_logic_vector(cnt_in_bin));
+ end if;
+ end process;
+
+ p_sample_difference : process(clk_ref_i)
+ begin
+ if rising_edge(clk_ref_i) then
+ cnt_in_gray_x <= cnt_in_gray;
+ cnt_in_gray_xd <= cnt_in_gray_x;
+
+ if(ref_div_p = '1') then
+ sample_cin_o <= f_gray_decode(cnt_in_gray_xd, 1);
+ sample_cref_o <= std_logic_vector (cnt_ref_bin);
+ end if;
+ end if;
+ end process;
+
+ U_sync_sampling : gc_pulse_synchronizer2
+ port map (
+ clk_in_i => clk_ref_i,
+ rst_in_n_i => rst_n_ref_i,
+ clk_out_i => clk_sys_i,
+ rst_out_n_i => rst_n_sys_i,
+ d_p_i => ref_div_p,
+ q_p_o => sample_ready_p);
+
+
+ p_gen_sample_valid : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_sys_i = '0' then
+ sample_valid_o <= '0';
+ else
+ if sample_ready_p = '1' then
+ sample_valid_o <= '1';
+ elsif sample_ack_i = '1' then
+ sample_valid_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+end rtl;
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd
new file mode 100644
index 000000000..11a8687b7
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wb_slave.vhd
@@ -0,0 +1,939 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Softcore PLL
+---------------------------------------------------------------------------------------
+-- File : spll_wb_slave.vhd
+-- Author : auto-generated by wbgen2 from spll_wb_slave.wb
+-- Created : Wed Aug 16 22:42:41 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE spll_wb_slave.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wbgen2_pkg.all;
+
+use work.spll_wbgen2_pkg.all;
+
+
+entity spll_wb_slave is
+ generic (
+ g_with_debug_fifo : integer := 1 );
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(5 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic;
+ irq_tag_i : in std_logic;
+ regs_i : in t_spll_in_registers;
+ regs_o : out t_spll_out_registers
+ );
+end spll_wb_slave;
+
+architecture syn of spll_wb_slave is
+
+signal spll_eccr_ext_en_int : std_logic ;
+signal spll_eccr_ext_ref_pllrst_int : std_logic ;
+signal spll_occr_out_lock_int : std_logic_vector(7 downto 0);
+signal spll_deglitch_thr_int : std_logic_vector(15 downto 0);
+signal spll_dfr_host_rst_n : std_logic ;
+signal spll_dfr_host_in_int : std_logic_vector(47 downto 0);
+signal spll_dfr_host_out_int : std_logic_vector(47 downto 0);
+signal spll_dfr_host_rdreq_int : std_logic ;
+signal spll_dfr_host_rdreq_int_d0 : std_logic ;
+signal spll_trr_rst_n : std_logic ;
+signal spll_trr_in_int : std_logic_vector(31 downto 0);
+signal spll_trr_out_int : std_logic_vector(31 downto 0);
+signal spll_trr_rdreq_int : std_logic ;
+signal spll_trr_rdreq_int_d0 : std_logic ;
+signal eic_idr_int : std_logic_vector(0 downto 0);
+signal eic_idr_write_int : std_logic ;
+signal eic_ier_int : std_logic_vector(0 downto 0);
+signal eic_ier_write_int : std_logic ;
+signal eic_imr_int : std_logic_vector(0 downto 0);
+signal eic_isr_clear_int : std_logic_vector(0 downto 0);
+signal eic_isr_status_int : std_logic_vector(0 downto 0);
+signal eic_irq_ack_int : std_logic_vector(0 downto 0);
+signal eic_isr_write_int : std_logic ;
+signal spll_dfr_host_full_int : std_logic ;
+signal spll_dfr_host_empty_int : std_logic ;
+signal spll_dfr_host_usedw_int : std_logic_vector(12 downto 0);
+signal spll_trr_empty_int : std_logic ;
+signal irq_inputs_vector_int : std_logic_vector(0 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(5 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ spll_eccr_ext_en_int <= '0';
+ spll_eccr_ext_ref_pllrst_int <= '0';
+ regs_o.al_cr_valid_load_o <= '0';
+ regs_o.f_dmtd_valid_load_o <= '0';
+ regs_o.f_ref_valid_load_o <= '0';
+ regs_o.f_ext_valid_load_o <= '0';
+ spll_occr_out_lock_int <= "00000000";
+ regs_o.rcer_load_o <= '0';
+ regs_o.ocer_load_o <= '0';
+ regs_o.dac_hpll_wr_o <= '0';
+ regs_o.dac_main_value_wr_o <= '0';
+ regs_o.dac_main_dac_sel_wr_o <= '0';
+ spll_deglitch_thr_int <= "0000000000000000";
+ regs_o.dfr_spll_value_wr_o <= '0';
+ regs_o.dfr_spll_eos_wr_o <= '0';
+ eic_idr_write_int <= '0';
+ eic_ier_write_int <= '0';
+ eic_isr_write_int <= '0';
+ spll_dfr_host_rdreq_int <= '0';
+ spll_trr_rdreq_int <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ regs_o.al_cr_valid_load_o <= '0';
+ regs_o.f_dmtd_valid_load_o <= '0';
+ regs_o.f_ref_valid_load_o <= '0';
+ regs_o.f_ext_valid_load_o <= '0';
+ regs_o.rcer_load_o <= '0';
+ regs_o.ocer_load_o <= '0';
+ regs_o.dac_hpll_wr_o <= '0';
+ regs_o.dac_main_value_wr_o <= '0';
+ regs_o.dac_main_dac_sel_wr_o <= '0';
+ regs_o.dfr_spll_value_wr_o <= '0';
+ regs_o.dfr_spll_eos_wr_o <= '0';
+ eic_idr_write_int <= '0';
+ eic_ier_write_int <= '0';
+ eic_isr_write_int <= '0';
+ ack_in_progress <= '0';
+ else
+ regs_o.al_cr_valid_load_o <= '0';
+ regs_o.f_dmtd_valid_load_o <= '0';
+ regs_o.f_ref_valid_load_o <= '0';
+ regs_o.f_ext_valid_load_o <= '0';
+ regs_o.rcer_load_o <= '0';
+ regs_o.ocer_load_o <= '0';
+ regs_o.dac_hpll_wr_o <= '0';
+ regs_o.dac_main_value_wr_o <= '0';
+ regs_o.dac_main_dac_sel_wr_o <= '0';
+ regs_o.dfr_spll_value_wr_o <= '0';
+ regs_o.dfr_spll_eos_wr_o <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(5 downto 0) is
+ when "000000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(13 downto 8) <= "000000";
+ rddata_reg(21 downto 16) <= regs_i.csr_n_ref_i;
+ rddata_reg(26 downto 24) <= regs_i.csr_n_out_i;
+ rddata_reg(27) <= regs_i.csr_dbg_supported_i;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000001" =>
+ if (wb_we_i = '1') then
+ spll_eccr_ext_en_int <= wrdata_reg(0);
+ spll_eccr_ext_ref_pllrst_int <= wrdata_reg(31);
+ end if;
+ rddata_reg(0) <= spll_eccr_ext_en_int;
+ rddata_reg(1) <= regs_i.eccr_ext_supported_i;
+ rddata_reg(2) <= regs_i.eccr_ext_ref_locked_i;
+ rddata_reg(3) <= regs_i.eccr_ext_ref_stopped_i;
+ rddata_reg(31) <= spll_eccr_ext_ref_pllrst_int;
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000010" =>
+ if (wb_we_i = '1') then
+ regs_o.al_cr_valid_load_o <= '1';
+ end if;
+ rddata_reg(8 downto 0) <= regs_i.al_cr_valid_i;
+ rddata_reg(17 downto 9) <= regs_i.al_cr_required_i;
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.al_cref_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.al_cin_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000101" =>
+ if (wb_we_i = '1') then
+ regs_o.f_dmtd_valid_load_o <= '1';
+ end if;
+ rddata_reg(27 downto 0) <= regs_i.f_dmtd_freq_i;
+ rddata_reg(28) <= regs_i.f_dmtd_valid_i;
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000110" =>
+ if (wb_we_i = '1') then
+ regs_o.f_ref_valid_load_o <= '1';
+ end if;
+ rddata_reg(27 downto 0) <= regs_i.f_ref_freq_i;
+ rddata_reg(28) <= regs_i.f_ref_valid_i;
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000111" =>
+ if (wb_we_i = '1') then
+ regs_o.f_ext_valid_load_o <= '1';
+ end if;
+ rddata_reg(27 downto 0) <= regs_i.f_ext_freq_i;
+ rddata_reg(28) <= regs_i.f_ext_valid_i;
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001000" =>
+ if (wb_we_i = '1') then
+ spll_occr_out_lock_int <= wrdata_reg(23 downto 16);
+ end if;
+ rddata_reg(15 downto 8) <= regs_i.occr_out_en_i;
+ rddata_reg(23 downto 16) <= spll_occr_out_lock_int;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001001" =>
+ if (wb_we_i = '1') then
+ regs_o.rcer_load_o <= '1';
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rcer_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001010" =>
+ if (wb_we_i = '1') then
+ regs_o.ocer_load_o <= '1';
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.ocer_i;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010000" =>
+ if (wb_we_i = '1') then
+ regs_o.dac_hpll_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010001" =>
+ if (wb_we_i = '1') then
+ regs_o.dac_main_value_wr_o <= '1';
+ regs_o.dac_main_dac_sel_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010010" =>
+ if (wb_we_i = '1') then
+ spll_deglitch_thr_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= spll_deglitch_thr_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010011" =>
+ if (wb_we_i = '1') then
+ regs_o.dfr_spll_value_wr_o <= '1';
+ regs_o.dfr_spll_eos_wr_o <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011000" =>
+ if (wb_we_i = '1') then
+ eic_idr_write_int <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011001" =>
+ if (wb_we_i = '1') then
+ eic_ier_write_int <= '1';
+ end if;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= eic_imr_int(0);
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011011" =>
+ if (wb_we_i = '1') then
+ eic_isr_write_int <= '1';
+ end if;
+ rddata_reg(0) <= eic_isr_status_int(0);
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011100" =>
+ if (wb_we_i = '1') then
+ end if;
+ if (spll_dfr_host_rdreq_int_d0 = '0') then
+ spll_dfr_host_rdreq_int <= not spll_dfr_host_rdreq_int;
+ else
+ rddata_reg(31 downto 0) <= spll_dfr_host_out_int(31 downto 0);
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end if;
+ when "011101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(15 downto 0) <= spll_dfr_host_out_int(47 downto 32);
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(16) <= spll_dfr_host_full_int;
+ rddata_reg(17) <= spll_dfr_host_empty_int;
+ rddata_reg(12 downto 0) <= spll_dfr_host_usedw_int;
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011111" =>
+ if (wb_we_i = '1') then
+ end if;
+ if (spll_trr_rdreq_int_d0 = '0') then
+ spll_trr_rdreq_int <= not spll_trr_rdreq_int;
+ else
+ rddata_reg(23 downto 0) <= spll_trr_out_int(23 downto 0);
+ rddata_reg(30 downto 24) <= spll_trr_out_int(30 downto 24);
+ rddata_reg(31) <= spll_trr_out_int(31);
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end if;
+ when "100000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(17) <= spll_trr_empty_int;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Number of reference channels (max: 32)
+-- Number of output channels (max: 8)
+-- Debug queue supported
+-- Enable External Clock PLL
+ regs_o.eccr_ext_en_o <= spll_eccr_ext_en_int;
+-- External Clock Input Available
+-- External Clock Reference Present
+-- EXT_REF_STOPPED
+-- EXT_PLL_RST
+ regs_o.eccr_ext_ref_pllrst_o <= spll_eccr_ext_ref_pllrst_int;
+-- Aligner sample valid/select on channel
+ regs_o.al_cr_valid_o <= wrdata_reg(8 downto 0);
+-- Aligner required on channel
+-- Aligner reference counter
+-- Aligner reference counter
+-- FREQ
+-- VALID
+ regs_o.f_dmtd_valid_o <= wrdata_reg(28);
+-- FREQ
+-- VALID
+ regs_o.f_ref_valid_o <= wrdata_reg(28);
+-- FREQ
+-- VALID
+ regs_o.f_ext_valid_o <= wrdata_reg(28);
+-- Output Channel HW enable flag
+-- Output Channel locked flag
+ regs_o.occr_out_lock_o <= spll_occr_out_lock_int;
+-- Reference Channel Enable
+ regs_o.rcer_o <= wrdata_reg(31 downto 0);
+-- Output Channel Enable
+ regs_o.ocer_o <= wrdata_reg(7 downto 0);
+-- DAC value
+-- pass-through field: DAC value in register: Helper DAC Output
+ regs_o.dac_hpll_o <= wrdata_reg(15 downto 0);
+-- DAC value
+-- pass-through field: DAC value in register: Main DAC Output
+ regs_o.dac_main_value_o <= wrdata_reg(15 downto 0);
+-- DAC select
+-- pass-through field: DAC select in register: Main DAC Output
+ regs_o.dac_main_dac_sel_o <= wrdata_reg(19 downto 16);
+-- Threshold
+ regs_o.deglitch_thr_o <= spll_deglitch_thr_int;
+-- Debug Value
+-- pass-through field: Debug Value in register: Debug FIFO Register - SPLL side
+ regs_o.dfr_spll_value_o <= wrdata_reg(30 downto 0);
+-- End-of-Sample
+-- pass-through field: End-of-Sample in register: Debug FIFO Register - SPLL side
+ regs_o.dfr_spll_eos_o <= wrdata_reg(31);
+ genblock_0: if (not (g_with_debug_fifo = 0)) generate
+-- extra code for reg/fifo/mem: Debug FIFO Register - Host side
+ spll_dfr_host_in_int(31 downto 0) <= regs_i.dfr_host_value_i;
+ spll_dfr_host_in_int(47 downto 32) <= regs_i.dfr_host_seq_id_i;
+ spll_dfr_host_rst_n <= rst_n_i;
+ spll_dfr_host_INST : wbgen2_fifo_sync
+ generic map (
+ g_size => 8192,
+ g_width => 48,
+ g_usedw_size => 13
+ )
+ port map (
+ wr_req_i => regs_i.dfr_host_wr_req_i,
+ wr_full_o => regs_o.dfr_host_wr_full_o,
+ wr_empty_o => regs_o.dfr_host_wr_empty_o,
+ wr_usedw_o => regs_o.dfr_host_wr_usedw_o,
+ rd_full_o => spll_dfr_host_full_int,
+ rd_empty_o => spll_dfr_host_empty_int,
+ rd_usedw_o => spll_dfr_host_usedw_int,
+ rd_req_i => spll_dfr_host_rdreq_int,
+ rst_n_i => spll_dfr_host_rst_n,
+ clk_i => clk_sys_i,
+ wr_data_i => spll_dfr_host_in_int,
+ rd_data_o => spll_dfr_host_out_int
+ );
+
+ end generate genblock_0;
+ genblock_1: if (g_with_debug_fifo = 0) generate
+ regs_o.dfr_host_wr_full_o <= '0';
+ regs_o.dfr_host_wr_empty_o <= '0';
+ regs_o.dfr_host_wr_usedw_o <= "0000000000000";
+ end generate genblock_1;
+-- extra code for reg/fifo/mem: Tag Readout Register
+ spll_trr_in_int(23 downto 0) <= regs_i.trr_value_i;
+ spll_trr_in_int(30 downto 24) <= regs_i.trr_chan_id_i;
+ spll_trr_in_int(31) <= regs_i.trr_disc_i;
+ spll_trr_rst_n <= rst_n_i;
+ spll_trr_INST : wbgen2_fifo_sync
+ generic map (
+ g_size => 32,
+ g_width => 32,
+ g_usedw_size => 5
+ )
+ port map (
+ wr_req_i => regs_i.trr_wr_req_i,
+ wr_full_o => regs_o.trr_wr_full_o,
+ wr_empty_o => regs_o.trr_wr_empty_o,
+ rd_empty_o => spll_trr_empty_int,
+ rd_req_i => spll_trr_rdreq_int,
+ rst_n_i => spll_trr_rst_n,
+ clk_i => clk_sys_i,
+ wr_data_i => spll_trr_in_int,
+ rd_data_o => spll_trr_out_int
+ );
+
+-- extra code for reg/fifo/mem: Interrupt disable register
+ eic_idr_int(0) <= wrdata_reg(0);
+-- extra code for reg/fifo/mem: Interrupt enable register
+ eic_ier_int(0) <= wrdata_reg(0);
+-- extra code for reg/fifo/mem: Interrupt status register
+ eic_isr_clear_int(0) <= wrdata_reg(0);
+-- extra code for reg/fifo/mem: IRQ_CONTROLLER
+ eic_irq_controller_inst : wbgen2_eic
+ generic map (
+ g_num_interrupts => 1,
+ g_irq00_mode => 3,
+ g_irq01_mode => 0,
+ g_irq02_mode => 0,
+ g_irq03_mode => 0,
+ g_irq04_mode => 0,
+ g_irq05_mode => 0,
+ g_irq06_mode => 0,
+ g_irq07_mode => 0,
+ g_irq08_mode => 0,
+ g_irq09_mode => 0,
+ g_irq0a_mode => 0,
+ g_irq0b_mode => 0,
+ g_irq0c_mode => 0,
+ g_irq0d_mode => 0,
+ g_irq0e_mode => 0,
+ g_irq0f_mode => 0,
+ g_irq10_mode => 0,
+ g_irq11_mode => 0,
+ g_irq12_mode => 0,
+ g_irq13_mode => 0,
+ g_irq14_mode => 0,
+ g_irq15_mode => 0,
+ g_irq16_mode => 0,
+ g_irq17_mode => 0,
+ g_irq18_mode => 0,
+ g_irq19_mode => 0,
+ g_irq1a_mode => 0,
+ g_irq1b_mode => 0,
+ g_irq1c_mode => 0,
+ g_irq1d_mode => 0,
+ g_irq1e_mode => 0,
+ g_irq1f_mode => 0
+ )
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ irq_i => irq_inputs_vector_int,
+ irq_ack_o => eic_irq_ack_int,
+ reg_imr_o => eic_imr_int,
+ reg_ier_i => eic_ier_int,
+ reg_ier_wr_stb_i => eic_ier_write_int,
+ reg_idr_i => eic_idr_int,
+ reg_idr_wr_stb_i => eic_idr_write_int,
+ reg_isr_o => eic_isr_status_int,
+ reg_isr_i => eic_isr_clear_int,
+ reg_isr_wr_stb_i => eic_isr_write_int,
+ wb_irq_o => wb_int_o
+ );
+
+ irq_inputs_vector_int(0) <= irq_tag_i;
+-- extra code for reg/fifo/mem: FIFO 'Debug FIFO Register - Host side' data output register 0
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ spll_dfr_host_rdreq_int_d0 <= '0';
+ elsif rising_edge(clk_sys_i) then
+ spll_dfr_host_rdreq_int_d0 <= spll_dfr_host_rdreq_int;
+ end if;
+ end process;
+
+
+-- extra code for reg/fifo/mem: FIFO 'Debug FIFO Register - Host side' data output register 1
+-- extra code for reg/fifo/mem: FIFO 'Tag Readout Register' data output register 0
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ spll_trr_rdreq_int_d0 <= '0';
+ elsif rising_edge(clk_sys_i) then
+ spll_trr_rdreq_int_d0 <= spll_trr_rdreq_int;
+ end if;
+ end process;
+
+
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd
new file mode 100644
index 000000000..5550a3dd8
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/spll_wbgen2_pkg.vhd
@@ -0,0 +1,207 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Softcore PLL
+---------------------------------------------------------------------------------------
+-- File : spll_wbgen2_pkg.vhd
+-- Author : auto-generated by wbgen2 from spll_wb_slave.wb
+-- Created : Wed Aug 16 22:42:41 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE spll_wb_slave.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.wbgen2_pkg.all;
+
+package spll_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_spll_in_registers is record
+ csr_n_ref_i : std_logic_vector(5 downto 0);
+ csr_n_out_i : std_logic_vector(2 downto 0);
+ csr_dbg_supported_i : std_logic;
+ eccr_ext_supported_i : std_logic;
+ eccr_ext_ref_locked_i : std_logic;
+ eccr_ext_ref_stopped_i : std_logic;
+ al_cr_valid_i : std_logic_vector(8 downto 0);
+ al_cr_required_i : std_logic_vector(8 downto 0);
+ al_cref_i : std_logic_vector(31 downto 0);
+ al_cin_i : std_logic_vector(31 downto 0);
+ f_dmtd_freq_i : std_logic_vector(27 downto 0);
+ f_dmtd_valid_i : std_logic;
+ f_ref_freq_i : std_logic_vector(27 downto 0);
+ f_ref_valid_i : std_logic;
+ f_ext_freq_i : std_logic_vector(27 downto 0);
+ f_ext_valid_i : std_logic;
+ occr_out_en_i : std_logic_vector(7 downto 0);
+ rcer_i : std_logic_vector(31 downto 0);
+ ocer_i : std_logic_vector(7 downto 0);
+ dfr_host_wr_req_i : std_logic;
+ dfr_host_value_i : std_logic_vector(31 downto 0);
+ dfr_host_seq_id_i : std_logic_vector(15 downto 0);
+ trr_wr_req_i : std_logic;
+ trr_value_i : std_logic_vector(23 downto 0);
+ trr_chan_id_i : std_logic_vector(6 downto 0);
+ trr_disc_i : std_logic;
+ end record;
+
+ constant c_spll_in_registers_init_value: t_spll_in_registers := (
+ csr_n_ref_i => (others => '0'),
+ csr_n_out_i => (others => '0'),
+ csr_dbg_supported_i => '0',
+ eccr_ext_supported_i => '0',
+ eccr_ext_ref_locked_i => '0',
+ eccr_ext_ref_stopped_i => '0',
+ al_cr_valid_i => (others => '0'),
+ al_cr_required_i => (others => '0'),
+ al_cref_i => (others => '0'),
+ al_cin_i => (others => '0'),
+ f_dmtd_freq_i => (others => '0'),
+ f_dmtd_valid_i => '0',
+ f_ref_freq_i => (others => '0'),
+ f_ref_valid_i => '0',
+ f_ext_freq_i => (others => '0'),
+ f_ext_valid_i => '0',
+ occr_out_en_i => (others => '0'),
+ rcer_i => (others => '0'),
+ ocer_i => (others => '0'),
+ dfr_host_wr_req_i => '0',
+ dfr_host_value_i => (others => '0'),
+ dfr_host_seq_id_i => (others => '0'),
+ trr_wr_req_i => '0',
+ trr_value_i => (others => '0'),
+ trr_chan_id_i => (others => '0'),
+ trr_disc_i => '0'
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_spll_out_registers is record
+ eccr_ext_en_o : std_logic;
+ eccr_ext_ref_pllrst_o : std_logic;
+ al_cr_valid_o : std_logic_vector(8 downto 0);
+ al_cr_valid_load_o : std_logic;
+ f_dmtd_valid_o : std_logic;
+ f_dmtd_valid_load_o : std_logic;
+ f_ref_valid_o : std_logic;
+ f_ref_valid_load_o : std_logic;
+ f_ext_valid_o : std_logic;
+ f_ext_valid_load_o : std_logic;
+ occr_out_lock_o : std_logic_vector(7 downto 0);
+ rcer_o : std_logic_vector(31 downto 0);
+ rcer_load_o : std_logic;
+ ocer_o : std_logic_vector(7 downto 0);
+ ocer_load_o : std_logic;
+ dac_hpll_o : std_logic_vector(15 downto 0);
+ dac_hpll_wr_o : std_logic;
+ dac_main_value_o : std_logic_vector(15 downto 0);
+ dac_main_value_wr_o : std_logic;
+ dac_main_dac_sel_o : std_logic_vector(3 downto 0);
+ dac_main_dac_sel_wr_o : std_logic;
+ deglitch_thr_o : std_logic_vector(15 downto 0);
+ dfr_spll_value_o : std_logic_vector(30 downto 0);
+ dfr_spll_value_wr_o : std_logic;
+ dfr_spll_eos_o : std_logic;
+ dfr_spll_eos_wr_o : std_logic;
+ dfr_host_wr_full_o : std_logic;
+ dfr_host_wr_empty_o : std_logic;
+ dfr_host_wr_usedw_o : std_logic_vector(12 downto 0);
+ trr_wr_full_o : std_logic;
+ trr_wr_empty_o : std_logic;
+ end record;
+
+ constant c_spll_out_registers_init_value: t_spll_out_registers := (
+ eccr_ext_en_o => '0',
+ eccr_ext_ref_pllrst_o => '0',
+ al_cr_valid_o => (others => '0'),
+ al_cr_valid_load_o => '0',
+ f_dmtd_valid_o => '0',
+ f_dmtd_valid_load_o => '0',
+ f_ref_valid_o => '0',
+ f_ref_valid_load_o => '0',
+ f_ext_valid_o => '0',
+ f_ext_valid_load_o => '0',
+ occr_out_lock_o => (others => '0'),
+ rcer_o => (others => '0'),
+ rcer_load_o => '0',
+ ocer_o => (others => '0'),
+ ocer_load_o => '0',
+ dac_hpll_o => (others => '0'),
+ dac_hpll_wr_o => '0',
+ dac_main_value_o => (others => '0'),
+ dac_main_value_wr_o => '0',
+ dac_main_dac_sel_o => (others => '0'),
+ dac_main_dac_sel_wr_o => '0',
+ deglitch_thr_o => (others => '0'),
+ dfr_spll_value_o => (others => '0'),
+ dfr_spll_value_wr_o => '0',
+ dfr_spll_eos_o => '0',
+ dfr_spll_eos_wr_o => '0',
+ dfr_host_wr_full_o => '0',
+ dfr_host_wr_empty_o => '0',
+ dfr_host_wr_usedw_o => (others => '0'),
+ trr_wr_full_o => '0',
+ trr_wr_empty_o => '0'
+ );
+ function "or" (left, right: t_spll_in_registers) return t_spll_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body spll_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_spll_in_registers) return t_spll_in_registers is
+variable tmp: t_spll_in_registers;
+begin
+tmp.csr_n_ref_i := f_x_to_zero(left.csr_n_ref_i) or f_x_to_zero(right.csr_n_ref_i);
+tmp.csr_n_out_i := f_x_to_zero(left.csr_n_out_i) or f_x_to_zero(right.csr_n_out_i);
+tmp.csr_dbg_supported_i := f_x_to_zero(left.csr_dbg_supported_i) or f_x_to_zero(right.csr_dbg_supported_i);
+tmp.eccr_ext_supported_i := f_x_to_zero(left.eccr_ext_supported_i) or f_x_to_zero(right.eccr_ext_supported_i);
+tmp.eccr_ext_ref_locked_i := f_x_to_zero(left.eccr_ext_ref_locked_i) or f_x_to_zero(right.eccr_ext_ref_locked_i);
+tmp.eccr_ext_ref_stopped_i := f_x_to_zero(left.eccr_ext_ref_stopped_i) or f_x_to_zero(right.eccr_ext_ref_stopped_i);
+tmp.al_cr_valid_i := f_x_to_zero(left.al_cr_valid_i) or f_x_to_zero(right.al_cr_valid_i);
+tmp.al_cr_required_i := f_x_to_zero(left.al_cr_required_i) or f_x_to_zero(right.al_cr_required_i);
+tmp.al_cref_i := f_x_to_zero(left.al_cref_i) or f_x_to_zero(right.al_cref_i);
+tmp.al_cin_i := f_x_to_zero(left.al_cin_i) or f_x_to_zero(right.al_cin_i);
+tmp.f_dmtd_freq_i := f_x_to_zero(left.f_dmtd_freq_i) or f_x_to_zero(right.f_dmtd_freq_i);
+tmp.f_dmtd_valid_i := f_x_to_zero(left.f_dmtd_valid_i) or f_x_to_zero(right.f_dmtd_valid_i);
+tmp.f_ref_freq_i := f_x_to_zero(left.f_ref_freq_i) or f_x_to_zero(right.f_ref_freq_i);
+tmp.f_ref_valid_i := f_x_to_zero(left.f_ref_valid_i) or f_x_to_zero(right.f_ref_valid_i);
+tmp.f_ext_freq_i := f_x_to_zero(left.f_ext_freq_i) or f_x_to_zero(right.f_ext_freq_i);
+tmp.f_ext_valid_i := f_x_to_zero(left.f_ext_valid_i) or f_x_to_zero(right.f_ext_valid_i);
+tmp.occr_out_en_i := f_x_to_zero(left.occr_out_en_i) or f_x_to_zero(right.occr_out_en_i);
+tmp.rcer_i := f_x_to_zero(left.rcer_i) or f_x_to_zero(right.rcer_i);
+tmp.ocer_i := f_x_to_zero(left.ocer_i) or f_x_to_zero(right.ocer_i);
+tmp.dfr_host_wr_req_i := f_x_to_zero(left.dfr_host_wr_req_i) or f_x_to_zero(right.dfr_host_wr_req_i);
+tmp.dfr_host_value_i := f_x_to_zero(left.dfr_host_value_i) or f_x_to_zero(right.dfr_host_value_i);
+tmp.dfr_host_seq_id_i := f_x_to_zero(left.dfr_host_seq_id_i) or f_x_to_zero(right.dfr_host_seq_id_i);
+tmp.trr_wr_req_i := f_x_to_zero(left.trr_wr_req_i) or f_x_to_zero(right.trr_wr_req_i);
+tmp.trr_value_i := f_x_to_zero(left.trr_value_i) or f_x_to_zero(right.trr_value_i);
+tmp.trr_chan_id_i := f_x_to_zero(left.trr_chan_id_i) or f_x_to_zero(right.trr_chan_id_i);
+tmp.trr_disc_i := f_x_to_zero(left.trr_disc_i) or f_x_to_zero(right.trr_disc_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd
new file mode 100644
index 000000000..351b60f19
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/wr_softpll_ng.vhd
@@ -0,0 +1,809 @@
+-------------------------------------------------------------------------------
+-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : wr_softpll_ng.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-29
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- The hardware part of the revised softcore PLL. Incorporates a user-defined
+-- number of DDMTD taggers, a FIFO allowing for sequential readout of
+-- the phase tags and ports for driving oscillator tuning DACs.
+-- The rest of the magic is done in the software.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.gencores_pkg.all;
+use work.wishbone_pkg.all;
+use work.softpll_pkg.all;
+use work.spll_wbgen2_pkg.all;
+
+entity wr_softpll_ng is
+ generic(
+-- Number of bits in phase tags produced by DDMTDs.
+-- Must be large enough to cover at least a hundred of DDMTD periods to ensure
+-- correct operation of the SoftPLL software servo algorithm - that
+-- means, for a typical DMTD frequency offset N=16384, there number of tag bits
+-- should be log2(N) + 7 == 21. Note: the value must match the TAG_BITS constant
+-- in spll_defs.h file!
+ g_tag_bits : integer;
+
+-- These two are obvious:
+ g_num_ref_inputs : integer := 1;
+ g_num_outputs : integer := 1;
+
+-- When true, an additional FIFO is instantiated, providing a realtime record
+-- of user-selectable SoftPLL parameters (e.g. tag values, phase error, DAC drive).
+-- These values can be read by "spll_dbg_proxy" daemon for further analysis.
+ g_with_debug_fifo : boolean := false;
+
+-- When true, an additional accumulating bang-bang phase detector is instantiated
+-- for wideband locking of the local oscillator to an external stable reference
+-- (e.g. GPSDO/Cesium 10 MHz)
+ g_with_ext_clock_input : boolean := false;
+
+-- When true, DDMTD inputs are reversed (so that the DDMTD offset clocks is
+-- being sampled by the measured clock). This is functionally equivalent to
+-- "direct" operation, but may improve FPGA timing/routability.
+ g_reverse_dmtds : boolean := true;
+
+-- Divides the DDMTD clock inputs by 2, removing the "CLOCK_DEDICATED_ROUTE"
+-- errors under ISE tools, at the cost of bandwidth reduction. Advanced option
+-- use with care.
+ g_divide_input_by_2 : boolean := false;
+
+ g_ref_clock_rate : integer := 125000000;
+ g_ext_clock_rate : integer := 10000000;
+
+
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := WORD
+ );
+
+ port(
+ clk_sys_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_ext_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+
+-- Reference inputs (i.e. the RX clocks recovered by the PHYs)
+ clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0);
+
+-- Feedback clocks (i.e. the outputs of the main or auxillary oscillator)
+-- Note: clk_fb_i(0) must be always connected to the primary board's oscillator
+-- (i.e. the one driving the PTP and Ethernet PHY) to ensure correct operation
+-- of the PTP core.
+ clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0);
+
+-- DMTD Offset clock
+ clk_dmtd_i : in std_logic;
+
+-- External reference clock (e.g. 10 MHz from Cesium/GPSDO). Used only if
+-- g_with_ext_clock_input == true
+ clk_ext_i : in std_logic;
+
+-- External clock, multiplied to 125 MHz using the FPGA's PLL
+ clk_ext_mul_i : in std_logic;
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+-- External clock sync/alignment singnal. SoftPLL will align clk_ext_i/clk_fb_i(0)
+-- to match the edges immediately following the rising edge in sync_p_i.
+ pps_csync_p1_i : in std_logic;
+ pps_ext_a_i : in std_logic;
+
+-- DMTD oscillator drive
+ dac_dmtd_data_o : out std_logic_vector(15 downto 0);
+-- When HI, load the data from dac_dmtd_data_o to the DAC.
+ dac_dmtd_load_o : out std_logic;
+
+-- Output channel DAC value
+ dac_out_data_o : out std_logic_vector(15 downto 0);
+-- Output channel select (0 = Output channel 0, 1 == OC 1, etc...)
+ dac_out_sel_o : out std_logic_vector(3 downto 0);
+ dac_out_load_o : out std_logic;
+
+-- Output enable input: when HI, enables locking the output(s)
+-- to the reference clock(s)
+ out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0);
+-- When HI, the respective clock output is locked.
+ out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0);
+
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_irq_o : out std_logic;
+ debug_o : out std_logic_vector(5 downto 0);
+
+-- Debug FIFO readout interrupt
+ dbg_fifo_irq_o : out std_logic
+ );
+
+end wr_softpll_ng;
+
+architecture rtl of wr_softpll_ng is
+
+ alias rst_n_i : std_logic is rst_sys_n_i;
+
+ constant c_log2_replication : integer := 2;
+ constant c_use_multi_dmtd : boolean := false;
+
+ constant c_DBG_FIFO_THRESHOLD : integer := 8180;
+ constant c_DBG_FIFO_COALESCE : integer := 100;
+ constant c_BB_ERROR_BITS : integer := 16;
+
+ component dmtd_with_deglitcher
+ generic (
+ g_counter_bits : natural;
+ g_divide_input_by_2 : boolean;
+ g_reverse : boolean);
+ port (
+ rst_n_dmtdclk_i : in std_logic;
+ rst_n_sysclk_i : in std_logic;
+ clk_in_i : in std_logic;
+ clk_dmtd_i : in std_logic;
+ clk_sys_i : in std_logic;
+ resync_p_a_i : in std_logic := '0';
+ resync_p_o : out std_logic;
+ resync_start_p_i : in std_logic;
+ resync_done_o : out std_logic;
+ shift_en_i : in std_logic;
+ shift_dir_i : in std_logic;
+ clk_dmtd_en_i : in std_logic := '1';
+ deglitch_threshold_i : in std_logic_vector(15 downto 0);
+ dbg_dmtdout_o : out std_logic;
+ tag_o : out std_logic_vector(g_counter_bits-1 downto 0);
+ tag_stb_p1_o : out std_logic;
+ dbg_clk_d3_o : out std_logic);
+ end component;
+
+ component spll_wb_slave
+ generic (
+ g_with_debug_fifo : integer);
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(5 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_int_o : out std_logic;
+ irq_tag_i : in std_logic;
+ regs_i : in t_spll_in_registers;
+ regs_o : out t_spll_out_registers);
+ end component;
+
+ component spll_aligner
+ generic (
+ g_counter_width : integer;
+ g_ref_clock_rate : integer;
+ g_in_clock_rate : integer;
+ g_sample_rate : integer);
+ port (
+ clk_sys_i : in std_logic;
+ clk_in_i : in std_logic;
+ clk_ref_i : in std_logic;
+ rst_n_sys_i : in std_logic;
+ rst_n_ref_i : in std_logic;
+ rst_n_ext_i : in std_logic;
+ pps_ext_a_i : in std_logic;
+ pps_csync_p1_i : in std_logic;
+ sample_cref_o : out std_logic_vector(g_counter_width-1 downto 0);
+ sample_cin_o : out std_logic_vector(g_counter_width-1 downto 0);
+ sample_valid_o : out std_logic;
+ sample_ack_i : in std_logic);
+ end component;
+ function f_num_total_channels
+ return integer is
+ begin
+ if(g_with_ext_clock_input) then
+ return g_num_ref_inputs + g_num_outputs + 1;
+ else
+ return g_num_ref_inputs + g_num_outputs;
+ end if;
+ end f_num_total_channels;
+
+ function f_pick (
+ cond : boolean;
+ if_true : std_logic;
+ if_false : std_logic
+ ) return std_logic is
+ begin
+ if(cond) then
+ return if_true;
+ else
+ return if_false;
+ end if;
+ end f_pick;
+
+ function f_pick (
+ cond : boolean;
+ if_true : integer;
+ if_false : integer
+ ) return integer is
+ begin
+ if(cond) then
+ return if_true;
+ else
+ return if_false;
+ end if;
+ end f_pick;
+
+ function resize(x : std_logic_vector; new_length : integer) return std_logic_vector is
+ variable tmp : std_logic_vector(new_length-1 downto 0);
+ begin
+ tmp := (others => '0');
+ tmp (x'length-1 downto 0) := x;
+ return tmp;
+ end resize;
+
+ type t_tag_array is array (0 to f_num_total_channels-1) of std_logic_vector(g_tag_bits-1 downto 0);
+
+ type t_phase_error_array is array(0 to g_num_outputs-1) of std_logic_vector(c_BB_ERROR_BITS-1 downto 0);
+
+ signal tags, tags_masked : t_tag_array;
+ signal tags_grant_p, tags_p, tags_req, tags_grant : std_logic_vector(f_num_total_channels-1 downto 0);
+ signal tag_muxed : std_logic_vector(g_tag_bits-1 downto 0);
+ signal tag_src, tag_src_pre : std_logic_vector (5 downto 0);
+ signal tag_valid, tag_valid_pre : std_logic;
+
+ signal deglitch_thr_slv : std_logic_vector(15 downto 0);
+
+ signal irq_tag : std_logic;
+
+ signal rcer_int : std_logic_vector(g_num_ref_inputs-1 downto 0);
+ signal ocer_int : std_logic_vector(g_num_outputs-1 downto 0);
+
+ signal wb_irq_out : std_logic;
+
+ signal wb_out : t_wishbone_slave_out;
+ signal wb_in : t_wishbone_slave_in;
+ signal regs_in : t_SPLL_out_registers;
+ signal regs_out : t_SPLL_in_registers;
+
+ -- Debug FIFO signals
+ signal dbg_fifo_almostfull : std_logic;
+ signal dbg_seq_id : unsigned(15 downto 0);
+ signal dbg_fifo_permit_write : std_logic;
+ signal dbg_fifo_irq : std_logic := '0';
+
+ -- Temporary vectors for DDMTD clock selection (straight/reversed)
+ signal dmtd_ref_clk_in, dmtd_ref_clk_dmtd : std_logic_vector(g_num_ref_inputs-1 downto 0);
+ signal rst_n_dmtd_ref_clk : std_logic_vector(g_num_ref_inputs-1 downto 0);
+
+ signal dmtd_fb_clk_in, dmtd_fb_clk_dmtd : std_logic_vector(g_num_outputs-1 downto 0);
+ signal rst_n_dmtd_fb_clk : std_logic_vector(g_num_outputs-1 downto 0);
+
+ signal ext_ref_present : std_logic;
+ signal fb_resync_out : std_logic_vector(g_num_outputs-1 downto 0);
+
+ signal ref_resync_start_p : std_logic_vector(31 downto 0);
+ signal fb_resync_start_p : std_logic_vector(15 downto 0);
+
+ type t_aligner_sample_array is array(0 to g_num_outputs) of std_logic_vector(27 downto 0);
+
+ signal aligner_sample_valid, aligner_sample_ack : std_logic_vector(g_num_outputs downto 0);
+ signal aligner_sample_cref, aligner_sample_cin : t_aligner_sample_array;
+
+begin -- rtl
+
+ U_Adapter : wb_slave_adapter
+ generic map(
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ master_i => wb_out,
+ master_o => wb_in,
+ sl_adr_i => wb_adr_i,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_stall_o => wb_stall_o);
+
+ U_Meas_DMTD_Freq: gc_frequency_meter
+ generic map (
+ g_with_internal_timebase => false,
+ g_clk_sys_freq => 1,
+ g_counter_bits => 28)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_dmtd_i,
+ rst_n_i => rst_n_i,
+ pps_p1_i => pps_ext_a_i,
+ freq_o => regs_out.f_dmtd_freq_i,
+ freq_valid_o => open); -- fixme
+
+ U_Meas_REF_Freq: gc_frequency_meter
+ generic map (
+ g_with_internal_timebase => false,
+ g_clk_sys_freq => 1,
+ g_counter_bits => 28)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_fb_i(0),
+ rst_n_i => rst_n_i,
+ pps_p1_i => pps_ext_a_i,
+ freq_o => regs_out.f_ref_freq_i,
+ freq_valid_o => open); -- fixme
+
+ U_Meas_EXT_Freq: gc_frequency_meter
+ generic map (
+ g_with_internal_timebase => false,
+ g_clk_sys_freq => 1,
+ g_counter_bits => 28)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_ext_i,
+ rst_n_i => rst_n_i,
+ pps_p1_i => pps_ext_a_i,
+ freq_o => regs_out.f_ext_freq_i,
+ freq_valid_o => open); -- fixme
+
+
+ gen_ref_dmtds : for i in 0 to g_num_ref_inputs-1 generate
+
+ DMTD_REF : dmtd_with_deglitcher
+ generic map (
+ g_counter_bits => g_tag_bits,
+ g_divide_input_by_2 => g_divide_input_by_2,
+ g_reverse => g_reverse_dmtds)
+ port map (
+ rst_n_dmtdclk_i => rst_dmtd_n_i,
+ rst_n_sysclk_i => rst_n_i,
+
+ clk_dmtd_i => clk_dmtd_i,
+ clk_dmtd_en_i => '1',
+
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_ref_i(i),
+
+ resync_done_o => open,
+ resync_start_p_i => '0',
+ resync_p_a_i => fb_resync_out(0),
+ resync_p_o => open,
+
+ tag_o => tags(i),
+ tag_stb_p1_o => tags_p(i),
+ shift_en_i => '0',
+ shift_dir_i => '0',
+ deglitch_threshold_i => deglitch_thr_slv,
+ dbg_dmtdout_o => open);
+
+
+ end generate gen_ref_dmtds;
+
+ gen_feedback_dmtds : for i in 0 to g_num_outputs-1 generate
+
+ DMTD_FB : dmtd_with_deglitcher
+ generic map (
+ g_counter_bits => g_tag_bits,
+ g_divide_input_by_2 => g_divide_input_by_2,
+ g_reverse => g_reverse_dmtds)
+ port map (
+ rst_n_dmtdclk_i => rst_dmtd_n_i,
+ rst_n_sysclk_i => rst_n_i,
+
+ clk_dmtd_i => clk_dmtd_i,
+ clk_dmtd_en_i => '1',
+
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_fb_i(i),
+
+ resync_done_o => open,
+ resync_start_p_i => '0',
+ resync_p_a_i => fb_resync_out(0),
+ resync_p_o => fb_resync_out(i),
+
+ tag_o => tags(i+g_num_ref_inputs),
+ tag_stb_p1_o => tags_p(i+g_num_ref_inputs),
+ shift_en_i => '0',
+ shift_dir_i => '0',
+
+ deglitch_threshold_i => deglitch_thr_slv,
+ dbg_dmtdout_o => open,
+ dbg_clk_d3_o => open); --debug_o(4));
+
+
+ end generate gen_feedback_dmtds;
+
+ -- drive unused debug output
+ debug_o(4) <= '0';
+
+ gen_with_ext_clock_input : if(g_with_ext_clock_input) generate
+
+ debug_o(0) <= fb_resync_out(0);
+ debug_o(1) <= tags_p(g_num_ref_inputs + g_num_outputs);
+ debug_o(2) <= tags_p(g_num_ref_inputs);
+
+ U_DMTD_EXT : dmtd_with_deglitcher
+ generic map (
+ g_counter_bits => g_tag_bits,
+ g_divide_input_by_2 => g_divide_input_by_2,
+ g_reverse => g_reverse_dmtds)
+ port map (
+ rst_n_dmtdclk_i => rst_dmtd_n_i,
+ rst_n_sysclk_i => rst_n_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_dmtd_en_i => '1',
+
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_ext_mul_i,
+
+ resync_done_o => open,
+ resync_start_p_i => '0',
+ resync_p_a_i => fb_resync_out(0),
+ resync_p_o => open,
+
+ tag_o => tags(g_num_ref_inputs + g_num_outputs),
+ tag_stb_p1_o => tags_p(g_num_ref_inputs + g_num_outputs),
+ shift_en_i => '0',
+ shift_dir_i => '0',
+
+ deglitch_threshold_i => deglitch_thr_slv,
+ dbg_dmtdout_o => debug_o(3),
+ dbg_clk_d3_o => debug_o(5));
+
+ U_Aligner_EXT : spll_aligner
+ generic map (
+ g_counter_width => 28,
+ g_ref_clock_rate => g_ref_clock_rate,
+ g_in_clock_rate => g_ext_clock_rate,
+ g_sample_rate => 100)
+ port map (
+ clk_sys_i => clk_sys_i,
+ clk_in_i => clk_ext_i,
+ clk_ref_i => clk_fb_i(0),
+ rst_n_sys_i => rst_n_i,
+ rst_n_ref_i => rst_ref_n_i,
+ rst_n_ext_i => rst_ext_n_i,
+ pps_ext_a_i => pps_ext_a_i,
+ pps_csync_p1_i => pps_csync_p1_i,
+ sample_cref_o => aligner_sample_cref(g_num_outputs),
+ sample_cin_o => aligner_sample_cin(g_num_outputs),
+ sample_valid_o => aligner_sample_valid(g_num_outputs),
+ sample_ack_i => aligner_sample_ack(g_num_outputs)
+ );
+
+ aligner_sample_valid(g_num_outputs-1 downto 0) <= (others => '0');
+
+ aligner_sample_cref(0 to g_num_outputs-1) <= (others => (others => '0'));
+ aligner_sample_cin(0 to g_num_outputs-1) <= (others => (others => '0'));
+
+ regs_out.eccr_ext_supported_i <= '1' when g_with_ext_clock_input else '0';
+ regs_out.eccr_ext_ref_locked_i <= clk_ext_mul_locked_i;
+ regs_out.eccr_ext_ref_stopped_i <= clk_ext_stopped_i;
+ clk_ext_rst_o <= regs_in.eccr_ext_ref_pllrst_o;
+ end generate gen_with_ext_clock_input;
+
+
+ gen_without_ext_clock_input : if(not g_with_ext_clock_input) generate
+ aligner_sample_valid <= (others => '0');
+ aligner_sample_cref <= (others => (others => '0'));
+ aligner_sample_cin <= (others => (others => '0'));
+
+ regs_out.eccr_ext_supported_i <= '0';
+ regs_out.eccr_ext_ref_locked_i <= '0';
+ regs_out.eccr_ext_ref_stopped_i <= '0';
+ clk_ext_rst_o <= '0';
+ -- drive unused debug outputs
+ debug_o(0) <= '0';
+ debug_o(1) <= '0';
+ debug_o(2) <= '0';
+ debug_o(3) <= '0';
+ debug_o(5) <= '0';
+ end generate gen_without_ext_clock_input;
+
+ p_ack_aligner_samples: process(regs_in, aligner_sample_valid)
+ begin
+ regs_out.al_cr_valid_i <= (others => '0');
+ for i in 0 to g_num_outputs loop
+ aligner_sample_ack(i) <= regs_in.al_cr_valid_o(i) and regs_in.al_cr_valid_load_o;
+ regs_out.al_cr_valid_i(i) <= aligner_sample_valid(i);
+ end loop; -- i in 0 to g_num_outputs
+ end process;
+
+ p_mux_aligner_samples: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ for i in 0 to g_num_outputs loop
+ if(aligner_sample_ack(i) = '1') then
+ regs_out.al_cref_i <= resize( aligner_sample_cref(i), 32 );
+ regs_out.al_cin_i <= resize( aligner_sample_cin(i), 32 );
+ end if;
+ end loop;
+ end if;
+ end process;
+
+
+ U_WB_SLAVE : spll_wb_slave
+ generic map (
+ g_with_debug_fifo => f_pick(g_with_debug_fifo, 1, 0))
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ wb_adr_i => wb_in.adr(5 downto 0),
+ wb_dat_i => wb_in.dat,
+ wb_dat_o => wb_out.dat,
+ wb_cyc_i => wb_in.cyc,
+ wb_sel_i => wb_in.sel,
+ wb_stb_i => wb_in.stb,
+ wb_we_i => wb_in.we,
+ wb_ack_o => wb_out.ack,
+ wb_int_o => wb_irq_out,
+ wb_stall_o => open,
+
+ regs_o => regs_in,
+ regs_i => regs_out,
+
+ irq_tag_i => irq_tag);
+
+ -- drive unused outputs
+ wb_out.err <= '0';
+ wb_out.rty <= '0';
+ wb_out.stall <= '0';
+ wb_out.int <= '0';
+
+ p_ocer_rcer_regs : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ ocer_int <= (others => '0');
+ rcer_int <= (others => '0');
+ else
+ if(regs_in.ocer_load_o = '1') then
+ ocer_int <= regs_in.ocer_o(g_num_outputs -1 downto 0);
+ end if;
+
+ if(regs_in.rcer_load_o = '1') then
+ rcer_int <= regs_in.rcer_o(g_num_ref_inputs -1 downto 0);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ regs_out.ocer_i(g_num_outputs-1 downto 0) <= ocer_int;
+ regs_out.ocer_i(7 downto g_num_outputs) <= (others => '0');
+
+ regs_out.rcer_i(g_num_ref_inputs-1 downto 0) <= rcer_int;
+ regs_out.rcer_i(31 downto g_num_ref_inputs) <= (others => '0');
+
+ p_latch_tags : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ tags_req <= (others => '0');
+ tags_grant <= (others => '0');
+ else
+ f_rr_arbitrate(tags_req, tags_grant, tags_grant);
+
+ for i in 0 to g_num_ref_inputs-1 loop
+ if(tags_p(i) = '1') then
+ tags_req(i) <= rcer_int(i);
+ elsif(tags_grant(i) = '1') then
+ tags_req(i) <= '0';
+ end if;
+ end loop; -- i
+
+ for i in 0 to g_num_outputs-1 loop
+ if(tags_p(i + g_num_ref_inputs) = '1') then
+ tags_req(i + g_num_ref_inputs) <= ocer_int(i);
+ elsif(tags_grant(i + g_num_ref_inputs) = '1') then
+ tags_req(i + g_num_ref_inputs) <= '0';
+ end if;
+ end loop; -- i
+
+ if(g_with_ext_clock_input and tags_p(f_num_total_channels-1) = '1') then
+ tags_req(f_num_total_channels-1) <= regs_in.eccr_ext_en_o;
+ elsif(g_with_ext_clock_input and tags_grant(f_num_total_channels-1) = '1') then
+ tags_req(f_num_total_channels-1) <= '0';
+ end if;
+
+ end if;
+ end if;
+ end process;
+
+ tags_grant_p <= tags_req and tags_grant;
+
+ p_mux_tags : process(clk_sys_i)
+ variable muxed : std_logic_vector(g_tag_bits-1 downto 0);
+ variable src_id : std_logic_vector(5 downto 0);
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ tag_muxed <= (others => '0');
+ tag_src_pre <= (others => '0');
+ tag_src <= (others => '0');
+ tag_valid_pre <= '0';
+ tag_valid <= '0';
+ else
+
+ for i in 0 to f_num_total_channels-1 loop
+ if(tags_grant_p(i) = '1') then
+ tags_masked(i) <= tags(i);
+ else
+ tags_masked(i) <= (others => '0');
+ end if;
+ end loop; -- i
+
+ if(unsigned(tags_grant_p) /= 0) then
+ tag_valid_pre <= '1';
+ else
+ tag_valid_pre <= '0';
+ end if;
+
+ tag_valid <= tag_valid_pre;
+
+ tag_src_pre <= f_onehot_decode(tags_grant_p, tag_src_pre'length);
+ tag_src <= tag_src_pre;
+
+ muxed := (others => '0');
+
+ for i in 0 to f_num_total_channels-1 loop
+ muxed := muxed or tags_masked(i);
+ end loop;
+
+ tag_muxed <= muxed;
+
+ end if;
+ end if;
+ end process;
+
+ regs_out.trr_wr_req_i <= tag_valid and not regs_in.trr_wr_full_o;
+ regs_out.trr_chan_id_i <= '0'&tag_src;
+
+ regs_out.trr_value_i(g_tag_bits-1 downto 0) <= tag_muxed;
+ regs_out.trr_value_i(23 downto g_tag_bits) <= (others => '0');
+
+ regs_out.occr_out_en_i(g_num_outputs-1 downto 0) <= out_enable_i;
+ regs_out.occr_out_en_i(7 downto g_num_outputs) <= (others => '0');
+
+ out_locked_o <= regs_in.occr_out_lock_o(g_num_outputs-1 downto 0);
+
+ irq_tag <= not regs_in.trr_wr_empty_o;
+
+ deglitch_thr_slv <= regs_in.deglitch_thr_o;
+
+
+
+ -----------------------------------------------------------------------------
+ -- Debugging FIFO
+ -----------------------------------------------------------------------------
+
+ gen_with_debug_fifo : if(g_with_debug_fifo = true) generate
+
+ dbg_fifo_almostfull <= '1' when unsigned(regs_in.dfr_host_wr_usedw_o) > 8180 else '0';
+
+ p_request_counter : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ dbg_seq_id <= (others => '0');
+ else
+ if(regs_in.dfr_spll_eos_o = '1' and regs_in.dfr_spll_eos_wr_o = '1') then
+ dbg_seq_id <= dbg_seq_id + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_fifo_permit_write : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ dbg_fifo_permit_write <= '1';
+ else
+ if(dbg_fifo_almostfull = '0') then
+ dbg_fifo_permit_write <= '1';
+ elsif(regs_in.dfr_spll_eos_o = '1' and regs_in.dfr_spll_eos_wr_o = '1') then
+ dbg_fifo_permit_write <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_coalesce_fifo_irq : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ dbg_fifo_irq <= '0';
+ else
+ if(unsigned(regs_in.dfr_host_wr_usedw_o) = 0) then
+ dbg_fifo_irq <= '0';
+ elsif(unsigned(regs_in.dfr_host_wr_usedw_o) = c_DBG_FIFO_COALESCE) then
+ dbg_fifo_irq <= '1';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ regs_out.dfr_host_wr_req_i <= regs_in.dfr_spll_value_wr_o and dbg_fifo_permit_write;
+ regs_out.dfr_host_value_i <= regs_in.dfr_spll_eos_o & regs_in.dfr_spll_value_o;
+ regs_out.dfr_host_seq_id_i <= std_logic_vector(dbg_seq_id);
+
+ end generate gen_with_debug_fifo;
+
+ gen_without_debug_fifo : if(g_with_debug_fifo = false) generate
+ dbg_fifo_irq <= '0';
+ regs_out.dfr_host_wr_req_i <= '0';
+ regs_out.dfr_host_value_i <= (others => '0');
+ regs_out.dfr_host_seq_id_i <= (others => '0');
+ end generate gen_without_debug_fifo;
+
+ dbg_fifo_irq_o <= dbg_fifo_irq;
+
+ -----------------------------------------------------------------------------
+ -- CSR N_OUT/N_REF fields
+ -----------------------------------------------------------------------------
+
+ regs_out.csr_n_ref_i <= std_logic_vector(to_unsigned(g_num_ref_inputs, regs_out.csr_n_ref_i'length));
+ regs_out.csr_n_out_i <= std_logic_vector(to_unsigned(g_num_outputs, regs_out.csr_n_out_i'length));
+
+ dac_dmtd_load_o <= regs_in.dac_hpll_wr_o;
+ dac_dmtd_data_o <= regs_in.dac_hpll_o;
+
+ dac_out_data_o <= regs_in.dac_main_value_o;
+ dac_out_sel_o <= regs_in.dac_main_dac_sel_o;
+ dac_out_load_o <= regs_in.dac_main_value_wr_o;
+
+ wb_irq_o <= wb_irq_out;
+
+ regs_out.al_cr_required_i <= (others => '0');
+ regs_out.csr_dbg_supported_i <= '0';
+ regs_out.f_dmtd_valid_i <= '0';
+ regs_out.f_ref_valid_i <= '0';
+ regs_out.f_ext_valid_i <= '0';
+ regs_out.trr_disc_i <= '0';
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd
new file mode 100644
index 000000000..ea3b6ab63
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_softpll_ng/xwr_softpll_ng.vhd
@@ -0,0 +1,244 @@
+-------------------------------------------------------------------------------
+-- Title : White Rabbit Softcore PLL (new generation) - SoftPLL-ng
+-- Project : White Rabbit
+-------------------------------------------------------------------------------
+-- File : xwr_softpll_ng.vhd
+-- Author : Tomasz Włostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2011-01-29
+-- Last update: 2017-02-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- Struct'ized version of wr_softpll_ng.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wishbone_pkg.all;
+use work.softpll_pkg.all;
+
+entity xwr_softpll_ng is
+ generic(
+-- Number of bits in phase tags produced by DDMTDs.
+-- Must be large enough to cover at least a hundred of DDMTD periods to ensure
+-- correct operation of the SoftPLL software servo algorithm - that
+-- means, for a typical DMTD frequency offset N=16384, there number of tag bits
+-- should be log2(N) + 7 == 21. Note: the value must match the TAG_BITS constant
+-- in spll_defs.h file!
+ g_tag_bits : integer;
+
+-- These two are obvious:
+ g_num_ref_inputs : integer := 1;
+ g_num_outputs : integer := 1;
+
+-- When true, an additional FIFO is instantiated, providing a realtime record
+-- of user-selectable SoftPLL parameters (e.g. tag values, phase error, DAC drive).
+-- These values can be read by "spll_dbg_proxy" daemon for further analysis.
+ g_with_debug_fifo : boolean := false;
+
+-- When true, an additional accumulating bang-bang phase detector is instantiated
+-- for wideband locking of the local oscillator to an external stable reference
+-- (e.g. GPSDO/Cesium 10 MHz)
+ g_with_ext_clock_input : boolean := false;
+
+-- When true, DDMTD inputs are reverse (so that the DDMTD offset clocks is
+-- being sampled by the measured clock). This is functionally equivalent to
+-- "direct" operation, but may improve FPGA timing/routability.
+ g_reverse_dmtds : boolean := true;
+
+-- Divides the DDMTD clock inputs by 2, removing the "CLOCK_DEDICATED_ROUTE"
+-- errors under ISE tools, at the cost of bandwidth reduction. Use with care.
+ g_divide_input_by_2 : boolean := false;
+
+ g_ref_clock_rate : integer := 125000000;
+ g_ext_clock_rate : integer := 10000000;
+
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE
+ );
+
+ port(
+ clk_sys_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_ext_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+
+-- Reference inputs (i.e. the RX clocks recovered by the PHYs)
+ clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0);
+-- Feedback clocks (i.e. the outputs of the main or aux oscillator)
+ clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0);
+-- DMTD Offset clock
+ clk_dmtd_i : in std_logic;
+
+-- External reference clock (e.g. 10 MHz from Cesium/GPSDO). Used only if
+-- g_with_ext_clock_input == true
+ clk_ext_i : in std_logic;
+
+-- External clock, multiplied to 125 MHz using the FPGA's PLL
+ clk_ext_mul_i : in std_logic;
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+-- External clock sync/alignment singnal. SoftPLL will clk_ext_i/clk_fb_i(0)
+-- to match the edges immediately following the rising edge in sync_p_i.
+ pps_csync_p1_i : in std_logic;
+
+ pps_ext_a_i : in std_logic;
+
+-- DMTD oscillator drive
+ dac_dmtd_data_o : out std_logic_vector(15 downto 0);
+ dac_dmtd_load_o : out std_logic;
+
+-- Output channel DAC value
+ dac_out_data_o : out std_logic_vector(15 downto 0);
+-- Output channel select (0 = channel 0, etc. )
+ dac_out_sel_o : out std_logic_vector(3 downto 0);
+ dac_out_load_o : out std_logic;
+
+ out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0);
+ out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0);
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ debug_o : out std_logic_vector(5 downto 0);
+ dbg_fifo_irq_o : out std_logic
+ );
+
+end xwr_softpll_ng;
+
+architecture wrapper of xwr_softpll_ng is
+ component wr_softpll_ng
+ generic (
+ g_tag_bits : integer;
+ g_num_ref_inputs : integer;
+ g_num_outputs : integer;
+ g_with_debug_fifo : boolean;
+ g_with_ext_clock_input : boolean;
+ g_reverse_dmtds : boolean;
+ g_divide_input_by_2 : boolean;
+ g_ref_clock_rate : integer;
+ g_ext_clock_rate : integer;
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity);
+ port (
+ clk_sys_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_ext_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0);
+ clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0);
+ clk_dmtd_i : in std_logic;
+ clk_ext_i : in std_logic;
+ clk_ext_mul_i : in std_logic;
+ clk_ext_mul_locked_i : in std_logic;
+ clk_ext_stopped_i : in std_logic;
+ clk_ext_rst_o : out std_logic;
+ pps_csync_p1_i : in std_logic;
+ pps_ext_a_i : in std_logic;
+ dac_dmtd_data_o : out std_logic_vector(15 downto 0);
+ dac_dmtd_load_o : out std_logic;
+ dac_out_data_o : out std_logic_vector(15 downto 0);
+ dac_out_sel_o : out std_logic_vector(3 downto 0);
+ dac_out_load_o : out std_logic;
+ out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0);
+ out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0);
+
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0);
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ wb_irq_o : out std_logic;
+ debug_o : out std_logic_vector(5 downto 0);
+ dbg_fifo_irq_o : out std_logic);
+ end component;
+
+begin -- behavioral
+
+ U_Wrapped_Softpll : wr_softpll_ng
+ generic map (
+ g_tag_bits => g_tag_bits,
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_num_ref_inputs => g_num_ref_inputs,
+ g_num_outputs => g_num_outputs,
+ g_with_debug_fifo => g_with_debug_fifo,
+ g_with_ext_clock_input => g_with_ext_clock_input,
+ g_reverse_dmtds => g_reverse_dmtds,
+ g_divide_input_by_2 => g_divide_input_by_2,
+ g_ref_clock_rate => g_ref_clock_rate,
+ g_ext_clock_rate => g_ext_clock_rate
+ )
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_sys_n_i => rst_sys_n_i,
+ rst_ref_n_i => rst_ref_n_i,
+ rst_ext_n_i => rst_ext_n_i,
+ rst_dmtd_n_i => rst_dmtd_n_i,
+ clk_ref_i => clk_ref_i,
+ clk_fb_i => clk_fb_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_ext_i => clk_ext_i,
+ clk_ext_mul_i => clk_ext_mul_i,
+ clk_ext_mul_locked_i => clk_ext_mul_locked_i,
+ clk_ext_stopped_i => clk_ext_stopped_i,
+ clk_ext_rst_o => clk_ext_rst_o,
+ pps_csync_p1_i => pps_csync_p1_i,
+ pps_ext_a_i => pps_ext_a_i,
+ dac_dmtd_data_o => dac_dmtd_data_o,
+ dac_dmtd_load_o => dac_dmtd_load_o,
+ dac_out_data_o => dac_out_data_o,
+ dac_out_sel_o => dac_out_sel_o,
+ dac_out_load_o => dac_out_load_o,
+ out_enable_i => out_enable_i,
+ out_locked_o => out_locked_o,
+ wb_adr_i => slave_i.adr,
+ wb_dat_i => slave_i.dat,
+ wb_dat_o => slave_o.dat,
+ wb_cyc_i => slave_i.cyc,
+ wb_sel_i => slave_i.sel,
+ wb_stb_i => slave_i.stb,
+ wb_we_i => slave_i.we,
+ wb_ack_o => slave_o.ack,
+ wb_stall_o => slave_o.stall,
+ wb_irq_o => slave_o.int,
+ debug_o => debug_o,
+ dbg_fifo_irq_o => dbg_fifo_irq_o);
+
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+
+end wrapper;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd
new file mode 100644
index 000000000..364ba970f
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/dropping_buffer.vhd
@@ -0,0 +1,142 @@
+-------------------------------------------------------------------------------
+-- Title : Dropping buffer
+-- Project : WR Stramers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : dropping_buffer.vhd
+-- Author : Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-- Created : 2012-11-02
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- A FIFO that can be cleared fast
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.genram_pkg.all; -- needed for f_log2_size()
+
+entity dropping_buffer is
+ generic (
+ g_size : integer;
+ g_data_width : integer);
+
+ port
+ (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ d_req_o : out std_logic;
+ d_drop_i : in std_logic;
+ d_accept_i : in std_logic;
+ d_valid_i : in std_logic;
+
+ d_o : out std_logic_vector(g_data_width-1 downto 0);
+ d_valid_o : out std_logic;
+ d_req_i : in std_logic);
+
+
+end dropping_buffer;
+
+architecture behavioral of dropping_buffer is
+
+ type t_mem_array is array(0 to g_size-1) of std_logic_vector(g_data_width-1 downto 0);
+ subtype t_counter is unsigned(f_log2_size(g_size)-1 downto 0);
+
+ signal wr_ptr, rd_ptr, boundary : t_counter := (others => '0');
+ signal full, empty_comb : std_logic;
+ signal empty_reg : std_logic := '0';
+ signal mem : t_mem_array;
+
+begin -- behavioral
+
+ p_counters : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ wr_ptr <= (others => '0');
+ rd_ptr <= (others => '0');
+ boundary <= (others => '0');
+ else
+ if(d_accept_i = '1') then
+ boundary <= wr_ptr;
+ end if;
+
+ if(d_drop_i = '1') then
+ wr_ptr <= boundary;
+ elsif(d_valid_i = '1' and full = '0') then
+ wr_ptr <= wr_ptr + 1;
+ end if;
+
+ if (d_req_i = '1' and empty_reg = '0' and empty_comb = '0') then
+ rd_ptr <= rd_ptr + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ empty_comb <= '1' when (boundary = rd_ptr) else '0';
+ full <= '1' when (wr_ptr + 1 = rd_ptr) else '0';
+
+ d_req_o <= not full;
+
+ p_empty_reg : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' then
+ empty_reg <= '1';
+ else
+ empty_reg <= empty_comb;
+ end if;
+ end if;
+ end process;
+
+
+ p_mem_read : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(d_req_i = '1' and empty_reg = '0' and empty_comb = '0') then
+ d_o <= mem(to_integer(rd_ptr));
+ d_valid_o <= '1';
+ else
+ d_o <= (others => '0');
+ d_valid_o <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_mem_write : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if(d_valid_i = '1') then
+ mem(to_integer(wr_ptr)) <= d_i;
+ end if;
+ end if;
+ end process;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd
new file mode 100644
index 000000000..bdf112f7a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_detector.vhd
@@ -0,0 +1,106 @@
+-------------------------------------------------------------------------------
+-- Title : Escape detecotr
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : escape_detector.vhd
+-- Author : Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-- Created : 2012-10-01
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- It detects the "escape code" (e.g.0xCAFE) and removes it from the data stream.
+-- See escape_inserter for details
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity escape_detector is
+ generic(
+ g_data_width : integer;
+ g_escape_code : std_logic_vector
+ );
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ d_detect_enable_i : in std_logic;
+ d_valid_i : in std_logic;
+ d_req_o : out std_logic;
+
+ d_o : out std_logic_vector(g_data_width-1 downto 0);
+ d_escape_o : out std_logic;
+ d_valid_o : out std_logic;
+ d_req_i : in std_logic
+ );
+
+end escape_detector;
+
+architecture behavioral of escape_detector is
+
+ type t_state is (IDLE, CHECK_ESCAPE);
+
+ signal state : t_state;
+ signal is_escape_code : std_logic;
+
+begin -- behavioral
+
+ d_req_o <= d_req_i;
+
+ is_escape_code <= '1' when (d_detect_enable_i = '1' and state = IDLE and d_valid_i = '1' and d_i = g_escape_code) else '0';
+
+ d_o <= g_escape_code when (state = CHECK_ESCAPE and d_i = x"0000") else d_i;
+
+ d_valid_o <= d_valid_i and not is_escape_code;
+ d_escape_o <= '1' when (state = CHECK_ESCAPE and d_i /= x"0000") else '0';
+
+ p_fsm : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' or d_detect_enable_i = '0' then
+ state <= IDLE;
+ else
+ case state is
+ when IDLE =>
+ if(d_i = g_escape_code and d_valid_i = '1') then
+ state <= CHECK_ESCAPE;
+
+ end if;
+
+ when CHECK_ESCAPE =>
+ if(d_valid_i = '1') then
+ state <= IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd
new file mode 100644
index 000000000..e289a060d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/escape_inserter.vhd
@@ -0,0 +1,141 @@
+-------------------------------------------------------------------------------
+-- Title : Escape insertion unit
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : gc_escape_inserter.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-10-01
+-- Platform : FPGA-generic
+-- Standard : VHDL '93
+------------------------------------------------------------------------------
+-- Description: Unit for inserting escaped codes in a continuous data stream.
+-- Allows for insertion of easily distinguishable control codes, such as start-
+-- or end-of-frame markers. Given an input tuple (E[d_escape_i], D[d_i]), the
+-- output (d_o) is:
+-- - D when E == 0 and D != g_escape_code
+-- - g_escape_code followed by 0 when E == 0 and D == g_escape_code
+-- - g_escape_code followed by D when E == 1.
+-- Note: When E == 1, D must not be 0.
+------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity gc_escape_inserter is
+ generic(
+ -- data path width
+ g_data_width : integer;
+ -- unique escape character (of g_data_width bits), must not be 0.
+ g_escape_code : std_logic_vector
+ );
+ port(
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- data input (unescaped)
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+
+ -- when 1, escape insertion logic is enabled (i.e. if d_i == g_escape_code,
+ -- it's translated to g_escape_code followed by 0 instead of just being passed
+ -- through
+ d_insert_enable_i : in std_logic;
+
+ -- when 1, d_i is treated as a escaped character
+ d_escape_i : in std_logic;
+
+ -- when 1, d_i and d_escape_i contain valid character
+ d_valid_i : in std_logic;
+
+ -- when 1, module can accept data in the following clock cycle.
+ d_req_o : out std_logic;
+
+ -- data output
+ d_o : out std_logic_vector (g_data_width-1 downto 0);
+
+ -- when 1, d_o contains a valid character
+ d_valid_o : out std_logic;
+
+ -- when 1, d_o/d_valid_o may output a character in the next clock cycle.
+ d_req_i : in std_logic
+ );
+
+end gc_escape_inserter;
+
+architecture behavioral of gc_escape_inserter is
+
+ type t_state is (IDLE, INSERT_ESCAPE);
+
+ signal d_prev : std_logic_vector(g_data_width-1 downto 0);
+ signal d_req_prev : std_logic;
+ signal state : t_state;
+ signal match_esc_code : std_logic;
+
+begin -- behavioral
+
+ match_esc_code <= '1' when d_i = g_escape_code else '0';
+
+ -- stop the traffic if we need to insert an escaped sequence. This
+ -- can happen when
+ -- - the input character is an escape code (d_escape_i = '1')
+ -- - the input character is not to be escaped, but it's equal to g_escape_code
+ d_req_o <= d_req_i and not (d_valid_i and (d_escape_i or match_esc_code));
+
+ d_o <= d_prev when (state = INSERT_ESCAPE) else
+ d_i when d_escape_i = '0' else
+ g_escape_code;
+
+ d_valid_o <= d_valid_i when (state = IDLE) else
+ d_req_prev;
+
+ p_fsm : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if rst_n_i = '0' or d_insert_enable_i = '0' then
+ state <= IDLE;
+ d_req_prev <= '0';
+ else
+ d_req_prev <= d_req_i;
+ case state is
+ when IDLE =>
+ -- case 1: escape the escape character sent as normal character
+ if(d_i = g_escape_code and d_valid_i = '1' and d_escape_i = '0') then
+ state <= INSERT_ESCAPE;
+ d_prev <= x"0000";
+ -- case 2: send an escaped character
+ elsif(d_escape_i = '1' and d_valid_i = '1') then
+ state <= INSERT_ESCAPE;
+ d_prev <= d_i;
+ end if;
+
+ when INSERT_ESCAPE =>
+ if(d_req_prev = '1') then
+ state <= IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd
new file mode 100644
index 000000000..b4fa5a289
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_pkg.vhd
@@ -0,0 +1,332 @@
+-------------------------------------------------------------------------------
+-- Title : Package for WR Steamers
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : streamers_pkg.vhd
+-- Author : Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-- Created : 2012-10-01
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- Package with declaration of streamer components, types and constants.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012-2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use work.wr_fabric_pkg.all;
+use work.wrcore_pkg.all;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+
+package streamers_pkg is
+ type t_streamers_op_mode is (RX_ONLY, TX_ONLY, TX_AND_RX);
+ -----------------------------------------------------------------------------------------
+ -- Transmission parameters (tx)
+ -----------------------------------------------------------------------------------------
+ type t_tx_streamer_params is record
+ -- Width of data words on tx_data_i, must be multiple of 16 bits.
+ data_width : integer;
+
+ -- Size of Tx buffer, in data words.
+ buffer_size : integer;
+
+ -- Minimum number of data words in the TX buffer that will trigger transmission of an
+ -- Ethernet frame. It cannot be breater than g_tx_buffer_size; it is recommended that
+ -- g_tx_buffer_size = 2 * g_tx_threshold.
+ -- Note that in order for a frame to be transmitted, the buffer must conatain at
+ -- least one complete block.ransmitted, the buffer must conatain at
+ -- least one complete block.
+ threshold : integer;
+
+ -- Maximum number of data words in a single Ethernet frame. It also defines
+ -- the maximum block size (since blocks can't be currently split across
+ -- multiple frames). It cannot be greater than g_tx_buffer_size
+ max_words_per_frame : integer;
+
+ -- Transmission timeout (in clk_sys_i cycles), after which the contents
+ -- of TX buffer are sent regardless of the amount of data that is currently
+ -- stored in the buffer, so that data in the buffer does not get stuck.
+ timeout : integer;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy: the streamers initially used in Btrain did not check/insert the escape
+ -- code. This is justified if only one block of a known number of words is sent/expected
+ escape_code_disable : boolean;
+ end record;
+
+ -----------------------------------------------------------------------------------------
+ -- Reception parameters (rx)
+ -----------------------------------------------------------------------------------------
+ type t_rx_streamer_params is record
+ -- Width of the data words, must be multiple of 16 bits. This value set to this generic
+ -- on the receviving device must be the same as the value of g_tx_data_width set on the
+ -- transmitting node. The g_rx_data_width and g_tx_data_width can be set to different
+ -- values in the same device (i.e. instantiation of xwr_transmission entity). It is the
+ -- responsibility of a network designer to make sure these parameters are properly set
+ -- in the network.
+ data_width : integer;
+
+ -- Size of RX buffer, in data words.
+ buffer_size : integer;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy: the streamers that were initially used in Btrain did not check/insert
+ -- the escape code. This is justified if only one block of a known number of words is
+ -- sent/expected.
+ escape_code_disable : boolean;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy: the streamers that were initially used in Btrain accepted only a fixed
+ -- number of words, regardless of the frame content. If this generic is set to number
+ -- other than zero, only a fixed number of words is accepted.
+ -- In combination with the g_escape_code_disable generic set to TRUE, the behaviour of
+ -- the "Btrain streamers" can be recreated.
+ expected_words_number : integer;
+ end record;
+
+ constant c_tx_streamer_params_defaut: t_tx_streamer_params :=(
+ data_width => 32,
+ buffer_size => 256,
+ threshold => 128,
+ max_words_per_frame => 256,
+ timeout => 1024,
+ escape_code_disable => FALSE);
+
+ constant c_rx_streamer_params_defaut: t_rx_streamer_params :=(
+ data_width => 32,
+ buffer_size => 256,
+ escape_code_disable => FALSE,
+ expected_words_number => 0);
+
+ type t_rx_streamer_cfg is record
+ -- Local MAC address. Leave at 0x0...0 when using with the WR MAC/Core, it will
+ -- insert its own source MAC.
+ mac_local : std_logic_vector(47 downto 0);
+ -- Remote MAC address, i.e. MAC of the device from which the data should be accpated
+ mac_remote : std_logic_vector(47 downto 0);
+ -- Ethertype of our frames. Default value is accepted by standard
+ -- configuration of the WR PTP Core
+ ethertype : std_logic_vector(15 downto 0);
+ -- 1: accept all broadcast packets
+ -- 0: accept only unicasts
+ accept_broadcasts : std_logic;
+ -- filtering of streamer frames on reception by source MAC address
+ -- 0: accept frames from any source
+ -- 1: accept frames only from the source MAC address defined in cfg_mac_remote_i
+ filter_remote : std_logic;
+ -- value in cycles of fixed-latency enforced on data
+ fixed_latency : std_logic_vector(27 downto 0);
+ end record;
+
+ type t_tx_streamer_cfg is record
+ -- Local MAC address. Leave at 0x0...0 when using with the WR MAC/Core, it will
+ -- insert its own source MAC.
+ mac_local : std_logic_vector(47 downto 0);
+ -- Destination MAC address, i.e. MAC of a device to which data is streamed.
+ mac_target : std_logic_vector(47 downto 0);
+ -- Ethertype of our frames. Default value is accepted by standard
+ -- configuration of the WR PTP Core
+ ethertype : std_logic_vector(15 downto 0);
+ -- enable tagging with VLAN tags
+ qtag_ena : std_logic;
+ ---VLAN used to tag
+ qtag_vid : std_logic_vector(11 downto 0);
+ -- priority used to tag
+ qtag_prio : std_logic_vector(2 downto 0);
+ end record;
+
+ constant c_rx_streamer_cfg_default: t_rx_streamer_cfg :=(
+ mac_local => x"000000000000",
+ mac_remote => x"000000000000",
+ ethertype => x"dbff",
+ accept_broadcasts => '1',
+ filter_remote => '0',
+ fixed_latency => x"0000000");
+
+ constant c_tx_streamer_cfg_default: t_tx_streamer_cfg :=(
+ mac_local => x"000000000000",
+ mac_target => x"ffffffffffff",
+ ethertype => x"dbff",
+ qtag_ena => '0',
+ qtag_vid => x"000",
+ qtag_prio => "000");
+
+ component xtx_streamer
+ generic (
+ g_data_width : integer := 32;
+ g_tx_buffer_size : integer := 256;
+ g_tx_threshold : integer := 128;
+ g_tx_max_words_per_frame : integer := 256;
+ g_tx_timeout : integer := 1024;
+ g_escape_code_disable : boolean := FALSE;
+ g_simulation : integer := 0;
+ g_sim_startup_cnt : integer := 6250);--100us
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ clk_ref_i : in std_logic := '0';
+ tm_time_valid_i : in std_logic := '0';
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+ link_ok_i : in std_logic := '1';
+ tx_data_i : in std_logic_vector(g_data_width-1 downto 0);
+ tx_valid_i : in std_logic;
+ tx_dreq_o : out std_logic;
+ tx_last_p1_i : in std_logic := '1';
+ tx_flush_p1_i : in std_logic := '0';
+ tx_reset_seq_i : in std_logic := '0';
+ tx_frame_p1_o : out std_logic;
+ tx_streamer_cfg_i: in t_tx_streamer_cfg := c_tx_streamer_cfg_default);
+ end component;
+
+ component xrx_streamer
+ generic (
+ g_data_width : integer := 32;
+ g_buffer_size : integer := 256;
+ g_escape_code_disable : boolean := FALSE;
+ g_expected_words_number : integer := 0);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ clk_ref_i : in std_logic := '0';
+ tm_time_valid_i : in std_logic := '0';
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+ rx_first_p1_o : out std_logic;
+ rx_last_p1_o : out std_logic;
+ rx_data_o : out std_logic_vector(g_data_width-1 downto 0);
+ rx_valid_o : out std_logic;
+ rx_dreq_i : in std_logic;
+ rx_lost_p1_o : out std_logic := '0';
+ rx_lost_blocks_p1_o : out std_logic := '0';
+ rx_lost_frames_p1_o : out std_logic := '0';
+ rx_lost_frames_cnt_o : out std_logic_vector(14 downto 0);
+ rx_latency_o : out std_logic_vector(27 downto 0);
+ rx_latency_valid_o : out std_logic;
+ rx_frame_p1_o : out std_logic;
+ rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default);
+ end component;
+
+ constant c_WRS_STATS_ARR_SIZE_OUT : integer := 18;
+ constant c_WRS_STATS_ARR_SIZE_IN : integer := 1;
+
+ component xrtx_streamers_stats is
+ generic (
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ g_cnt_width : integer := 50;
+ g_acc_width : integer := 64
+ );
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ sent_frame_i : in std_logic;
+ rcvd_frame_i : in std_logic;
+ lost_block_i : in std_logic;
+ lost_frame_i : in std_logic;
+ lost_frames_cnt_i : in std_logic_vector(14 downto 0);
+ rcvd_latency_i : in std_logic_vector(27 downto 0);
+ rcvd_latency_valid_i : in std_logic;
+ clk_ref_i : in std_logic;
+ tm_time_valid_i : in std_logic := '0';
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+ reset_stats_i : in std_logic;
+ snapshot_ena_i : in std_logic := '0';
+ reset_time_tai_o : out std_logic_vector(39 downto 0) := x"0000000000";
+ reset_time_cycles_o : out std_logic_vector(27 downto 0) := x"0000000";
+ sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_acc_overflow_o : out std_logic;
+ latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0);
+ latency_max_o : out std_logic_vector(27 downto 0);
+ latency_min_o : out std_logic_vector(27 downto 0);
+ snmp_array_o : out t_generic_word_array(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0);
+ snmp_array_i : in t_generic_word_array(c_WRS_STATS_ARR_SIZE_IN -1 downto 0) := (others => (others=>'0'))
+ );
+ end component;
+
+ constant c_WR_STREAMERS_ARR_SIZE_OUT : integer := c_WRS_STATS_ARR_SIZE_OUT+2;
+ constant c_WR_STREAMERS_ARR_SIZE_IN : integer := c_WRS_STATS_ARR_SIZE_IN;
+
+ component xwr_streamers is
+ generic (
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ --tx/rx
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ -- stats
+ g_stats_cnt_width : integer := 50;
+ g_stats_acc_width : integer := 64;
+ -- WB i/f
+ g_slave_mode : t_wishbone_interface_mode := CLASSIC;
+ g_slave_granularity : t_wishbone_address_granularity := BYTE;
+ g_simulation : integer := 0
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ -- WR tx/rx interface
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+ -- User tx interface
+ tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0);
+ tx_valid_i : in std_logic;
+ tx_dreq_o : out std_logic;
+ tx_last_p1_i : in std_logic := '1';
+ tx_flush_p1_i : in std_logic := '0';
+ -- User rx interface
+ rx_first_p1_o : out std_logic;
+ rx_last_p1_o : out std_logic;
+ rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ rx_valid_o : out std_logic;
+ rx_dreq_i : in std_logic;
+ -- WRC Timing interface, used for latency measurement
+ clk_ref_i : in std_logic := '0';
+ tm_time_valid_i : in std_logic := '0';
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+ link_ok_i : in std_logic := '1';
+ wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ wb_slave_o : out t_wishbone_slave_out;
+ snmp_array_o : out t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0);
+ snmp_array_i : in t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_IN -1 downto 0);
+ -- Transmission (tx) configuration
+ tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default
+ );
+ end component;
+
+end streamers_pkg; \ No newline at end of file
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd
new file mode 100644
index 000000000..42c9aae8a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/streamers_priv_pkg.vhd
@@ -0,0 +1,201 @@
+-------------------------------------------------------------------------------
+-- Title : WR Streamers Private Packages
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : streamers_priv_pkg.vhd
+-- Author : Maciej Lipinski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-- Created : 2017-04-20
+-------------------------------------------------------------------------------
+-- Description:
+-- Private package of streamers: all the components/functions used only by
+-- streamers, not useful by users/applications
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.NUMERIC_STD.ALL;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+use work.streamers_pkg.all;
+use work.wr_streamers_wbgen2_pkg.all;
+
+package streamers_priv_pkg is
+
+ component xtx_streamers_stats is
+ generic (
+ g_cnt_width : integer := 32);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ sent_frame_i : in std_logic;
+ reset_stats_i : in std_logic;
+ snapshot_ena_i : in std_logic := '0';
+ sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0));
+ end component;
+
+ component xrx_streamers_stats is
+ generic (
+ g_cnt_width : integer := 32;
+ g_acc_width : integer := 64);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ rcvd_frame_i : in std_logic;
+ lost_block_i : in std_logic;
+ lost_frame_i : in std_logic;
+ lost_frames_cnt_i : in std_logic_vector(14 downto 0);
+ rcvd_latency_i : in std_logic_vector(27 downto 0);
+ rcvd_latency_valid_i : in std_logic;
+ tm_time_valid_i : in std_logic;
+ snapshot_ena_i : in std_logic := '0';
+ reset_stats_i : in std_logic;
+ rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_acc_overflow_o : out std_logic;
+ latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0);
+ latency_max_o : out std_logic_vector(27 downto 0);
+ latency_min_o : out std_logic_vector(27 downto 0));
+ end component;
+
+ component wr_streamers_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(5 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ regs_i : in t_wr_streamers_in_registers;
+ regs_o : out t_wr_streamers_out_registers
+ );
+ end component;
+
+ -- component from wr-core/modules/timing
+ component pulse_stamper
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ pulse_a_i : in std_logic;
+ tm_time_valid_i : in std_logic;
+ tm_tai_i : in std_logic_vector(39 downto 0);
+ tm_cycles_i : in std_logic_vector(27 downto 0);
+ tag_tai_o : out std_logic_vector(39 downto 0);
+ tag_cycles_o : out std_logic_vector(27 downto 0);
+ tag_valid_o : out std_logic);
+ end component;
+
+ type t_pipe is record
+ dvalid : std_logic;
+ dreq : std_logic;
+ sof : std_logic;
+ eof : std_logic;
+ error : std_logic;
+ data : std_logic_vector(15 downto 0);
+ addr : std_logic_vector(1 downto 0);
+ bytesel : std_logic;
+ end record;
+
+ component escape_detector
+ generic (
+ g_data_width : integer;
+ g_escape_code : std_logic_vector);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ d_detect_enable_i : in std_logic;
+ d_valid_i : in std_logic;
+ d_req_o : out std_logic;
+ d_o : out std_logic_vector(g_data_width-1 downto 0);
+ d_escape_o : out std_logic;
+ d_valid_o : out std_logic;
+ d_req_i : in std_logic);
+ end component;
+
+ component dropping_buffer
+ generic (
+ g_size : integer;
+ g_data_width : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ d_req_o : out std_logic;
+ d_drop_i : in std_logic;
+ d_accept_i : in std_logic;
+ d_valid_i : in std_logic;
+ d_o : out std_logic_vector(g_data_width-1 downto 0);
+ d_valid_o : out std_logic;
+ d_req_i : in std_logic);
+ end component;
+
+ component gc_escape_inserter
+ generic (
+ g_data_width : integer;
+ g_escape_code : std_logic_vector);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ d_i : in std_logic_vector(g_data_width-1 downto 0);
+ d_insert_enable_i : in std_logic;
+ d_escape_i : in std_logic;
+ d_valid_i : in std_logic;
+ d_req_o : out std_logic;
+ d_o : out std_logic_vector (g_data_width-1 downto 0);
+ d_valid_o : out std_logic;
+ d_req_i : in std_logic);
+ end component;
+ -- functions
+ function f_dbg_word_starting_at_bit(data_in, start_bit : std_logic_vector; g_data_width: integer) return std_logic_vector;
+
+end streamers_priv_pkg;
+
+package body streamers_priv_pkg is
+
+ function f_dbg_word_starting_at_bit(data_in, start_bit : std_logic_vector; g_data_width: integer) return std_logic_vector is
+ variable sb : integer := 0;
+ variable result : std_logic_vector(31 downto 0);
+ begin
+ sb := to_integer(unsigned(start_bit));
+ for i in 0 to 31 loop
+ if (sb + i < g_data_width) then
+ result(i) := data_in(sb + i);
+ else
+ result(i) := '0';
+ end if;
+ end loop;
+ return result;
+ end f_dbg_word_starting_at_bit;
+
+end streamers_priv_pkg; \ No newline at end of file
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd
new file mode 100644
index 000000000..c18bc310a
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wb.vhd
@@ -0,0 +1,706 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Transmission control, status and debug
+---------------------------------------------------------------------------------------
+-- File : wr_streamers_wb.vhd
+-- Author : auto-generated by wbgen2 from wr_streamers_wb.wb
+-- Created : Wed Aug 16 22:45:12 2017
+-- Version : 0x00000001
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wr_streamers_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wr_streamers_wbgen2_pkg.all;
+
+
+entity wr_streamers_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(5 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ regs_i : in t_wr_streamers_in_registers;
+ regs_o : out t_wr_streamers_out_registers
+ );
+end wr_streamers_wb;
+
+architecture syn of wr_streamers_wb is
+
+signal wr_streamers_ver_id_int : std_logic_vector(31 downto 0);
+signal wr_streamers_sscr1_rst_stats_dly0 : std_logic ;
+signal wr_streamers_sscr1_rst_stats_int : std_logic ;
+signal wr_streamers_sscr1_rst_seq_id_dly0 : std_logic ;
+signal wr_streamers_sscr1_rst_seq_id_int : std_logic ;
+signal wr_streamers_sscr1_snapshot_stats_int : std_logic ;
+signal wr_streamers_tx_cfg0_ethertype_int : std_logic_vector(15 downto 0);
+signal wr_streamers_tx_cfg1_mac_local_lsb_int : std_logic_vector(31 downto 0);
+signal wr_streamers_tx_cfg2_mac_local_msb_int : std_logic_vector(15 downto 0);
+signal wr_streamers_tx_cfg3_mac_target_lsb_int : std_logic_vector(31 downto 0);
+signal wr_streamers_tx_cfg4_mac_target_msb_int : std_logic_vector(15 downto 0);
+signal wr_streamers_tx_cfg5_qtag_ena_int : std_logic ;
+signal wr_streamers_tx_cfg5_qtag_vid_int : std_logic_vector(11 downto 0);
+signal wr_streamers_tx_cfg5_qtag_prio_int : std_logic_vector(2 downto 0);
+signal wr_streamers_rx_cfg0_ethertype_int : std_logic_vector(15 downto 0);
+signal wr_streamers_rx_cfg0_accept_broadcast_int : std_logic ;
+signal wr_streamers_rx_cfg0_filter_remote_int : std_logic ;
+signal wr_streamers_rx_cfg1_mac_local_lsb_int : std_logic_vector(31 downto 0);
+signal wr_streamers_rx_cfg2_mac_local_msb_int : std_logic_vector(15 downto 0);
+signal wr_streamers_rx_cfg3_mac_remote_lsb_int : std_logic_vector(31 downto 0);
+signal wr_streamers_rx_cfg4_mac_remote_msb_int : std_logic_vector(15 downto 0);
+signal wr_streamers_rx_cfg5_fixed_latency_int : std_logic_vector(27 downto 0);
+signal wr_streamers_cfg_or_tx_ethtype_int : std_logic ;
+signal wr_streamers_cfg_or_tx_mac_loc_int : std_logic ;
+signal wr_streamers_cfg_or_tx_mac_tar_int : std_logic ;
+signal wr_streamers_cfg_or_tx_qtag_int : std_logic ;
+signal wr_streamers_cfg_or_rx_ethertype_int : std_logic ;
+signal wr_streamers_cfg_or_rx_mac_loc_int : std_logic ;
+signal wr_streamers_cfg_or_rx_mac_rem_int : std_logic ;
+signal wr_streamers_cfg_or_rx_acc_broadcast_int : std_logic ;
+signal wr_streamers_cfg_or_rx_ftr_remote_int : std_logic ;
+signal wr_streamers_cfg_or_rx_fix_lat_int : std_logic ;
+signal wr_streamers_dbg_ctrl_mux_int : std_logic ;
+signal wr_streamers_dbg_ctrl_start_byte_int : std_logic_vector(7 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(5 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ wr_streamers_ver_id_int <= "00000000000000000000000000000001";
+ wr_streamers_sscr1_rst_stats_int <= '0';
+ wr_streamers_sscr1_rst_seq_id_int <= '0';
+ wr_streamers_sscr1_snapshot_stats_int <= '0';
+ wr_streamers_tx_cfg0_ethertype_int <= "0000000000000000";
+ wr_streamers_tx_cfg1_mac_local_lsb_int <= "00000000000000000000000000000000";
+ wr_streamers_tx_cfg2_mac_local_msb_int <= "0000000000000000";
+ wr_streamers_tx_cfg3_mac_target_lsb_int <= "00000000000000000000000000000000";
+ wr_streamers_tx_cfg4_mac_target_msb_int <= "0000000000000000";
+ wr_streamers_tx_cfg5_qtag_ena_int <= '0';
+ wr_streamers_tx_cfg5_qtag_vid_int <= "000000000000";
+ wr_streamers_tx_cfg5_qtag_prio_int <= "000";
+ wr_streamers_rx_cfg0_ethertype_int <= "0000000000000000";
+ wr_streamers_rx_cfg0_accept_broadcast_int <= '0';
+ wr_streamers_rx_cfg0_filter_remote_int <= '0';
+ wr_streamers_rx_cfg1_mac_local_lsb_int <= "00000000000000000000000000000000";
+ wr_streamers_rx_cfg2_mac_local_msb_int <= "0000000000000000";
+ wr_streamers_rx_cfg3_mac_remote_lsb_int <= "00000000000000000000000000000000";
+ wr_streamers_rx_cfg4_mac_remote_msb_int <= "0000000000000000";
+ wr_streamers_rx_cfg5_fixed_latency_int <= "0000000000000000000000000000";
+ wr_streamers_cfg_or_tx_ethtype_int <= '0';
+ wr_streamers_cfg_or_tx_mac_loc_int <= '0';
+ wr_streamers_cfg_or_tx_mac_tar_int <= '0';
+ wr_streamers_cfg_or_tx_qtag_int <= '0';
+ wr_streamers_cfg_or_rx_ethertype_int <= '0';
+ wr_streamers_cfg_or_rx_mac_loc_int <= '0';
+ wr_streamers_cfg_or_rx_mac_rem_int <= '0';
+ wr_streamers_cfg_or_rx_acc_broadcast_int <= '0';
+ wr_streamers_cfg_or_rx_ftr_remote_int <= '0';
+ wr_streamers_cfg_or_rx_fix_lat_int <= '0';
+ wr_streamers_dbg_ctrl_mux_int <= '0';
+ wr_streamers_dbg_ctrl_start_byte_int <= "00000000";
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ wr_streamers_sscr1_rst_stats_int <= '0';
+ wr_streamers_sscr1_rst_seq_id_int <= '0';
+ ack_in_progress <= '0';
+ else
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(5 downto 0) is
+ when "000000" =>
+ if (wb_we_i = '1') then
+ wr_streamers_ver_id_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wr_streamers_ver_id_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000001" =>
+ if (wb_we_i = '1') then
+ wr_streamers_sscr1_rst_stats_int <= wrdata_reg(0);
+ wr_streamers_sscr1_rst_seq_id_int <= wrdata_reg(1);
+ wr_streamers_sscr1_snapshot_stats_int <= wrdata_reg(2);
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= '0';
+ rddata_reg(2) <= wr_streamers_sscr1_snapshot_stats_int;
+ rddata_reg(3) <= regs_i.sscr1_rx_latency_acc_overflow_i;
+ rddata_reg(31 downto 4) <= regs_i.sscr1_rst_ts_cyc_i;
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "000010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.sscr2_rst_ts_tai_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.sscr3_rst_ts_tai_msb_i;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(27 downto 0) <= regs_i.rx_stat0_rx_latency_max_i;
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(27 downto 0) <= regs_i.rx_stat1_rx_latency_min_i;
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.tx_stat2_tx_sent_cnt_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "000111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.tx_stat3_tx_sent_cnt_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat4_rx_rcvd_cnt_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat5_rx_rcvd_cnt_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat6_rx_loss_cnt_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat7_rx_loss_cnt_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat8_rx_lost_block_cnt_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat9_rx_lost_block_cnt_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat10_rx_latency_acc_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "001111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat11_rx_latency_acc_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat12_rx_latency_acc_cnt_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.rx_stat13_rx_latency_acc_cnt_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010010" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg0_ethertype_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_tx_cfg0_ethertype_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010011" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg1_mac_local_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wr_streamers_tx_cfg1_mac_local_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010100" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg2_mac_local_msb_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_tx_cfg2_mac_local_msb_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010101" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg3_mac_target_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wr_streamers_tx_cfg3_mac_target_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010110" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg4_mac_target_msb_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_tx_cfg4_mac_target_msb_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "010111" =>
+ if (wb_we_i = '1') then
+ wr_streamers_tx_cfg5_qtag_ena_int <= wrdata_reg(0);
+ wr_streamers_tx_cfg5_qtag_vid_int <= wrdata_reg(19 downto 8);
+ wr_streamers_tx_cfg5_qtag_prio_int <= wrdata_reg(26 downto 24);
+ end if;
+ rddata_reg(0) <= wr_streamers_tx_cfg5_qtag_ena_int;
+ rddata_reg(19 downto 8) <= wr_streamers_tx_cfg5_qtag_vid_int;
+ rddata_reg(26 downto 24) <= wr_streamers_tx_cfg5_qtag_prio_int;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011000" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg0_ethertype_int <= wrdata_reg(15 downto 0);
+ wr_streamers_rx_cfg0_accept_broadcast_int <= wrdata_reg(16);
+ wr_streamers_rx_cfg0_filter_remote_int <= wrdata_reg(17);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_rx_cfg0_ethertype_int;
+ rddata_reg(16) <= wr_streamers_rx_cfg0_accept_broadcast_int;
+ rddata_reg(17) <= wr_streamers_rx_cfg0_filter_remote_int;
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011001" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg1_mac_local_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wr_streamers_rx_cfg1_mac_local_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011010" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg2_mac_local_msb_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_rx_cfg2_mac_local_msb_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011011" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg3_mac_remote_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wr_streamers_rx_cfg3_mac_remote_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011100" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg4_mac_remote_msb_int <= wrdata_reg(15 downto 0);
+ end if;
+ rddata_reg(15 downto 0) <= wr_streamers_rx_cfg4_mac_remote_msb_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011101" =>
+ if (wb_we_i = '1') then
+ wr_streamers_rx_cfg5_fixed_latency_int <= wrdata_reg(27 downto 0);
+ end if;
+ rddata_reg(27 downto 0) <= wr_streamers_rx_cfg5_fixed_latency_int;
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011110" =>
+ if (wb_we_i = '1') then
+ wr_streamers_cfg_or_tx_ethtype_int <= wrdata_reg(0);
+ wr_streamers_cfg_or_tx_mac_loc_int <= wrdata_reg(1);
+ wr_streamers_cfg_or_tx_mac_tar_int <= wrdata_reg(2);
+ wr_streamers_cfg_or_tx_qtag_int <= wrdata_reg(3);
+ wr_streamers_cfg_or_rx_ethertype_int <= wrdata_reg(16);
+ wr_streamers_cfg_or_rx_mac_loc_int <= wrdata_reg(17);
+ wr_streamers_cfg_or_rx_mac_rem_int <= wrdata_reg(18);
+ wr_streamers_cfg_or_rx_acc_broadcast_int <= wrdata_reg(19);
+ wr_streamers_cfg_or_rx_ftr_remote_int <= wrdata_reg(20);
+ wr_streamers_cfg_or_rx_fix_lat_int <= wrdata_reg(21);
+ end if;
+ rddata_reg(0) <= wr_streamers_cfg_or_tx_ethtype_int;
+ rddata_reg(1) <= wr_streamers_cfg_or_tx_mac_loc_int;
+ rddata_reg(2) <= wr_streamers_cfg_or_tx_mac_tar_int;
+ rddata_reg(3) <= wr_streamers_cfg_or_tx_qtag_int;
+ rddata_reg(16) <= wr_streamers_cfg_or_rx_ethertype_int;
+ rddata_reg(17) <= wr_streamers_cfg_or_rx_mac_loc_int;
+ rddata_reg(18) <= wr_streamers_cfg_or_rx_mac_rem_int;
+ rddata_reg(19) <= wr_streamers_cfg_or_rx_acc_broadcast_int;
+ rddata_reg(20) <= wr_streamers_cfg_or_rx_ftr_remote_int;
+ rddata_reg(21) <= wr_streamers_cfg_or_rx_fix_lat_int;
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "011111" =>
+ if (wb_we_i = '1') then
+ wr_streamers_dbg_ctrl_mux_int <= wrdata_reg(0);
+ wr_streamers_dbg_ctrl_start_byte_int <= wrdata_reg(15 downto 8);
+ end if;
+ rddata_reg(0) <= wr_streamers_dbg_ctrl_mux_int;
+ rddata_reg(15 downto 8) <= wr_streamers_dbg_ctrl_start_byte_int;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "100000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.dbg_data_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "100001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.dummy_dummy_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Version identifier
+ regs_o.ver_id_o <= wr_streamers_ver_id_int;
+-- Reset statistics
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ wr_streamers_sscr1_rst_stats_dly0 <= '0';
+ regs_o.sscr1_rst_stats_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ wr_streamers_sscr1_rst_stats_dly0 <= wr_streamers_sscr1_rst_stats_int;
+ regs_o.sscr1_rst_stats_o <= wr_streamers_sscr1_rst_stats_int and (not wr_streamers_sscr1_rst_stats_dly0);
+ end if;
+ end process;
+
+
+-- Reset tx seq id
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ wr_streamers_sscr1_rst_seq_id_dly0 <= '0';
+ regs_o.sscr1_rst_seq_id_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ wr_streamers_sscr1_rst_seq_id_dly0 <= wr_streamers_sscr1_rst_seq_id_int;
+ regs_o.sscr1_rst_seq_id_o <= wr_streamers_sscr1_rst_seq_id_int and (not wr_streamers_sscr1_rst_seq_id_dly0);
+ end if;
+ end process;
+
+
+-- Snapshot statistics
+ regs_o.sscr1_snapshot_stats_o <= wr_streamers_sscr1_snapshot_stats_int;
+-- Latency accumulator overflow
+-- Reset timestamp cycles
+-- Reset timestamp 32 LSB of TAI
+-- Reset timestamp 8 MSB of TAI
+-- WR Streamer frame latency
+-- WR Streamer frame latency
+-- WR Streamer frame sent count (LSB)
+-- WR Streamer frame sent count (MSB)
+-- WR Streamer frame received count (LSB)
+-- WR Streamer frame received count (MSB)
+-- WR Streamer frame loss count (LSB)
+-- WR Streamer frame loss count (MSB)
+-- WR Streamer block loss count (LSB)
+-- WR Streamer block loss count (MSB)
+-- WR Streamer frame latency (LSB)
+-- WR Streamer frame latency (MSB)
+-- WR Streamer frame latency counter (LSB)
+-- WR Streamer frame latency counter (MSB)
+-- Ethertype
+ regs_o.tx_cfg0_ethertype_o <= wr_streamers_tx_cfg0_ethertype_int;
+-- MAC Local LSB
+ regs_o.tx_cfg1_mac_local_lsb_o <= wr_streamers_tx_cfg1_mac_local_lsb_int;
+-- MAC Local MSB
+ regs_o.tx_cfg2_mac_local_msb_o <= wr_streamers_tx_cfg2_mac_local_msb_int;
+-- MAC Target LSB
+ regs_o.tx_cfg3_mac_target_lsb_o <= wr_streamers_tx_cfg3_mac_target_lsb_int;
+-- MAC Target MSB
+ regs_o.tx_cfg4_mac_target_msb_o <= wr_streamers_tx_cfg4_mac_target_msb_int;
+-- Enable tagging with Qtags
+ regs_o.tx_cfg5_qtag_ena_o <= wr_streamers_tx_cfg5_qtag_ena_int;
+-- VLAN ID
+ regs_o.tx_cfg5_qtag_vid_o <= wr_streamers_tx_cfg5_qtag_vid_int;
+-- Priority
+ regs_o.tx_cfg5_qtag_prio_o <= wr_streamers_tx_cfg5_qtag_prio_int;
+-- Ethertype
+ regs_o.rx_cfg0_ethertype_o <= wr_streamers_rx_cfg0_ethertype_int;
+-- Accept Broadcast
+ regs_o.rx_cfg0_accept_broadcast_o <= wr_streamers_rx_cfg0_accept_broadcast_int;
+-- Filter Remote
+ regs_o.rx_cfg0_filter_remote_o <= wr_streamers_rx_cfg0_filter_remote_int;
+-- MAC Local LSB
+ regs_o.rx_cfg1_mac_local_lsb_o <= wr_streamers_rx_cfg1_mac_local_lsb_int;
+-- MAC Local MSB
+ regs_o.rx_cfg2_mac_local_msb_o <= wr_streamers_rx_cfg2_mac_local_msb_int;
+-- MAC Remote LSB
+ regs_o.rx_cfg3_mac_remote_lsb_o <= wr_streamers_rx_cfg3_mac_remote_lsb_int;
+-- MAC Remote MSB
+ regs_o.rx_cfg4_mac_remote_msb_o <= wr_streamers_rx_cfg4_mac_remote_msb_int;
+-- Fixed Latency
+ regs_o.rx_cfg5_fixed_latency_o <= wr_streamers_rx_cfg5_fixed_latency_int;
+-- Tx Ethertype
+ regs_o.cfg_or_tx_ethtype_o <= wr_streamers_cfg_or_tx_ethtype_int;
+-- Tx MAC Local
+ regs_o.cfg_or_tx_mac_loc_o <= wr_streamers_cfg_or_tx_mac_loc_int;
+-- Tx MAC Target
+ regs_o.cfg_or_tx_mac_tar_o <= wr_streamers_cfg_or_tx_mac_tar_int;
+-- QTAG
+ regs_o.cfg_or_tx_qtag_o <= wr_streamers_cfg_or_tx_qtag_int;
+-- Rx Ethertype
+ regs_o.cfg_or_rx_ethertype_o <= wr_streamers_cfg_or_rx_ethertype_int;
+-- Rx MAC Local
+ regs_o.cfg_or_rx_mac_loc_o <= wr_streamers_cfg_or_rx_mac_loc_int;
+-- Rx MAC Remote
+ regs_o.cfg_or_rx_mac_rem_o <= wr_streamers_cfg_or_rx_mac_rem_int;
+-- Rx Accept Broadcast
+ regs_o.cfg_or_rx_acc_broadcast_o <= wr_streamers_cfg_or_rx_acc_broadcast_int;
+-- Rx Filter Remote
+ regs_o.cfg_or_rx_ftr_remote_o <= wr_streamers_cfg_or_rx_ftr_remote_int;
+-- Rx Fixed Latency
+ regs_o.cfg_or_rx_fix_lat_o <= wr_streamers_cfg_or_rx_fix_lat_int;
+-- Debug Tx (0) or Rx (1)
+ regs_o.dbg_ctrl_mux_o <= wr_streamers_dbg_ctrl_mux_int;
+-- Debug Start byte
+ regs_o.dbg_ctrl_start_byte_o <= wr_streamers_dbg_ctrl_start_byte_int;
+-- Debug content
+-- DUMMY value to read
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd
new file mode 100644
index 000000000..a39fc326b
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/wr_streamers_wbgen2_pkg.vhd
@@ -0,0 +1,191 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Transmission control, status and debug
+---------------------------------------------------------------------------------------
+-- File : wr_streamers_wbgen2_pkg.vhd
+-- Author : auto-generated by wbgen2 from wr_streamers_wb.wb
+-- Created : Wed Aug 16 22:45:12 2017
+-- Version : 0x00000001
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wr_streamers_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package wr_streamers_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_wr_streamers_in_registers is record
+ sscr1_rx_latency_acc_overflow_i : std_logic;
+ sscr1_rst_ts_cyc_i : std_logic_vector(27 downto 0);
+ sscr2_rst_ts_tai_lsb_i : std_logic_vector(31 downto 0);
+ sscr3_rst_ts_tai_msb_i : std_logic_vector(7 downto 0);
+ rx_stat0_rx_latency_max_i : std_logic_vector(27 downto 0);
+ rx_stat1_rx_latency_min_i : std_logic_vector(27 downto 0);
+ tx_stat2_tx_sent_cnt_lsb_i : std_logic_vector(31 downto 0);
+ tx_stat3_tx_sent_cnt_msb_i : std_logic_vector(31 downto 0);
+ rx_stat4_rx_rcvd_cnt_lsb_i : std_logic_vector(31 downto 0);
+ rx_stat5_rx_rcvd_cnt_msb_i : std_logic_vector(31 downto 0);
+ rx_stat6_rx_loss_cnt_lsb_i : std_logic_vector(31 downto 0);
+ rx_stat7_rx_loss_cnt_msb_i : std_logic_vector(31 downto 0);
+ rx_stat8_rx_lost_block_cnt_lsb_i : std_logic_vector(31 downto 0);
+ rx_stat9_rx_lost_block_cnt_msb_i : std_logic_vector(31 downto 0);
+ rx_stat10_rx_latency_acc_lsb_i : std_logic_vector(31 downto 0);
+ rx_stat11_rx_latency_acc_msb_i : std_logic_vector(31 downto 0);
+ rx_stat12_rx_latency_acc_cnt_lsb_i : std_logic_vector(31 downto 0);
+ rx_stat13_rx_latency_acc_cnt_msb_i : std_logic_vector(31 downto 0);
+ dbg_data_i : std_logic_vector(31 downto 0);
+ dummy_dummy_i : std_logic_vector(31 downto 0);
+ end record;
+
+ constant c_wr_streamers_in_registers_init_value: t_wr_streamers_in_registers := (
+ sscr1_rx_latency_acc_overflow_i => '0',
+ sscr1_rst_ts_cyc_i => (others => '0'),
+ sscr2_rst_ts_tai_lsb_i => (others => '0'),
+ sscr3_rst_ts_tai_msb_i => (others => '0'),
+ rx_stat0_rx_latency_max_i => (others => '0'),
+ rx_stat1_rx_latency_min_i => (others => '0'),
+ tx_stat2_tx_sent_cnt_lsb_i => (others => '0'),
+ tx_stat3_tx_sent_cnt_msb_i => (others => '0'),
+ rx_stat4_rx_rcvd_cnt_lsb_i => (others => '0'),
+ rx_stat5_rx_rcvd_cnt_msb_i => (others => '0'),
+ rx_stat6_rx_loss_cnt_lsb_i => (others => '0'),
+ rx_stat7_rx_loss_cnt_msb_i => (others => '0'),
+ rx_stat8_rx_lost_block_cnt_lsb_i => (others => '0'),
+ rx_stat9_rx_lost_block_cnt_msb_i => (others => '0'),
+ rx_stat10_rx_latency_acc_lsb_i => (others => '0'),
+ rx_stat11_rx_latency_acc_msb_i => (others => '0'),
+ rx_stat12_rx_latency_acc_cnt_lsb_i => (others => '0'),
+ rx_stat13_rx_latency_acc_cnt_msb_i => (others => '0'),
+ dbg_data_i => (others => '0'),
+ dummy_dummy_i => (others => '0')
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_wr_streamers_out_registers is record
+ ver_id_o : std_logic_vector(31 downto 0);
+ sscr1_rst_stats_o : std_logic;
+ sscr1_rst_seq_id_o : std_logic;
+ sscr1_snapshot_stats_o : std_logic;
+ tx_cfg0_ethertype_o : std_logic_vector(15 downto 0);
+ tx_cfg1_mac_local_lsb_o : std_logic_vector(31 downto 0);
+ tx_cfg2_mac_local_msb_o : std_logic_vector(15 downto 0);
+ tx_cfg3_mac_target_lsb_o : std_logic_vector(31 downto 0);
+ tx_cfg4_mac_target_msb_o : std_logic_vector(15 downto 0);
+ tx_cfg5_qtag_ena_o : std_logic;
+ tx_cfg5_qtag_vid_o : std_logic_vector(11 downto 0);
+ tx_cfg5_qtag_prio_o : std_logic_vector(2 downto 0);
+ rx_cfg0_ethertype_o : std_logic_vector(15 downto 0);
+ rx_cfg0_accept_broadcast_o : std_logic;
+ rx_cfg0_filter_remote_o : std_logic;
+ rx_cfg1_mac_local_lsb_o : std_logic_vector(31 downto 0);
+ rx_cfg2_mac_local_msb_o : std_logic_vector(15 downto 0);
+ rx_cfg3_mac_remote_lsb_o : std_logic_vector(31 downto 0);
+ rx_cfg4_mac_remote_msb_o : std_logic_vector(15 downto 0);
+ rx_cfg5_fixed_latency_o : std_logic_vector(27 downto 0);
+ cfg_or_tx_ethtype_o : std_logic;
+ cfg_or_tx_mac_loc_o : std_logic;
+ cfg_or_tx_mac_tar_o : std_logic;
+ cfg_or_tx_qtag_o : std_logic;
+ cfg_or_rx_ethertype_o : std_logic;
+ cfg_or_rx_mac_loc_o : std_logic;
+ cfg_or_rx_mac_rem_o : std_logic;
+ cfg_or_rx_acc_broadcast_o : std_logic;
+ cfg_or_rx_ftr_remote_o : std_logic;
+ cfg_or_rx_fix_lat_o : std_logic;
+ dbg_ctrl_mux_o : std_logic;
+ dbg_ctrl_start_byte_o : std_logic_vector(7 downto 0);
+ end record;
+
+ constant c_wr_streamers_out_registers_init_value: t_wr_streamers_out_registers := (
+ ver_id_o => (others => '0'),
+ sscr1_rst_stats_o => '0',
+ sscr1_rst_seq_id_o => '0',
+ sscr1_snapshot_stats_o => '0',
+ tx_cfg0_ethertype_o => (others => '0'),
+ tx_cfg1_mac_local_lsb_o => (others => '0'),
+ tx_cfg2_mac_local_msb_o => (others => '0'),
+ tx_cfg3_mac_target_lsb_o => (others => '0'),
+ tx_cfg4_mac_target_msb_o => (others => '0'),
+ tx_cfg5_qtag_ena_o => '0',
+ tx_cfg5_qtag_vid_o => (others => '0'),
+ tx_cfg5_qtag_prio_o => (others => '0'),
+ rx_cfg0_ethertype_o => (others => '0'),
+ rx_cfg0_accept_broadcast_o => '0',
+ rx_cfg0_filter_remote_o => '0',
+ rx_cfg1_mac_local_lsb_o => (others => '0'),
+ rx_cfg2_mac_local_msb_o => (others => '0'),
+ rx_cfg3_mac_remote_lsb_o => (others => '0'),
+ rx_cfg4_mac_remote_msb_o => (others => '0'),
+ rx_cfg5_fixed_latency_o => (others => '0'),
+ cfg_or_tx_ethtype_o => '0',
+ cfg_or_tx_mac_loc_o => '0',
+ cfg_or_tx_mac_tar_o => '0',
+ cfg_or_tx_qtag_o => '0',
+ cfg_or_rx_ethertype_o => '0',
+ cfg_or_rx_mac_loc_o => '0',
+ cfg_or_rx_mac_rem_o => '0',
+ cfg_or_rx_acc_broadcast_o => '0',
+ cfg_or_rx_ftr_remote_o => '0',
+ cfg_or_rx_fix_lat_o => '0',
+ dbg_ctrl_mux_o => '0',
+ dbg_ctrl_start_byte_o => (others => '0')
+ );
+ function "or" (left, right: t_wr_streamers_in_registers) return t_wr_streamers_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body wr_streamers_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_wr_streamers_in_registers) return t_wr_streamers_in_registers is
+variable tmp: t_wr_streamers_in_registers;
+begin
+tmp.sscr1_rx_latency_acc_overflow_i := f_x_to_zero(left.sscr1_rx_latency_acc_overflow_i) or f_x_to_zero(right.sscr1_rx_latency_acc_overflow_i);
+tmp.sscr1_rst_ts_cyc_i := f_x_to_zero(left.sscr1_rst_ts_cyc_i) or f_x_to_zero(right.sscr1_rst_ts_cyc_i);
+tmp.sscr2_rst_ts_tai_lsb_i := f_x_to_zero(left.sscr2_rst_ts_tai_lsb_i) or f_x_to_zero(right.sscr2_rst_ts_tai_lsb_i);
+tmp.sscr3_rst_ts_tai_msb_i := f_x_to_zero(left.sscr3_rst_ts_tai_msb_i) or f_x_to_zero(right.sscr3_rst_ts_tai_msb_i);
+tmp.rx_stat0_rx_latency_max_i := f_x_to_zero(left.rx_stat0_rx_latency_max_i) or f_x_to_zero(right.rx_stat0_rx_latency_max_i);
+tmp.rx_stat1_rx_latency_min_i := f_x_to_zero(left.rx_stat1_rx_latency_min_i) or f_x_to_zero(right.rx_stat1_rx_latency_min_i);
+tmp.tx_stat2_tx_sent_cnt_lsb_i := f_x_to_zero(left.tx_stat2_tx_sent_cnt_lsb_i) or f_x_to_zero(right.tx_stat2_tx_sent_cnt_lsb_i);
+tmp.tx_stat3_tx_sent_cnt_msb_i := f_x_to_zero(left.tx_stat3_tx_sent_cnt_msb_i) or f_x_to_zero(right.tx_stat3_tx_sent_cnt_msb_i);
+tmp.rx_stat4_rx_rcvd_cnt_lsb_i := f_x_to_zero(left.rx_stat4_rx_rcvd_cnt_lsb_i) or f_x_to_zero(right.rx_stat4_rx_rcvd_cnt_lsb_i);
+tmp.rx_stat5_rx_rcvd_cnt_msb_i := f_x_to_zero(left.rx_stat5_rx_rcvd_cnt_msb_i) or f_x_to_zero(right.rx_stat5_rx_rcvd_cnt_msb_i);
+tmp.rx_stat6_rx_loss_cnt_lsb_i := f_x_to_zero(left.rx_stat6_rx_loss_cnt_lsb_i) or f_x_to_zero(right.rx_stat6_rx_loss_cnt_lsb_i);
+tmp.rx_stat7_rx_loss_cnt_msb_i := f_x_to_zero(left.rx_stat7_rx_loss_cnt_msb_i) or f_x_to_zero(right.rx_stat7_rx_loss_cnt_msb_i);
+tmp.rx_stat8_rx_lost_block_cnt_lsb_i := f_x_to_zero(left.rx_stat8_rx_lost_block_cnt_lsb_i) or f_x_to_zero(right.rx_stat8_rx_lost_block_cnt_lsb_i);
+tmp.rx_stat9_rx_lost_block_cnt_msb_i := f_x_to_zero(left.rx_stat9_rx_lost_block_cnt_msb_i) or f_x_to_zero(right.rx_stat9_rx_lost_block_cnt_msb_i);
+tmp.rx_stat10_rx_latency_acc_lsb_i := f_x_to_zero(left.rx_stat10_rx_latency_acc_lsb_i) or f_x_to_zero(right.rx_stat10_rx_latency_acc_lsb_i);
+tmp.rx_stat11_rx_latency_acc_msb_i := f_x_to_zero(left.rx_stat11_rx_latency_acc_msb_i) or f_x_to_zero(right.rx_stat11_rx_latency_acc_msb_i);
+tmp.rx_stat12_rx_latency_acc_cnt_lsb_i := f_x_to_zero(left.rx_stat12_rx_latency_acc_cnt_lsb_i) or f_x_to_zero(right.rx_stat12_rx_latency_acc_cnt_lsb_i);
+tmp.rx_stat13_rx_latency_acc_cnt_msb_i := f_x_to_zero(left.rx_stat13_rx_latency_acc_cnt_msb_i) or f_x_to_zero(right.rx_stat13_rx_latency_acc_cnt_msb_i);
+tmp.dbg_data_i := f_x_to_zero(left.dbg_data_i) or f_x_to_zero(right.dbg_data_i);
+tmp.dummy_dummy_i := f_x_to_zero(left.dummy_dummy_i) or f_x_to_zero(right.dummy_dummy_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd
new file mode 100644
index 000000000..05f22a807
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrtx_streamers_stats.vhd
@@ -0,0 +1,362 @@
+-------------------------------------------------------------------------------
+-- Title : WR Streamers statistics
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xrtx_streamers_stats.vhd
+-- Author : Maciej Lipinski
+-- Company : CERN
+-- Created : 2016-06-08
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- Module to collect, reset, snapshot statistics from the streamers. The
+-- statistics are made available through wishbone I/F (outside this entity)
+-- and diags_i/o (generic input/output arrays of 32-bit registers). Wishbone I/F
+-- can be read via bus (PCI, VME,...). Diags can be read via wrpc commands and
+-- SNMP.
+--
+-- The module provides basic statistics such as:
+-- * number of sent/received streamer frames
+-- * number of lost frames/blocks
+-- * accumulated latency of streamer frames
+-- * count of the accumulated latencies
+-- * max/min latency
+-- * timestamp of the reset pulse
+--
+-- The module allows to snapshot the statistics values as to have a coherent
+-- view.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2016-2017CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.NUMERIC_STD.ALL;
+
+library work;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+use work.streamers_pkg.all; -- needed for streamers
+use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc
+use work.wrcore_pkg.all; -- needed for t_generic_word_array
+use work.streamers_priv_pkg.all;
+
+entity xrtx_streamers_stats is
+ generic (
+ -- Indicates whether this module instantiates both streamers (rx and tx) or only one
+ -- of them. An application that only receives or only transmits might want to use
+ -- RX_ONLY or TX_ONLY mode to save resources.
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ -- Width of frame counters
+ g_cnt_width : integer := 50; -- min:15, max:64, 50 bits should be ok for 50 years
+ g_acc_width : integer := 64 -- max value 64
+ );
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- input signals from streamers
+ sent_frame_i : in std_logic;
+ rcvd_frame_i : in std_logic;
+ lost_block_i : in std_logic;
+ lost_frame_i : in std_logic;
+ lost_frames_cnt_i : in std_logic_vector(14 downto 0);
+ rcvd_latency_i : in std_logic_vector(27 downto 0);
+ rcvd_latency_valid_i : in std_logic;
+
+ clk_ref_i : in std_logic;
+ tm_time_valid_i : in std_logic := '0';
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+
+ -- statistic control
+ reset_stats_i : in std_logic;
+ snapshot_ena_i : in std_logic := '0';
+ ----------------------- statistics ----------------------------------------
+ -- output statistics: time of last reset of statistics
+ reset_time_tai_o : out std_logic_vector(39 downto 0) := x"0000000000";
+ reset_time_cycles_o : out std_logic_vector(27 downto 0) := x"0000000";
+ -- output statistics: tx/rx counters
+ sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ -- output statistics: latency
+ latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_acc_overflow_o : out std_logic;
+ latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0);
+ latency_max_o : out std_logic_vector(27 downto 0);
+ latency_min_o : out std_logic_vector(27 downto 0);
+
+ snmp_array_o : out t_generic_word_array(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0);
+ snmp_array_i : in t_generic_word_array(c_WRS_STATS_ARR_SIZE_IN -1 downto 0)
+ );
+
+end xrtx_streamers_stats;
+
+architecture rtl of xrtx_streamers_stats is
+
+ signal reset_time_tai : std_logic_vector(39 downto 0);
+ signal reset_time_cycles : std_logic_vector(27 downto 0);
+
+ signal sent_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal rcvd_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal lost_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal lost_block_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal latency_cnt : unsigned(g_cnt_width-1 downto 0);
+
+ signal latency_max : std_logic_vector(27 downto 0);
+ signal latency_min : std_logic_vector(27 downto 0);
+ signal latency_acc : unsigned(g_acc_width-1+1 downto 0);
+ signal latency_acc_overflow: std_logic;
+
+ signal sent_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0);
+ signal rcvd_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0);
+ signal lost_frame_cnt_out : std_logic_vector(g_cnt_width-1 downto 0);
+ signal lost_block_cnt_out : std_logic_vector(g_cnt_width-1 downto 0);
+ signal latency_cnt_out : std_logic_vector(g_cnt_width-1 downto 0);
+ signal latency_acc_overflow_out : std_logic;
+ signal latency_acc_out : std_logic_vector(g_acc_width-1 downto 0);
+ signal latency_max_out : std_logic_vector(27 downto 0);
+ signal latency_min_out : std_logic_vector(27 downto 0);
+
+ --- statistics resets:
+ signal reset_stats_remote: std_logic;
+ signal reset_stats : std_logic;
+ signal reset_stats_d1 : std_logic;
+ signal reset_stats_p : std_logic;
+ signal snapshot_remote_ena : std_logic;
+ signal snapshot_ena : std_logic;
+ signal snapshot_ena_d1 : std_logic;
+
+ -- for code cleanness
+ constant c_cw : integer := g_cnt_width;
+ constant c_aw : integer := g_acc_width;
+begin
+
+ -- reset statistics when receiving signal from SNMP or Wishbone
+ reset_stats <= reset_stats_remote or reset_stats_i;
+ -------------------------------------------------------------------------------------------
+ -- produce pulse of reset input signal, this pulse produces timesstamp to be timestamped
+ -------------------------------------------------------------------------------------------
+ -- pulse is on falling and rising edge of the reset signal (reset when signal HIGH)
+ -- in this way, one can
+ -- 1. read the timestamp of the start of statistics acquisition
+ -- 2. reset HIGH
+ -- 3. read the timestamp of the end of statistics acquisition
+ -- 4. start acqusition
+ -------------------------------------------------------------------------------------------
+ -- when exiting the reset, produce pulse for the timestamper
+ p_stats_reset: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0') then
+ reset_stats_p <= '0';
+ reset_stats_d1 <= '0';
+ else
+ reset_stats_d1 <= reset_stats;
+ reset_stats_p <= reset_stats xor reset_stats_d1;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- Timestamp of reset
+ -------------------------------------------------------------------------------------------
+ -- process that timestamps the reset so that we can make statistics over time
+ U_Reset_Timestamper : pulse_stamper
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_i,
+ rst_n_i => rst_n_i,
+ pulse_a_i => reset_stats_p,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ tag_tai_o => reset_time_tai,
+ tag_cycles_o => reset_time_cycles);
+
+ reset_time_tai_o <= reset_time_tai;
+ reset_time_cycles_o <= reset_time_cycles;
+
+ -------------------------------------------------------------------------------------------
+ -- snapshot
+ -------------------------------------------------------------------------------------------
+ -- snapshot is used to expose to user coherent value, so that the count for accumulated
+ -- latency is coherent with the accumulated latency and the average can be accurately
+ -- calculated
+ -------------------------------------------------------------------------------------------
+ snapshot_ena <= snapshot_ena_i or snapshot_remote_ena;
+ -- snapshot
+
+ gen_tx_stats: if(g_streamers_op_mode=TX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate
+ U_TX_STATS: xtx_streamers_stats
+ generic map (
+ g_cnt_width => g_cnt_width
+ )
+ port map(
+ clk_i => clk_i,
+ rst_n_i => rst_n_i,
+ sent_frame_i => sent_frame_i,
+ reset_stats_i => reset_stats,
+ snapshot_ena_i => snapshot_ena,
+ sent_frame_cnt_o => sent_frame_cnt_out);
+ end generate gen_tx_stats;
+ gen_not_tx_stats: if(g_streamers_op_mode=RX_ONLY) generate
+ sent_frame_cnt_out <= (others => '0');
+ end generate gen_not_tx_stats;
+
+ gen_rx_stats: if(g_streamers_op_mode=RX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate
+ U_RX_STATS: xrx_streamers_stats
+ generic map(
+ g_cnt_width => g_cnt_width,
+ g_acc_width => g_acc_width
+ )
+ port map(
+ clk_i => clk_i,
+ rst_n_i => rst_n_i,
+ rcvd_frame_i => rcvd_frame_i,
+ lost_block_i => lost_block_i,
+ lost_frame_i => lost_frame_i,
+ lost_frames_cnt_i => lost_frames_cnt_i,
+ rcvd_latency_i => rcvd_latency_i,
+ rcvd_latency_valid_i => rcvd_latency_valid_i,
+ tm_time_valid_i => tm_time_valid_i,
+ snapshot_ena_i => snapshot_ena,
+ reset_stats_i => reset_stats,
+ rcvd_frame_cnt_o => rcvd_frame_cnt_out,
+ lost_frame_cnt_o => lost_frame_cnt_out,
+ lost_block_cnt_o => lost_block_cnt_out,
+ latency_cnt_o => latency_cnt_out,
+ latency_acc_overflow_o => latency_acc_overflow_out,
+ latency_acc_o => latency_acc_out,
+ latency_max_o => latency_max_out,
+ latency_min_o => latency_min_out);
+ end generate gen_rx_stats;
+ gen_not_rx_stats: if(g_streamers_op_mode=TX_ONLY) generate
+ rcvd_frame_cnt_out <= (others => '0');
+ lost_frame_cnt_out <= (others => '0');
+ lost_block_cnt_out <= (others => '0');
+ latency_cnt_out <= (others => '0');
+ latency_acc_overflow_out <= '0';
+ latency_acc_out <= (others => '0');
+ latency_max_out <= (others => '0');
+ latency_min_out <= (others => '0');
+ end generate gen_not_rx_stats;
+ -------------------------------------------------------------------------------------------
+ -- wishbone local output
+ -------------------------------------------------------------------------------------------
+ sent_frame_cnt_o <= sent_frame_cnt_out;
+ rcvd_frame_cnt_o <= rcvd_frame_cnt_out;
+ lost_frame_cnt_o <= lost_frame_cnt_out;
+ lost_block_cnt_o <= lost_block_cnt_out;
+ latency_max_o <= latency_max_out;
+ latency_min_o <= latency_min_out;
+ latency_acc_o <= latency_acc_out;
+ latency_cnt_o <= latency_cnt_out;
+ latency_acc_overflow_o <= latency_acc_overflow_out;
+
+ -------------------------------------------------------------------------------------------
+ -- SNMP remote output
+ -- Generic communication with WRPC that allows SNMP access via generic array of 32-bits
+ -- std_logic_vectors. The mapping of the generic vectors to meaningful information needs
+ -- to be made available to the user of SNMP
+ -------------------------------------------------------------------------------------------
+ -- check sanity of values
+ assert (c_cw <= 64)
+ report "g_cnt_width value not suppported by f_pack_streamers_statistics" severity error;
+ assert (c_aw <= 64)
+ report "g_acc_width value not suppported by f_pack_streamers_statistics" severity error;
+
+ -- translate generic input vectors to meaningful signals
+ reset_stats_remote <= snmp_array_i(0)(0);
+ snapshot_remote_ena <= snmp_array_i(0)(1);
+
+ snmp_array_o(0)( 0) <= reset_stats; -- loop back for diagnostics
+ snmp_array_o(0)( 1) <= latency_acc_overflow_out;
+ snmp_array_o(0) (31 downto 2) <= (others => '0');
+
+ snmp_array_o(1)( 31 downto 0) <= x"0" & reset_time_cycles( 27 downto 0);
+ snmp_array_o(2)( 31 downto 0) <= reset_time_tai( 31 downto 0);
+ snmp_array_o(3)( 31 downto 0) <= x"000000" & reset_time_tai( 39 downto 32);
+
+ -- translate meaningful signals (statistics values) to generic output vectors
+ snmp_array_o(4 )(31 downto 0) <= x"0" & latency_max_out(27 downto 0);
+ snmp_array_o(5 )(31 downto 0) <= x"0" & latency_min_out(27 downto 0);
+
+ CNT_SINGLE_WORD_gen: if(c_cw < 33) generate
+ snmp_array_o(6 )(c_cw-1 downto 0) <= sent_frame_cnt_out;
+ snmp_array_o(6 )(31 downto c_cw) <= (others => '0');
+ snmp_array_o(7 )(31 downto 0) <= (others => '0');
+
+ snmp_array_o(8 )(c_cw-1 downto 0) <= rcvd_frame_cnt_out;
+ snmp_array_o(8 )(31 downto c_cw) <= (others => '0');
+ snmp_array_o(9 )(31 downto 0) <= (others => '0');
+
+ snmp_array_o(10)(c_cw-1 downto 0) <= lost_frame_cnt_out;
+ snmp_array_o(10)(31 downto c_cw) <= (others => '0');
+ snmp_array_o(11)(31 downto 0) <= (others => '0');
+
+ snmp_array_o(12)(c_cw-1 downto 0) <= lost_block_cnt_out;
+ snmp_array_o(12)(31 downto c_cw) <= (others => '0');
+ snmp_array_o(13)(31 downto 0) <= (others => '0');
+
+ snmp_array_o(14)(c_cw-1 downto 0) <= latency_cnt_out;
+ snmp_array_o(14)(31 downto c_cw) <= (others => '0');
+ snmp_array_o(15)(31 downto 0) <= (others => '0');
+ end generate;
+ ACC_SINGLE_WORD_gen: if(c_aw < 33) generate
+ snmp_array_o(16)(c_aw-1 downto 0) <= latency_acc_out;
+ snmp_array_o(16)(31 downto c_aw) <= (others => '0');
+ snmp_array_o(17)(31 downto 0) <= (others => '0');
+ end generate;
+
+ ---
+ CNT_TWO_WORDs_gen: if(c_cw > 32) generate
+ snmp_array_o(6 )(31 downto 0) <= sent_frame_cnt_out(31 downto 0);
+ snmp_array_o(7 )(c_cw-32-1 downto 0) <= sent_frame_cnt_out(c_cw-1 downto 32);
+ snmp_array_o(7 )(31 downto c_cw-32) <= (others => '0');
+
+ snmp_array_o(8 )(31 downto 0) <= rcvd_frame_cnt_out(31 downto 0);
+ snmp_array_o(9 )(c_cw-32-1 downto 0) <= rcvd_frame_cnt_out(c_cw-1 downto 32);
+ snmp_array_o(9 )(31 downto c_cw-32) <= (others => '0');
+
+ snmp_array_o(10)(31 downto 0) <= lost_frame_cnt_out(31 downto 0);
+ snmp_array_o(11)(c_cw-32-1 downto 0) <= lost_frame_cnt_out(c_cw-1 downto 32);
+ snmp_array_o(11 )(31 downto c_cw-32) <= (others => '0');
+
+ snmp_array_o(12)(31 downto 0) <= lost_block_cnt_out(31 downto 0);
+ snmp_array_o(13)(c_cw-32-1 downto 0) <= lost_block_cnt_out(c_cw-1 downto 32);
+ snmp_array_o(13 )(31 downto c_cw-32) <= (others => '0');
+
+ snmp_array_o(14)(31 downto 0) <= latency_cnt_out(31 downto 0);
+ snmp_array_o(15)(c_cw-32-1 downto 0) <= latency_cnt_out(c_cw-1 downto 32);
+ snmp_array_o(15 )(31 downto c_cw-32) <= (others => '0');
+ end generate;
+ ACC_TWO_WORDs_gen: if(c_aw > 32) generate
+ snmp_array_o(16)(31 downto 0) <= latency_acc_out(31 downto 0);
+ snmp_array_o(17)(c_aw-32-1 downto 0) <= latency_acc_out(c_aw-1 downto 32) ;
+ snmp_array_o(17)(31 downto c_aw-32) <= (others => '0');
+ end generate;
+
+end rtl;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd
new file mode 100644
index 000000000..e135c0b08
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamer.vhd
@@ -0,0 +1,677 @@
+-------------------------------------------------------------------------------
+-- Title : Transmission Streamer
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xrx_streamer.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-11-02
+-- Platform : FPGA-generic
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: A simple core demonstrating how to encapsulate a continuous
+-- stream of data words into Ethernet frames, in a format that is accepted by
+-- the White Rabbit PTP core. This core decodes Ethernet frames encoded by
+-- xtx_streamer. More info in the documentation.
+-------------------------------------------------------------------------------
+-- Copyright (c) 2012-2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.streamers_priv_pkg.all;
+use work.streamers_pkg.all;
+
+entity xrx_streamer is
+
+ generic (
+ -- Width of the data words, must be multiple of 16 bits. This value set to this generic
+ -- on the receviving device must be the same as the value of g_tx_data_width set on the
+ -- transmitting node. The g_rx_data_width and g_tx_data_width can be set to different
+ -- values in the same device (i.e. instantiation of xwr_transmission entity). It is the
+ -- responsibility of a network designer to make sure these parameters are properly set
+ -- in the network.
+ g_data_width : integer := 32;
+
+ -- Size of RX buffer, in data words.
+ g_buffer_size : integer := 256;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy: the streamers that were initially used in Btrain did not check/insert
+ -- the escape code. This is justified if only one block of a known number of words is
+ -- sent/expected.
+ g_escape_code_disable : boolean := FALSE;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy: the streamers that were initially used in Btrain accepted only a fixed
+ -- number of words, regardless of the frame content. If this generic is set to number
+ -- other than zero, only a fixed number of words is accepted.
+ -- In combination with the g_escape_code_disable generic set to TRUE, the behaviour of
+ -- the "Btrain streamers" can be recreated.
+ g_expected_words_number : integer := 0
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Endpoint/WRC interface
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+
+ ---------------------------------------------------------------------------
+ -- WRC Timing interface, used for latency measurement
+ -- Caution: uses clk_ref_i clock domain!
+ ---------------------------------------------------------------------------
+
+ -- White Rabbit reference clock
+ clk_ref_i : in std_logic := '0';
+
+ -- Time valid flag
+ tm_time_valid_i : in std_logic := '0';
+
+ -- TAI seconds
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+
+ -- Fractional part of the second (in clk_ref_i cycles)
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+
+ ---------------------------------------------------------------------------
+ -- User interface
+ ---------------------------------------------------------------------------
+
+ -- 1 indicates the 1st word of the data block on rx_data_o.
+ rx_first_p1_o : out std_logic;
+ -- 1 indicates the last word of the data block on rx_data_o.
+ rx_last_p1_o : out std_logic;
+ -- Received data.
+ rx_data_o : out std_logic_vector(g_data_width-1 downto 0);
+ -- 1 indicted that rx_data_o is outputting a valid data word.
+ rx_valid_o : out std_logic;
+ -- Synchronous data request input: when 1, the streamer may output another
+ -- data word in the subsequent clock cycle.
+ rx_dreq_i : in std_logic;
+ -- Lost output: 1 indicates that one or more frames or blocks have been lost
+ -- (left for backward compatibility).
+ rx_lost_p1_o : out std_logic := '0';
+ -- indicates that one or more blocks within frame are missing
+ rx_lost_blocks_p1_o : out std_logic := '0';
+ -- indicates that one or more frames are missing, the number of frames is provied
+ rx_lost_frames_p1_o : out std_logic := '0';
+ --number of lost frames, the 0xF...F means that counter overflew
+ rx_lost_frames_cnt_o : out std_logic_vector(14 downto 0);
+ -- Latency measurement output: indicates the transport latency (between the
+ -- TX streamer in remote device and this streamer), in clk_ref_i clock cycles.
+ rx_latency_o : out std_logic_vector(27 downto 0);
+ -- 1 when the latency on rx_latency_o is valid.
+ rx_latency_valid_o : out std_logic;
+ -- received streamer frame (counts all frames, corrupted and not)
+ rx_frame_p1_o : out std_logic;
+ -- configuration
+ rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default
+ );
+
+end xrx_streamer;
+
+architecture rtl of xrx_streamer is
+
+ type t_rx_state is (IDLE, HEADER, FRAME_SEQ_ID, PAYLOAD, SUBFRAME_HEADER, EOF);
+
+ signal fab, fsm_in : t_pipe;
+
+ signal state : t_rx_state;
+
+ signal ser_count : unsigned(7 downto 0);
+ signal seq_no, seq_new,count : unsigned(14 downto 0);
+
+ signal crc_match, crc_en, crc_en_masked, crc_restart : std_logic;
+
+ signal detect_escapes, is_escape : std_logic;
+ signal rx_pending : std_logic;
+
+ signal pack_data, fifo_data : std_logic_vector(g_data_width-1 downto 0);
+
+ signal fifo_drop, fifo_accept, fifo_accept_d0, fifo_dvalid : std_logic;
+ signal fifo_sync, fifo_last, frames_lost, blocks_lost : std_logic;
+ signal fifo_dout, fifo_din : std_logic_vector(g_data_width + 1 downto 0);
+
+ signal pending_write, fab_dvalid_pre : std_logic;
+
+
+ signal tx_tag_cycles, rx_tag_cycles : std_logic_vector(27 downto 0);
+ signal tx_tag_valid, rx_tag_valid : std_logic;
+
+ signal got_next_subframe : std_logic;
+ signal is_frame_seq_id : std_logic;
+ signal word_count : unsigned(11 downto 0);
+ signal sync_seq_no : std_logic;
+
+ -- fixed latency signals
+ type t_rx_delay_state is (DISABLED, DELAY, ALLOW);
+ signal timestamped : std_logic;
+ signal delay_cnt : unsigned(27 downto 0);
+ signal rx_dreq_allow : std_logic;
+ signal rx_latency : unsigned(27 downto 0);
+ signal rx_latency_stored : unsigned(27 downto 0);
+ signal rx_latency_valid : std_logic;
+ signal delay_state : t_rx_delay_state;
+ signal rx_dreq : std_logic;
+ signal is_vlan : std_logic;
+
+ constant c_fixed_latency_zero : unsigned(27 downto 0) := (others => '0');
+ constant c_timestamper_delay : unsigned(27 downto 0) := to_unsigned(12, 28); -- cycles
+
+begin -- rtl
+
+ U_rx_crc_generator : gc_crc_gen
+ generic map (
+ g_polynomial => x"1021",
+ g_init_value => x"ffff",
+ g_residue => x"470f",
+ g_data_width => 16,
+ g_sync_reset => 1,
+ g_dual_width => 0,
+ g_registered_match_output => true)
+ port map (
+ clk_i => clk_sys_i,
+ rst_i => '0',
+ restart_i => crc_restart,
+ en_i => crc_en_masked,
+ data_i => fsm_in.data,
+ half_i => '0',
+ match_o => crc_match);
+
+ crc_en_masked <= crc_en and fsm_in.dvalid;
+
+ U_Fabric_Sink : xwb_fabric_sink
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_i => snk_i,
+ snk_o => snk_o,
+ addr_o => fab.addr,
+ data_o => fab.data,
+ dvalid_o => fab_dvalid_pre,
+ sof_o => fab.sof,
+ eof_o => fab.eof,
+ error_o => fab.error,
+ bytesel_o => fab.bytesel,
+ dreq_i => fab.dreq);
+
+ fab.dvalid <= '1' when fab_dvalid_pre = '1' and fab.addr = c_WRF_DATA and fab.bytesel = '0' else '0';
+ gen_escape: if (g_escape_code_disable = FALSE) generate
+ U_Escape_Detect : escape_detector
+ generic map (
+ g_data_width => 16,
+ g_escape_code => x"cafe")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ d_i => fab.data,
+ d_detect_enable_i => detect_escapes,
+ d_valid_i => fab.dvalid,
+ d_req_o => fab.dreq,
+ d_o => fsm_in.data,
+ d_escape_o => is_escape,
+ d_valid_o => fsm_in.dvalid,
+ d_req_i => fsm_in.dreq);
+ end generate gen_escape;
+ gen_no_escape: if (g_escape_code_disable = TRUE) generate
+ fsm_in.dvalid <= fab.dvalid;
+ fsm_in.data <= fab.data;
+ fab.dreq <= fsm_in.dreq;
+ is_escape <= '0';
+ end generate gen_no_escape;
+ fsm_in.eof <= fab.eof or fab.error;
+ fsm_in.sof <= fab.sof;
+
+
+ U_Output_FIFO : dropping_buffer
+ generic map (
+ g_size => g_buffer_size,
+ g_data_width => g_data_width + 2)
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ d_i => fifo_din,
+ d_req_o => fsm_in.dreq,
+ d_drop_i => fifo_drop,
+ d_accept_i => fifo_accept_d0,
+ d_valid_i => fifo_dvalid,
+ d_o => fifo_dout,
+ d_valid_o => rx_valid_o,
+ d_req_i => rx_dreq);
+
+ fifo_din(g_data_width+1) <= fifo_sync;
+ fifo_din(g_data_width) <= fifo_last or
+ ((not pending_write) and is_escape); -- when word is 16 bits
+ fifo_din(g_data_width-1 downto 0) <= fifo_data;
+
+ rx_data_o <= fifo_dout(g_data_width-1 downto 0);
+ rx_first_p1_o <= fifo_dout(g_data_width+1);
+ rx_last_p1_o <= fifo_dout(g_data_width);
+
+ U_RX_Timestamper : pulse_stamper
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ pulse_a_i => fsm_in.sof,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ tag_cycles_o => rx_tag_cycles);
+
+ -------------------------------------------------------------------------------------------
+ -- fixed latency implementation
+ -------------------------------------------------------------------------------------------
+
+ -- mask rx_dreq to prevent reception
+ rx_dreq <= rx_dreq_i and rx_dreq_allow;
+ -- produce a pulse when SOF is timestamped, this pulse starts counter in clk_sys clock
+ -- domain
+ U_sync_with_clk : gc_sync_ffs
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ data_i => fsm_in.sof,
+ synced_o => timestamped);
+
+ -- introduce fixed latency, if configured to do so
+ p_fixed_latency_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ delay_state <= DISABLED;
+ rx_latency_stored <= (others=>'0');
+ rx_dreq_allow <= '1';
+ delay_cnt <= c_timestamper_delay;
+ else
+ case delay_state is
+ when DISABLED =>
+ if unsigned(rx_streamer_cfg_i.fixed_latency) /= c_fixed_latency_zero then
+ delay_state <= ALLOW;
+ end if;
+ rx_latency_stored <= (others=>'0');
+ delay_cnt <= c_timestamper_delay;
+ rx_dreq_allow <= '1';
+ when ALLOW =>
+ if unsigned(rx_streamer_cfg_i.fixed_latency) = c_fixed_latency_zero then
+ delay_state <= DISABLED;
+ elsif(rx_latency_valid ='1') then
+ rx_dreq_allow <= '0';
+ rx_latency_stored <= rx_latency;
+ delay_state <= DELAY;
+ end if;
+ if(timestamped = '1') then
+ delay_cnt <= c_timestamper_delay;
+ else
+ delay_cnt <= delay_cnt + 2;
+ end if;
+ when DELAY =>
+ if unsigned(rx_streamer_cfg_i.fixed_latency) <= delay_cnt + rx_latency_stored then
+ rx_latency_stored <= (others=>'0');
+ rx_dreq_allow <= '1';
+ delay_state <= ALLOW;
+ else
+ delay_cnt <= delay_cnt + 2;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- end of fixed latency implementation
+ -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ p_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= IDLE;
+ count <= (others => '0');
+ seq_no <= (others => '1');
+ detect_escapes <= '0';
+ crc_en <= '0';
+ fifo_accept <= '0';
+ fifo_drop <= '0';
+ fifo_dvalid <= '0';
+ pending_write <= '0';
+ got_next_subframe <= '0';
+ fifo_sync <= '0';
+ fifo_last <= '0';
+ tx_tag_valid <= '0';
+ ser_count <= (others => '0');
+ word_count <= (others => '0');
+ sync_seq_no <= '1';
+ rx_frame_p1_o <= '0';
+ rx_lost_frames_cnt_o <= (others => '0');
+ frames_lost <= '0';
+ rx_latency <= (others=>'0');
+ rx_latency_valid <= '0';
+ blocks_lost <= '0';
+ pack_data <= (others=>'0');
+ is_vlan <= '0';
+ else
+ case state is
+ when IDLE =>
+ detect_escapes <= '0';
+ crc_en <= '0';
+ count <= (others => '0');
+ fifo_accept <= '0';
+ fifo_drop <= '0';
+ fifo_dvalid <= '0';
+ pending_write <= '0';
+ got_next_subframe <='0';
+ ser_count <= (others => '0');
+ fifo_sync <='0';
+ fifo_last <= '0';
+ word_count <= (others => '0');
+ tx_tag_valid <= '0';
+ rx_frame_p1_o <= '0';
+ rx_lost_frames_cnt_o <= (others => '0');
+ frames_lost <= '0';
+ blocks_lost <= '0';
+ rx_latency <= (others=>'0');
+ rx_latency_valid <= '0';
+ is_vlan <= '0';
+
+ if(fsm_in.sof = '1') then
+ state <= HEADER;
+ end if;
+
+ when HEADER =>
+ if(fsm_in.eof = '1') then
+ state <= IDLE;
+ elsif(fsm_in.dvalid = '1') then
+ case count(7 downto 0) is
+ when x"00" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_local(47 downto 32) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"01" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_local(31 downto 16) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"02" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_local(15 downto 0) nor (rx_streamer_cfg_i.accept_broadcasts = '1' and fsm_in.data /= x"ffff")) then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"03" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(47 downto 32) and rx_streamer_cfg_i.filter_remote ='1') then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"04" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(31 downto 16) and rx_streamer_cfg_i.filter_remote ='1') then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"05" =>
+ if(fsm_in.data /= rx_streamer_cfg_i.mac_remote(15 downto 0) and rx_streamer_cfg_i.filter_remote ='1') then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"06" =>
+ if(fsm_in.data = x"8100") then
+ is_vlan <='1';
+ elsif(fsm_in.data /= rx_streamer_cfg_i.ethertype) then
+ state <= IDLE;
+ is_vlan <='0';
+ end if;
+ count <= count + 1;
+ when x"07" =>
+ if(is_vlan = '0') then
+ tx_tag_valid <= fsm_in.data(15);
+ tx_tag_cycles(27 downto 16)<= fsm_in.data(11 downto 0);
+ end if;
+ count <= count + 1;
+ when x"08" =>
+ if(is_vlan = '0') then
+ tx_tag_cycles(15 downto 0) <= fsm_in.data;
+ count <= count + 1;
+ crc_en <= '1';
+ detect_escapes <= '1';
+ state <= FRAME_SEQ_ID;
+ rx_frame_p1_o <= '1';
+ elsif(fsm_in.data /= rx_streamer_cfg_i.ethertype) then
+ state <= IDLE;
+ end if;
+ count <= count + 1;
+ when x"09" =>
+ tx_tag_valid <= fsm_in.data(15);
+ tx_tag_cycles(27 downto 16)<= fsm_in.data(11 downto 0);
+ count <= count + 1;
+ when x"0A" =>
+ tx_tag_cycles(15 downto 0) <= fsm_in.data;
+ count <= count + 1;
+ crc_en <= '1';
+ detect_escapes <= '1';
+ state <= FRAME_SEQ_ID;
+ rx_frame_p1_o <= '1';
+ count <= count + 1;
+ when others => null;
+ end case;
+ end if;
+
+ when FRAME_SEQ_ID =>
+ rx_frame_p1_o <= '0';
+ if(fsm_in.eof = '1') then
+ state <= IDLE;
+ elsif(fsm_in.dvalid = '1') then
+ count <= "000" & x"001"; -- use as subframe seq_no
+ state <= PAYLOAD;
+ fifo_drop <= '0';
+ fifo_accept <= '0';
+ ser_count <= (others => '0');
+ word_count <= word_count + 1; -- count words, increment in advance
+ got_next_subframe <= '1';
+ if(tx_tag_valid = '1') then
+ rx_latency_valid <= '1';
+ if(unsigned(tx_tag_cycles) > unsigned(rx_tag_cycles)) then
+ rx_latency <= unsigned(rx_tag_cycles) - unsigned(tx_tag_cycles) + to_unsigned(125000000, 28);
+ else
+ rx_latency <= unsigned(rx_tag_cycles) - unsigned(tx_tag_cycles);
+ end if;
+ tx_tag_valid <= '0';
+ else
+ rx_latency_valid <= '0';
+ end if;
+
+ if(std_logic_vector(seq_no) /= fsm_in.data(14 downto 0)) then
+ seq_no <= unsigned(fsm_in.data(14 downto 0))+1;
+ if (sync_seq_no = '1') then -- sync to the first received seq_no
+ sync_seq_no <= '0';
+ frames_lost <= '0';
+ rx_lost_frames_cnt_o <= (others => '0');
+ else
+ rx_lost_frames_cnt_o <= std_logic_vector(unsigned(fsm_in.data(14 downto 0)) - seq_no);
+ frames_lost <= '1';
+ end if;
+ else
+ seq_no <= unsigned(seq_no + 1);
+ frames_lost <= '0';
+ rx_lost_frames_cnt_o <= (others => '0');
+ end if;
+ end if;
+
+ when SUBFRAME_HEADER =>
+ fifo_drop <= '0';
+ fifo_accept <= '0';
+ ser_count <= (others => '0');
+
+ if(fsm_in.eof = '1') then
+ state <= IDLE;
+ got_next_subframe <= '0';
+ blocks_lost <= '0';
+ elsif (fsm_in.dvalid = '1' and is_escape = '1') then
+ got_next_subframe <= '1';
+
+ if(std_logic_vector(count) /= fsm_in.data(14 downto 0)) then
+ count <= unsigned(fsm_in.data(14 downto 0))+1;
+ blocks_lost <= '1';
+ else
+ count <= count + 1;
+ blocks_lost <= '0';
+ end if;
+ state <= PAYLOAD;
+ end if;
+
+ when PAYLOAD =>
+ frames_lost <= '0';
+ rx_lost_frames_cnt_o <= (others => '0');
+ rx_latency_valid <= '0';
+ fifo_sync <= got_next_subframe;
+
+ if(fsm_in.eof = '1') then
+ state <= IDLE;
+ fifo_drop <= '1';
+ fifo_accept <= '0';
+ got_next_subframe <= '0';
+
+ elsif(fsm_in.dvalid = '1') then
+
+
+
+ if(is_escape = '1') then
+ ser_count <= (others => '0');
+ fifo_last <= '1';
+
+ got_next_subframe <= '1';
+
+ if(fsm_in.data(15) = '1') then
+
+ if(std_logic_vector(count) /= fsm_in.data(14 downto 0)) then
+ count <= unsigned(fsm_in.data(14 downto 0));
+ blocks_lost <= '1';
+ else
+ count <= unsigned(count + 1);
+ blocks_lost <= '0';
+ end if;
+
+ state <= PAYLOAD;
+
+ fifo_accept <= crc_match; --_latched;
+ fifo_drop <= not crc_match; --_latched;
+ fifo_dvalid <= pending_write and not fifo_dvalid;
+ pending_write <= '0';
+
+ elsif fsm_in.data = x"0bad" then
+ blocks_lost <= '0';
+ state <= EOF;
+ fifo_accept <= crc_match; --_latched;
+ fifo_drop <= not crc_match; --_latched;
+ fifo_dvalid <= pending_write and not fifo_dvalid;
+ else
+ blocks_lost <= '0';
+ state <= EOF;
+ fifo_drop <= '1';
+ fifo_accept <= '0';
+ end if;
+
+ else --of: if(is_escape = '1' or word_count = g_expected_words_number) then
+
+ fifo_last <= '0';
+ fifo_accept <= '0';
+ fifo_drop <= '0';
+ blocks_lost <= '0';
+
+ pack_data(to_integer(ser_count) * 16 + 15 downto to_integer(ser_count) * 16) <= fsm_in.data;
+
+ if(ser_count = g_data_width/16 - 1) then
+ ser_count <= (others => '0');
+
+ if (ser_count = x"00") then -- ML: the case when g_data_width == 16
+ fifo_sync <= got_next_subframe;
+ fifo_data(g_data_width-1 downto 0) <= pack_data(g_data_width-1 downto 0);
+ fifo_dvalid <= not is_escape;
+ pending_write <= '0';
+ else
+ ser_count <= (others => '0');
+ fifo_data(g_data_width-16-1 downto 0) <= pack_data(g_data_width-16-1 downto 0);
+ fifo_data(g_data_width-1 downto g_data_width-16) <= fsm_in.data;
+ fifo_dvalid <= '0';
+ pending_write <= '1';
+ end if;
+ if(word_count = g_expected_words_number) then
+ state <= EOF;
+ fifo_accept <= '1';
+ fifo_drop <= '0';
+ fifo_dvalid <= '1';
+ else
+ word_count <= word_count + 1;
+ end if;
+ elsif(ser_count = g_data_width/16-2 and pending_write = '1') then
+ pending_write <= '0';
+ ser_count <= ser_count + 1;
+ fifo_dvalid <= '1';
+ fifo_sync <= got_next_subframe;
+ got_next_subframe <= '0';
+ else
+ ser_count <= ser_count + 1;
+ fifo_dvalid <= '0';
+ end if;
+
+ end if;
+ else --of: elsif(fsm_in.dvalid = '1') then
+ fifo_dvalid <= '0';
+ end if;
+
+ if(fifo_dvalid = '1') then
+ fifo_sync <= '0';
+ end if;
+
+
+ when EOF =>
+ fifo_dvalid <= '0';
+ fifo_drop <= '0';
+ fifo_accept <= '0';
+ state <= IDLE;
+
+ end case;
+ end if;
+ end if;
+ end process;
+
+ p_delay_fifo_accept : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ fifo_accept_d0 <= fifo_accept;
+ end if;
+ end process;
+
+ rx_lost_p1_o <= frames_lost or blocks_lost;
+ rx_lost_blocks_p1_o <= blocks_lost;
+ rx_lost_frames_p1_o <= frames_lost;
+ rx_latency_o <= std_logic_vector(rx_latency);
+ rx_latency_valid_o <= rx_latency_valid;
+ crc_restart <= '1' when (state = FRAME_SEQ_ID or (is_escape = '1' and fsm_in.data(15) = '1')) else not rst_n_i;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd
new file mode 100644
index 000000000..d2257ce57
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xrx_streamers_stats.vhd
@@ -0,0 +1,231 @@
+-------------------------------------------------------------------------------
+-- Title : WR Recpetion Streamers statistics
+-- Project : White Rabbit Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xrx_streamers_stats.vhd
+-- Author : Maciej Lipinski
+-- Company : CERN
+-- Created : 2017-04-19
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- This module provies the reception portion of statistics and
+-- allows to snapshot their values. See xrtx_streamers_stats for
+-- more detailed description.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2016 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+---------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.NUMERIC_STD.ALL;
+
+library work;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+use work.streamers_pkg.all; -- needed for streamers
+use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc
+use work.wrcore_pkg.all; -- needed for t_generic_word_array
+-- use work.wr_transmission_wbgen2_pkg.all;
+
+entity xrx_streamers_stats is
+
+ generic (
+ -- Width of frame counters
+ g_cnt_width : integer := 50; -- min:15, max:64, 50 bits should be ok for 50 years
+ g_acc_width : integer := 64 -- max value 64
+ );
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- input signals from streamers
+ rcvd_frame_i : in std_logic;
+ lost_block_i : in std_logic;
+ lost_frame_i : in std_logic;
+ lost_frames_cnt_i : in std_logic_vector(14 downto 0);
+ rcvd_latency_i : in std_logic_vector(27 downto 0);
+ rcvd_latency_valid_i : in std_logic;
+ tm_time_valid_i : in std_logic;
+
+ snapshot_ena_i : in std_logic := '0';
+ reset_stats_i : in std_logic;
+ ----------------------- statistics ----------------------------------------
+ -- output statistics: tx/rx counters
+ rcvd_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ lost_block_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ -- output statistics: latency
+ latency_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0);
+ latency_acc_overflow_o : out std_logic;
+ latency_acc_o : out std_logic_vector(g_acc_width-1 downto 0);
+ latency_max_o : out std_logic_vector(27 downto 0);
+ latency_min_o : out std_logic_vector(27 downto 0)
+ );
+
+end xrx_streamers_stats;
+
+architecture rtl of xrx_streamers_stats is
+
+
+ signal rcvd_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal lost_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal lost_block_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal latency_cnt : unsigned(g_cnt_width-1 downto 0);
+
+ signal latency_max : std_logic_vector(27 downto 0);
+ signal latency_min : std_logic_vector(27 downto 0);
+ signal latency_acc : unsigned(g_acc_width-1+1 downto 0);
+ signal latency_acc_overflow: std_logic;
+
+ -- snaphsot
+ signal rcvd_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0);
+ signal lost_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0);
+ signal lost_block_cnt_d1 : unsigned(g_cnt_width-1 downto 0);
+ signal latency_cnt_d1 : unsigned(g_cnt_width-1 downto 0);
+
+ signal latency_max_d1 : std_logic_vector(27 downto 0);
+ signal latency_min_d1 : std_logic_vector(27 downto 0);
+ signal latency_acc_d1 : unsigned(g_acc_width-1+1 downto 0);
+ signal latency_acc_overflow_d1: std_logic;
+
+ signal snapshot_ena_d1 : std_logic;
+
+begin
+
+ -------------------------------------------------------------------------------------------
+ -- frame/block statistics, i.e. lost, sent, received
+ -------------------------------------------------------------------------------------------
+ -- process that counts: receved/lost frames
+ p_cnts: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0' or reset_stats_i = '1') then
+ rcvd_frame_cnt <= (others => '0');
+ lost_frame_cnt <= (others => '0');
+ lost_block_cnt <= (others => '0');
+ else
+ -- count received frames
+ if(rcvd_frame_i = '1') then
+ rcvd_frame_cnt <= rcvd_frame_cnt + 1;
+ end if;
+ -- count lost frames
+ if(lost_frame_i = '1') then
+ lost_frame_cnt <= lost_frame_cnt + resize(unsigned(lost_frames_cnt_i),lost_frame_cnt'length);
+ end if;
+ -- count lost blocks
+ if(lost_block_i = '1') then
+ lost_block_cnt <= lost_block_cnt + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- latency statistics
+ -------------------------------------------------------------------------------------------
+ p_latency_stats: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0' or reset_stats_i = '1') then
+ latency_max <= (others => '0');
+ latency_min <= (others => '1');
+ latency_acc <= (others => '0');
+ latency_cnt <= (others => '0');
+ latency_acc_overflow <= '0';
+ else
+ if(rcvd_latency_valid_i = '1' and tm_time_valid_i = '1') then
+ if(latency_max < rcvd_latency_i) then
+ latency_max <= rcvd_latency_i;
+ end if;
+ if(latency_min > rcvd_latency_i) then
+ latency_min <= rcvd_latency_i;
+ end if;
+ if(latency_acc(g_acc_width) ='1') then
+ latency_acc_overflow <= '1';
+ end if;
+ latency_cnt <= latency_cnt + 1;
+ latency_acc <= latency_acc + resize(unsigned(rcvd_latency_i),latency_acc'length);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- snapshot
+ -------------------------------------------------------------------------------------------
+ -- snapshot is used to expose to user coherent value, so that the count for accumulated
+ -- latency is coherent with the accumulated latency and the average can be accurately
+ -- calculated
+ -------------------------------------------------------------------------------------------
+
+ -- snapshot
+ p_stats_snapshot: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0') then
+ snapshot_ena_d1 <= '0';
+ rcvd_frame_cnt_d1 <= (others=>'0');
+ lost_frame_cnt_d1 <= (others=>'0');
+ lost_block_cnt_d1 <= (others=>'0');
+ latency_cnt_d1 <= (others=>'0');
+
+ latency_max_d1 <= (others=>'0');
+ latency_min_d1 <= (others=>'0');
+ latency_acc_d1 <= (others=>'0');
+ latency_acc_overflow_d1 <= '0';
+ else
+ if(snapshot_ena_i = '1' and snapshot_ena_d1 = '0') then
+ rcvd_frame_cnt_d1 <= rcvd_frame_cnt;
+ lost_frame_cnt_d1 <= lost_frame_cnt;
+ lost_block_cnt_d1 <= lost_block_cnt;
+ latency_cnt_d1 <= latency_cnt;
+
+ latency_max_d1 <= latency_max;
+ latency_min_d1 <= latency_min;
+ latency_acc_d1 <= latency_acc;
+ latency_acc_overflow_d1 <= latency_acc_overflow;
+ end if;
+ snapshot_ena_d1 <= snapshot_ena_i;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- snapshot or current value
+ -------------------------------------------------------------------------------------------
+ rcvd_frame_cnt_o <= std_logic_vector(rcvd_frame_cnt_d1) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(rcvd_frame_cnt);
+ lost_frame_cnt_o <= std_logic_vector(lost_frame_cnt_d1) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(lost_frame_cnt);
+ lost_block_cnt_o <= std_logic_vector(lost_block_cnt_d1) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(lost_block_cnt);
+ latency_max_o <= latency_max_d1 when (snapshot_ena_d1 = '1') else
+ latency_max;
+ latency_min_o <= latency_min_d1 when (snapshot_ena_d1 = '1') else
+ latency_min;
+ latency_acc_o <= std_logic_vector(latency_acc_d1(g_acc_width-1 downto 0)) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(latency_acc(g_acc_width-1 downto 0));
+ latency_cnt_o <= std_logic_vector(latency_cnt_d1) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(latency_cnt);
+ latency_acc_overflow_o <= latency_acc_overflow_d1 when (snapshot_ena_d1 = '1') else
+ latency_acc_overflow;
+
+end rtl; \ No newline at end of file
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd
new file mode 100644
index 000000000..fea78ab7e
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamer.vhd
@@ -0,0 +1,597 @@
+-------------------------------------------------------------------------------
+-- Title : Reception streamer
+-- Project : WR streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xtx_streamer.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2012-11-02
+-- Platform : FPGA-generic
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description: A simple core demonstrating how to encapsulate a continuous
+-- stream of data words into Ethernet frames, in a format that is accepted by
+-- the White Rabbit PTP core. More info in the documentation.
+-------------------------------------------------------------------------------
+-- Copyright (c) 2012-2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wishbone_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.streamers_priv_pkg.all;
+use work.streamers_pkg.all;
+
+entity xtx_streamer is
+ generic (
+ -- Width of data words on tx_data_i, must be multiple of 16 bits.
+ g_data_width : integer := 32;
+
+ -- Size of Tx buffer, in data words.
+ g_tx_buffer_size : integer := 256;
+
+ -- Minimum number of data words in the TX buffer that will trigger transmission of an
+ -- Ethernet frame. It cannot be breater than g_tx_buffer_size; it is recommended that
+ -- g_tx_buffer_size = 2 * g_tx_threshold.
+ -- Note that in order for a frame to be transmitted, the buffer must conatain at
+ -- least one complete block.
+ g_tx_threshold : integer := 128;
+
+ -- Maximum number of data words in a single Ethernet frame. It also defines
+ -- the maximum block size (since blocks can't be currently split across
+ -- multiple frames). It cannot be greater than g_tx_buffer_size
+ g_tx_max_words_per_frame : integer := 256;
+
+ -- Transmission timeout (in clk_sys_i cycles), after which the contents
+ -- of TX buffer are sent regardless of the amount of data that is currently
+ -- stored in the buffer, so that data in the buffer does not get stuck.
+ g_tx_timeout : integer := 1024;
+
+ -- DO NOT USE unless you know what you are doing
+ -- legacy stuff: the streamers initially used in Btrain did not check/insert the escape
+ -- code. This is justified if only one block of a known number of words is sent/expected
+ g_escape_code_disable : boolean := FALSE;
+
+ -- simulation mode: it is set to override the startaup-timer, the value with which
+ -- the timer is overriden is set in the second generic
+ g_simulation : integer :=0;
+ -- startup counter, used only in simulatin mode (value in 16ns cycles)
+ g_sim_startup_cnt : integer := 6250-- 100us
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- Endpoint/WRC interface - packet source
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+
+ ---------------------------------------------------------------------------
+ -- WRC Timing interface, used for latency measurement
+ -- Caution: uses clk_ref_i clock domain!
+ ---------------------------------------------------------------------------
+
+ -- White Rabbit reference clock
+ clk_ref_i : in std_logic := '0';
+
+ -- Time valid flag
+ tm_time_valid_i : in std_logic := '0';
+
+ -- TAI seconds
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+
+ -- Fractional part of the second (in clk_ref_i cycles)
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+
+ -- status of the link, in principle the tx can be done only if link is oK
+ link_ok_i : in std_logic := '1';
+ ---------------------------------------------------------------------------
+ -- User interface
+ ---------------------------------------------------------------------------
+
+ -- Data word to be sent.
+ tx_data_i : in std_logic_vector(g_data_width-1 downto 0);
+
+ -- 1 indicates that the tx_data_i contains a valid data word.
+ tx_valid_i : in std_logic;
+
+ -- Synchronous data request: if active, the user may send a data word in
+ -- the following clock cycle.
+ tx_dreq_o : out std_logic;
+
+ -- Last signal. Can be used to indicate the last data word in a larger
+ -- block of samples (see documentation for more details).
+ tx_last_p1_i : in std_logic := '1';
+
+ -- Flush input. When asserted, the streamer will immediatly send out all
+ -- the data that is stored in its TX buffer, ignoring g_tx_timeout.
+ tx_flush_p1_i : in std_logic := '0';
+
+ -- Reset sequence number. When asserted, the internal sequence number
+ -- generator used to detect loss of frames is reset to 0. Advanced feature.
+ tx_reset_seq_i : in std_logic := '0';
+ -- successfully sent streamer frame
+ tx_frame_p1_o : out std_logic;
+ -- Configuration
+ tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default
+ );
+
+end xtx_streamer;
+
+architecture rtl of xtx_streamer is
+
+ type t_tx_state is (IDLE, SOF, ETH_HEADER, FRAME_SEQ_ID, SUBFRAME_HEADER, PAYLOAD, CRC_WORD, PADDING, EOF);
+
+ constant c_min_packet_size : integer := 32;
+
+ signal tx_threshold_hit : std_logic;
+ signal tx_timeout_hit : std_logic;
+ signal tx_flush_latched : std_logic;
+
+ signal tx_fifo_last, tx_fifo_we, tx_fifo_full, tx_fifo_empty, tx_fifo_rd : std_logic;
+ signal tx_fifo_q, tx_fifo_d : std_logic_vector(g_data_width downto 0);
+ signal state : t_tx_state;
+ signal seq_no, count : unsigned(14 downto 0);
+ signal ser_count : unsigned(7 downto 0);
+ signal word_count : unsigned(11 downto 0); --2^12 = 4096*2 bytes (can accommodate jambo frame)
+ signal total_words : unsigned(10 downto 0);
+
+ signal timeout_counter : unsigned(11 downto 0);
+
+ signal pack_data : std_logic_vector(15 downto 0);
+
+ signal fsm_out, escaper, fab_src : t_pipe;
+ signal fsm_escape, fsm_escape_enable : std_logic;
+
+ signal crc_en, crc_en_masked, crc_reset : std_logic;
+ signal crc_value : std_logic_vector(15 downto 0);
+
+ signal tx_almost_empty, tx_almost_full : std_logic;
+
+ signal buf_frame_count : unsigned(5 downto 0) := (others => '0');
+
+
+ signal tag_cycles : std_logic_vector(27 downto 0);
+ signal tag_valid, tag_valid_latched : std_logic;
+
+ signal link_ok_delay_cnt : unsigned(25 downto 0);
+ constant c_link_ok_rst_delay : unsigned(25 downto 0) := to_unsigned(62500000, 26);-- 1s
+ constant c_link_ok_rst_delay_sim : unsigned(25 downto 0) := to_unsigned(g_sim_startup_cnt, 26);
+
+begin -- rtl
+
+ -------------------------------------------------------------------------------------------
+ -- check sanity of input generics
+ -------------------------------------------------------------------------------------------
+ assert g_tx_buffer_size >= g_tx_threshold
+ report "The size of the tx buffer must be greater or equal the tx threashold"
+ severity FAILURE;
+
+ assert g_tx_buffer_size >= g_tx_max_words_per_frame
+ report "The size of tx buffer must be greater or equal the max number of words in frame"
+ severity FAILURE;
+ -------------------------------------------------------------------------------------------
+
+ U_tx_crc_generator : gc_crc_gen
+ generic map (
+ g_polynomial => x"1021",
+ g_init_value => x"ffff",
+ g_residue => x"0000",
+ g_data_width => 16,
+ g_sync_reset => 1,
+ g_dual_width => 0,
+ g_registered_match_output => false,
+ g_registered_crc_output => false)
+ port map (
+ clk_i => clk_sys_i,
+ rst_i => crc_reset,
+ restart_i => '0',
+ en_i => crc_en_masked,
+ data_i => fsm_out.data,
+ half_i => '0',
+ crc_o => crc_value);
+
+ crc_en_masked <= crc_en and fsm_out.dvalid;
+
+ U_Fab_Source : xwb_fabric_source
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ src_i => src_i,
+ src_o => src_o,
+ addr_i => c_WRF_DATA,
+ data_i => fab_src.data,
+ dvalid_i => fab_src.dvalid,
+ sof_i => fab_src.sof,
+ eof_i => fab_src.eof,
+ error_i => '0',
+ bytesel_i => '0',
+ dreq_o => fab_src.dreq);
+
+ fab_src.sof <= fsm_out.sof;
+ fab_src.eof <= fsm_out.eof;
+
+
+ gen_escape: if (g_escape_code_disable = FALSE) generate
+ U_Insert_Escape : gc_escape_inserter
+ generic map (
+ g_data_width => 16,
+ g_escape_code => x"cafe")
+ port map (
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ d_i => fsm_out.data,
+ d_insert_enable_i => fsm_escape_enable,
+ d_escape_i => fsm_escape,
+ d_valid_i => fsm_out.dvalid,
+ d_req_o => fsm_out.dreq,
+
+ d_o => fab_src.data,
+ d_valid_o => fab_src.dvalid,
+ d_req_i => fab_src.dreq);
+ end generate gen_escape;
+ gen_no_escape: if (g_escape_code_disable = TRUE) generate
+ fab_src.data <= fsm_out.data;
+ fab_src.dvalid <= fsm_out.dvalid;
+ fsm_out.dreq <= fab_src.dreq;
+ end generate gen_no_escape;
+
+ tx_fifo_we <= tx_valid_i and not tx_fifo_full;
+ tx_fifo_d <= tx_last_p1_i & tx_data_i;
+
+ U_TX_Buffer : generic_sync_fifo
+ generic map (
+ g_data_width => g_data_width + 1,
+ g_size => g_tx_buffer_size,
+ g_with_almost_full => true,
+ g_with_almost_empty => true,
+ g_almost_empty_threshold => g_tx_threshold,
+ g_almost_full_threshold => g_tx_buffer_size - 2,
+ g_show_ahead => true)
+ port map (
+ rst_n_i => rst_n_i,
+ clk_i => clk_sys_i,
+ d_i => tx_fifo_d,
+ we_i => tx_fifo_we,
+ q_o => tx_fifo_q,
+ rd_i => tx_fifo_rd,
+ empty_o => tx_fifo_empty,
+ full_o => tx_fifo_full,
+ almost_empty_o => tx_almost_empty,
+ almost_full_o => tx_almost_full
+ );
+ tx_fifo_rd <= '1' when (state = PAYLOAD and ser_count = g_data_width/16-1 and
+ fsm_out.dreq = '1' and tx_fifo_empty = '0') else
+ '0';
+ tx_threshold_hit <= '1' when tx_almost_empty = '0' and (buf_frame_count /= 0) else '0';
+ tx_fifo_last <= tx_fifo_q(g_data_width);
+
+ U_Timestamper : pulse_stamper
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ pulse_a_i => fsm_out.sof,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ tag_tai_o => open,
+ tag_cycles_o => tag_cycles,
+ tag_valid_o => tag_valid);
+
+ p_frame_counter : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ buf_frame_count <= (others => '0');
+ else
+ if(tx_fifo_we = '1' and tx_last_p1_i = '1' and (tx_fifo_rd = '0' or tx_fifo_last = '0')) then
+ buf_frame_count <= buf_frame_count+ 1;
+ elsif((tx_fifo_we = '0' or tx_last_p1_i = '0') and (tx_fifo_rd = '1' and tx_fifo_last = '1')) then
+ buf_frame_count <= buf_frame_count - 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_tx_timeout : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ timeout_counter <= (others => '0');
+ tx_timeout_hit <= '0';
+ else
+ if(tx_fifo_empty = '0' and tx_threshold_hit = '0') then
+ timeout_counter <= timeout_counter + 1;
+ else
+ timeout_counter <= (others => '0');
+ end if;
+
+ if(timeout_counter = g_tx_timeout) then
+ tx_timeout_hit <= '1';
+ else
+ tx_timeout_hit <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ p_fsm : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ state <= IDLE;
+ fsm_out.sof <= '0';
+ fsm_out.eof <= '0';
+ fsm_out.dvalid <= '0';
+ fsm_out.data <= (others => '0');
+ count <= (others => '0');
+ seq_no <= (others => '0');
+ word_count <= (others => '0');
+ crc_en <= '0';
+ crc_reset <= '1';
+ tx_frame_p1_o <= '0';
+ tag_valid_latched <= '0';
+ tx_flush_latched <= '0';
+ fsm_escape_enable <= '0';
+ fsm_escape <= '0';
+ ser_count <= (others => '0');
+ else
+ if(tx_reset_seq_i = '1') then
+ seq_no <= (others => '0');
+ end if;
+ if(tag_valid = '1') then
+ tag_valid_latched <= '1'; -- overriden in IDLE
+ end if;
+ tx_flush_latched <= '0';-- overriden in IDLE
+
+ case state is
+ when IDLE =>
+ tag_valid_latched <= '0';
+ tx_flush_latched <= tx_flush_p1_i or tx_timeout_hit;
+ crc_en <= '0';
+ crc_reset <= '0';
+ fsm_out.eof <= '0';
+ tx_frame_p1_o <= '0';
+
+ if(fsm_out.dreq = '1' and (tx_flush_latched = '1' or tx_flush_p1_i = '1' or tx_threshold_hit = '1')) then
+ state <= SOF;
+ fsm_out.sof <= '1';
+ end if;
+
+ fsm_escape_enable <= '0';
+ fsm_escape <= '0';
+
+ when SOF =>
+ fsm_out.sof <= '0';
+ ser_count <= (others => '0');
+ state <= ETH_HEADER;
+ count <= (others => '0');
+ word_count <= (others => '0');
+
+ when ETH_HEADER =>
+ if(fsm_out.dreq = '1') then
+ case count(7 downto 0) is
+ when x"00" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_target(47 downto 32);
+ count <= count + 1;
+ when x"01" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_target(31 downto 16);
+ count <= count + 1;
+ when x"02" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_target(15 downto 0);
+ count <= count + 1;
+ when x"03" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_local(47 downto 32);
+ count <= count + 1;
+ when x"04" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_local(31 downto 16);
+ count <= count + 1;
+ when x"05" =>
+ fsm_out.data <= tx_streamer_cfg_i.mac_local(15 downto 0);
+ count <= count + 1;
+ when x"06" =>
+ if(tx_streamer_cfg_i.qtag_ena = '0') then
+ fsm_out.data <= tx_streamer_cfg_i.ethertype;
+ else
+ fsm_out.data <= x"8100";
+ end if;
+ count <= count + 1;
+ when x"07" =>
+ if(tx_streamer_cfg_i.qtag_ena = '0') then
+ fsm_out.data <= tag_valid_latched & "000" & tag_cycles(27 downto 16);
+ else
+ fsm_out.data <= tx_streamer_cfg_i.qtag_prio & '0' & tx_streamer_cfg_i.qtag_vid;
+ end if;
+ count <= count + 1;
+ when x"08" =>
+ if(tx_streamer_cfg_i.qtag_ena = '0') then
+ fsm_out.data <= tag_cycles(15 downto 0);
+ state <= FRAME_SEQ_ID;
+ else
+ fsm_out.data <= tx_streamer_cfg_i.ethertype;
+ end if;
+ count <= count + 1;
+ when x"09" =>
+ fsm_out.data <= tag_valid_latched & "000" & tag_cycles(27 downto 16);
+ count <= count + 1;
+ when x"0A" =>
+ fsm_out.data <= tag_cycles(15 downto 0);
+ state <= FRAME_SEQ_ID;
+ count <= count + 1;
+ when others =>
+ fsm_out.data <= (others => 'X');
+ count <= (others => 'X');
+ end case;
+ fsm_out.dvalid <= '1';
+ else
+ fsm_out.dvalid <= '0';
+ end if;
+ when FRAME_SEQ_ID =>
+ if(fsm_out.dreq = '1') then
+ fsm_out.data <= '1' & std_logic_vector(seq_no);
+ seq_no <= seq_no + 1;
+ count <= "000" & x"001";
+ fsm_out.dvalid <= '1';
+ fsm_escape <= '0';
+ fsm_escape_enable <= '1';
+ crc_en <= '1';
+ crc_reset <= '0';
+ state <= PAYLOAD;
+ else
+ fsm_out.dvalid <= '0';
+ end if;
+
+ when SUBFRAME_HEADER =>
+ crc_en <= '1';
+ crc_reset <= '0';
+
+ if(fsm_out.dreq = '1') then
+ fsm_out.dvalid <= '1';
+ fsm_escape <= '1';
+ fsm_escape_enable <= '1';
+ fsm_out.data <= '1' & std_logic_vector(count);
+ count <= count + 1;
+ state <= PAYLOAD;
+ else
+ fsm_out.dvalid <= '0';
+ fsm_out.data <= (others => 'X');
+ end if;
+
+ when PAYLOAD =>
+ fsm_escape <= '0';
+
+ if(fsm_out.dreq = '1') then
+ -- next subframe?
+ if(tx_fifo_empty = '1' or (ser_count = g_data_width/16-1 and tx_fifo_last = '1')) then
+ state <= CRC_WORD;
+ end if;
+
+ if(ser_count = g_data_width/16-1) then
+ word_count <= word_count + 1;
+ ser_count <= (others => '0');
+ else
+ ser_count <= ser_count + 1;
+ end if;
+
+ fsm_out.data <= tx_fifo_q((to_integer(ser_count) + 1)* 16 -1 downto to_integer(ser_count) * 16);
+ fsm_out.dvalid <= not tx_fifo_empty;
+ else
+ fsm_out.data <= (others => 'X');
+ fsm_out.dvalid <= '0';
+ end if;
+
+ when CRC_WORD =>
+ crc_en <= '0';
+ ser_count <= (others => '0');
+
+ if(fsm_out.dreq = '1') then
+ fsm_out.dvalid <= '1';
+ fsm_out.data <= crc_value;
+
+ crc_reset <= '1';
+
+ if(tx_fifo_empty = '1' or word_count >= g_tx_max_words_per_frame) then
+ state <= PADDING;
+ else
+ state <= SUBFRAME_HEADER;
+ end if;
+ else
+ fsm_out.data <= (others => 'X');
+ fsm_out.dvalid <= '0';
+ end if;
+
+ when PADDING =>
+ if(fsm_out.dreq = '1') then
+ fsm_escape <= '1';
+ fsm_out.dvalid <= '1';
+ fsm_out.data <= x"0bad";
+ if(total_words >= c_min_packet_size) then
+ state <= EOF;
+ end if;
+ crc_reset <= '0';
+ else
+ fsm_out.dvalid <= '0';
+ fsm_out.data <= (others => 'X');
+ end if;
+
+ when EOF =>
+ fsm_out.dvalid <= '0';
+ if(fsm_out.dreq = '1') then
+ fsm_out.eof <= '1';
+ tx_frame_p1_o <= '1';
+ state <= IDLE;
+ end if;
+ end case;
+ end if;
+ end if;
+ end process;
+
+ p_count_words : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ total_words <= (others => '0');
+ else
+ if fsm_out.sof = '1' then
+ total_words <= (others => '0');
+ elsif fsm_out.dvalid = '1' then
+ total_words <= total_words +1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -- after reset, leave some time before accepting requests. This delay
+ -- is dependent on link_ok signal. This is because after startup (and
+ -- any reset possibly) the PHY first shows link_ok but it is latter
+ -- restarted by softare... it is a bit of a mess in which we better
+ -- not send anything. Once this startup is done, we only relay on
+ -- link_ok, i.e. we do not accept requests when link_ok is false.
+ -- During operation (i.e. after start-up/reset, the behaviour of link_ok
+ -- signal is satisfactory
+ p_delay_reset: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ if(g_simulation = 1) then
+ link_ok_delay_cnt <= c_link_ok_rst_delay_sim;
+ else
+ link_ok_delay_cnt <= c_link_ok_rst_delay;
+ end if;
+ else
+ -- first initial moments of link_ok_i high are ignored
+ if(link_ok_i = '1' and link_ok_delay_cnt > 0) then
+ link_ok_delay_cnt <= link_ok_delay_cnt-1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ tx_dreq_o <= '0' when (link_ok_delay_cnt > 0) else
+ (not tx_almost_full) and link_ok_i;
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd
new file mode 100644
index 000000000..983e4e640
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xtx_streamers_stats.vhd
@@ -0,0 +1,125 @@
+-------------------------------------------------------------------------------
+-- Title : WR tx streamers statistics
+-- Project : WR streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xrtx_streamers_stats.vhd
+-- Author : Maciej Lipinski
+-- Company : CERN
+-- Created : 2017-04-19
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- This module provies the reception portion of statistics and
+-- allows to snapshot their values. See xrtx_streamers_stats for
+-- more detailed description.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.NUMERIC_STD.ALL;
+
+library work;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+use work.streamers_pkg.all; -- needed for streamers
+use work.wr_fabric_pkg.all; -- neede for :t_wrf_source_in, etc
+use work.wrcore_pkg.all; -- needed for t_generic_word_array
+-- use work.wr_transmission_wbgen2_pkg.all;
+
+entity xtx_streamers_stats is
+
+ generic (
+ -- Width of frame counters
+ g_cnt_width : integer := 32 -- minimum 15 bits, max 32
+ );
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ -- input signals from streamers
+ sent_frame_i : in std_logic;
+
+ -- statistic control
+ reset_stats_i : in std_logic;
+ snapshot_ena_i : in std_logic := '0';
+ ----------------------- statistics ----------------------------------------
+ -- output statistics: tx/rx counters
+ sent_frame_cnt_o : out std_logic_vector(g_cnt_width-1 downto 0)
+ );
+
+end xtx_streamers_stats;
+
+architecture rtl of xtx_streamers_stats is
+
+ signal sent_frame_cnt : unsigned(g_cnt_width-1 downto 0);
+ signal sent_frame_cnt_d1 : unsigned(g_cnt_width-1 downto 0);
+ signal snapshot_ena_d1 : std_logic;
+begin
+
+ -------------------------------------------------------------------------------------------
+ -- frame/block statistics, i.e. lost, sent, received
+ -------------------------------------------------------------------------------------------
+ -- process that counts
+ p_cnts: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0' or reset_stats_i = '1') then
+ sent_frame_cnt <= (others => '0');
+ else
+ -- count sent frames
+ if(sent_frame_i = '1') then
+ sent_frame_cnt <= sent_frame_cnt + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- snapshot
+ -------------------------------------------------------------------------------------------
+ -- snapshot is used to expose to user coherent value, so that the count for accumulated
+ -- latency is coherent with the accumulated latency and the average can be accurately
+ -- calculated
+ -------------------------------------------------------------------------------------------
+ p_stats_snapshot: process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if (rst_n_i = '0') then
+ snapshot_ena_d1 <= '0';
+ sent_frame_cnt_d1 <= (others=>'0');
+ else
+ if(snapshot_ena_i = '1' and snapshot_ena_d1 = '0') then
+ sent_frame_cnt_d1 <= sent_frame_cnt;
+ end if;
+ snapshot_ena_d1 <= snapshot_ena_i;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------------------------------------------------------------
+ -- snapshot or current value
+ -------------------------------------------------------------------------------------------
+ sent_frame_cnt_o <= std_logic_vector(sent_frame_cnt_d1) when (snapshot_ena_d1 = '1') else
+ std_logic_vector(sent_frame_cnt);
+
+end rtl; \ No newline at end of file
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd
new file mode 100644
index 000000000..774a54a37
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_streamers/xwr_streamers.vhd
@@ -0,0 +1,467 @@
+-------------------------------------------------------------------------------
+-- Title : WR Streamrs
+-- Project : WR Streamers
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/WR_Streamers
+-------------------------------------------------------------------------------
+-- File : xwr_streamers.vhd (renamed from xwr_transmission.vhd)
+-- Author : Maciej Lipinski
+-- Company : CERN
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-- Created : 2016-05-30
+-------------------------------------------------------------------------------
+-- Description:
+--
+-- This module is a top-level entity for WR streamers to be used conveniently
+-- in application. It is inlcluded in the board top entity of wr-cores as one
+-- of transportation means.
+--
+-- It allows to send and receive streames of data over Ethernet network. In
+-- other words, it provides communication over Ethernet network that looks as
+-- FIFO: one one node (e.g. SPEC, the user writes to tx streamer words of
+-- configureable size. These words are received by the rx streamer in another
+-- node (e.g. SVEC) in the same order.
+--
+-- This module wraps WR_Streamers-related stuff: i.e.
+-- 1) IP core modules provided in wr-cores: xtx_streamer, xrx_streamer,
+-- xrtx_streamers_stats
+-- 2) wishbone registers that provide access to the statistics and streamer's
+-- control/status registers.
+--
+-- This module interfaces:
+-- 1) WR PTP Core for transmission/reception of raw ethernet frames
+-- 2) Application-specific module for transmission/reception of data
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2016 CERN/BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+---------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.NUMERIC_STD.ALL;
+
+library work;
+use work.wishbone_pkg.all; -- needed for t_wishbone_slave_in, etc
+use work.streamers_pkg.all; -- needed for streamers and c_WR_TRANS_ARR_SIZE_*
+use work.wr_fabric_pkg.all; -- needed for :t_wrf_source_in, etc
+use work.wrcore_pkg.all; -- needed for t_generic_word_array
+use work.wr_streamers_wbgen2_pkg.all;
+use work.streamers_priv_pkg.all;
+
+entity xwr_streamers is
+ generic (
+ -- Indicates whether this module instantiates both streamers (rx and tx) or only one
+ -- of them. An application that only receives or only transmits might want to use
+ -- RX_ONLY or TX_ONLY mode to save resources.
+ g_streamers_op_mode : t_streamers_op_mode := TX_AND_RX;
+ -----------------------------------------------------------------------------------------
+ -- Transmission/reception parameters
+ -----------------------------------------------------------------------------------------
+ g_tx_streamer_params : t_tx_streamer_params := c_tx_streamer_params_defaut;
+ g_rx_streamer_params : t_rx_streamer_params := c_rx_streamer_params_defaut;
+ -----------------------------------------------------------------------------------------
+ -- Statistics config
+ -----------------------------------------------------------------------------------------
+ -- width of counters: frame rx/tx/lost, block lost, counter of accumuted latency
+ -- (min:15, max:64, 50 bits should be ok for 50 years)
+ g_stats_cnt_width : integer := 50;
+ -- width of latency accumulator (max value 64)
+ g_stats_acc_width : integer := 64;
+ -----------------------------------------------------------------------------------------
+ -- WB I/F configuration
+ -----------------------------------------------------------------------------------------
+ g_slave_mode : t_wishbone_interface_mode := CLASSIC;
+ g_slave_granularity : t_wishbone_address_granularity := BYTE;
+ g_simulation : integer := 0
+ );
+
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- WR tx/rx interface
+ ---------------------------------------------------------------------------
+ -- Tx
+ src_i : in t_wrf_source_in;
+ src_o : out t_wrf_source_out;
+ -- Rx
+ snk_i : in t_wrf_sink_in;
+ snk_o : out t_wrf_sink_out;
+
+ ---------------------------------------------------------------------------
+ -- User tx interface
+ ---------------------------------------------------------------------------
+ -- Data word to be sent.
+ tx_data_i : in std_logic_vector(g_tx_streamer_params.data_width-1 downto 0);
+ -- 1 indicates that the tx_data_i contains a valid data word.
+ tx_valid_i : in std_logic;
+ -- Synchronous data request: if active, the user may send a data word in
+ -- the following clock cycle.
+ tx_dreq_o : out std_logic;
+ -- Last signal. Can be used to indicate the last data word in a larger
+ -- block of samples (see documentation for more details).
+ tx_last_p1_i : in std_logic := '1';
+ -- Flush input. When asserted, the streamer will immediatly send out all
+ -- the data that is stored in its TX buffer, ignoring g_tx_timeout.
+ tx_flush_p1_i : in std_logic := '0';
+
+ ---------------------------------------------------------------------------
+ -- User rx interface
+ ---------------------------------------------------------------------------
+ -- 1 indicates the 1st word of the data block on rx_data_o.
+ rx_first_p1_o : out std_logic;
+ -- 1 indicates the last word of the data block on rx_data_o.
+ rx_last_p1_o : out std_logic;
+ -- Received data.
+ rx_data_o : out std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ -- 1 indicted that rx_data_o is outputting a valid data word.
+ rx_valid_o : out std_logic;
+ -- Synchronous data request input: when 1, the streamer may output another
+ -- data word in the subsequent clock cycle.
+ rx_dreq_i : in std_logic;
+
+ ---------------------------------------------------------------------------
+ -- WRC Timing interface, used for latency measurement
+ ---------------------------------------------------------------------------
+
+ -- White Rabbit reference clock
+ clk_ref_i : in std_logic := '0';
+ -- Time valid flag
+ tm_time_valid_i : in std_logic := '0';
+ -- TAI seconds
+ tm_tai_i : in std_logic_vector(39 downto 0) := x"0000000000";
+ -- Fractional part of the second (in clk_ref_i cycles)
+ tm_cycles_i : in std_logic_vector(27 downto 0) := x"0000000";
+
+ -- status of the link, in principle the tx can be done only if link is oK
+ link_ok_i : in std_logic;
+ -- wishbone interface
+ wb_slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ wb_slave_o : out t_wishbone_slave_out;
+
+ snmp_array_o : out t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_OUT-1 downto 0);
+ snmp_array_i : in t_generic_word_array(c_WR_STREAMERS_ARR_SIZE_IN -1 downto 0);
+
+ -----------------------------------------------------------------------------------------
+ -- Transmission and Reception configuration
+ -----------------------------------------------------------------------------------------
+ tx_streamer_cfg_i : in t_tx_streamer_cfg := c_tx_streamer_cfg_default;
+ rx_streamer_cfg_i : in t_rx_streamer_cfg := c_rx_streamer_cfg_default
+ );
+
+end xwr_streamers;
+
+architecture rtl of xwr_streamers is
+
+ signal to_wb : t_wr_streamers_in_registers;
+ signal from_wb : t_wr_streamers_out_registers;
+ signal dbg_word : std_logic_vector(31 downto 0);
+ signal start_bit : std_logic_vector(from_wb.dbg_ctrl_start_byte_o'length-1+3 downto 0);
+ signal rx_data : std_logic_vector(g_rx_streamer_params.data_width-1 downto 0);
+ signal wb_regs_slave_in : t_wishbone_slave_in;
+ signal wb_regs_slave_out : t_wishbone_slave_out;
+ signal tx_frame : std_logic;
+ signal reset_time_tai : std_logic_vector(39 downto 0);
+ signal latency_acc : std_logic_vector(g_stats_acc_width-1 downto 0);
+ signal latency_cnt : std_logic_vector(g_stats_cnt_width-1 downto 0);
+ signal sent_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0);
+ signal rcvd_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0);
+ signal lost_frame_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0);
+ signal lost_block_cnt_out : std_logic_vector(g_stats_cnt_width-1 downto 0);
+ signal rx_valid : std_logic;
+
+ signal rx_latency_valid : std_logic;
+ signal rx_latency : std_logic_vector(27 downto 0);
+ signal rx_lost_frames : std_logic;
+ signal rx_lost_frames_cnt : std_logic_vector(14 downto 0);
+ signal rx_lost_blocks : std_logic;
+ signal rx_frame : std_logic;
+
+ signal tx_streamer_cfg : t_tx_streamer_cfg;
+ signal rx_streamer_cfg : t_rx_streamer_cfg;
+
+ -- for code cleanness
+ constant c_cw : integer := g_stats_cnt_width;
+ constant c_aw : integer := g_stats_acc_width;
+begin
+
+ -------------------------------------------------------------------------------------------
+ -- Instantiate transmission streamer, if configured to do so
+ -------------------------------------------------------------------------------------------
+ gen_tx: if(g_streamers_op_mode=TX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate
+ U_TX: xtx_streamer
+ generic map(
+ g_data_width => g_tx_streamer_params.data_width,
+ g_tx_buffer_size => g_tx_streamer_params.buffer_size,
+ g_tx_threshold => g_tx_streamer_params.threshold,
+ g_tx_max_words_per_frame => g_tx_streamer_params.max_words_per_frame,
+ g_tx_timeout => g_tx_streamer_params.timeout,
+ g_escape_code_disable => g_tx_streamer_params.escape_code_disable,
+ g_simulation => g_simulation)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ src_i => src_i,
+ src_o => src_o,
+ clk_ref_i => clk_ref_i,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ link_ok_i => link_ok_i,
+ tx_data_i => tx_data_i,
+ tx_valid_i => tx_valid_i,
+ tx_dreq_o => tx_dreq_o,
+ tx_last_p1_i => tx_last_p1_i,
+ tx_flush_p1_i => tx_flush_p1_i,
+ tx_reset_seq_i => from_wb.sscr1_rst_seq_id_o,
+ tx_frame_p1_o => tx_frame,
+ tx_streamer_cfg_i => tx_streamer_cfg);
+ end generate gen_tx;
+
+ gen_not_tx: if(g_streamers_op_mode=RX_ONLY) generate
+ src_o <= c_dummy_snk_in;
+ tx_dreq_o <= '0';
+ tx_frame <= '0';
+ end generate gen_not_tx;
+
+ -------------------------------------------------------------------------------------------
+ -- -- Instantiate reception streamer, if configured to do so
+ -------------------------------------------------------------------------------------------
+ gen_rx: if(g_streamers_op_mode=RX_ONLY OR g_streamers_op_mode=TX_AND_RX) generate
+ U_RX: xrx_streamer
+ generic map(
+ g_data_width => g_rx_streamer_params.data_width,
+ g_buffer_size => g_rx_streamer_params.buffer_size,
+ g_escape_code_disable => g_rx_streamer_params.escape_code_disable,
+ g_expected_words_number => g_rx_streamer_params.expected_words_number
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ snk_i => snk_i,
+ snk_o => snk_o,
+ clk_ref_i => clk_ref_i,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ rx_first_p1_o => rx_first_p1_o,
+ rx_last_p1_o => rx_last_p1_o,
+ rx_data_o => rx_data,
+ rx_valid_o => rx_valid,
+ rx_dreq_i => rx_dreq_i,
+ rx_lost_p1_o => rx_lost_blocks,
+ rx_lost_frames_p1_o => rx_lost_frames,
+ rx_lost_frames_cnt_o => rx_lost_frames_cnt,
+ rx_latency_o => rx_latency,
+ rx_latency_valid_o => rx_latency_valid,
+ rx_frame_p1_o => rx_frame,
+ rx_streamer_cfg_i => rx_streamer_cfg);
+ end generate gen_rx;
+ gen_not_rx: if(g_streamers_op_mode=TX_ONLY) generate
+ snk_o <= c_dummy_src_in;
+ rx_first_p1_o <= '0';
+ rx_last_p1_o <= '0';
+ rx_data <= (others => '0');
+ rx_valid <= '0';
+ end generate gen_not_rx;
+
+ -------------------------------------------------------------------------------------------
+ -- Instantiate statistics module - it calculates statistics of rx/tx frames
+ -------------------------------------------------------------------------------------------
+ U_STATS: xrtx_streamers_stats
+ generic map(
+ g_streamers_op_mode => g_streamers_op_mode,
+ g_cnt_width => g_stats_cnt_width,
+ g_acc_width => g_stats_acc_width
+ )
+ port map(
+ clk_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ sent_frame_i => tx_frame,
+ rcvd_frame_i => rx_frame,
+ lost_frame_i => rx_lost_frames,
+ lost_block_i => rx_lost_blocks,
+ lost_frames_cnt_i => rx_lost_frames_cnt,
+ rcvd_latency_i => rx_latency,
+ rcvd_latency_valid_i => rx_latency_valid,
+ clk_ref_i => clk_ref_i,
+ tm_time_valid_i => tm_time_valid_i,
+ tm_tai_i => tm_tai_i,
+ tm_cycles_i => tm_cycles_i,
+ reset_stats_i => from_wb.sscr1_rst_stats_o,
+ snapshot_ena_i => from_wb.sscr1_snapshot_stats_o,
+ reset_time_tai_o => reset_time_tai,
+ reset_time_cycles_o => to_wb.sscr1_rst_ts_cyc_i,
+ sent_frame_cnt_o => sent_frame_cnt_out,
+ rcvd_frame_cnt_o => rcvd_frame_cnt_out,
+ lost_frame_cnt_o => lost_frame_cnt_out,
+ lost_block_cnt_o => lost_block_cnt_out,
+ latency_cnt_o => latency_cnt,
+ latency_acc_o => latency_acc,
+ latency_max_o => to_wb.rx_stat0_rx_latency_max_i,
+ latency_min_o => to_wb.rx_stat1_rx_latency_min_i,
+ latency_acc_overflow_o => to_wb.sscr1_rx_latency_acc_overflow_i,
+ snmp_array_o => snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT-1 downto 0),
+ snmp_array_i => snmp_array_i
+ );
+
+ to_wb.sscr2_rst_ts_tai_lsb_i <= reset_time_tai(31 downto 0);
+ to_wb.sscr3_rst_ts_tai_msb_i <= reset_time_tai(39 downto 32);
+
+ assert (g_stats_acc_width <= 64 and g_stats_acc_width > 32)
+ report "g_stats_acc_width (c_aw) must be between 33 and 64" severity error;
+ assert (g_stats_cnt_width <= 64 and g_stats_cnt_width > 32)
+ report "g_stats_cnt_width (c_cw) must be between 33 and 64" severity error;
+
+ to_wb.tx_stat2_tx_sent_cnt_lsb_i <= sent_frame_cnt_out(31 downto 0);
+ to_wb.tx_stat3_tx_sent_cnt_msb_i (c_cw-32-1 downto 0) <= sent_frame_cnt_out(c_cw-1 downto 32);
+ to_wb.rx_stat4_rx_rcvd_cnt_lsb_i <= rcvd_frame_cnt_out(31 downto 0);
+ to_wb.rx_stat5_rx_rcvd_cnt_msb_i (c_cw-32-1 downto 0) <= rcvd_frame_cnt_out(c_cw-1 downto 32);
+ to_wb.rx_stat6_rx_loss_cnt_lsb_i <= lost_frame_cnt_out(31 downto 0);
+ to_wb.rx_stat7_rx_loss_cnt_msb_i (c_cw-32-1 downto 0) <= lost_frame_cnt_out(c_cw-1 downto 32);
+ to_wb.rx_stat8_rx_lost_block_cnt_lsb_i <= lost_block_cnt_out(31 downto 0);
+ to_wb.rx_stat9_rx_lost_block_cnt_msb_i (c_cw-32-1 downto 0) <= lost_block_cnt_out(c_cw-1 downto 32);
+ to_wb.rx_stat10_rx_latency_acc_lsb_i <= latency_acc (31 downto 0);
+ to_wb.rx_stat11_rx_latency_acc_msb_i (c_aw-32-1 downto 0) <= latency_acc (c_aw-1 downto 32);
+ to_wb.rx_stat12_rx_latency_acc_cnt_lsb_i <= latency_cnt (31 downto 0);
+ to_wb.rx_stat13_rx_latency_acc_cnt_msb_i(c_cw-32-1 downto 0) <= latency_cnt (c_cw-1 downto 32);
+
+ rx_data_o <= rx_data;
+ rx_valid_o <= rx_valid;
+
+ -------------------------------------------------------------------------------------------
+ -- Wishbone access to statistics and configuration
+ -------------------------------------------------------------------------------------------
+ U_WB_ADAPTER : wb_slave_adapter
+ generic map (
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => true,
+ g_slave_mode => g_slave_mode,
+ g_slave_granularity => g_slave_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ slave_i => wb_slave_i,
+ slave_o => wb_slave_o,
+ master_i => wb_regs_slave_out,
+ master_o => wb_regs_slave_in);
+
+ U_WB: wr_streamers_wb
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_regs_slave_in.adr(5 downto 0),
+ wb_dat_i => wb_regs_slave_in.dat,
+ wb_dat_o => wb_regs_slave_out.dat,
+ wb_cyc_i => wb_regs_slave_in.cyc,
+ wb_sel_i => wb_regs_slave_in.sel(3 downto 0),
+ wb_stb_i => wb_regs_slave_in.stb,
+ wb_we_i => wb_regs_slave_in.we,
+ wb_ack_o => wb_regs_slave_out.ack,
+ wb_stall_o => wb_regs_slave_out.stall,
+ regs_i => to_wb,
+ regs_o => from_wb
+ );
+
+ -------------------------------------------------------------------------------------------
+ -- Provide generic debugging through WB - user can read 32 bits from each send or received
+ -- word. It is possible to configure through WB which 32-bits of each word should be
+ -- "snooped". In particular, user can sent:
+ -- * whether he/she wishes to look at received or sent words
+ -- * the byte number at which the snooping shall start, i.e. say users sets byte=2, it means
+ -- that he will be able to read through wishbone bytes 3-6 of each word, provided the
+ -- word is of sufficient width
+ -------------------------------------------------------------------------------------------
+ start_bit <= from_wb.dbg_ctrl_start_byte_o & "000";
+ p_debug_mux: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ dbg_word <= (others =>'0');
+ else
+ if(from_wb.dbg_ctrl_mux_o = '1') then --rx
+ if(rx_valid = '1') then
+ dbg_word <= f_dbg_word_starting_at_bit(rx_data,start_bit,g_rx_streamer_params.data_width);
+ end if;
+ else -- tx
+ if(tx_valid_i = '1') then
+ dbg_word <= f_dbg_word_starting_at_bit(tx_data_i,start_bit,g_tx_streamer_params.data_width);
+ end if;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT) <= dbg_word;
+ snmp_array_o(c_WRS_STATS_ARR_SIZE_OUT+1) <= x"DEADBEEF";
+
+ to_wb.dbg_data_i <= dbg_word;
+ to_wb.dummy_dummy_i <= x"DEADBEEF";
+
+ -------------------------------------------------------------------------------------------
+ -- set configuration: the user can access configuration through two channels:
+ -- 1) records (tx_streamer_cfg & rx_streamer_cfg) with input signals
+ -- 2) wishbone write
+ -- By default, the input signals are used. A user can overwrite this default
+ -- configuration using WB access. To override the default configuration two
+ -- values needs to be written:
+ -- 1) the value of a proper configuration, e.g.: tx_cfg0_ethertype, rx_cfg0_filter_remote
+ -- 2) bit that enables overriding of the configuration, e.g. cfg_or_tx_ethtype and
+ -- cfg_or_rx_ftr_remote_o respectively
+ -- The latter (overriding bit) is the so that user can first configure all values
+ -- that he wishes to and then enable all his desired configuration at the same instant.
+ -- Otherwise, during the transition (e.g. between writing lsb and msb of MAC), the
+ -- behaviour could be unpredictable.
+ -------------------------------------------------------------------------------------------
+ -- tx config
+ tx_streamer_cfg.ethertype <= from_wb.tx_cfg0_ethertype_o when (from_wb.cfg_or_tx_ethtype_o='1') else
+ tx_streamer_cfg_i.ethertype;
+ tx_streamer_cfg.mac_local <= from_wb.tx_cfg2_mac_local_msb_o &
+ from_wb.tx_cfg1_mac_local_lsb_o when (from_wb.cfg_or_tx_mac_loc_o='1') else
+ tx_streamer_cfg_i.mac_local;
+ tx_streamer_cfg.mac_target <= from_wb.tx_cfg4_mac_target_msb_o &
+ from_wb.tx_cfg3_mac_target_lsb_o when (from_wb.cfg_or_tx_mac_tar_o='1') else
+ tx_streamer_cfg_i.mac_target;
+ tx_streamer_cfg.qtag_ena <= from_wb.tx_cfg5_qtag_ena_o when (from_wb.cfg_or_tx_qtag_o='1') else
+ tx_streamer_cfg_i.qtag_ena;
+ tx_streamer_cfg.qtag_vid <= from_wb.tx_cfg5_qtag_vid_o when (from_wb.cfg_or_tx_qtag_o='1') else
+ tx_streamer_cfg_i.qtag_vid;
+ tx_streamer_cfg.qtag_prio <= from_wb.tx_cfg5_qtag_prio_o when (from_wb.cfg_or_tx_qtag_o='1') else
+ tx_streamer_cfg_i.qtag_prio;
+
+ -- rx config
+ rx_streamer_cfg.ethertype <= from_wb.rx_cfg0_ethertype_o when (from_wb.cfg_or_rx_ethertype_o='1') else
+ rx_streamer_cfg_i.ethertype;
+ rx_streamer_cfg.mac_local <= from_wb.rx_cfg2_mac_local_msb_o &
+ from_wb.rx_cfg1_mac_local_lsb_o when (from_wb.cfg_or_rx_mac_loc_o='1') else
+ rx_streamer_cfg_i.mac_local;
+ rx_streamer_cfg.mac_remote <= from_wb.rx_cfg4_mac_remote_msb_o &
+ from_wb.rx_cfg3_mac_remote_lsb_o when (from_wb.cfg_or_rx_mac_rem_o='1') else
+ rx_streamer_cfg_i.mac_remote;
+ rx_streamer_cfg.accept_broadcasts <= from_wb.rx_cfg0_accept_broadcast_o when (from_wb.cfg_or_rx_acc_broadcast_o='1') else
+ rx_streamer_cfg_i.accept_broadcasts;
+ rx_streamer_cfg.filter_remote <= from_wb.rx_cfg0_filter_remote_o when (from_wb.cfg_or_rx_ftr_remote_o='1') else
+ rx_streamer_cfg_i.filter_remote;
+ rx_streamer_cfg.fixed_latency <= from_wb.rx_cfg5_fixed_latency_o when (from_wb.cfg_or_rx_fix_lat_o='1') else
+ rx_streamer_cfg_i.fixed_latency;
+end rtl; \ No newline at end of file
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd
new file mode 100644
index 000000000..3c23afa59
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wr_tbi_phy/disparity_gen_pkg.vhd
@@ -0,0 +1,90 @@
+-- 8b10b disparity generator, based on 8b10b encoder core (c) Mathias Kreider
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package disparity_gen_pkg is
+
+ type t_8b10b_disparity is (RD_PLUS, RD_MINUS);
+
+ function f_next_8b10b_disparity8 (cur_disp : t_8b10b_disparity;
+ ctrl : std_logic;
+ data : std_logic_vector)
+ return t_8b10b_disparity;
+
+ function f_next_8b10b_disparity16 (
+ cur_disp : t_8b10b_disparity;
+ ctrl : std_logic_vector;
+ data : std_logic_vector)
+ return t_8b10b_disparity;
+
+ function to_std_logic(t : t_8b10b_disparity) return std_logic;
+
+
+
+end disparity_gen_pkg;
+
+package body disparity_gen_pkg is
+
+ function f_next_8b10b_disparity8(cur_disp : t_8b10b_disparity;
+ ctrl : std_logic;
+ data : std_logic_vector) return t_8b10b_disparity is
+
+ constant c_disPar_6b : std_logic_vector(0 to 31) := ("11101000100000011000000110010111");
+
+ constant c_disPar_4b : std_logic_vector(0 to 7) := ("10001001");
+ variable dp4bit, dp6bit : std_logic;
+ variable new_disp : t_8b10b_disparity;
+ begin
+-- use 3bit at 7-5 as index for 4bit code and disparity table \n
+
+ dp4bit := c_disPar_4b(to_integer(unsigned(data(7 downto 5))));
+ dp6bit := c_disPar_6b(to_integer(unsigned(data(4 downto 0))));
+
+ new_disp := cur_disp;
+
+ case cur_disp is
+ when RD_MINUS =>
+ if (ctrl xor dp6bit xor dp4bit) /= '0' then
+ new_disp := RD_PLUS;
+ end if;
+
+ when RD_PLUS =>
+ if (ctrl xor dp6bit xor dP4bit) /= '0' then
+ new_disp := RD_MINUS;
+ end if;
+ end case;
+
+ if ( data(1 downto 0) /= "00" and ctrl = '1') then
+ new_disp := cur_disp;
+ end if;
+
+ return new_disp;
+ end f_next_8b10b_disparity8;
+
+ function f_next_8b10b_disparity16(cur_disp : t_8b10b_disparity;
+ ctrl : std_logic_vector;
+ data : std_logic_vector) return t_8b10b_disparity is
+
+ variable tmp : t_8b10b_disparity;
+ variable msb : std_logic_vector(7 downto 0);
+ begin
+
+ msb := data(15 downto 8);
+ tmp := f_next_8b10b_disparity8(cur_disp, ctrl(1), msb);
+ tmp := f_next_8b10b_disparity8(tmp, ctrl(0), data(7 downto 0));
+ return tmp;
+ end f_next_8b10b_disparity16;
+
+ function to_std_logic(t : t_8b10b_disparity) return std_logic is
+ begin
+ if(t = RD_MINUS) then
+ return '0';
+ else
+ return '1';
+ end if;
+ end to_std_logic;
+
+end package body;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd
new file mode 100644
index 000000000..c87f5a405
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wr_core.vhd
@@ -0,0 +1,1157 @@
+-------------------------------------------------------------------------------
+-- Title : WhiteRabbit PTP Core
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : wr_core.vhd
+-- Author : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2011-02-02
+-- Last update: 2017-05-29
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- WR PTP Core is a HDL module implementing a complete gigabit Ethernet
+-- interface (MAC + PCS + PHY) with integrated PTP slave ordinary clock
+-- compatible with White Rabbit protocol. It performs subnanosecond clock
+-- synchronization via WR protocol and also acts as an Ethernet "gateway",
+-- providing access to TX/RX interfaces of the built-in WR MAC.
+--
+-- Starting from version 2.0 all modules are interconnected with pipelined
+-- wishbone interface (using wb crossbars). Separate pipelined wishbone bus is
+-- used for passing packets between Endpoint, Mini-NIC and External
+-- MAC interface.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Memory map:
+-- 0x00000000: I/D Memory
+-- 0x00020000: Peripheral interconnect
+-- +0x000: Minic
+-- +0x100: Endpoint
+-- +0x200: Softpll
+-- +0x300: PPS gen
+-- +0x400: Syscon
+-- +0x500: UART
+-- +0x600: OneWire
+-- +0x700: Auxillary space (Etherbone config, etc)
+-- +0x800: WRPC diagnostics registers
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wrcore_pkg.all;
+use work.gencores_pkg.all;
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.sysc_wbgen2_pkg.all;
+use work.softpll_pkg.all;
+
+entity wr_core is
+ generic(
+ --if set to 1, then blocks in PCS use smaller calibration counter to speed
+ --up simulation
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := true;
+ --
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128)
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128)
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := true;
+ g_aux_clks : integer := 0;
+ g_rx_buffer_size : integer := 1024;
+ g_tx_runt_padding : boolean := true;
+ g_dpram_initf : string := "default";
+ g_dpram_size : integer := 131072/4; --in 32-bit words
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := false;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0);
+ port(
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+
+ -- system reference clock (any frequency <= f(clk_ref_i))
+ clk_sys_i : in std_logic;
+
+ -- DDMTD offset clock (125.x MHz)
+ clk_dmtd_i : in std_logic;
+
+ -- Timing reference (125 MHz)
+ clk_ref_i : in std_logic;
+
+ -- Aux clocks (i.e. the FMC clock), which can be disciplined by the WR Core
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+ -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode
+ clk_ext_i : in std_logic := '0';
+
+ -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode
+ pps_ext_i : in std_logic := '0';
+
+ rst_n_i : in std_logic;
+
+ -----------------------------------------
+ --Timing system
+ -----------------------------------------
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+
+ -- PHY I/f
+ phy_ref_clk_i : in std_logic;
+
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_rbclk_i : in std_logic;
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_enc_err_i : in std_logic;
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0);
+
+ phy_rst_o : out std_logic;
+ phy_rdy_i : in std_logic := '1';
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+
+ -- PHY I/F record-based
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+
+ -----------------------------------------
+ --GPIO
+ -----------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic := '1';
+ sda_o : out std_logic;
+ sda_i : in std_logic := '1';
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := '1';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := '1';
+ sfp_det_i : in std_logic := '1';
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+
+ -----------------------------------------
+ --UART
+ -----------------------------------------
+ uart_rxd_i : in std_logic := '1';
+ uart_txd_o : out std_logic;
+
+ -----------------------------------------
+ -- 1-wire
+ -----------------------------------------
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := (others => '1');
+
+ -----------------------------------------
+ --External WB interface
+ -----------------------------------------
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := (others => '0');
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_sel_i : in std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
+ wb_we_i : in std_logic := '0';
+ wb_cyc_i : in std_logic := '0';
+ wb_stb_i : in std_logic := '0';
+ wb_ack_o : out std_logic;
+ wb_err_o : out std_logic;
+ wb_rty_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ -----------------------------------------
+ -- Auxillary WB master
+ -----------------------------------------
+ aux_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ aux_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ aux_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0);
+ aux_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+ aux_we_o : out std_logic;
+ aux_cyc_o : out std_logic;
+ aux_stb_o : out std_logic;
+ aux_ack_i : in std_logic := '1';
+ aux_stall_i : in std_logic := '0';
+
+ -----------------------------------------
+ -- External Fabric I/F
+ -----------------------------------------
+ ext_snk_adr_i : in std_logic_vector(1 downto 0) := "00";
+ ext_snk_dat_i : in std_logic_vector(15 downto 0) := x"0000";
+ ext_snk_sel_i : in std_logic_vector(1 downto 0) := "00";
+ ext_snk_cyc_i : in std_logic := '0';
+ ext_snk_we_i : in std_logic := '0';
+ ext_snk_stb_i : in std_logic := '0';
+ ext_snk_ack_o : out std_logic;
+ ext_snk_err_o : out std_logic;
+ ext_snk_stall_o : out std_logic;
+
+ ext_src_adr_o : out std_logic_vector(1 downto 0);
+ ext_src_dat_o : out std_logic_vector(15 downto 0);
+ ext_src_sel_o : out std_logic_vector(1 downto 0);
+ ext_src_cyc_o : out std_logic;
+ ext_src_stb_o : out std_logic;
+ ext_src_we_o : out std_logic;
+ ext_src_ack_i : in std_logic := '1';
+ ext_src_err_i : in std_logic := '0';
+ ext_src_stall_i : in std_logic := '0';
+
+ ------------------------------------------
+ -- External TX Timestamp I/F
+ ------------------------------------------
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_frame_id_o : out std_logic_vector(15 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(31 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ -----------------------------------------
+ -- Pause Frame Control
+ -----------------------------------------
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ -----------------------------------------
+ -- Timecode/Servo Control
+ -----------------------------------------
+
+ tm_link_up_o : out std_logic;
+ -- DAC Control
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ -- Aux clock lock enable
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ -- Aux clock locked flag
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ -- Timecode output
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ -- 1PPS output
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ rst_aux_n_o : out std_logic;
+
+ link_ok_o : out std_logic;
+
+ -------------------------------------
+ -- DIAG to/from external modules
+ -------------------------------------
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0)
+ );
+end wr_core;
+
+architecture struct of wr_core is
+
+ function f_choose_lm32_firmware_file return string is
+ begin
+ if(g_dpram_initf = "default") then
+ if(g_simulation /= 0) then
+ report "[WR Core] Using simulation LM32 firmware." severity note;
+ return "wrc-simulation.ram";
+ else
+ report "[WR Core] Using release LM32 firmware." severity note;
+ return "wrc-release.ram";
+ end if;
+ else
+ report "[WR Core] Using user-provided LM32 firmware." severity note;
+ return g_dpram_initf;
+ end if;
+ end function;
+
+ function f_check_if_lm32_firmware_necessary return boolean is
+ begin
+ if(g_dpram_initf /= "") then
+ return true;
+ else
+ return false;
+ end if;
+ end function;
+
+ -----------------------------------------------------------------------------
+ --Local resets for peripheral
+ -----------------------------------------------------------------------------
+ signal rst_wrc_n : std_logic;
+ signal rst_net_n : std_logic;
+
+ -----------------------------------------------------------------------------
+ --Local resets (resynced)
+ -----------------------------------------------------------------------------
+ signal rst_net_resync_ref_n : std_logic;
+ signal rst_net_resync_ext_n : std_logic;
+ signal rst_net_resync_dmtd_n : std_logic;
+ signal rst_net_resync_rxclk_n : std_logic;
+ signal rst_net_resync_txclk_n : std_logic;
+
+ -----------------------------------------------------------------------------
+ --PPS generator
+ -----------------------------------------------------------------------------
+ signal s_pps_csync : std_logic;
+ signal pps_valid : std_logic;
+ signal ppsg_link_ok: std_logic;
+
+ signal ppsg_wb_in : t_wishbone_slave_in;
+ signal ppsg_wb_out : t_wishbone_slave_out;
+
+ -----------------------------------------------------------------------------
+ --Timing system
+ -----------------------------------------------------------------------------
+ signal phy_rx_clk : std_logic;
+ signal phy_tx_clk : std_logic;
+ signal spll_wb_in : t_wishbone_slave_in;
+ signal spll_wb_out : t_wishbone_slave_out;
+
+ -----------------------------------------------------------------------------
+ --Endpoint
+ -----------------------------------------------------------------------------
+ signal ep_txtsu_port_id : std_logic_vector(4 downto 0);
+ signal ep_txtsu_frame_id : std_logic_vector(15 downto 0);
+ signal ep_txtsu_ts_value : std_logic_vector(31 downto 0);
+ signal ep_txtsu_ts_incorrect : std_logic;
+ signal ep_txtsu_stb, ep_txtsu_ack : std_logic;
+ signal ep_led_link : std_logic;
+
+ signal phy_rst : std_logic;
+
+ constant c_mnic_memsize_log2 : integer := f_log2_size(g_dpram_size);
+
+ -----------------------------------------------------------------------------
+ --Mini-NIC
+ -----------------------------------------------------------------------------
+ signal mnic_mem_data_o : std_logic_vector(31 downto 0);
+ signal mnic_mem_addr_o : std_logic_vector(c_mnic_memsize_log2-1 downto 0);
+ signal mnic_mem_wr_o : std_logic;
+ signal mnic_txtsu_ack : std_logic;
+ signal mnic_txtsu_stb : std_logic;
+
+ -----------------------------------------------------------------------------
+ --Dual-port RAM
+ -----------------------------------------------------------------------------
+ signal dpram_wbb_i : t_wishbone_slave_in;
+
+ -----------------------------------------------------------------------------
+ --WB Peripherials
+ -----------------------------------------------------------------------------
+ signal periph_slave_i : t_wishbone_slave_in_array(0 to 3);
+ signal periph_slave_o : t_wishbone_slave_out_array(0 to 3);
+ signal sysc_in_regs : t_sysc_in_registers;
+ signal sysc_out_regs : t_sysc_out_registers;
+
+ -----------------------------------------------------------------------------
+ --WB Secondary Crossbar
+ -----------------------------------------------------------------------------
+ constant c_secbar_layout : t_sdb_record_array(8 downto 0) :=
+ (0 => f_sdb_embed_device(c_xwr_mini_nic_sdb, x"00000000"),
+ 1 => f_sdb_embed_device(c_xwr_endpoint_sdb, x"00000100"),
+ 2 => f_sdb_embed_device(c_xwr_softpll_ng_sdb, x"00000200"),
+ 3 => f_sdb_embed_device(c_xwr_pps_gen_sdb, x"00000300"),
+ 4 => f_sdb_embed_device(c_wrc_periph0_sdb, x"00000400"), -- Syscon
+ 5 => f_sdb_embed_device(c_wrc_periph1_sdb, x"00000500"), -- UART
+ 6 => f_sdb_embed_device(c_wrc_periph2_sdb, x"00000600"), -- 1-Wire
+ 7 => f_sdb_embed_device(g_aux_sdb, x"00000700"), -- aux WB bus
+ 8 => f_sdb_embed_device(c_wrc_periph4_sdb, x"00000800") -- WRPC diag registers
+ );
+
+ constant c_secbar_sdb_address : t_wishbone_address := x"00000C00";
+ constant c_secbar_bridge_sdb : t_sdb_bridge :=
+ f_xwb_bridge_layout_sdb(true, c_secbar_layout, c_secbar_sdb_address);
+
+ signal secbar_master_i : t_wishbone_master_in_array(8 downto 0);
+ signal secbar_master_o : t_wishbone_master_out_array(8 downto 0);
+
+ -----------------------------------------------------------------------------
+ --WB intercon
+ -----------------------------------------------------------------------------
+ constant c_layout : t_sdb_record_array(1 downto 0) :=
+ (0 => f_sdb_embed_device(f_xwb_dpram(g_dpram_size), x"00000000"),
+ 1 => f_sdb_embed_bridge(c_secbar_bridge_sdb, x"00020000"));
+ constant c_sdb_address : t_wishbone_address := x"00030000";
+
+ signal cbar_slave_i : t_wishbone_slave_in_array (2 downto 0);
+ signal cbar_slave_o : t_wishbone_slave_out_array(2 downto 0);
+ signal cbar_master_i : t_wishbone_master_in_array(1 downto 0);
+ signal cbar_master_o : t_wishbone_master_out_array(1 downto 0);
+
+ -----------------------------------------------------------------------------
+ --External WB interface
+ -----------------------------------------------------------------------------
+ signal ext_wb_in : t_wishbone_slave_in;
+ signal ext_wb_out : t_wishbone_slave_out;
+
+ -----------------------------------------------------------------------------
+ -- External Tx TSU interface
+ -----------------------------------------------------------------------------
+
+ --===========================--
+ -- For SPEC --
+ --===========================--
+
+ signal hpll_auxout : std_logic_vector(2 downto 0);
+ signal dmpll_auxout : std_logic_vector(2 downto 0);
+
+ signal clk_ref_slv : std_logic_vector(0 downto 0);
+ signal clk_rx_slv : std_logic_vector(0 downto 0);
+
+ signal s_dummy_addr : std_logic_vector(31 downto 0);
+
+ signal softpll_irq : std_logic;
+
+ signal lm32_irq_slv : std_logic_vector(31 downto 0);
+
+
+ signal ep_wb_in : t_wishbone_slave_in;
+ signal ep_wb_out : t_wishbone_slave_out;
+
+ signal minic_wb_in : t_wishbone_slave_in;
+ signal minic_wb_out : t_wishbone_slave_out;
+
+ signal ep_src_out : t_wrf_source_out;
+ signal ep_src_in : t_wrf_source_in;
+ signal ep_snk_out : t_wrf_sink_out;
+ signal ep_snk_in : t_wrf_sink_in;
+
+
+ signal mux_src_out : t_wrf_source_out_array(1 downto 0);
+ signal mux_src_in : t_wrf_source_in_array(1 downto 0);
+ signal mux_snk_out : t_wrf_sink_out_array(1 downto 0);
+ signal mux_snk_in : t_wrf_sink_in_array(1 downto 0);
+ signal mux_class : t_wrf_mux_class(1 downto 0);
+
+ signal spll_out_locked : std_logic_vector(g_aux_clks downto 0);
+
+ signal dac_dpll_data : std_logic_vector(15 downto 0);
+ signal dac_dpll_sel : std_logic_vector(3 downto 0);
+ signal dac_dpll_load_p1 : std_logic;
+
+ signal clk_fb : std_logic_vector(g_aux_clks downto 0);
+ signal out_enable : std_logic_vector(g_aux_clks downto 0);
+
+ --component chipscope_ila
+ -- port (
+ -- CONTROL : inout std_logic_vector(35 downto 0);
+ -- CLK : in std_logic;
+ -- TRIG0 : in std_logic_vector(31 downto 0);
+ -- TRIG1 : in std_logic_vector(31 downto 0);
+ -- TRIG2 : in std_logic_vector(31 downto 0);
+ -- TRIG3 : in std_logic_vector(31 downto 0));
+ --end component;
+
+ --component chipscope_icon
+ -- port (
+ -- CONTROL0 : inout std_logic_vector (35 downto 0));
+ --end component;
+
+ --signal CONTROL : std_logic_vector(35 downto 0);
+ --signal CLK : std_logic;
+ --signal TRIG0 : std_logic_vector(31 downto 0);
+ --signal TRIG1 : std_logic_vector(31 downto 0);
+ --signal TRIG2 : std_logic_vector(31 downto 0);
+ --signal TRIG3 : std_logic_vector(31 downto 0);
+begin
+
+ -----------------------------------------------------------------------------
+ -- PHY TX/RX clock selection based on generics
+ -----------------------------------------------------------------------------
+
+ GEN_16BIT_PHY_IF: if g_pcs_16bit and g_records_for_phy generate
+ phy_rx_clk <= phy16_i.rx_clk;
+ phy_tx_clk <= phy16_i.ref_clk;
+ end generate;
+
+ GEN_8BIT_PHY_IF: if not g_pcs_16bit and g_records_for_phy generate
+ phy_rx_clk <= phy8_i.rx_clk;
+ phy_tx_clk <= phy8_i.ref_clk;
+ end generate;
+
+ GEN_STD_PHY_IF: if not g_records_for_phy generate
+ phy_rx_clk <= phy_rx_rbclk_i;
+ phy_tx_clk <= phy_ref_clk_i;
+ end generate;
+
+ -----------------------------------------------------------------------------
+ -- Reset resync and distribution
+ -----------------------------------------------------------------------------
+
+ rst_aux_n_o <= rst_net_n;
+
+ U_Sync_reset_refclk : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_ref_i,
+ rst_n_i => '1',
+ data_i => rst_net_n,
+ synced_o => rst_net_resync_ref_n);
+
+ U_sync_reset_dmtd : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_dmtd_i,
+ rst_n_i => '1',
+ data_i => rst_net_n,
+ synced_o => rst_net_resync_dmtd_n);
+
+ U_sync_reset_ext : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => clk_ext_i,
+ rst_n_i => '1',
+ data_i => rst_net_n,
+ synced_o => rst_net_resync_ext_n);
+
+ U_sync_reset_rxclk : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_rx_clk,
+ rst_n_i => '1',
+ data_i => rst_net_n,
+ synced_o => rst_net_resync_rxclk_n);
+
+ U_sync_reset_txclk : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => phy_tx_clk,
+ rst_n_i => '1',
+ data_i => rst_net_n,
+ synced_o => rst_net_resync_txclk_n);
+
+ -----------------------------------------------------------------------------
+ -- PPS generator
+ -----------------------------------------------------------------------------
+ PPS_GEN : xwr_pps_gen
+ generic map(
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_ref_clock_rate => f_refclk_rate(g_pcs_16bit),
+ g_ext_clock_rate => 10000000,
+ g_with_ext_clock_input => g_with_external_clock_input)
+ port map(
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+
+ rst_sys_n_i => rst_net_n,
+ rst_ref_n_i => rst_net_resync_ref_n,
+
+ slave_i => ppsg_wb_in,
+ slave_o => ppsg_wb_out,
+
+ -- used for fast masking of PPS output when link goes down
+ link_ok_i => ppsg_link_ok,
+
+ -- Single-pulse PPS output for synchronizing endpoint to
+ pps_in_i => pps_ext_i,
+ pps_csync_o => s_pps_csync,
+ pps_out_o => pps_p_o,
+ pps_led_o => pps_led_o,
+ pps_valid_o => pps_valid,
+
+ tm_utc_o => tm_tai_o,
+ tm_cycles_o => tm_cycles_o,
+ tm_time_valid_o => tm_time_valid_o
+ );
+ ppsg_link_ok <= not phy_rst;
+ pps_csync_o <= s_pps_csync;
+
+ -----------------------------------------------------------------------------
+ -- Software PLL
+ -----------------------------------------------------------------------------
+ U_SOFTPLL : xwr_softpll_ng
+ generic map(
+ g_with_ext_clock_input => g_with_external_clock_input,
+ g_reverse_dmtds => false,
+ g_divide_input_by_2 => not g_pcs_16bit,
+ g_with_debug_fifo => g_softpll_enable_debugger,
+ g_tag_bits => 22,
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_num_ref_inputs => 1,
+ g_num_outputs => 1 + g_aux_clks,
+ g_ref_clock_rate => f_refclk_rate(g_pcs_16bit),
+ g_ext_clock_rate => 10000000)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_sys_n_i => rst_net_n,
+ rst_ref_n_i => rst_net_resync_ref_n,
+ rst_ext_n_i => rst_net_resync_ext_n,
+ rst_dmtd_n_i => rst_net_resync_dmtd_n,
+
+ -- Reference inputs (i.e. the RX clocks recovered by the PHYs)
+ clk_ref_i(0) => phy_rx_clk,
+ -- Feedback clocks (i.e. the outputs of the main or aux oscillator)
+ clk_fb_i => clk_fb,
+ -- DMTD Offset clock
+ clk_dmtd_i => clk_dmtd_i,
+
+ clk_ext_i => clk_ext_i,
+ clk_ext_mul_i => clk_ext_mul_i,
+ clk_ext_mul_locked_i => clk_ext_mul_locked_i,
+ clk_ext_stopped_i => clk_ext_stopped_i,
+ clk_ext_rst_o => clk_ext_rst_o,
+
+ pps_csync_p1_i => s_pps_csync,
+ pps_ext_a_i => pps_ext_i,
+
+ -- DMTD oscillator drive
+ dac_dmtd_data_o => dac_hpll_data_o,
+ dac_dmtd_load_o => dac_hpll_load_p1_o,
+
+ -- Output channel DAC value
+ dac_out_data_o => dac_dpll_data, --: out std_logic_vector(15 downto 0);
+ -- Output channel select (0 = channel 0, etc. )
+ dac_out_sel_o => dac_dpll_sel, --for now use only one output
+ dac_out_load_o => dac_dpll_load_p1,
+
+ out_enable_i => out_enable,
+
+ out_locked_o => spll_out_locked,
+
+ slave_i => spll_wb_in,
+ slave_o => spll_wb_out,
+
+ debug_o => open);
+
+ clk_fb(0) <= clk_ref_i;
+ clk_fb(g_aux_clks downto 1) <= clk_aux_i;
+ out_enable(0) <= '1';
+ out_enable(g_aux_clks downto 1) <= tm_clk_aux_lock_en_i;
+
+ dac_dpll_data_o <= dac_dpll_data;
+ dac_dpll_load_p1_o <= '1' when (dac_dpll_load_p1 = '1' and dac_dpll_sel = x"0") else '0';
+
+ tm_dac_value_o <= x"00" & dac_dpll_data;
+
+ p_decode_dac_writes : process(dac_dpll_load_p1, dac_dpll_sel)
+ begin
+ for i in 0 to g_aux_clks-1 loop
+ if dac_dpll_sel = std_logic_vector(to_unsigned(i+1, 4)) then
+ tm_dac_wr_o(i) <= dac_dpll_load_p1;
+ else
+ tm_dac_wr_o(i) <= '0';
+ end if;
+ end loop; -- i
+ end process;
+
+ locked_spll : if g_aux_clks > 0 generate
+ tm_clk_aux_locked_o <= spll_out_locked(g_aux_clks downto 1);
+ end generate;
+
+ softpll_irq <= spll_wb_out.int;
+
+ -----------------------------------------------------------------------------
+ -- Endpoint
+ -----------------------------------------------------------------------------
+ U_Endpoint : xwr_endpoint
+ generic map (
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_simulation => f_int2bool(g_simulation),
+ g_tx_runt_padding => g_tx_runt_padding,
+ g_pcs_16bit => g_pcs_16bit,
+ g_records_for_phy => g_records_for_phy,
+ g_rx_buffer_size => g_rx_buffer_size,
+ g_with_rx_buffer => true,
+ g_with_flow_control => false,
+ g_with_timestamper => true,
+ g_with_dpi_classifier => true,
+ g_with_vlans => false,
+ g_with_rtu => false,
+ g_with_leds => true,
+ g_with_packet_injection => false,
+ g_use_new_rxcrc => true,
+ g_use_new_txcrc => false)
+ port map (
+ clk_ref_i => clk_ref_i,
+ clk_sys_i => clk_sys_i,
+ clk_dmtd_i => clk_dmtd_i,
+ rst_sys_n_i => rst_net_n,
+ rst_ref_n_i => rst_net_resync_ref_n,
+ rst_dmtd_n_i => rst_net_resync_dmtd_n,
+ rst_txclk_n_i => rst_net_resync_txclk_n,
+ rst_rxclk_n_i => rst_net_resync_rxclk_n,
+ pps_csync_p1_i => s_pps_csync,
+ pps_valid_i => pps_valid,
+
+ phy_rst_o => phy_rst,
+ phy_rdy_i => phy_rdy_i,
+ phy_loopen_o => phy_loopen_o,
+ phy_loopen_vec_o => phy_loopen_vec_o,
+ phy_tx_prbs_sel_o => phy_tx_prbs_sel_o,
+ phy_sfp_tx_fault_i => phy_sfp_tx_fault_i,
+ phy_sfp_los_i => phy_sfp_los_i,
+ phy_sfp_tx_disable_o => phy_sfp_tx_disable_o,
+ phy_ref_clk_i => phy_ref_clk_i,
+ phy_tx_data_o => phy_tx_data_o,
+ phy_tx_k_o => phy_tx_k_o,
+ phy_tx_disparity_i => phy_tx_disparity_i,
+ phy_tx_enc_err_i => phy_tx_enc_err_i,
+ phy_rx_data_i => phy_rx_data_i,
+ phy_rx_clk_i => phy_rx_rbclk_i,
+ phy_rx_k_i => phy_rx_k_i,
+ phy_rx_enc_err_i => phy_rx_enc_err_i,
+ phy_rx_bitslide_i => phy_rx_bitslide_i,
+
+ phy8_o => phy8_o,
+ phy8_i => phy8_i,
+ phy16_o => phy16_o,
+ phy16_i => phy16_i,
+
+ src_o => ep_src_out,
+ src_i => ep_src_in,
+ snk_o => ep_snk_out,
+ snk_i => ep_snk_in,
+
+ txtsu_port_id_o => ep_txtsu_port_id,
+ txtsu_frame_id_o => ep_txtsu_frame_id,
+ txtsu_ts_value_o => ep_txtsu_ts_value,
+ txtsu_ts_incorrect_o => ep_txtsu_ts_incorrect,
+ txtsu_stb_o => ep_txtsu_stb,
+ txtsu_ack_i => ep_txtsu_ack,
+ wb_i => ep_wb_in,
+ wb_o => ep_wb_out,
+ rmon_events_o => open,
+ txts_o => abscal_txts_o,
+ rxts_o => abscal_rxts_o,
+ fc_tx_pause_req_i => fc_tx_pause_req_i,
+ fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+ led_link_o => ep_led_link,
+ led_act_o => led_act_o);
+
+ led_link_o <= ep_led_link;
+ link_ok_o <= ep_led_link;
+
+ tm_link_up_o <= ep_led_link;
+
+ phy_rst_o <= phy_rst;
+
+ -----------------------------------------------------------------------------
+ -- Mini-NIC
+ -----------------------------------------------------------------------------
+ MINI_NIC : xwr_mini_nic
+ generic map (
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_tx_fifo_size => 1024,
+ g_rx_fifo_size => 2048,
+ g_buffer_little_endian => false)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_net_n,
+
+ src_o => mux_snk_in(0),
+ src_i => mux_snk_out(0),
+ snk_o => mux_src_in(0),
+ snk_i => mux_src_out(0),
+
+ txtsu_port_id_i => ep_txtsu_port_id,
+ txtsu_frame_id_i => ep_txtsu_frame_id,
+ txtsu_tsval_i => ep_txtsu_ts_value,
+ txtsu_tsincorrect_i => ep_txtsu_ts_incorrect,
+ txtsu_stb_i => mnic_txtsu_stb,
+ txtsu_ack_o => mnic_txtsu_ack,
+
+ wb_i => minic_wb_in,
+ wb_o => minic_wb_out
+ );
+
+ lm32_irq_slv(31 downto 1) <= (others => '0');
+ lm32_irq_slv(0) <= softpll_irq; -- according to the doc, it's active low.
+
+ -----------------------------------------------------------------------------
+ -- LM32
+ -----------------------------------------------------------------------------
+ LM32_CORE : xwb_lm32
+ generic map(g_profile => "medium_icache")
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_wrc_n,
+ irq_i => lm32_irq_slv,
+
+ dwb_o => cbar_slave_i(0),
+ dwb_i => cbar_slave_o(0),
+ iwb_o => cbar_slave_i(1),
+ iwb_i => cbar_slave_o(1)
+ );
+
+ -----------------------------------------------------------------------------
+ -- Dual-port RAM
+ -----------------------------------------------------------------------------
+ DPRAM : xwb_dpram
+ generic map(
+ g_size => g_dpram_size,
+ g_init_file => f_choose_lm32_firmware_file,
+ g_must_have_init_file => f_check_if_lm32_firmware_necessary,
+ g_slave1_interface_mode => PIPELINED,
+ g_slave2_interface_mode => PIPELINED,
+ g_slave1_granularity => BYTE,
+ g_slave2_granularity => WORD)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+
+ slave1_i => cbar_master_o(0),
+ slave1_o => cbar_master_i(0),
+ slave2_i => dpram_wbb_i,
+ slave2_o => open
+ );
+
+ dpram_wbb_i.cyc <= '0';
+ dpram_wbb_i.stb <= '0';
+ dpram_wbb_i.adr <= (c_mnic_memsize_log2-1 downto 0 => '0', others=>'0'); --mnic_mem_addr_o;
+ dpram_wbb_i.sel <= "1111";
+ dpram_wbb_i.we <= '0'; --mnic_mem_wr_o;
+ dpram_wbb_i.dat <= (others=>'0'); --mnic_mem_data_o;
+
+ -----------------------------------------------------------------------------
+ -- WB Peripherials
+ -----------------------------------------------------------------------------
+ PERIPH : wrc_periph
+ generic map(
+ g_board_name => g_board_name,
+ g_flash_secsz_kb => g_flash_secsz_kb,
+ g_flash_sdbfs_baddr => g_flash_sdbfs_baddr,
+ g_phys_uart => g_phys_uart,
+ g_virtual_uart => g_virtual_uart,
+ g_mem_words => g_dpram_size,
+ g_vuart_fifo_size => g_vuart_fifo_size,
+ g_diag_id => g_diag_id,
+ g_diag_ver => g_diag_ver,
+ g_diag_ro_size => g_diag_ro_size,
+ g_diag_rw_size => g_diag_rw_size)
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ rst_net_n_o => rst_net_n,
+ rst_wrc_n_o => rst_wrc_n,
+
+ led_red_o => open, --led_red_o,
+ led_green_o => open, --led_green_o,
+ scl_o => scl_o,
+ scl_i => scl_i,
+ sda_o => sda_o,
+ sda_i => sda_i,
+ sfp_scl_o => sfp_scl_o,
+ sfp_scl_i => sfp_scl_i,
+ sfp_sda_o => sfp_sda_o,
+ sfp_sda_i => sfp_sda_i,
+ sfp_det_i => sfp_det_i,
+ memsize_i => "0000",
+ btn1_i => btn1_i,
+ btn2_i => btn2_i,
+ spi_sclk_o => spi_sclk_o,
+ spi_ncs_o => spi_ncs_o,
+ spi_mosi_o => spi_mosi_o,
+ spi_miso_i => spi_miso_i,
+
+ slave_i => periph_slave_i,
+ slave_o => periph_slave_o,
+
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o,
+
+ owr_pwren_o => owr_pwren_o,
+ owr_en_o => owr_en_o,
+ owr_i => owr_i,
+
+ diag_array_in => aux_diag_i,
+ diag_array_out => aux_diag_o
+ );
+
+ U_Adapter : wb_slave_adapter
+ generic map(
+ g_master_use_struct => true,
+ g_master_mode => PIPELINED,
+ g_master_granularity => BYTE,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ master_i => ext_wb_out,
+ master_o => ext_wb_in,
+ sl_adr_i => wb_adr_i,
+ sl_dat_i => wb_dat_i,
+ sl_sel_i => wb_sel_i,
+ sl_cyc_i => wb_cyc_i,
+ sl_stb_i => wb_stb_i,
+ sl_we_i => wb_we_i,
+ sl_dat_o => wb_dat_o,
+ sl_ack_o => wb_ack_o,
+ sl_err_o => wb_err_o,
+ sl_rty_o => wb_rty_o,
+ sl_stall_o => wb_stall_o);
+
+ -----------------------------------------------------------------------------
+ -- WB intercon
+ -----------------------------------------------------------------------------
+ WB_CON : xwb_sdb_crossbar
+ generic map(
+ g_num_masters => 3,
+ g_num_slaves => 2,
+ g_registered => true,
+ g_wraparound => true,
+ g_layout => c_layout,
+ g_sdb_addr => c_sdb_address
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ -- Master connections (INTERCON is a slave)
+ slave_i => cbar_slave_i,
+ slave_o => cbar_slave_o,
+ -- Slave connections (INTERCON is a master)
+ master_i => cbar_master_i,
+ master_o => cbar_master_o
+ );
+
+ cbar_slave_i(2) <= ext_wb_in;
+ ext_wb_out <= cbar_slave_o(2);
+
+ --chipscope_ila_1 : chipscope_ila
+ -- port map (
+ -- CONTROL => CONTROL,
+ -- CLK => clk_sys_i,
+ -- TRIG0 => TRIG0,
+ -- TRIG1 => TRIG1,
+ -- TRIG2 => TRIG2,
+ -- TRIG3 => TRIG3);
+
+ --chipscope_icon_1 : chipscope_icon
+ -- port map (
+ -- CONTROL0 => CONTROL);
+
+ --TRIG0(15 downto 0) <= ep_snk_in.dat;
+ --trig0(17 downto 16) <= ep_snk_in.adr;
+ --trig0(19 downto 18) <= ep_snk_in.sel;
+ --trig0(20) <= ep_snk_in.cyc;
+ --trig0(21) <= ep_snk_in.stb;
+ --trig0(22) <= ep_snk_in.we;
+ --trig0(23) <= ep_snk_out.ack;
+ --trig0(24) <= ep_snk_out.stall;
+ --trig0(26) <= ep_snk_out.err;
+
+ --TRIG1(15 downto 0) <= mux_snk_in(0).dat;
+ --trig1(17 downto 16) <= mux_snk_in(0).adr;
+ --trig1(19 downto 18) <= mux_snk_in(0).sel;
+ --trig1(20) <= mux_snk_in(0).cyc;
+ --trig1(21) <= mux_snk_in(0).stb;
+ --trig1(22) <= mux_snk_in(0).we;
+ --trig1(23) <= mux_snk_out(0).ack;
+ --trig1(24) <= mux_snk_out(0).stall;
+ --trig1(26) <= mux_snk_out(0).err;
+
+ --TRIG2(15 downto 0) <= mux_snk_in(1).dat;
+ --trig2(17 downto 16) <= mux_snk_in(1).adr;
+ --trig2(19 downto 18) <= mux_snk_in(1).sel;
+ --trig2(20) <= mux_snk_in(1).cyc;
+ --trig2(21) <= mux_snk_in(1).stb;
+ --trig2(22) <= mux_snk_in(1).we;
+ --trig2(23) <= mux_snk_out(1).ack;
+ --trig2(24) <= mux_snk_out(1).stall;
+ --trig2(26) <= mux_snk_out(1).err;
+ -----------------------------------------------------------------------------
+ -- WB Secondary Crossbar
+ -----------------------------------------------------------------------------
+ WB_SECONDARY_CON : xwb_sdb_crossbar
+ generic map(
+ g_num_masters => 1,
+ g_num_slaves => 9,
+ g_registered => true,
+ g_wraparound => true,
+ g_layout => c_secbar_layout,
+ g_sdb_addr => c_secbar_sdb_address
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ -- Master connections (INTERCON is a slave)
+ slave_i(0) => cbar_master_o(1),
+ slave_o(0) => cbar_master_i(1),
+ -- Slave connections (INTERCON is a master)
+ master_i => secbar_master_i,
+ master_o => secbar_master_o
+ );
+
+ secbar_master_i(0) <= minic_wb_out;
+ minic_wb_in <= secbar_master_o(0);
+ secbar_master_i(1) <= ep_wb_out;
+ ep_wb_in <= secbar_master_o(1);
+ secbar_master_i(2) <= spll_wb_out;
+ spll_wb_in <= secbar_master_o(2);
+ secbar_master_i(3) <= ppsg_wb_out;
+ ppsg_wb_in <= secbar_master_o(3);
+ --peripherials
+ secbar_master_i(4) <= periph_slave_o(0);
+ secbar_master_i(5) <= periph_slave_o(1);
+ secbar_master_i(6) <= periph_slave_o(2);
+ secbar_master_i(8) <= periph_slave_o(3);
+ periph_slave_i(0) <= secbar_master_o(4);
+ periph_slave_i(1) <= secbar_master_o(5);
+ periph_slave_i(2) <= secbar_master_o(6);
+ periph_slave_i(3) <= secbar_master_o(8);
+
+
+ aux_adr_o <= secbar_master_o(7).adr;
+ aux_dat_o <= secbar_master_o(7).dat;
+ aux_sel_o <= secbar_master_o(7).sel;
+ aux_cyc_o <= secbar_master_o(7).cyc;
+ aux_stb_o <= secbar_master_o(7).stb;
+ aux_we_o <= secbar_master_o(7).we;
+
+ secbar_master_i(7).dat <= aux_dat_i;
+ secbar_master_i(7).ack <= aux_ack_i;
+ secbar_master_i(7).stall <= aux_stall_i;
+ secbar_master_i(7).err <= '0';
+ secbar_master_i(7).rty <= '0';
+ secbar_master_i(7).int <= '0';
+
+ --secbar_master_i(6).err <= '0';
+ --secbar_master_i(5).err <= '0';
+ --secbar_master_i(4).err <= '0';
+ --secbar_master_i(3).err <= '0';
+ --secbar_master_i(2).err <= '0';
+ --secbar_master_i(1).err <= '0';
+ --secbar_master_i(0).err <= '0';
+
+ --secbar_master_i(6).rty <= '0';
+ --secbar_master_i(5).rty <= '0';
+ --secbar_master_i(4).rty <= '0';
+ --secbar_master_i(3).rty <= '0';
+ --secbar_master_i(2).rty <= '0';
+ --secbar_master_i(1).rty <= '0';
+ --secbar_master_i(0).rty <= '0';
+
+
+
+ -----------------------------------------------------------------------------
+ -- WBP MUX
+ -----------------------------------------------------------------------------
+ U_WBP_Mux : xwrf_mux
+ generic map(
+ g_muxed_ports => 2)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_net_n,
+ ep_src_o => ep_snk_in,
+ ep_src_i => ep_snk_out,
+ ep_snk_o => ep_src_in,
+ ep_snk_i => ep_src_out,
+ mux_src_o => mux_src_out,
+ mux_src_i => mux_src_in,
+ mux_snk_o => mux_snk_out,
+ mux_snk_i => mux_snk_in,
+ mux_class_i => mux_class);
+
+ mux_class(0) <= x"0f";
+ mux_class(1) <= x"f0";
+ ext_src_adr_o <= mux_src_out(1).adr;
+ ext_src_dat_o <= mux_src_out(1).dat;
+ ext_src_stb_o <= mux_src_out(1).stb;
+ ext_src_cyc_o <= mux_src_out(1).cyc;
+ ext_src_sel_o <= mux_src_out(1).sel;
+ ext_src_we_o <= '1';
+
+ mux_src_in(1).ack <= ext_src_ack_i;
+ mux_src_in(1).stall <= ext_src_stall_i;
+ mux_src_in(1).err <= ext_src_err_i;
+ mux_src_in(1).rty <= '0';
+
+ mux_snk_in(1).adr <= ext_snk_adr_i;
+ mux_snk_in(1).dat <= ext_snk_dat_i;
+ mux_snk_in(1).stb <= ext_snk_stb_i;
+ mux_snk_in(1).cyc <= ext_snk_cyc_i;
+ mux_snk_in(1).sel <= ext_snk_sel_i;
+ mux_snk_in(1).we <= ext_snk_we_i;
+
+ ext_snk_ack_o <= mux_snk_out(1).ack;
+ ext_snk_err_o <= mux_snk_out(1).err;
+ ext_snk_stall_o <= mux_snk_out(1).stall;
+
+ -----------------------------------------------------------------------------
+ -- External Tx Timestamping I/F
+ -----------------------------------------------------------------------------
+ txtsu_port_id_o <= ep_txtsu_port_id;
+ txtsu_frame_id_o <= ep_txtsu_frame_id;
+ txtsu_ts_value_o <= ep_txtsu_ts_value;
+ txtsu_ts_incorrect_o <= ep_txtsu_ts_incorrect;
+
+ -- ts goes to external I/F
+ txtsu_stb_o <= '1' when (ep_txtsu_stb = '1' and (ep_txtsu_frame_id /= x"0000")) else
+ '0';
+ -- ts goes to minic
+ mnic_txtsu_stb <= '1' when (ep_txtsu_stb = '1' and (ep_txtsu_frame_id = x"0000")) else
+ '0';
+
+ ep_txtsu_ack <= txtsu_ack_i or mnic_txtsu_ack;
+
+end struct;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd
new file mode 100644
index 000000000..1bedca028
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_pkg.vhd
@@ -0,0 +1,134 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Core Diagnostics
+---------------------------------------------------------------------------------------
+-- File : wrc_diags_pkg.vhd
+-- Author : auto-generated by wbgen2 from wrc_diags_wb.wb
+-- Created : Mon Nov 27 13:37:56 2017
+-- Version : 0x00000001
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_diags_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package wrc_diags_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_wrc_diags_in_registers is record
+ ctrl_data_valid_i : std_logic;
+ wdiag_sstat_wr_mode_i : std_logic;
+ wdiag_sstat_servostate_i : std_logic_vector(3 downto 0);
+ wdiag_pstat_link_i : std_logic;
+ wdiag_pstat_locked_i : std_logic;
+ wdiag_ptpstat_ptpstate_i : std_logic_vector(7 downto 0);
+ wdiag_astat_aux_i : std_logic_vector(7 downto 0);
+ wdiag_txfcnt_i : std_logic_vector(31 downto 0);
+ wdiag_rxfcnt_i : std_logic_vector(31 downto 0);
+ wdiag_sec_msb_i : std_logic_vector(31 downto 0);
+ wdiag_sec_lsb_i : std_logic_vector(31 downto 0);
+ wdiag_ns_i : std_logic_vector(31 downto 0);
+ wdiag_mu_msb_i : std_logic_vector(31 downto 0);
+ wdiag_mu_lsb_i : std_logic_vector(31 downto 0);
+ wdiag_dms_msb_i : std_logic_vector(31 downto 0);
+ wdiag_dms_lsb_i : std_logic_vector(31 downto 0);
+ wdiag_asym_i : std_logic_vector(31 downto 0);
+ wdiag_cko_i : std_logic_vector(31 downto 0);
+ wdiag_setp_i : std_logic_vector(31 downto 0);
+ wdiag_ucnt_i : std_logic_vector(31 downto 0);
+ wdiag_temp_i : std_logic_vector(31 downto 0);
+ end record;
+
+ constant c_wrc_diags_in_registers_init_value: t_wrc_diags_in_registers := (
+ ctrl_data_valid_i => '0',
+ wdiag_sstat_wr_mode_i => '0',
+ wdiag_sstat_servostate_i => (others => '0'),
+ wdiag_pstat_link_i => '0',
+ wdiag_pstat_locked_i => '0',
+ wdiag_ptpstat_ptpstate_i => (others => '0'),
+ wdiag_astat_aux_i => (others => '0'),
+ wdiag_txfcnt_i => (others => '0'),
+ wdiag_rxfcnt_i => (others => '0'),
+ wdiag_sec_msb_i => (others => '0'),
+ wdiag_sec_lsb_i => (others => '0'),
+ wdiag_ns_i => (others => '0'),
+ wdiag_mu_msb_i => (others => '0'),
+ wdiag_mu_lsb_i => (others => '0'),
+ wdiag_dms_msb_i => (others => '0'),
+ wdiag_dms_lsb_i => (others => '0'),
+ wdiag_asym_i => (others => '0'),
+ wdiag_cko_i => (others => '0'),
+ wdiag_setp_i => (others => '0'),
+ wdiag_ucnt_i => (others => '0'),
+ wdiag_temp_i => (others => '0')
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_wrc_diags_out_registers is record
+ ver_id_o : std_logic_vector(31 downto 0);
+ ctrl_data_snapshot_o : std_logic;
+ end record;
+
+ constant c_wrc_diags_out_registers_init_value: t_wrc_diags_out_registers := (
+ ver_id_o => (others => '0'),
+ ctrl_data_snapshot_o => '0'
+ );
+ function "or" (left, right: t_wrc_diags_in_registers) return t_wrc_diags_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body wrc_diags_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_wrc_diags_in_registers) return t_wrc_diags_in_registers is
+variable tmp: t_wrc_diags_in_registers;
+begin
+tmp.ctrl_data_valid_i := f_x_to_zero(left.ctrl_data_valid_i) or f_x_to_zero(right.ctrl_data_valid_i);
+tmp.wdiag_sstat_wr_mode_i := f_x_to_zero(left.wdiag_sstat_wr_mode_i) or f_x_to_zero(right.wdiag_sstat_wr_mode_i);
+tmp.wdiag_sstat_servostate_i := f_x_to_zero(left.wdiag_sstat_servostate_i) or f_x_to_zero(right.wdiag_sstat_servostate_i);
+tmp.wdiag_pstat_link_i := f_x_to_zero(left.wdiag_pstat_link_i) or f_x_to_zero(right.wdiag_pstat_link_i);
+tmp.wdiag_pstat_locked_i := f_x_to_zero(left.wdiag_pstat_locked_i) or f_x_to_zero(right.wdiag_pstat_locked_i);
+tmp.wdiag_ptpstat_ptpstate_i := f_x_to_zero(left.wdiag_ptpstat_ptpstate_i) or f_x_to_zero(right.wdiag_ptpstat_ptpstate_i);
+tmp.wdiag_astat_aux_i := f_x_to_zero(left.wdiag_astat_aux_i) or f_x_to_zero(right.wdiag_astat_aux_i);
+tmp.wdiag_txfcnt_i := f_x_to_zero(left.wdiag_txfcnt_i) or f_x_to_zero(right.wdiag_txfcnt_i);
+tmp.wdiag_rxfcnt_i := f_x_to_zero(left.wdiag_rxfcnt_i) or f_x_to_zero(right.wdiag_rxfcnt_i);
+tmp.wdiag_sec_msb_i := f_x_to_zero(left.wdiag_sec_msb_i) or f_x_to_zero(right.wdiag_sec_msb_i);
+tmp.wdiag_sec_lsb_i := f_x_to_zero(left.wdiag_sec_lsb_i) or f_x_to_zero(right.wdiag_sec_lsb_i);
+tmp.wdiag_ns_i := f_x_to_zero(left.wdiag_ns_i) or f_x_to_zero(right.wdiag_ns_i);
+tmp.wdiag_mu_msb_i := f_x_to_zero(left.wdiag_mu_msb_i) or f_x_to_zero(right.wdiag_mu_msb_i);
+tmp.wdiag_mu_lsb_i := f_x_to_zero(left.wdiag_mu_lsb_i) or f_x_to_zero(right.wdiag_mu_lsb_i);
+tmp.wdiag_dms_msb_i := f_x_to_zero(left.wdiag_dms_msb_i) or f_x_to_zero(right.wdiag_dms_msb_i);
+tmp.wdiag_dms_lsb_i := f_x_to_zero(left.wdiag_dms_lsb_i) or f_x_to_zero(right.wdiag_dms_lsb_i);
+tmp.wdiag_asym_i := f_x_to_zero(left.wdiag_asym_i) or f_x_to_zero(right.wdiag_asym_i);
+tmp.wdiag_cko_i := f_x_to_zero(left.wdiag_cko_i) or f_x_to_zero(right.wdiag_cko_i);
+tmp.wdiag_setp_i := f_x_to_zero(left.wdiag_setp_i) or f_x_to_zero(right.wdiag_setp_i);
+tmp.wdiag_ucnt_i := f_x_to_zero(left.wdiag_ucnt_i) or f_x_to_zero(right.wdiag_ucnt_i);
+tmp.wdiag_temp_i := f_x_to_zero(left.wdiag_temp_i) or f_x_to_zero(right.wdiag_temp_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd
new file mode 100644
index 000000000..99b6e9252
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_diags_wb.vhd
@@ -0,0 +1,376 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Core Diagnostics
+---------------------------------------------------------------------------------------
+-- File : wrc_diags_wb.vhd
+-- Author : auto-generated by wbgen2 from wrc_diags_wb.wb
+-- Created : Mon Nov 27 13:37:56 2017
+-- Version : 0x00000001
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_diags_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.wrc_diags_wbgen2_pkg.all;
+
+
+entity wrc_diags_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ regs_i : in t_wrc_diags_in_registers;
+ regs_o : out t_wrc_diags_out_registers
+ );
+end wrc_diags_wb;
+
+architecture syn of wrc_diags_wb is
+
+signal wrc_diags_ver_id_int : std_logic_vector(31 downto 0);
+signal wrc_diags_ctrl_data_snapshot_int : std_logic ;
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(4 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ wrc_diags_ver_id_int <= "00000000000000000000000000000001";
+ wrc_diags_ctrl_data_snapshot_int <= '0';
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ ack_in_progress <= '0';
+ else
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(4 downto 0) is
+ when "00000" =>
+ if (wb_we_i = '1') then
+ wrc_diags_ver_id_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= wrc_diags_ver_id_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00001" =>
+ if (wb_we_i = '1') then
+ wrc_diags_ctrl_data_snapshot_int <= wrdata_reg(8);
+ end if;
+ rddata_reg(0) <= regs_i.ctrl_data_valid_i;
+ rddata_reg(8) <= wrc_diags_ctrl_data_snapshot_int;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= regs_i.wdiag_sstat_wr_mode_i;
+ rddata_reg(11 downto 8) <= regs_i.wdiag_sstat_servostate_i;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(0) <= regs_i.wdiag_pstat_link_i;
+ rddata_reg(1) <= regs_i.wdiag_pstat_locked_i;
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.wdiag_ptpstat_ptpstate_i;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(7 downto 0) <= regs_i.wdiag_astat_aux_i;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_txfcnt_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_rxfcnt_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_sec_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_sec_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_ns_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_mu_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_mu_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_dms_msb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01110" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_dms_lsb_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_asym_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_cko_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_setp_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10010" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_ucnt_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.wdiag_temp_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Version identifier
+ regs_o.ver_id_o <= wrc_diags_ver_id_int;
+-- WR DIAG data valid
+-- WR DIAG data snapshot
+ regs_o.ctrl_data_snapshot_o <= wrc_diags_ctrl_data_snapshot_int;
+-- WR valid
+-- Servo State
+-- Link Status
+-- PLL Locked
+-- PTP State
+-- AUX channel
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+-- Data
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd
new file mode 100644
index 000000000..ee6035524
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_periph.vhd
@@ -0,0 +1,520 @@
+-------------------------------------------------------------------------------
+-- Title : WhiteRabbit PTP Core peripherials
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : wrc_periph.vhd
+-- Author : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2011-04-04
+-- Last update: 2017-04-25
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- WRC_PERIPH integrates WRC_SYSCON, UART/VUART, 1-Wire Master, WRPC_DIAGS
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.wrcore_pkg.all;
+use work.wishbone_pkg.all;
+use work.sysc_wbgen2_pkg.all;
+use work.wrc_diags_wbgen2_pkg.all;
+
+entity wrc_periph is
+ generic(
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128)
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128)
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := false;
+ g_cntr_period : integer := 62500;
+ g_mem_words : integer := 16384; --in 32-bit words
+ g_vuart_fifo_size : integer := 1024;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0
+ );
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+
+ rst_net_n_o : out std_logic;
+ rst_wrc_n_o : out std_logic;
+
+ led_red_o : out std_logic;
+ led_green_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic;
+ sda_o : out std_logic;
+ sda_i : in std_logic;
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic;
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic;
+ sfp_det_i : in std_logic;
+ memsize_i : in std_logic_vector(3 downto 0);
+ btn1_i : in std_logic;
+ btn2_i : in std_logic;
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in_array(0 to 3);
+ slave_o : out t_wishbone_slave_out_array(0 to 3);
+
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic;
+
+ -- 1-Wire
+ owr_pwren_o: out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0);
+
+ -- optional diagnostics from external HDL modules
+ diag_array_in : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0'));
+ diag_array_out : out t_generic_word_array(g_diag_rw_size-1 downto 0)
+ );
+end wrc_periph;
+
+architecture struct of wrc_periph is
+
+ function f_cnt_memsize(words : integer) return std_logic_vector is
+ begin
+ return std_logic_vector(to_unsigned(words * 4 / 1024 / 16 - 1, 4));
+ -- *4 - to get size in bytes
+ -- /1024 - to get size in kB
+ -- /16 -1 - to get size in format of MEMSIZE@sysc_hwfr register
+ end f_cnt_memsize;
+
+ function f_board_name_conv(name : string) return std_logic_vector is
+ variable ret : std_logic_vector(31 downto 0);
+ begin
+ assert (name'length= 4)
+ report "Board name has to be exactly 4 letters string" severity failure;
+ ret(31 downto 24) := std_logic_vector(to_unsigned(character'pos(name(1)), 8));
+ ret(23 downto 16) := std_logic_vector(to_unsigned(character'pos(name(2)), 8));
+ ret(15 downto 8) := std_logic_vector(to_unsigned(character'pos(name(3)), 8));
+ ret( 7 downto 0) := std_logic_vector(to_unsigned(character'pos(name(4)), 8));
+ return ret;
+ end f_board_name_conv;
+
+ signal sysc_regs_i : t_sysc_in_registers;
+ signal sysc_regs_o : t_sysc_out_registers;
+
+ signal cntr_div : unsigned(23 downto 0);
+ signal cntr_tics : unsigned(31 downto 0);
+ signal cntr_overflow : std_logic;
+
+ signal rst_wrc_n_o_reg : std_logic := '1';
+ signal diag_adr : unsigned(15 downto 0);
+ signal diag_dat : std_logic_vector(31 downto 0);
+ signal diag_out_regs : t_generic_word_array(g_diag_rw_size - 1 downto 0);
+ signal diag_in : t_generic_word_array(g_diag_ro_size + g_diag_rw_size-1 downto 0);
+ signal wrpc_diag_regs_in : t_wrc_diags_in_registers;
+ signal wrpc_diag_regs_out : t_wrc_diags_out_registers;
+
+begin
+
+ rst_wrc_n_o <= rst_n_i and rst_wrc_n_o_reg;
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ rst_net_n_o <= '0';
+ rst_wrc_n_o_reg <= '1';
+ else
+
+ if(sysc_regs_o.rstr_trig_wr_o = '1' and sysc_regs_o.rstr_trig_o = x"deadbee") then
+ rst_wrc_n_o_reg <= not sysc_regs_o.rstr_rst_o;
+ end if;
+
+ rst_net_n_o <= not sysc_regs_o.gpsr_net_rst_o;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------
+ -- LEDs
+ -------------------------------------
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(sysc_regs_o.gpsr_led_link_o = '1') then
+ led_red_o <= '1';
+ elsif(sysc_regs_o.gpcr_led_link_o = '1') then
+ led_red_o <= '0';
+ end if;
+
+ if(sysc_regs_o.gpsr_led_stat_o = '1') then
+ led_green_o <= '1';
+ elsif(sysc_regs_o.gpcr_led_stat_o = '1') then
+ led_green_o <= '0';
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------
+ -- buttons
+ -------------------------------------
+ sysc_regs_i.gpsr_btn1_i <= btn1_i;
+ sysc_regs_i.gpsr_btn2_i <= btn2_i;
+
+ -------------------------------------
+ -- MEMSIZE
+ -------------------------------------
+ sysc_regs_i.hwfr_memsize_i(3 downto 0) <= f_cnt_memsize(g_mem_words);
+
+ -------------------------------------
+ -- BOARD NAME and Flash info
+ -------------------------------------
+ sysc_regs_i.hwir_name_i <= f_board_name_conv(g_board_name);
+ sysc_regs_i.hwfr_storage_sec_i <= std_logic_vector(to_unsigned(g_flash_secsz_kb, 16));
+ sysc_regs_i.hwfr_storage_type_i <= "00"; -- for now these parameters are only for Flash
+ sysc_regs_i.sdbfs_baddr_i <= std_logic_vector(to_unsigned(g_flash_sdbfs_baddr, 32));
+
+ -------------------------------------
+ -- TIMER
+ -------------------------------------
+ sysc_regs_i.tvr_i <= std_logic_vector(cntr_tics);
+ sysc_regs_i.tcr_tdiv_i <= (others => '0');
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if(rst_n_i = '0') then
+ cntr_div <= (others => '0');
+ cntr_overflow <= '0';
+ elsif(sysc_regs_o.tcr_enable_o = '1') then
+ if(cntr_div = g_cntr_period-1) then
+ cntr_div <= (others => '0');
+ cntr_overflow <= '1';
+ else
+ cntr_div <= cntr_div + 1;
+ cntr_overflow <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ --msec counter
+ process(clk_sys_i)
+ begin
+ if(rising_edge(clk_sys_i)) then
+ if(rst_n_i = '0') then
+ cntr_tics <= (others => '0');
+ elsif(cntr_overflow = '1') then
+ cntr_tics <= cntr_tics + 1;
+ end if;
+ end if;
+ end process;
+
+ -------------------------------------
+ -- I2C - FMC
+ -------------------------------------
+ p_drive_i2c : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ scl_o <= '1';
+ sda_o <= '1';
+ else
+ if(sysc_regs_o.gpsr_fmc_sda_load_o = '1' and sysc_regs_o.gpsr_fmc_sda_o = '1') then
+ sda_o <= '1';
+ elsif(sysc_regs_o.gpcr_fmc_sda_o = '1') then
+ sda_o <= '0';
+ end if;
+
+ if(sysc_regs_o.gpsr_fmc_scl_load_o = '1' and sysc_regs_o.gpsr_fmc_scl_o = '1') then
+ scl_o <= '1';
+ elsif(sysc_regs_o.gpcr_fmc_scl_o = '1') then
+ scl_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ sysc_regs_i.gpsr_fmc_sda_i <= sda_i;
+ sysc_regs_i.gpsr_fmc_scl_i <= scl_i;
+
+ -------------------------------------
+ -- I2C - SFP
+ -------------------------------------
+ p_drive_sfpi2c : process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ sfp_scl_o <= '1';
+ sfp_sda_o <= '1';
+ else
+ if(sysc_regs_o.gpsr_sfp_sda_load_o = '1' and sysc_regs_o.gpsr_sfp_sda_o = '1') then
+ sfp_sda_o <= '1';
+ elsif(sysc_regs_o.gpcr_sfp_sda_o = '1') then
+ sfp_sda_o <= '0';
+ end if;
+
+ if(sysc_regs_o.gpsr_sfp_scl_load_o = '1' and sysc_regs_o.gpsr_sfp_scl_o = '1') then
+ sfp_scl_o <= '1';
+ elsif(sysc_regs_o.gpcr_sfp_scl_o = '1') then
+ sfp_scl_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ sysc_regs_i.gpsr_sfp_sda_i <= sfp_sda_i;
+ sysc_regs_i.gpsr_sfp_scl_i <= sfp_scl_i;
+
+ sysc_regs_i.gpsr_sfp_det_i <= sfp_det_i;
+
+ -------------------------------------
+ -- SPI - Flash
+ -------------------------------------
+ p_drive_spi: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ spi_sclk_o <= '0';
+ spi_mosi_o <= '0';
+ spi_ncs_o <= '1';
+ else
+ if(sysc_regs_o.gpsr_spi_sclk_load_o = '1' and sysc_regs_o.gpsr_spi_sclk_o = '1') then
+ spi_sclk_o <= '1';
+ elsif(sysc_regs_o.gpcr_spi_sclk_o = '1') then
+ spi_sclk_o <= '0';
+ end if;
+
+ if(sysc_regs_o.gpsr_spi_ncs_load_o = '1' and sysc_regs_o.gpsr_spi_ncs_o = '1') then
+ spi_ncs_o <= '1';
+ elsif(sysc_regs_o.gpcr_spi_cs_o = '1') then
+ spi_ncs_o <= '0';
+ end if;
+
+ if(sysc_regs_o.gpsr_spi_mosi_load_o = '1' and sysc_regs_o.gpsr_spi_mosi_o = '1') then
+ spi_mosi_o <= '1';
+ elsif(sysc_regs_o.gpcr_spi_mosi_o = '1') then
+ spi_mosi_o <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+ sysc_regs_i.gpsr_spi_sclk_i <= '0';
+ sysc_regs_i.gpsr_spi_ncs_i <= '0';
+ sysc_regs_i.gpsr_spi_mosi_i <= '0';
+ sysc_regs_i.gpsr_spi_miso_i <= spi_miso_i;
+
+
+ -------------------------------------
+ -- DIAG to/from external modules
+ -------------------------------------
+ -- first, provide all the constants
+ sysc_regs_i.diag_info_id_i <= std_logic_vector(to_unsigned(g_diag_id, 16));
+ sysc_regs_i.diag_info_ver_i <= std_logic_vector(to_unsigned(g_diag_ver, 16));
+ sysc_regs_i.diag_nw_ro_i <= std_logic_vector(to_unsigned(g_diag_ro_size, 16));
+ sysc_regs_i.diag_nw_rw_i <= std_logic_vector(to_unsigned(g_diag_rw_size, 16));
+
+ diag_array_out <= diag_out_regs;
+ -- r/w registers can be also read
+ diag_in(g_diag_rw_size - 1 downto 0) <= diag_out_regs;
+ -- r/o array after r/w registers for reading
+ diag_in(g_diag_ro_size + g_diag_rw_size-1 downto g_diag_rw_size) <= diag_array_in;
+
+ p_diag_rw: process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ diag_adr <= (others=>'0');
+ diag_dat <= (others=>'0');
+ else
+ if sysc_regs_o.diag_cr_adr_load_o = '1' then
+ diag_adr <= unsigned(sysc_regs_o.diag_cr_adr_o);
+ end if;
+ if sysc_regs_o.diag_dat_load_o = '1' then
+ diag_dat <= sysc_regs_o.diag_dat_o;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ sysc_regs_i.diag_cr_adr_i <= std_logic_vector(diag_adr);
+ GEN_DIAG_NODAT: if g_diag_rw_size = 0 and g_diag_ro_size = 0 generate
+ sysc_regs_i.diag_dat_i <= (others=>'0');
+ end generate;
+ GEN_DIAG_DAT: if g_diag_rw_size /= 0 or g_diag_ro_size /= 0 generate
+ sysc_regs_i.diag_dat_i <= diag_in(to_integer(diag_adr));
+ end generate;
+
+ -- Write request for each r/w register
+ GEN_DIAG_W: if g_diag_rw_size > 0 generate
+ GEN_LOOP: for I in 0 to g_diag_rw_size-1 generate
+
+ process(clk_sys_i)
+ begin
+ if rising_edge(clk_sys_i) then
+ if rst_n_i = '0' then
+ diag_out_regs(I) <= (others=>'0');
+ elsif sysc_regs_o.diag_cr_adr_load_o = '1' and sysc_regs_o.diag_cr_rw_o = '1' and
+ to_integer(unsigned(sysc_regs_o.diag_cr_adr_o)) = I then
+ diag_out_regs(I) <= diag_dat;
+ end if;
+ end if;
+ end process;
+
+ end generate;
+ end generate;
+
+ GEN_NODIAG_W: if g_diag_rw_size = 0 generate
+ diag_array_out <= (others=>(others=>'0'));
+ end generate;
+
+ ----------------------------------------
+ -- SYSCON
+ ----------------------------------------
+ SYSCON : entity work.wrc_syscon_wb
+ port map (
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => slave_i(0).adr(6 downto 2), -- shift address for word addressing
+ wb_dat_i => slave_i(0).dat,
+ wb_dat_o => slave_o(0).dat,
+ wb_cyc_i => slave_i(0).cyc,
+ wb_sel_i => slave_i(0).sel,
+ wb_stb_i => slave_i(0).stb,
+ wb_we_i => slave_i(0).we,
+ wb_ack_o => slave_o(0).ack,
+ wb_stall_o => slave_o(0).stall,
+ regs_i => sysc_regs_i,
+ regs_o => sysc_regs_o);
+
+ slave_o(0).err <= '0';
+ slave_o(0).rty <= '0';
+ slave_o(0).int <= '0';
+
+ --------------------------------------
+ -- UART
+ --------------------------------------
+ UART : xwb_simple_uart
+ generic map(
+ g_with_virtual_uart => g_virtual_uart,
+ g_with_physical_uart => g_phys_uart,
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_vuart_fifo_size => g_vuart_fifo_size
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+
+ -- Wishbone
+ slave_i => slave_i(1),
+ slave_o => slave_o(1),
+ desc_o => open,
+
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o
+ );
+
+ --------------------------------------
+ -- 1-WIRE
+ --------------------------------------
+ ONEWIRE : xwb_onewire_master
+ generic map(
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE,
+ g_num_ports => 2,
+ g_ow_btp_normal => "5.0",
+ g_ow_btp_overdrive => "1.0"
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+
+ -- Wishbone
+ slave_i => slave_i(2),
+ slave_o => slave_o(2),
+ desc_o => open,
+
+ owr_pwren_o => owr_pwren_o,
+ owr_en_o => owr_en_o,
+ owr_i => owr_i
+ );
+
+ --------------------------------------
+ -- WRPC Diags
+ --------------------------------------
+
+ -- access through WB (PCI/VME/application) to diagnostics of WRPC
+ DIAGS: xwr_diags_wb
+ generic map(
+ g_interface_mode => PIPELINED,
+ g_address_granularity => BYTE
+ )
+ port map(
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+
+ slave_i => slave_i(3),
+ slave_o => slave_o(3),
+
+ regs_i => wrpc_diag_regs_in,
+ regs_o => wrpc_diag_regs_out
+ );
+
+ -- the information written to syscon WB registers by LM32 are available to the
+ -- user via diag WB registers
+ -- It might look strange that we use two WB modules for that. Since both LM32
+ -- and user application need to access these registers through the same
+ -- wishbone interface we would needed these registers to be R/W. By creating
+ -- another module (xwr_diags_wb) we make read-only registers to be read by
+ -- the external tool. We want to minimize the possibility of user application
+ -- overwriting these values, thus we want them to be read-only.
+ sysc_regs_i.wdiag_ctrl_data_snapshot_i <= wrpc_diag_regs_out.ctrl_data_snapshot_o;
+ wrpc_diag_regs_in.ctrl_data_valid_i <= sysc_regs_o.wdiag_ctrl_data_valid_o;
+ wrpc_diag_regs_in.wdiag_sstat_wr_mode_i <= sysc_regs_o.wdiag_sstat_wr_mode_o;
+ wrpc_diag_regs_in.wdiag_sstat_servostate_i <= sysc_regs_o.wdiag_sstat_servostate_o;
+ wrpc_diag_regs_in.wdiag_pstat_link_i <= sysc_regs_o.wdiag_pstat_link_o;
+ wrpc_diag_regs_in.wdiag_pstat_locked_i <= sysc_regs_o.wdiag_pstat_locked_o;
+ wrpc_diag_regs_in.wdiag_ptpstat_ptpstate_i <= sysc_regs_o.wdiag_ptpstat_ptpstate_o;
+ wrpc_diag_regs_in.wdiag_astat_aux_i <= sysc_regs_o.wdiag_astat_aux_o;
+ wrpc_diag_regs_in.wdiag_txfcnt_i <= sysc_regs_o.wdiag_txfcnt_o;
+ wrpc_diag_regs_in.wdiag_rxfcnt_i <= sysc_regs_o.wdiag_rxfcnt_o;
+ wrpc_diag_regs_in.wdiag_sec_msb_i <= sysc_regs_o.wdiag_sec_msb_o;
+ wrpc_diag_regs_in.wdiag_sec_lsb_i <= sysc_regs_o.wdiag_sec_lsb_o;
+ wrpc_diag_regs_in.wdiag_ns_i <= sysc_regs_o.wdiag_ns_o;
+ wrpc_diag_regs_in.wdiag_mu_msb_i <= sysc_regs_o.wdiag_mu_msb_o;
+ wrpc_diag_regs_in.wdiag_mu_lsb_i <= sysc_regs_o.wdiag_mu_lsb_o;
+ wrpc_diag_regs_in.wdiag_dms_msb_i <= sysc_regs_o.wdiag_dms_msb_o;
+ wrpc_diag_regs_in.wdiag_dms_lsb_i <= sysc_regs_o.wdiag_dms_lsb_o;
+ wrpc_diag_regs_in.wdiag_asym_i <= sysc_regs_o.wdiag_asym_o;
+ wrpc_diag_regs_in.wdiag_cko_i <= sysc_regs_o.wdiag_cko_o;
+ wrpc_diag_regs_in.wdiag_setp_i <= sysc_regs_o.wdiag_setp_o;
+ wrpc_diag_regs_in.wdiag_ucnt_i <= sysc_regs_o.wdiag_ucnt_o;
+ wrpc_diag_regs_in.wdiag_temp_i <= sysc_regs_o.wdiag_temp_o;
+
+end struct;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd
new file mode 100644
index 000000000..9b33530ce
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_pkg.vhd
@@ -0,0 +1,253 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Core System Controller
+---------------------------------------------------------------------------------------
+-- File : wrc_syscon_pkg.vhd
+-- Author : auto-generated by wbgen2 from wrc_syscon_wb.wb
+-- Created : Mon Nov 27 13:37:56 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_syscon_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package sysc_wbgen2_pkg is
+
+
+ -- Input registers (user design -> WB slave)
+
+ type t_sysc_in_registers is record
+ gpsr_fmc_scl_i : std_logic;
+ gpsr_fmc_sda_i : std_logic;
+ gpsr_btn1_i : std_logic;
+ gpsr_btn2_i : std_logic;
+ gpsr_sfp_det_i : std_logic;
+ gpsr_sfp_scl_i : std_logic;
+ gpsr_sfp_sda_i : std_logic;
+ gpsr_spi_sclk_i : std_logic;
+ gpsr_spi_ncs_i : std_logic;
+ gpsr_spi_mosi_i : std_logic;
+ gpsr_spi_miso_i : std_logic;
+ hwfr_memsize_i : std_logic_vector(3 downto 0);
+ hwfr_storage_type_i : std_logic_vector(1 downto 0);
+ hwfr_storage_sec_i : std_logic_vector(15 downto 0);
+ hwir_name_i : std_logic_vector(31 downto 0);
+ sdbfs_baddr_i : std_logic_vector(31 downto 0);
+ tcr_tdiv_i : std_logic_vector(11 downto 0);
+ tvr_i : std_logic_vector(31 downto 0);
+ diag_info_ver_i : std_logic_vector(15 downto 0);
+ diag_info_id_i : std_logic_vector(15 downto 0);
+ diag_nw_rw_i : std_logic_vector(15 downto 0);
+ diag_nw_ro_i : std_logic_vector(15 downto 0);
+ diag_cr_adr_i : std_logic_vector(15 downto 0);
+ diag_dat_i : std_logic_vector(31 downto 0);
+ wdiag_ctrl_data_snapshot_i : std_logic;
+ end record;
+
+ constant c_sysc_in_registers_init_value: t_sysc_in_registers := (
+ gpsr_fmc_scl_i => '0',
+ gpsr_fmc_sda_i => '0',
+ gpsr_btn1_i => '0',
+ gpsr_btn2_i => '0',
+ gpsr_sfp_det_i => '0',
+ gpsr_sfp_scl_i => '0',
+ gpsr_sfp_sda_i => '0',
+ gpsr_spi_sclk_i => '0',
+ gpsr_spi_ncs_i => '0',
+ gpsr_spi_mosi_i => '0',
+ gpsr_spi_miso_i => '0',
+ hwfr_memsize_i => (others => '0'),
+ hwfr_storage_type_i => (others => '0'),
+ hwfr_storage_sec_i => (others => '0'),
+ hwir_name_i => (others => '0'),
+ sdbfs_baddr_i => (others => '0'),
+ tcr_tdiv_i => (others => '0'),
+ tvr_i => (others => '0'),
+ diag_info_ver_i => (others => '0'),
+ diag_info_id_i => (others => '0'),
+ diag_nw_rw_i => (others => '0'),
+ diag_nw_ro_i => (others => '0'),
+ diag_cr_adr_i => (others => '0'),
+ diag_dat_i => (others => '0'),
+ wdiag_ctrl_data_snapshot_i => '0'
+ );
+
+ -- Output registers (WB slave -> user design)
+
+ type t_sysc_out_registers is record
+ rstr_trig_o : std_logic_vector(27 downto 0);
+ rstr_trig_wr_o : std_logic;
+ rstr_rst_o : std_logic;
+ gpsr_led_stat_o : std_logic;
+ gpsr_led_link_o : std_logic;
+ gpsr_fmc_scl_o : std_logic;
+ gpsr_fmc_scl_load_o : std_logic;
+ gpsr_fmc_sda_o : std_logic;
+ gpsr_fmc_sda_load_o : std_logic;
+ gpsr_net_rst_o : std_logic;
+ gpsr_sfp_scl_o : std_logic;
+ gpsr_sfp_scl_load_o : std_logic;
+ gpsr_sfp_sda_o : std_logic;
+ gpsr_sfp_sda_load_o : std_logic;
+ gpsr_spi_sclk_o : std_logic;
+ gpsr_spi_sclk_load_o : std_logic;
+ gpsr_spi_ncs_o : std_logic;
+ gpsr_spi_ncs_load_o : std_logic;
+ gpsr_spi_mosi_o : std_logic;
+ gpsr_spi_mosi_load_o : std_logic;
+ gpcr_led_stat_o : std_logic;
+ gpcr_led_link_o : std_logic;
+ gpcr_fmc_scl_o : std_logic;
+ gpcr_fmc_sda_o : std_logic;
+ gpcr_sfp_scl_o : std_logic;
+ gpcr_sfp_sda_o : std_logic;
+ gpcr_spi_sclk_o : std_logic;
+ gpcr_spi_cs_o : std_logic;
+ gpcr_spi_mosi_o : std_logic;
+ tcr_enable_o : std_logic;
+ diag_cr_adr_o : std_logic_vector(15 downto 0);
+ diag_cr_adr_load_o : std_logic;
+ diag_cr_rw_o : std_logic;
+ diag_dat_o : std_logic_vector(31 downto 0);
+ diag_dat_load_o : std_logic;
+ wdiag_ctrl_data_valid_o : std_logic;
+ wdiag_sstat_wr_mode_o : std_logic;
+ wdiag_sstat_servostate_o : std_logic_vector(3 downto 0);
+ wdiag_pstat_link_o : std_logic;
+ wdiag_pstat_locked_o : std_logic;
+ wdiag_ptpstat_ptpstate_o : std_logic_vector(7 downto 0);
+ wdiag_astat_aux_o : std_logic_vector(7 downto 0);
+ wdiag_txfcnt_o : std_logic_vector(31 downto 0);
+ wdiag_rxfcnt_o : std_logic_vector(31 downto 0);
+ wdiag_sec_msb_o : std_logic_vector(31 downto 0);
+ wdiag_sec_lsb_o : std_logic_vector(31 downto 0);
+ wdiag_ns_o : std_logic_vector(31 downto 0);
+ wdiag_mu_msb_o : std_logic_vector(31 downto 0);
+ wdiag_mu_lsb_o : std_logic_vector(31 downto 0);
+ wdiag_dms_msb_o : std_logic_vector(31 downto 0);
+ wdiag_dms_lsb_o : std_logic_vector(31 downto 0);
+ wdiag_asym_o : std_logic_vector(31 downto 0);
+ wdiag_cko_o : std_logic_vector(31 downto 0);
+ wdiag_setp_o : std_logic_vector(31 downto 0);
+ wdiag_ucnt_o : std_logic_vector(31 downto 0);
+ wdiag_temp_o : std_logic_vector(31 downto 0);
+ end record;
+
+ constant c_sysc_out_registers_init_value: t_sysc_out_registers := (
+ rstr_trig_o => (others => '0'),
+ rstr_trig_wr_o => '0',
+ rstr_rst_o => '0',
+ gpsr_led_stat_o => '0',
+ gpsr_led_link_o => '0',
+ gpsr_fmc_scl_o => '0',
+ gpsr_fmc_scl_load_o => '0',
+ gpsr_fmc_sda_o => '0',
+ gpsr_fmc_sda_load_o => '0',
+ gpsr_net_rst_o => '0',
+ gpsr_sfp_scl_o => '0',
+ gpsr_sfp_scl_load_o => '0',
+ gpsr_sfp_sda_o => '0',
+ gpsr_sfp_sda_load_o => '0',
+ gpsr_spi_sclk_o => '0',
+ gpsr_spi_sclk_load_o => '0',
+ gpsr_spi_ncs_o => '0',
+ gpsr_spi_ncs_load_o => '0',
+ gpsr_spi_mosi_o => '0',
+ gpsr_spi_mosi_load_o => '0',
+ gpcr_led_stat_o => '0',
+ gpcr_led_link_o => '0',
+ gpcr_fmc_scl_o => '0',
+ gpcr_fmc_sda_o => '0',
+ gpcr_sfp_scl_o => '0',
+ gpcr_sfp_sda_o => '0',
+ gpcr_spi_sclk_o => '0',
+ gpcr_spi_cs_o => '0',
+ gpcr_spi_mosi_o => '0',
+ tcr_enable_o => '0',
+ diag_cr_adr_o => (others => '0'),
+ diag_cr_adr_load_o => '0',
+ diag_cr_rw_o => '0',
+ diag_dat_o => (others => '0'),
+ diag_dat_load_o => '0',
+ wdiag_ctrl_data_valid_o => '0',
+ wdiag_sstat_wr_mode_o => '0',
+ wdiag_sstat_servostate_o => (others => '0'),
+ wdiag_pstat_link_o => '0',
+ wdiag_pstat_locked_o => '0',
+ wdiag_ptpstat_ptpstate_o => (others => '0'),
+ wdiag_astat_aux_o => (others => '0'),
+ wdiag_txfcnt_o => (others => '0'),
+ wdiag_rxfcnt_o => (others => '0'),
+ wdiag_sec_msb_o => (others => '0'),
+ wdiag_sec_lsb_o => (others => '0'),
+ wdiag_ns_o => (others => '0'),
+ wdiag_mu_msb_o => (others => '0'),
+ wdiag_mu_lsb_o => (others => '0'),
+ wdiag_dms_msb_o => (others => '0'),
+ wdiag_dms_lsb_o => (others => '0'),
+ wdiag_asym_o => (others => '0'),
+ wdiag_cko_o => (others => '0'),
+ wdiag_setp_o => (others => '0'),
+ wdiag_ucnt_o => (others => '0'),
+ wdiag_temp_o => (others => '0')
+ );
+ function "or" (left, right: t_sysc_in_registers) return t_sysc_in_registers;
+ function f_x_to_zero (x:std_logic) return std_logic;
+ function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
+end package;
+
+package body sysc_wbgen2_pkg is
+function f_x_to_zero (x:std_logic) return std_logic is
+begin
+if x = '1' then
+return '1';
+else
+return '0';
+end if;
+end function;
+function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
+variable tmp: std_logic_vector(x'length-1 downto 0);
+begin
+for i in 0 to x'length-1 loop
+if x(i) = '1' then
+tmp(i):= '1';
+else
+tmp(i):= '0';
+end if;
+end loop;
+return tmp;
+end function;
+function "or" (left, right: t_sysc_in_registers) return t_sysc_in_registers is
+variable tmp: t_sysc_in_registers;
+begin
+tmp.gpsr_fmc_scl_i := f_x_to_zero(left.gpsr_fmc_scl_i) or f_x_to_zero(right.gpsr_fmc_scl_i);
+tmp.gpsr_fmc_sda_i := f_x_to_zero(left.gpsr_fmc_sda_i) or f_x_to_zero(right.gpsr_fmc_sda_i);
+tmp.gpsr_btn1_i := f_x_to_zero(left.gpsr_btn1_i) or f_x_to_zero(right.gpsr_btn1_i);
+tmp.gpsr_btn2_i := f_x_to_zero(left.gpsr_btn2_i) or f_x_to_zero(right.gpsr_btn2_i);
+tmp.gpsr_sfp_det_i := f_x_to_zero(left.gpsr_sfp_det_i) or f_x_to_zero(right.gpsr_sfp_det_i);
+tmp.gpsr_sfp_scl_i := f_x_to_zero(left.gpsr_sfp_scl_i) or f_x_to_zero(right.gpsr_sfp_scl_i);
+tmp.gpsr_sfp_sda_i := f_x_to_zero(left.gpsr_sfp_sda_i) or f_x_to_zero(right.gpsr_sfp_sda_i);
+tmp.gpsr_spi_sclk_i := f_x_to_zero(left.gpsr_spi_sclk_i) or f_x_to_zero(right.gpsr_spi_sclk_i);
+tmp.gpsr_spi_ncs_i := f_x_to_zero(left.gpsr_spi_ncs_i) or f_x_to_zero(right.gpsr_spi_ncs_i);
+tmp.gpsr_spi_mosi_i := f_x_to_zero(left.gpsr_spi_mosi_i) or f_x_to_zero(right.gpsr_spi_mosi_i);
+tmp.gpsr_spi_miso_i := f_x_to_zero(left.gpsr_spi_miso_i) or f_x_to_zero(right.gpsr_spi_miso_i);
+tmp.hwfr_memsize_i := f_x_to_zero(left.hwfr_memsize_i) or f_x_to_zero(right.hwfr_memsize_i);
+tmp.hwfr_storage_type_i := f_x_to_zero(left.hwfr_storage_type_i) or f_x_to_zero(right.hwfr_storage_type_i);
+tmp.hwfr_storage_sec_i := f_x_to_zero(left.hwfr_storage_sec_i) or f_x_to_zero(right.hwfr_storage_sec_i);
+tmp.hwir_name_i := f_x_to_zero(left.hwir_name_i) or f_x_to_zero(right.hwir_name_i);
+tmp.sdbfs_baddr_i := f_x_to_zero(left.sdbfs_baddr_i) or f_x_to_zero(right.sdbfs_baddr_i);
+tmp.tcr_tdiv_i := f_x_to_zero(left.tcr_tdiv_i) or f_x_to_zero(right.tcr_tdiv_i);
+tmp.tvr_i := f_x_to_zero(left.tvr_i) or f_x_to_zero(right.tvr_i);
+tmp.diag_info_ver_i := f_x_to_zero(left.diag_info_ver_i) or f_x_to_zero(right.diag_info_ver_i);
+tmp.diag_info_id_i := f_x_to_zero(left.diag_info_id_i) or f_x_to_zero(right.diag_info_id_i);
+tmp.diag_nw_rw_i := f_x_to_zero(left.diag_nw_rw_i) or f_x_to_zero(right.diag_nw_rw_i);
+tmp.diag_nw_ro_i := f_x_to_zero(left.diag_nw_ro_i) or f_x_to_zero(right.diag_nw_ro_i);
+tmp.diag_cr_adr_i := f_x_to_zero(left.diag_cr_adr_i) or f_x_to_zero(right.diag_cr_adr_i);
+tmp.diag_dat_i := f_x_to_zero(left.diag_dat_i) or f_x_to_zero(right.diag_dat_i);
+tmp.wdiag_ctrl_data_snapshot_i := f_x_to_zero(left.wdiag_ctrl_data_snapshot_i) or f_x_to_zero(right.wdiag_ctrl_data_snapshot_i);
+return tmp;
+end function;
+end package body;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd
new file mode 100644
index 000000000..82bfb0e66
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrc_syscon_wb.vhd
@@ -0,0 +1,975 @@
+---------------------------------------------------------------------------------------
+-- Title : Wishbone slave core for WR Core System Controller
+---------------------------------------------------------------------------------------
+-- File : wrc_syscon_wb.vhd
+-- Author : auto-generated by wbgen2 from wrc_syscon_wb.wb
+-- Created : Mon Nov 27 13:37:56 2017
+-- Standard : VHDL'87
+---------------------------------------------------------------------------------------
+-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE wrc_syscon_wb.wb
+-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
+---------------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.sysc_wbgen2_pkg.all;
+
+
+entity wrc_syscon_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ regs_i : in t_sysc_in_registers;
+ regs_o : out t_sysc_out_registers
+ );
+end wrc_syscon_wb;
+
+architecture syn of wrc_syscon_wb is
+
+signal sysc_rstr_rst_int : std_logic ;
+signal sysc_gpsr_led_stat_dly0 : std_logic ;
+signal sysc_gpsr_led_stat_int : std_logic ;
+signal sysc_gpsr_led_link_dly0 : std_logic ;
+signal sysc_gpsr_led_link_int : std_logic ;
+signal sysc_gpsr_net_rst_dly0 : std_logic ;
+signal sysc_gpsr_net_rst_int : std_logic ;
+signal sysc_gpcr_led_stat_dly0 : std_logic ;
+signal sysc_gpcr_led_stat_int : std_logic ;
+signal sysc_gpcr_led_link_dly0 : std_logic ;
+signal sysc_gpcr_led_link_int : std_logic ;
+signal sysc_gpcr_fmc_scl_dly0 : std_logic ;
+signal sysc_gpcr_fmc_scl_int : std_logic ;
+signal sysc_gpcr_fmc_sda_dly0 : std_logic ;
+signal sysc_gpcr_fmc_sda_int : std_logic ;
+signal sysc_gpcr_sfp_scl_dly0 : std_logic ;
+signal sysc_gpcr_sfp_scl_int : std_logic ;
+signal sysc_gpcr_sfp_sda_dly0 : std_logic ;
+signal sysc_gpcr_sfp_sda_int : std_logic ;
+signal sysc_gpcr_spi_sclk_dly0 : std_logic ;
+signal sysc_gpcr_spi_sclk_int : std_logic ;
+signal sysc_gpcr_spi_cs_dly0 : std_logic ;
+signal sysc_gpcr_spi_cs_int : std_logic ;
+signal sysc_gpcr_spi_mosi_dly0 : std_logic ;
+signal sysc_gpcr_spi_mosi_int : std_logic ;
+signal sysc_tcr_enable_int : std_logic ;
+signal sysc_diag_cr_rw_int : std_logic ;
+signal sysc_wdiag_ctrl_data_valid_int : std_logic ;
+signal sysc_wdiag_sstat_wr_mode_int : std_logic ;
+signal sysc_wdiag_sstat_servostate_int : std_logic_vector(3 downto 0);
+signal sysc_wdiag_pstat_link_int : std_logic ;
+signal sysc_wdiag_pstat_locked_int : std_logic ;
+signal sysc_wdiag_ptpstat_ptpstate_int : std_logic_vector(7 downto 0);
+signal sysc_wdiag_astat_aux_int : std_logic_vector(7 downto 0);
+signal sysc_wdiag_txfcnt_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_rxfcnt_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_sec_msb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_sec_lsb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_ns_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_mu_msb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_mu_lsb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_dms_msb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_dms_lsb_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_asym_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_cko_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_setp_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_ucnt_int : std_logic_vector(31 downto 0);
+signal sysc_wdiag_temp_int : std_logic_vector(31 downto 0);
+signal ack_sreg : std_logic_vector(9 downto 0);
+signal rddata_reg : std_logic_vector(31 downto 0);
+signal wrdata_reg : std_logic_vector(31 downto 0);
+signal rwaddr_reg : std_logic_vector(4 downto 0);
+signal ack_in_progress : std_logic ;
+
+begin
+-- Some internal signals assignments
+ wrdata_reg <= wb_dat_i;
+--
+-- Main register bank access process.
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ ack_sreg <= "0000000000";
+ ack_in_progress <= '0';
+ rddata_reg <= "00000000000000000000000000000000";
+ regs_o.rstr_trig_wr_o <= '0';
+ sysc_rstr_rst_int <= '0';
+ sysc_gpsr_led_stat_int <= '0';
+ sysc_gpsr_led_link_int <= '0';
+ regs_o.gpsr_fmc_scl_load_o <= '0';
+ regs_o.gpsr_fmc_sda_load_o <= '0';
+ sysc_gpsr_net_rst_int <= '0';
+ regs_o.gpsr_sfp_scl_load_o <= '0';
+ regs_o.gpsr_sfp_sda_load_o <= '0';
+ regs_o.gpsr_spi_sclk_load_o <= '0';
+ regs_o.gpsr_spi_ncs_load_o <= '0';
+ regs_o.gpsr_spi_mosi_load_o <= '0';
+ sysc_gpcr_led_stat_int <= '0';
+ sysc_gpcr_led_link_int <= '0';
+ sysc_gpcr_fmc_scl_int <= '0';
+ sysc_gpcr_fmc_sda_int <= '0';
+ sysc_gpcr_sfp_scl_int <= '0';
+ sysc_gpcr_sfp_sda_int <= '0';
+ sysc_gpcr_spi_sclk_int <= '0';
+ sysc_gpcr_spi_cs_int <= '0';
+ sysc_gpcr_spi_mosi_int <= '0';
+ sysc_tcr_enable_int <= '0';
+ regs_o.diag_cr_adr_load_o <= '0';
+ sysc_diag_cr_rw_int <= '0';
+ regs_o.diag_dat_load_o <= '0';
+ sysc_wdiag_ctrl_data_valid_int <= '0';
+ sysc_wdiag_sstat_wr_mode_int <= '0';
+ sysc_wdiag_sstat_servostate_int <= "0000";
+ sysc_wdiag_pstat_link_int <= '0';
+ sysc_wdiag_pstat_locked_int <= '0';
+ sysc_wdiag_ptpstat_ptpstate_int <= "00000000";
+ sysc_wdiag_astat_aux_int <= "00000000";
+ sysc_wdiag_txfcnt_int <= "00000000000000000000000000000000";
+ sysc_wdiag_rxfcnt_int <= "00000000000000000000000000000000";
+ sysc_wdiag_sec_msb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_sec_lsb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_ns_int <= "00000000000000000000000000000000";
+ sysc_wdiag_mu_msb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_mu_lsb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_dms_msb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_dms_lsb_int <= "00000000000000000000000000000000";
+ sysc_wdiag_asym_int <= "00000000000000000000000000000000";
+ sysc_wdiag_cko_int <= "00000000000000000000000000000000";
+ sysc_wdiag_setp_int <= "00000000000000000000000000000000";
+ sysc_wdiag_ucnt_int <= "00000000000000000000000000000000";
+ sysc_wdiag_temp_int <= "00000000000000000000000000000000";
+ elsif rising_edge(clk_sys_i) then
+-- advance the ACK generator shift register
+ ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
+ ack_sreg(9) <= '0';
+ if (ack_in_progress = '1') then
+ if (ack_sreg(0) = '1') then
+ regs_o.rstr_trig_wr_o <= '0';
+ sysc_gpsr_led_stat_int <= '0';
+ sysc_gpsr_led_link_int <= '0';
+ regs_o.gpsr_fmc_scl_load_o <= '0';
+ regs_o.gpsr_fmc_sda_load_o <= '0';
+ sysc_gpsr_net_rst_int <= '0';
+ regs_o.gpsr_sfp_scl_load_o <= '0';
+ regs_o.gpsr_sfp_sda_load_o <= '0';
+ regs_o.gpsr_spi_sclk_load_o <= '0';
+ regs_o.gpsr_spi_ncs_load_o <= '0';
+ regs_o.gpsr_spi_mosi_load_o <= '0';
+ sysc_gpcr_led_stat_int <= '0';
+ sysc_gpcr_led_link_int <= '0';
+ sysc_gpcr_fmc_scl_int <= '0';
+ sysc_gpcr_fmc_sda_int <= '0';
+ sysc_gpcr_sfp_scl_int <= '0';
+ sysc_gpcr_sfp_sda_int <= '0';
+ sysc_gpcr_spi_sclk_int <= '0';
+ sysc_gpcr_spi_cs_int <= '0';
+ sysc_gpcr_spi_mosi_int <= '0';
+ regs_o.diag_cr_adr_load_o <= '0';
+ regs_o.diag_dat_load_o <= '0';
+ ack_in_progress <= '0';
+ else
+ regs_o.rstr_trig_wr_o <= '0';
+ regs_o.gpsr_fmc_scl_load_o <= '0';
+ regs_o.gpsr_fmc_sda_load_o <= '0';
+ regs_o.gpsr_sfp_scl_load_o <= '0';
+ regs_o.gpsr_sfp_sda_load_o <= '0';
+ regs_o.gpsr_spi_sclk_load_o <= '0';
+ regs_o.gpsr_spi_ncs_load_o <= '0';
+ regs_o.gpsr_spi_mosi_load_o <= '0';
+ regs_o.diag_cr_adr_load_o <= '0';
+ regs_o.diag_dat_load_o <= '0';
+ end if;
+ else
+ if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
+ case rwaddr_reg(4 downto 0) is
+ when "00000" =>
+ if (wb_we_i = '1') then
+ regs_o.rstr_trig_wr_o <= '1';
+ sysc_rstr_rst_int <= wrdata_reg(28);
+ end if;
+ rddata_reg(28) <= sysc_rstr_rst_int;
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00001" =>
+ if (wb_we_i = '1') then
+ sysc_gpsr_led_stat_int <= wrdata_reg(0);
+ sysc_gpsr_led_link_int <= wrdata_reg(1);
+ regs_o.gpsr_fmc_scl_load_o <= '1';
+ regs_o.gpsr_fmc_sda_load_o <= '1';
+ sysc_gpsr_net_rst_int <= wrdata_reg(4);
+ regs_o.gpsr_sfp_scl_load_o <= '1';
+ regs_o.gpsr_sfp_sda_load_o <= '1';
+ regs_o.gpsr_spi_sclk_load_o <= '1';
+ regs_o.gpsr_spi_ncs_load_o <= '1';
+ regs_o.gpsr_spi_mosi_load_o <= '1';
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= '0';
+ rddata_reg(2) <= regs_i.gpsr_fmc_scl_i;
+ rddata_reg(3) <= regs_i.gpsr_fmc_sda_i;
+ rddata_reg(4) <= '0';
+ rddata_reg(5) <= regs_i.gpsr_btn1_i;
+ rddata_reg(6) <= regs_i.gpsr_btn2_i;
+ rddata_reg(7) <= regs_i.gpsr_sfp_det_i;
+ rddata_reg(8) <= regs_i.gpsr_sfp_scl_i;
+ rddata_reg(9) <= regs_i.gpsr_sfp_sda_i;
+ rddata_reg(10) <= regs_i.gpsr_spi_sclk_i;
+ rddata_reg(11) <= regs_i.gpsr_spi_ncs_i;
+ rddata_reg(12) <= regs_i.gpsr_spi_mosi_i;
+ rddata_reg(13) <= regs_i.gpsr_spi_miso_i;
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "00010" =>
+ if (wb_we_i = '1') then
+ sysc_gpcr_led_stat_int <= wrdata_reg(0);
+ sysc_gpcr_led_link_int <= wrdata_reg(1);
+ sysc_gpcr_fmc_scl_int <= wrdata_reg(2);
+ sysc_gpcr_fmc_sda_int <= wrdata_reg(3);
+ sysc_gpcr_sfp_scl_int <= wrdata_reg(8);
+ sysc_gpcr_sfp_sda_int <= wrdata_reg(9);
+ sysc_gpcr_spi_sclk_int <= wrdata_reg(10);
+ sysc_gpcr_spi_cs_int <= wrdata_reg(11);
+ sysc_gpcr_spi_mosi_int <= wrdata_reg(12);
+ end if;
+ rddata_reg(0) <= '0';
+ rddata_reg(1) <= '0';
+ rddata_reg(2) <= '0';
+ rddata_reg(3) <= '0';
+ rddata_reg(8) <= '0';
+ rddata_reg(9) <= '0';
+ rddata_reg(10) <= '0';
+ rddata_reg(11) <= '0';
+ rddata_reg(12) <= '0';
+ rddata_reg(0) <= 'X';
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(2) <= '1';
+ ack_in_progress <= '1';
+ when "00011" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(3 downto 0) <= regs_i.hwfr_memsize_i;
+ rddata_reg(9 downto 8) <= regs_i.hwfr_storage_type_i;
+ rddata_reg(31 downto 16) <= regs_i.hwfr_storage_sec_i;
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00100" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.hwir_name_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00101" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.sdbfs_baddr_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00110" =>
+ if (wb_we_i = '1') then
+ sysc_tcr_enable_int <= wrdata_reg(31);
+ end if;
+ rddata_reg(11 downto 0) <= regs_i.tcr_tdiv_i;
+ rddata_reg(31) <= sysc_tcr_enable_int;
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "00111" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.tvr_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01000" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.diag_info_ver_i;
+ rddata_reg(31 downto 16) <= regs_i.diag_info_id_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01001" =>
+ if (wb_we_i = '1') then
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.diag_nw_rw_i;
+ rddata_reg(31 downto 16) <= regs_i.diag_nw_ro_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01010" =>
+ if (wb_we_i = '1') then
+ regs_o.diag_cr_adr_load_o <= '1';
+ sysc_diag_cr_rw_int <= wrdata_reg(31);
+ end if;
+ rddata_reg(15 downto 0) <= regs_i.diag_cr_adr_i;
+ rddata_reg(31) <= sysc_diag_cr_rw_int;
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01011" =>
+ if (wb_we_i = '1') then
+ regs_o.diag_dat_load_o <= '1';
+ end if;
+ rddata_reg(31 downto 0) <= regs_i.diag_dat_i;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01100" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_ctrl_data_valid_int <= wrdata_reg(0);
+ end if;
+ rddata_reg(0) <= sysc_wdiag_ctrl_data_valid_int;
+ rddata_reg(8) <= regs_i.wdiag_ctrl_data_snapshot_i;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01101" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_sstat_wr_mode_int <= wrdata_reg(0);
+ sysc_wdiag_sstat_servostate_int <= wrdata_reg(11 downto 8);
+ end if;
+ rddata_reg(0) <= sysc_wdiag_sstat_wr_mode_int;
+ rddata_reg(11 downto 8) <= sysc_wdiag_sstat_servostate_int;
+ rddata_reg(1) <= 'X';
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01110" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_pstat_link_int <= wrdata_reg(0);
+ sysc_wdiag_pstat_locked_int <= wrdata_reg(1);
+ end if;
+ rddata_reg(0) <= sysc_wdiag_pstat_link_int;
+ rddata_reg(1) <= sysc_wdiag_pstat_locked_int;
+ rddata_reg(2) <= 'X';
+ rddata_reg(3) <= 'X';
+ rddata_reg(4) <= 'X';
+ rddata_reg(5) <= 'X';
+ rddata_reg(6) <= 'X';
+ rddata_reg(7) <= 'X';
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "01111" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_ptpstat_ptpstate_int <= wrdata_reg(7 downto 0);
+ end if;
+ rddata_reg(7 downto 0) <= sysc_wdiag_ptpstat_ptpstate_int;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10000" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_astat_aux_int <= wrdata_reg(7 downto 0);
+ end if;
+ rddata_reg(7 downto 0) <= sysc_wdiag_astat_aux_int;
+ rddata_reg(8) <= 'X';
+ rddata_reg(9) <= 'X';
+ rddata_reg(10) <= 'X';
+ rddata_reg(11) <= 'X';
+ rddata_reg(12) <= 'X';
+ rddata_reg(13) <= 'X';
+ rddata_reg(14) <= 'X';
+ rddata_reg(15) <= 'X';
+ rddata_reg(16) <= 'X';
+ rddata_reg(17) <= 'X';
+ rddata_reg(18) <= 'X';
+ rddata_reg(19) <= 'X';
+ rddata_reg(20) <= 'X';
+ rddata_reg(21) <= 'X';
+ rddata_reg(22) <= 'X';
+ rddata_reg(23) <= 'X';
+ rddata_reg(24) <= 'X';
+ rddata_reg(25) <= 'X';
+ rddata_reg(26) <= 'X';
+ rddata_reg(27) <= 'X';
+ rddata_reg(28) <= 'X';
+ rddata_reg(29) <= 'X';
+ rddata_reg(30) <= 'X';
+ rddata_reg(31) <= 'X';
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10001" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_txfcnt_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_txfcnt_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10010" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_rxfcnt_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_rxfcnt_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10011" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_sec_msb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_sec_msb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10100" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_sec_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_sec_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10101" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_ns_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_ns_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10110" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_mu_msb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_mu_msb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "10111" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_mu_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_mu_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11000" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_dms_msb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_dms_msb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11001" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_dms_lsb_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_dms_lsb_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11010" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_asym_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_asym_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11011" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_cko_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_cko_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11100" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_setp_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_setp_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11101" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_ucnt_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_ucnt_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when "11110" =>
+ if (wb_we_i = '1') then
+ sysc_wdiag_temp_int <= wrdata_reg(31 downto 0);
+ end if;
+ rddata_reg(31 downto 0) <= sysc_wdiag_temp_int;
+ ack_sreg(0) <= '1';
+ ack_in_progress <= '1';
+ when others =>
+-- prevent the slave from hanging the bus on invalid address
+ ack_in_progress <= '1';
+ ack_sreg(0) <= '1';
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+-- Drive the data output bus
+ wb_dat_o <= rddata_reg;
+-- Reset trigger
+-- pass-through field: Reset trigger in register: Syscon reset register
+ regs_o.rstr_trig_o <= wrdata_reg(27 downto 0);
+-- Reset line state value
+ regs_o.rstr_rst_o <= sysc_rstr_rst_int;
+-- Status LED
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpsr_led_stat_dly0 <= '0';
+ regs_o.gpsr_led_stat_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpsr_led_stat_dly0 <= sysc_gpsr_led_stat_int;
+ regs_o.gpsr_led_stat_o <= sysc_gpsr_led_stat_int and (not sysc_gpsr_led_stat_dly0);
+ end if;
+ end process;
+
+
+-- Link LED
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpsr_led_link_dly0 <= '0';
+ regs_o.gpsr_led_link_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpsr_led_link_dly0 <= sysc_gpsr_led_link_int;
+ regs_o.gpsr_led_link_o <= sysc_gpsr_led_link_int and (not sysc_gpsr_led_link_dly0);
+ end if;
+ end process;
+
+
+-- FMC I2C bitbanged SCL
+ regs_o.gpsr_fmc_scl_o <= wrdata_reg(2);
+-- FMC I2C bitbanged SDA
+ regs_o.gpsr_fmc_sda_o <= wrdata_reg(3);
+-- Network AP reset
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpsr_net_rst_dly0 <= '0';
+ regs_o.gpsr_net_rst_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpsr_net_rst_dly0 <= sysc_gpsr_net_rst_int;
+ regs_o.gpsr_net_rst_o <= sysc_gpsr_net_rst_int and (not sysc_gpsr_net_rst_dly0);
+ end if;
+ end process;
+
+
+-- SPEC Pushbutton 1 state
+-- SPEC Pushbutton 2 state
+-- SFP detect (MOD_DEF0 signal)
+-- SFP I2C bitbanged SCL
+ regs_o.gpsr_sfp_scl_o <= wrdata_reg(8);
+-- SFP I2C bitbanged SDA
+ regs_o.gpsr_sfp_sda_o <= wrdata_reg(9);
+-- SPI bitbanged SCLK
+ regs_o.gpsr_spi_sclk_o <= wrdata_reg(10);
+-- SPI bitbanged NCS
+ regs_o.gpsr_spi_ncs_o <= wrdata_reg(11);
+-- SPI bitbanged MOSI
+ regs_o.gpsr_spi_mosi_o <= wrdata_reg(12);
+-- SPI bitbanged MISO
+-- Status LED
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_led_stat_dly0 <= '0';
+ regs_o.gpcr_led_stat_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_led_stat_dly0 <= sysc_gpcr_led_stat_int;
+ regs_o.gpcr_led_stat_o <= sysc_gpcr_led_stat_int and (not sysc_gpcr_led_stat_dly0);
+ end if;
+ end process;
+
+
+-- Link LED
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_led_link_dly0 <= '0';
+ regs_o.gpcr_led_link_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_led_link_dly0 <= sysc_gpcr_led_link_int;
+ regs_o.gpcr_led_link_o <= sysc_gpcr_led_link_int and (not sysc_gpcr_led_link_dly0);
+ end if;
+ end process;
+
+
+-- FMC I2C bitbanged SCL
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_fmc_scl_dly0 <= '0';
+ regs_o.gpcr_fmc_scl_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_fmc_scl_dly0 <= sysc_gpcr_fmc_scl_int;
+ regs_o.gpcr_fmc_scl_o <= sysc_gpcr_fmc_scl_int and (not sysc_gpcr_fmc_scl_dly0);
+ end if;
+ end process;
+
+
+-- FMC I2C bitbanged SDA
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_fmc_sda_dly0 <= '0';
+ regs_o.gpcr_fmc_sda_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_fmc_sda_dly0 <= sysc_gpcr_fmc_sda_int;
+ regs_o.gpcr_fmc_sda_o <= sysc_gpcr_fmc_sda_int and (not sysc_gpcr_fmc_sda_dly0);
+ end if;
+ end process;
+
+
+-- SFP I2C bitbanged SCL
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_sfp_scl_dly0 <= '0';
+ regs_o.gpcr_sfp_scl_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_sfp_scl_dly0 <= sysc_gpcr_sfp_scl_int;
+ regs_o.gpcr_sfp_scl_o <= sysc_gpcr_sfp_scl_int and (not sysc_gpcr_sfp_scl_dly0);
+ end if;
+ end process;
+
+
+-- FMC I2C bitbanged SDA
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_sfp_sda_dly0 <= '0';
+ regs_o.gpcr_sfp_sda_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_sfp_sda_dly0 <= sysc_gpcr_sfp_sda_int;
+ regs_o.gpcr_sfp_sda_o <= sysc_gpcr_sfp_sda_int and (not sysc_gpcr_sfp_sda_dly0);
+ end if;
+ end process;
+
+
+-- SPI bitbanged SCLK
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_spi_sclk_dly0 <= '0';
+ regs_o.gpcr_spi_sclk_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_spi_sclk_dly0 <= sysc_gpcr_spi_sclk_int;
+ regs_o.gpcr_spi_sclk_o <= sysc_gpcr_spi_sclk_int and (not sysc_gpcr_spi_sclk_dly0);
+ end if;
+ end process;
+
+
+-- SPI bitbanged CS
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_spi_cs_dly0 <= '0';
+ regs_o.gpcr_spi_cs_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_spi_cs_dly0 <= sysc_gpcr_spi_cs_int;
+ regs_o.gpcr_spi_cs_o <= sysc_gpcr_spi_cs_int and (not sysc_gpcr_spi_cs_dly0);
+ end if;
+ end process;
+
+
+-- SPI bitbanged MOSI
+ process (clk_sys_i, rst_n_i)
+ begin
+ if (rst_n_i = '0') then
+ sysc_gpcr_spi_mosi_dly0 <= '0';
+ regs_o.gpcr_spi_mosi_o <= '0';
+ elsif rising_edge(clk_sys_i) then
+ sysc_gpcr_spi_mosi_dly0 <= sysc_gpcr_spi_mosi_int;
+ regs_o.gpcr_spi_mosi_o <= sysc_gpcr_spi_mosi_int and (not sysc_gpcr_spi_mosi_dly0);
+ end if;
+ end process;
+
+
+-- Memory size
+-- Storage type
+-- Storage sector size
+-- Board name
+-- Base address
+-- Timer Divider
+-- Timer Enable
+ regs_o.tcr_enable_o <= sysc_tcr_enable_int;
+-- Timer Counter Value
+-- Ver
+-- Id
+-- Read/write words
+-- Read-only words
+-- Address
+ regs_o.diag_cr_adr_o <= wrdata_reg(15 downto 0);
+-- R/W
+ regs_o.diag_cr_rw_o <= sysc_diag_cr_rw_int;
+-- Data
+ regs_o.diag_dat_o <= wrdata_reg(31 downto 0);
+-- WR DIAG data valid
+ regs_o.wdiag_ctrl_data_valid_o <= sysc_wdiag_ctrl_data_valid_int;
+-- WR DIAG data snapshot
+-- WR valid
+ regs_o.wdiag_sstat_wr_mode_o <= sysc_wdiag_sstat_wr_mode_int;
+-- Servo State
+ regs_o.wdiag_sstat_servostate_o <= sysc_wdiag_sstat_servostate_int;
+-- Link Status
+ regs_o.wdiag_pstat_link_o <= sysc_wdiag_pstat_link_int;
+-- PLL Locked
+ regs_o.wdiag_pstat_locked_o <= sysc_wdiag_pstat_locked_int;
+-- PTP State
+ regs_o.wdiag_ptpstat_ptpstate_o <= sysc_wdiag_ptpstat_ptpstate_int;
+-- AUX channel
+ regs_o.wdiag_astat_aux_o <= sysc_wdiag_astat_aux_int;
+-- Data
+ regs_o.wdiag_txfcnt_o <= sysc_wdiag_txfcnt_int;
+-- Data
+ regs_o.wdiag_rxfcnt_o <= sysc_wdiag_rxfcnt_int;
+-- Data
+ regs_o.wdiag_sec_msb_o <= sysc_wdiag_sec_msb_int;
+-- Data
+ regs_o.wdiag_sec_lsb_o <= sysc_wdiag_sec_lsb_int;
+-- Data
+ regs_o.wdiag_ns_o <= sysc_wdiag_ns_int;
+-- Data
+ regs_o.wdiag_mu_msb_o <= sysc_wdiag_mu_msb_int;
+-- Data
+ regs_o.wdiag_mu_lsb_o <= sysc_wdiag_mu_lsb_int;
+-- Data
+ regs_o.wdiag_dms_msb_o <= sysc_wdiag_dms_msb_int;
+-- Data
+ regs_o.wdiag_dms_lsb_o <= sysc_wdiag_dms_lsb_int;
+-- Data
+ regs_o.wdiag_asym_o <= sysc_wdiag_asym_int;
+-- Data
+ regs_o.wdiag_cko_o <= sysc_wdiag_cko_int;
+-- Data
+ regs_o.wdiag_setp_o <= sysc_wdiag_setp_int;
+-- Data
+ regs_o.wdiag_ucnt_o <= sysc_wdiag_ucnt_int;
+-- Data
+ regs_o.wdiag_temp_o <= sysc_wdiag_temp_int;
+ rwaddr_reg <= wb_adr_i;
+ wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
+-- ACK signal generation. Just pass the LSB of ACK counter.
+ wb_ack_o <= ack_sreg(0);
+end syn;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd
new file mode 100644
index 000000000..a16166cfe
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/wrcore_pkg.vhd
@@ -0,0 +1,769 @@
+-------------------------------------------------------------------------------
+-- Title : WhiteRabbit PTP Core
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : wrcore_pkg.vhd
+-- Author : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2011-05-11
+-- Last update: 2017-05-29
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+use work.sysc_wbgen2_pkg.all;
+use work.wrc_diags_wbgen2_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.endpoint_pkg.all;
+use work.softpll_pkg.all;
+
+package wrcore_pkg is
+
+ function f_refclk_rate(pcs_16 : boolean) return integer;
+
+ type t_generic_word_array is array (natural range <>) of std_logic_vector(31 downto 0);
+
+ -----------------------------------------------------------------------------
+ --PPS generator
+ -----------------------------------------------------------------------------
+ constant c_xwr_pps_gen_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"de0d8ced",
+ version => x"00000001",
+ date => x"20120305",
+ name => "WR-PPS-Generator ")));
+
+ component xwr_pps_gen is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_ref_clock_rate : integer;
+ g_ext_clock_rate : integer;
+ g_with_ext_clock_input : boolean
+ );
+ port (
+ clk_ref_i : in std_logic;
+ clk_sys_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ link_ok_i : in std_logic;
+ pps_in_i : in std_logic;
+ pps_csync_o : out std_logic;
+ pps_out_o : out std_logic;
+ pps_led_o : out std_logic;
+ pps_valid_o : out std_logic;
+ tm_utc_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ tm_time_valid_o : out std_logic
+ );
+ end component;
+
+ -----------------------------------------------------------------------------
+ --Mini NIC
+ -----------------------------------------------------------------------------
+ constant c_xwr_mini_nic_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"ab28633a",
+ version => x"00000001",
+ date => x"20120305",
+ name => "WR-Mini-NIC ")));
+
+ component xwr_mini_nic
+ generic (
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity;
+ g_tx_fifo_size : integer;
+ g_rx_fifo_size : integer;
+ g_buffer_little_endian : boolean);
+ port (
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ src_o : out t_wrf_source_out;
+ src_i : in t_wrf_source_in;
+ snk_o : out t_wrf_sink_out;
+ snk_i : in t_wrf_sink_in;
+ txtsu_port_id_i : in std_logic_vector(4 downto 0);
+ txtsu_frame_id_i : in std_logic_vector(16 - 1 downto 0);
+ txtsu_tsval_i : in std_logic_vector(28 + 4 - 1 downto 0);
+ txtsu_tsincorrect_i : in std_logic;
+ txtsu_stb_i : in std_logic;
+ txtsu_ack_o : out std_logic;
+ wb_i : in t_wishbone_slave_in;
+ wb_o : out t_wishbone_slave_out);
+ end component;
+
+ -----------------------------------------------------------------------------
+ -- PERIPHERIALS
+ -----------------------------------------------------------------------------
+ component xwr_diags_wb is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD
+ );
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ regs_i : in t_wrc_diags_in_registers;
+ regs_o : out t_wrc_diags_out_registers
+ );
+ end component;
+
+ constant c_wrc_periph0_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"ff07fc47",
+ version => x"00000001",
+ date => x"20120305",
+ name => "WR-Periph-Syscon ")));
+
+ constant c_wrc_periph1_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"e2d13d04",
+ version => x"00000001",
+ date => x"20120305",
+ name => "WR-Periph-UART ")));
+
+ constant c_wrc_periph2_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"779c5443",
+ version => x"00000001",
+ date => x"20120305",
+ name => "WR-Periph-1Wire ")));
+
+
+ constant c_wrc_periph3_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"779c5445",
+ version => x"00000001",
+ date => x"20120615",
+ name => "WR-Periph-AuxWB ")));
+
+ constant c_wrc_periph4_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"779c5446",
+ version => x"00000001",
+ date => x"20170424",
+ name => "WR-Periph-WRPC-DIAG")));
+
+ component wrc_periph is
+ generic(
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 64;
+ g_flash_sdbfs_baddr : integer := 16#2e0000#;
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := false;
+ g_cntr_period : integer := 62500;
+ g_mem_words : integer := 16384;
+ g_vuart_fifo_size : integer := 1024;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0
+ );
+ port(
+ clk_sys_i : in std_logic;
+ rst_n_i : in std_logic;
+ rst_net_n_o : out std_logic;
+ rst_wrc_n_o : out std_logic;
+ led_red_o : out std_logic;
+ led_green_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic;
+ sda_o : out std_logic;
+ sda_i : in std_logic;
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic;
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic;
+ sfp_det_i : in std_logic;
+ memsize_i : in std_logic_vector(3 downto 0);
+ btn1_i : in std_logic;
+ btn2_i : in std_logic;
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic;
+ slave_i : in t_wishbone_slave_in_array(0 to 3);
+ slave_o : out t_wishbone_slave_out_array(0 to 3);
+ uart_rxd_i : in std_logic;
+ uart_txd_o : out std_logic;
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0);
+ diag_array_in : in t_generic_word_array(g_diag_ro_size-1 downto 0);
+ diag_array_out : out t_generic_word_array(g_diag_rw_size-1 downto 0)
+ );
+ end component;
+
+ -----------------------------------------------------------------------------
+ -- Soft-PLL
+ -----------------------------------------------------------------------------
+ constant c_xwr_softpll_ng_sdb : t_sdb_device := (
+ abi_class => x"0000", -- undocumented device
+ abi_ver_major => x"01",
+ abi_ver_minor => x"01",
+ wbd_endian => c_sdb_endian_big,
+ wbd_width => x"7", -- 8/16/32-bit port granularity
+ sdb_component => (
+ addr_first => x"0000000000000000",
+ addr_last => x"00000000000000ff",
+ product => (
+ vendor_id => x"000000000000CE42", -- CERN
+ device_id => x"65158dc0",
+ version => x"00000002",
+ date => x"20120305",
+ name => "WR-Soft-PLL ")));
+
+ component xwr_softpll_ng
+ generic (
+ g_tag_bits : integer;
+ g_num_ref_inputs : integer;
+ g_num_outputs : integer;
+ g_with_debug_fifo : boolean;
+ g_with_ext_clock_input : boolean;
+ g_reverse_dmtds : boolean;
+ g_divide_input_by_2 : boolean;
+ g_ref_clock_rate : integer;
+ g_ext_clock_rate : integer;
+ g_interface_mode : t_wishbone_interface_mode;
+ g_address_granularity : t_wishbone_address_granularity);
+ port (
+ clk_sys_i : in std_logic;
+ rst_sys_n_i : in std_logic;
+ rst_ref_n_i : in std_logic;
+ rst_ext_n_i : in std_logic;
+ rst_dmtd_n_i : in std_logic;
+ clk_ref_i : in std_logic_vector(g_num_ref_inputs-1 downto 0);
+ clk_fb_i : in std_logic_vector(g_num_outputs-1 downto 0);
+ clk_dmtd_i : in std_logic;
+ clk_ext_i : in std_logic;
+ clk_ext_mul_i : in std_logic;
+ clk_ext_mul_locked_i : in std_logic;
+ clk_ext_stopped_i : in std_logic;
+ clk_ext_rst_o : out std_logic;
+ pps_csync_p1_i : in std_logic;
+ pps_ext_a_i : in std_logic;
+ dac_dmtd_data_o : out std_logic_vector(15 downto 0);
+ dac_dmtd_load_o : out std_logic;
+ dac_out_data_o : out std_logic_vector(15 downto 0);
+ dac_out_sel_o : out std_logic_vector(3 downto 0);
+ dac_out_load_o : out std_logic;
+ out_enable_i : in std_logic_vector(g_num_outputs-1 downto 0);
+ out_locked_o : out std_logic_vector(g_num_outputs-1 downto 0);
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+ debug_o : out std_logic_vector(5 downto 0);
+ dbg_fifo_irq_o : out std_logic);
+ end component;
+
+ constant cc_unused_master_in : t_wishbone_master_in :=
+ ('1', '0', '0', '0', '0', cc_dummy_data);
+
+ -----------------------------------------------------------------------------
+ -- Public WR component definitions
+ -----------------------------------------------------------------------------
+ component xwr_core is
+ generic(
+ g_simulation : integer := 0;
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128)
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128)
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := true;
+ g_with_external_clock_input : boolean := true;
+ g_aux_clks : integer := 0;
+ g_ep_rxbuf_size : integer := 1024;
+ g_tx_runt_padding : boolean := true;
+ g_dpram_initf : string := "default";
+ g_dpram_size : integer := 131072/4; --in 32-bit words
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := false;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0);
+ port(
+ clk_sys_i : in std_logic;
+ clk_dmtd_i : in std_logic := '0';
+ clk_ref_i : in std_logic;
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+ clk_ext_i : in std_logic := '0';
+ pps_ext_i : in std_logic := '0';
+ rst_n_i : in std_logic;
+
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+ -----------------------------------------
+ -- PHY I/f
+ -----------------------------------------
+ phy_ref_clk_i : in std_logic := '0';
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic := '0';
+ phy_tx_enc_err_i : in std_logic := '0';
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_rbclk_i : in std_logic := '0';
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_enc_err_i : in std_logic := '0';
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rst_o : out std_logic;
+ phy_rdy_i : in std_logic := '1';
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+ -----------------------------------------
+ -- PHY I/f - record-based
+ -- selection done with g_records_for_phy
+ -----------------------------------------
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic := 'H';
+ sda_o : out std_logic;
+ sda_i : in std_logic := 'H';
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := 'H';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := 'H';
+ sfp_det_i : in std_logic := '1';
+ btn1_i : in std_logic := 'H';
+ btn2_i : in std_logic := 'H';
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+
+ uart_rxd_i : in std_logic := 'H';
+ uart_txd_o : out std_logic;
+
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := "HH";
+
+ slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_unused_master_in;
+
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ tm_link_up_o : out std_logic;
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ rst_aux_n_o : out std_logic;
+
+ link_ok_o : out std_logic;
+
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0)
+ );
+ end component;
+
+ component wr_core is
+ generic(
+ --if set to 1, then blocks in PCS use smaller calibration counter to speed
+ --up simulation
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := true;
+ --
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128)
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128)
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := true;
+ g_aux_clks : integer := 0;
+ g_rx_buffer_size : integer := 1024;
+ g_tx_runt_padding : boolean := true;
+ g_dpram_initf : string := "default";
+ g_dpram_size : integer := 131072/4; --in 32-bit words
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := false;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0);
+ port(
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+
+ -- system reference clock (any frequency <= f(clk_ref_i))
+ clk_sys_i : in std_logic;
+
+ -- DDMTD offset clock (125.x MHz)
+ clk_dmtd_i : in std_logic := '0';
+
+ -- Timing reference (125 MHz)
+ clk_ref_i : in std_logic;
+
+ -- Aux clocks (i.e. the FMC clock), which can be disciplined by the WR Core
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+
+ -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode
+ clk_ext_i : in std_logic := '0';
+
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+ -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode
+ pps_ext_i : in std_logic := '0';
+
+ rst_n_i : in std_logic;
+
+ -----------------------------------------
+ --Timing system
+ -----------------------------------------
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+
+ -----------------------------------------
+ -- PHY I/f
+ -----------------------------------------
+ phy_ref_clk_i : in std_logic;
+
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic := '0';
+ phy_tx_enc_err_i : in std_logic := '0';
+
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+ phy_rx_rbclk_i : in std_logic := '0';
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0):= (others=>'0');
+ phy_rx_enc_err_i : in std_logic := '0';
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0) := (others=>'0');
+
+ phy_rst_o : out std_logic;
+ phy_rdy_i : in std_logic := '1';
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+ -----------------------------------------
+ -- PHY I/f - record-based
+ -- selection done with g_records_for_phy
+ -----------------------------------------
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+
+ -----------------------------------------
+ --GPIO
+ -----------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic := '1';
+ sda_o : out std_logic;
+ sda_i : in std_logic := '1';
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := '1';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := '1';
+ sfp_det_i : in std_logic := '1';
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+
+ -----------------------------------------
+ --UART
+ -----------------------------------------
+ uart_rxd_i : in std_logic := '0';
+ uart_txd_o : out std_logic;
+
+ -----------------------------------------
+ -- 1-wire
+ -----------------------------------------
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := (others => '1');
+
+ -----------------------------------------
+ --External WB interface
+ -----------------------------------------
+ wb_adr_i : in std_logic_vector(c_wishbone_address_width-1 downto 0) := (others => '0');
+ wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
+ wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ wb_sel_i : in std_logic_vector(c_wishbone_address_width/8-1 downto 0) := (others => '0');
+ wb_we_i : in std_logic := '0';
+ wb_cyc_i : in std_logic := '0';
+ wb_stb_i : in std_logic := '0';
+ wb_ack_o : out std_logic;
+ wb_err_o : out std_logic;
+ wb_rty_o : out std_logic;
+ wb_stall_o : out std_logic;
+
+ -----------------------------------------
+ -- Auxillary WB master
+ -----------------------------------------
+ aux_adr_o : out std_logic_vector(c_wishbone_address_width-1 downto 0);
+ aux_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0);
+ aux_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0) := (others => '0');
+ aux_sel_o : out std_logic_vector(c_wishbone_address_width/8-1 downto 0);
+ aux_we_o : out std_logic;
+ aux_cyc_o : out std_logic;
+ aux_stb_o : out std_logic;
+ aux_ack_i : in std_logic := '1';
+ aux_stall_i : in std_logic := '0';
+
+ -----------------------------------------
+ -- External Fabric I/F
+ -----------------------------------------
+ ext_snk_adr_i : in std_logic_vector(1 downto 0) := "00";
+ ext_snk_dat_i : in std_logic_vector(15 downto 0) := x"0000";
+ ext_snk_sel_i : in std_logic_vector(1 downto 0) := "00";
+ ext_snk_cyc_i : in std_logic := '0';
+ ext_snk_we_i : in std_logic := '0';
+ ext_snk_stb_i : in std_logic := '0';
+ ext_snk_ack_o : out std_logic;
+ ext_snk_err_o : out std_logic;
+ ext_snk_stall_o : out std_logic;
+
+ ext_src_adr_o : out std_logic_vector(1 downto 0);
+ ext_src_dat_o : out std_logic_vector(15 downto 0);
+ ext_src_sel_o : out std_logic_vector(1 downto 0);
+ ext_src_cyc_o : out std_logic;
+ ext_src_stb_o : out std_logic;
+ ext_src_we_o : out std_logic;
+ ext_src_ack_i : in std_logic := '1';
+ ext_src_err_i : in std_logic := '0';
+ ext_src_stall_i : in std_logic := '0';
+
+ ------------------------------------------
+ -- External TX Timestamp I/F
+ ------------------------------------------
+ txtsu_port_id_o : out std_logic_vector(4 downto 0);
+ txtsu_frame_id_o : out std_logic_vector(15 downto 0);
+ txtsu_ts_value_o : out std_logic_vector(31 downto 0);
+ txtsu_ts_incorrect_o : out std_logic;
+ txtsu_stb_o : out std_logic;
+ txtsu_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ -----------------------------------------
+ -- Pause Frame Control
+ -----------------------------------------
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ -----------------------------------------
+ -- Timecode/Servo Control
+ -----------------------------------------
+
+ tm_link_up_o : out std_logic;
+
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0) ;
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0) ;
+
+ -- Timecode output
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ -- 1PPS output
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ rst_aux_n_o : out std_logic;
+
+ link_ok_o : out std_logic;
+
+ -------------------------------------
+ -- DIAG to/from external modules
+ -------------------------------------
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others=>(others=>'0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0)
+ );
+ end component;
+
+ component spec_serial_dac_arb
+ generic(
+ g_invert_sclk : boolean;
+ g_num_extra_bits : integer);
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ val1_i : in std_logic_vector(15 downto 0);
+ load1_i : in std_logic;
+ val2_i : in std_logic_vector(15 downto 0);
+ load2_i : in std_logic;
+ dac_cs_n_o : out std_logic_vector(1 downto 0);
+ dac_clr_n_o : out std_logic;
+ dac_sclk_o : out std_logic;
+ dac_din_o : out std_logic);
+ end component;
+
+end wrcore_pkg;
+
+package body wrcore_pkg is
+
+ function f_refclk_rate(pcs_16 : boolean)
+ return integer is
+ begin
+ if (pcs_16) then
+ return 62500000;
+ else
+ return 125000000;
+ end if;
+ end function;
+
+end package body wrcore_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd
new file mode 100644
index 000000000..25bcc92a1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwr_core.vhd
@@ -0,0 +1,448 @@
+-------------------------------------------------------------------------------
+-- Title : WhiteRabbit PTP Core
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : xwr_core.vhd
+-- Author : Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
+-- Company : CERN (BE-CO-HT)
+-- Created : 2011-02-02
+-- Last update: 2017-05-29
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- WR PTP Core is a HDL module implementing a complete gigabit Ethernet
+-- interface (MAC + PCS + PHY) with integrated PTP slave ordinary clock
+-- compatible with White Rabbit protocol. It performs subnanosecond clock
+-- synchronization via WR protocol and also acts as an Ethernet "gateway",
+-- providing access to TX/RX interfaces of the built-in WR MAC.
+--
+-- Starting from version 2.0 all modules are interconnected with pipelined
+-- wishbone interface (using wb crossbar and bus fanout). Separate pipelined
+-- wishbone bus is used for passing packets between Endpoint, Mini-NIC
+-- and External MAC interface.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2012 - 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Memory map:
+-- 0x00000000: I/D Memory
+-- 0x00020000: Peripheral interconnect
+-- +0x000: Minic
+-- +0x100: Endpoint
+-- +0x200: Softpll
+-- +0x300: PPS gen
+-- +0x400: Syscon
+-- +0x500: UART
+-- +0x600: OneWire
+-- +0x700: Auxillary space (Etherbone config, etc)
+-- +0x800: WRPC diagnostics registers
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.wrcore_pkg.all;
+use work.genram_pkg.all;
+use work.wishbone_pkg.all;
+use work.endpoint_pkg.all;
+use work.wr_fabric_pkg.all;
+use work.sysc_wbgen2_pkg.all;
+use work.softpll_pkg.all;
+
+
+entity xwr_core is
+ generic(
+ --if set to 1, then blocks in PCS use smaller calibration counter to speed
+ --up simulation
+ g_simulation : integer := 0;
+ g_with_external_clock_input : boolean := true;
+ --
+ g_board_name : string := "NA ";
+ g_flash_secsz_kb : integer := 256; -- default for SVEC (M25P128)
+ g_flash_sdbfs_baddr : integer := 16#600000#; -- default for SVEC (M25P128)
+ g_phys_uart : boolean := true;
+ g_virtual_uart : boolean := true;
+ g_aux_clks : integer := 0;
+ g_ep_rxbuf_size : integer := 1024;
+ g_tx_runt_padding : boolean := true;
+ g_dpram_initf : string := "";
+ g_dpram_size : integer := 131072/4; --in 32-bit words
+ g_interface_mode : t_wishbone_interface_mode := PIPELINED;
+ g_address_granularity : t_wishbone_address_granularity := BYTE;
+ g_aux_sdb : t_sdb_device := c_wrc_periph3_sdb;
+ g_softpll_enable_debugger : boolean := false;
+ g_vuart_fifo_size : integer := 1024;
+ g_pcs_16bit : boolean := false;
+ g_records_for_phy : boolean := false;
+ g_diag_id : integer := 0;
+ g_diag_ver : integer := 0;
+ g_diag_ro_size : integer := 0;
+ g_diag_rw_size : integer := 0);
+ port(
+ ---------------------------------------------------------------------------
+ -- Clocks/resets
+ ---------------------------------------------------------------------------
+
+ -- system reference clock (any frequency <= f(clk_ref_i))
+ clk_sys_i : in std_logic;
+
+ -- DDMTD offset clock (125.x MHz)
+ clk_dmtd_i : in std_logic;
+
+ -- Timing reference (125 MHz)
+ clk_ref_i : in std_logic;
+
+ -- Aux clock (i.e. the FMC clock), which can be disciplined by the WR Core
+ clk_aux_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+
+ -- External 10 MHz reference (cesium, GPSDO, etc.), used in Grandmaster mode
+ clk_ext_i : in std_logic := '0';
+
+ clk_ext_mul_i : in std_logic := '0';
+ clk_ext_mul_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+
+ -- External PPS input (cesium, GPSDO, etc.), used in Grandmaster mode
+ pps_ext_i : in std_logic := '0';
+
+ rst_n_i : in std_logic;
+
+ -----------------------------------------
+ --Timing system
+ -----------------------------------------
+ dac_hpll_load_p1_o : out std_logic;
+ dac_hpll_data_o : out std_logic_vector(15 downto 0);
+
+ dac_dpll_load_p1_o : out std_logic;
+ dac_dpll_data_o : out std_logic_vector(15 downto 0);
+
+ -----------------------------------------
+ -- PHY I/f
+ -----------------------------------------
+ phy_ref_clk_i : in std_logic;
+
+ phy_tx_data_o : out std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_k_o : out std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_tx_disparity_i : in std_logic;
+ phy_tx_enc_err_i : in std_logic;
+
+ phy_rx_data_i : in std_logic_vector(f_pcs_data_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_rbclk_i : in std_logic;
+ phy_rx_k_i : in std_logic_vector(f_pcs_k_width(g_pcs_16bit)-1 downto 0);
+ phy_rx_enc_err_i : in std_logic;
+ phy_rx_bitslide_i : in std_logic_vector(f_pcs_bts_width(g_pcs_16bit)-1 downto 0);
+
+ phy_rst_o : out std_logic;
+ phy_rdy_i : in std_logic := '1';
+ phy_loopen_o : out std_logic;
+ phy_loopen_vec_o : out std_logic_vector(2 downto 0);
+ phy_tx_prbs_sel_o : out std_logic_vector(2 downto 0);
+ phy_sfp_tx_fault_i : in std_logic := '0';
+ phy_sfp_los_i : in std_logic := '0';
+ phy_sfp_tx_disable_o : out std_logic;
+ -----------------------------------------
+ -- PHY I/f - record-based
+ -- selection done with g_records_for_phy
+ -----------------------------------------
+ phy8_o : out t_phy_8bits_from_wrc;
+ phy8_i : in t_phy_8bits_to_wrc := c_dummy_phy8_to_wrc;
+ phy16_o : out t_phy_16bits_from_wrc;
+ phy16_i : in t_phy_16bits_to_wrc := c_dummy_phy16_to_wrc;
+
+ -----------------------------------------
+ --GPIO
+ -----------------------------------------
+ led_act_o : out std_logic;
+ led_link_o : out std_logic;
+ scl_o : out std_logic;
+ scl_i : in std_logic := '1';
+ sda_o : out std_logic;
+ sda_i : in std_logic := '1';
+ sfp_scl_o : out std_logic;
+ sfp_scl_i : in std_logic := '1';
+ sfp_sda_o : out std_logic;
+ sfp_sda_i : in std_logic := '1';
+ sfp_det_i : in std_logic;
+ btn1_i : in std_logic := '1';
+ btn2_i : in std_logic := '1';
+ spi_sclk_o : out std_logic;
+ spi_ncs_o : out std_logic;
+ spi_mosi_o : out std_logic;
+ spi_miso_i : in std_logic := '0';
+
+ -----------------------------------------
+ --UART
+ -----------------------------------------
+ uart_rxd_i : in std_logic := '0';
+ uart_txd_o : out std_logic;
+
+ -----------------------------------------
+ -- 1-wire
+ -----------------------------------------
+ owr_pwren_o : out std_logic_vector(1 downto 0);
+ owr_en_o : out std_logic_vector(1 downto 0);
+ owr_i : in std_logic_vector(1 downto 0) := (others => '1');
+
+ -----------------------------------------
+ --External WB interface
+ -----------------------------------------
+ slave_i : in t_wishbone_slave_in := cc_dummy_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ aux_master_o : out t_wishbone_master_out;
+ aux_master_i : in t_wishbone_master_in := cc_dummy_master_in;
+
+ -----------------------------------------
+ -- External Fabric I/F
+ -----------------------------------------
+ wrf_src_o : out t_wrf_source_out;
+ wrf_src_i : in t_wrf_source_in := c_dummy_src_in;
+ wrf_snk_o : out t_wrf_sink_out;
+ wrf_snk_i : in t_wrf_sink_in := c_dummy_snk_in;
+
+ -----------------------------------------
+ -- External Tx Timestamping I/F
+ -----------------------------------------
+ timestamps_o : out t_txtsu_timestamp;
+ timestamps_ack_i : in std_logic := '1';
+
+ -----------------------------------------
+ -- Timestamp helper signals, used for Absolute Calibration
+ -----------------------------------------
+ abscal_txts_o : out std_logic;
+ abscal_rxts_o : out std_logic;
+
+ -----------------------------------------
+ -- Pause Frame Control
+ -----------------------------------------
+ fc_tx_pause_req_i : in std_logic := '0';
+ fc_tx_pause_delay_i : in std_logic_vector(15 downto 0) := x"0000";
+ fc_tx_pause_ready_o : out std_logic;
+
+ -----------------------------------------
+ -- Timecode/Servo Control
+ -----------------------------------------
+
+ tm_link_up_o : out std_logic;
+ -- DAC Control
+ tm_dac_value_o : out std_logic_vector(23 downto 0);
+ tm_dac_wr_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ -- Aux clock lock enable
+ tm_clk_aux_lock_en_i : in std_logic_vector(g_aux_clks-1 downto 0) := (others => '0');
+ -- Aux clock locked flag
+ tm_clk_aux_locked_o : out std_logic_vector(g_aux_clks-1 downto 0);
+ -- Timecode output
+ tm_time_valid_o : out std_logic;
+ tm_tai_o : out std_logic_vector(39 downto 0);
+ tm_cycles_o : out std_logic_vector(27 downto 0);
+ -- 1PPS output
+ pps_csync_o : out std_logic;
+ pps_p_o : out std_logic;
+ pps_led_o : out std_logic;
+
+ rst_aux_n_o : out std_logic;
+
+ aux_diag_i : in t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
+ aux_diag_o : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
+ link_ok_o : out std_logic
+ );
+end xwr_core;
+
+architecture struct of xwr_core is
+begin
+
+ WRPC : wr_core
+ generic map(
+ g_simulation => g_simulation,
+ g_board_name => g_board_name,
+ g_flash_secsz_kb => g_flash_secsz_kb,
+ g_flash_sdbfs_baddr => g_flash_sdbfs_baddr,
+ g_phys_uart => g_phys_uart,
+ g_virtual_uart => g_virtual_uart,
+ g_rx_buffer_size => g_ep_rxbuf_size,
+ g_tx_runt_padding => g_tx_runt_padding,
+ g_with_external_clock_input => g_with_external_clock_input,
+ g_aux_clks => g_aux_clks,
+ g_dpram_initf => g_dpram_initf,
+ g_dpram_size => g_dpram_size,
+ g_interface_mode => g_interface_mode,
+ g_address_granularity => g_address_granularity,
+ g_aux_sdb => g_aux_sdb,
+ g_softpll_enable_debugger => g_softpll_enable_debugger,
+ g_vuart_fifo_size => g_vuart_fifo_size,
+ g_pcs_16bit => g_pcs_16bit,
+ g_records_for_phy => g_records_for_phy,
+ g_diag_id => g_diag_id,
+ g_diag_ver => g_diag_ver,
+ g_diag_ro_size => g_diag_ro_size,
+ g_diag_rw_size => g_diag_rw_size
+ )
+ port map(
+ clk_sys_i => clk_sys_i,
+ clk_dmtd_i => clk_dmtd_i,
+ clk_ref_i => clk_ref_i,
+ clk_aux_i => clk_aux_i,
+ clk_ext_i => clk_ext_i,
+ clk_ext_mul_i => clk_ext_mul_i,
+ clk_ext_mul_locked_i => clk_ext_mul_locked_i,
+ clk_ext_stopped_i => clk_ext_stopped_i,
+ clk_ext_rst_o => clk_ext_rst_o,
+ pps_ext_i => pps_ext_i,
+ rst_n_i => rst_n_i,
+
+ dac_hpll_load_p1_o => dac_hpll_load_p1_o,
+ dac_hpll_data_o => dac_hpll_data_o,
+ dac_dpll_load_p1_o => dac_dpll_load_p1_o,
+ dac_dpll_data_o => dac_dpll_data_o,
+
+ phy_ref_clk_i => phy_ref_clk_i,
+ phy_tx_data_o => phy_tx_data_o,
+ phy_tx_k_o => phy_tx_k_o,
+ phy_tx_disparity_i => phy_tx_disparity_i,
+ phy_tx_enc_err_i => phy_tx_enc_err_i,
+ phy_rx_data_i => phy_rx_data_i,
+ phy_rx_rbclk_i => phy_rx_rbclk_i,
+ phy_rx_k_i => phy_rx_k_i,
+ phy_rx_enc_err_i => phy_rx_enc_err_i,
+ phy_rx_bitslide_i => phy_rx_bitslide_i,
+ phy_rst_o => phy_rst_o,
+ phy_rdy_i => phy_rdy_i,
+ phy_loopen_o => phy_loopen_o,
+ phy_loopen_vec_o => phy_loopen_vec_o,
+ phy_tx_prbs_sel_o => phy_tx_prbs_sel_o,
+ phy_sfp_tx_fault_i => phy_sfp_tx_fault_i,
+ phy_sfp_los_i => phy_sfp_los_i,
+ phy_sfp_tx_disable_o => phy_sfp_tx_disable_o,
+
+ phy8_o => phy8_o,
+ phy8_i => phy8_i,
+ phy16_o => phy16_o,
+ phy16_i => phy16_i,
+
+ led_act_o => led_act_o,
+ led_link_o => led_link_o,
+ scl_o => scl_o,
+ scl_i => scl_i,
+ sda_o => sda_o,
+ sda_i => sda_i,
+ sfp_scl_o => sfp_scl_o,
+ sfp_scl_i => sfp_scl_i,
+ sfp_sda_o => sfp_sda_o,
+ sfp_sda_i => sfp_sda_i,
+ sfp_det_i => sfp_det_i,
+ btn1_i => btn1_i,
+ btn2_i => btn2_i,
+ spi_sclk_o => spi_sclk_o,
+ spi_ncs_o => spi_ncs_o,
+ spi_mosi_o => spi_mosi_o,
+ spi_miso_i => spi_miso_i,
+ uart_rxd_i => uart_rxd_i,
+ uart_txd_o => uart_txd_o,
+
+ owr_pwren_o => owr_pwren_o,
+ owr_en_o => owr_en_o,
+ owr_i => owr_i,
+
+ wb_adr_i => slave_i.adr,
+ wb_dat_i => slave_i.dat,
+ wb_dat_o => slave_o.dat,
+ wb_sel_i => slave_i.sel,
+ wb_we_i => slave_i.we,
+ wb_cyc_i => slave_i.cyc,
+ wb_stb_i => slave_i.stb,
+ wb_ack_o => slave_o.ack,
+ wb_err_o => slave_o.err,
+ wb_rty_o => slave_o.rty,
+ wb_stall_o => slave_o.stall,
+
+ aux_adr_o => aux_master_o.adr,
+ aux_dat_o => aux_master_o.dat,
+ aux_sel_o => aux_master_o.sel,
+ aux_cyc_o => aux_master_o.cyc,
+ aux_stb_o => aux_master_o.stb,
+ aux_we_o => aux_master_o.we,
+ aux_stall_i => aux_master_i.stall,
+ aux_ack_i => aux_master_i.ack,
+ aux_dat_i => aux_master_i.dat,
+
+ ext_snk_adr_i => wrf_snk_i.adr,
+ ext_snk_dat_i => wrf_snk_i.dat,
+ ext_snk_sel_i => wrf_snk_i.sel,
+ ext_snk_cyc_i => wrf_snk_i.cyc,
+ ext_snk_we_i => wrf_snk_i.we,
+ ext_snk_stb_i => wrf_snk_i.stb,
+ ext_snk_ack_o => wrf_snk_o.ack,
+ ext_snk_err_o => wrf_snk_o.err,
+ ext_snk_stall_o => wrf_snk_o.stall,
+
+ ext_src_adr_o => wrf_src_o.adr,
+ ext_src_dat_o => wrf_src_o.dat,
+ ext_src_sel_o => wrf_src_o.sel,
+ ext_src_cyc_o => wrf_src_o.cyc,
+ ext_src_stb_o => wrf_src_o.stb,
+ ext_src_we_o => wrf_src_o.we,
+ ext_src_ack_i => wrf_src_i.ack,
+ ext_src_err_i => wrf_src_i.err,
+ ext_src_stall_i => wrf_src_i.stall,
+
+ txtsu_port_id_o => timestamps_o.port_id(4 downto 0),
+ txtsu_frame_id_o => timestamps_o.frame_id,
+ txtsu_ts_value_o => timestamps_o.tsval,
+ txtsu_ts_incorrect_o => timestamps_o.incorrect,
+ txtsu_stb_o => timestamps_o.stb,
+ txtsu_ack_i => timestamps_ack_i,
+
+ abscal_txts_o => abscal_txts_o,
+ abscal_rxts_o => abscal_rxts_o,
+
+ fc_tx_pause_req_i => fc_tx_pause_req_i,
+ fc_tx_pause_delay_i => fc_tx_pause_delay_i,
+ fc_tx_pause_ready_o => fc_tx_pause_ready_o,
+
+ tm_link_up_o => tm_link_up_o,
+ tm_dac_value_o => tm_dac_value_o,
+ tm_dac_wr_o => tm_dac_wr_o,
+ tm_clk_aux_lock_en_i => tm_clk_aux_lock_en_i,
+ tm_clk_aux_locked_o => tm_clk_aux_locked_o,
+ tm_time_valid_o => tm_time_valid_o,
+ tm_tai_o => tm_tai_o,
+ tm_cycles_o => tm_cycles_o,
+ pps_csync_o => pps_csync_o,
+ pps_p_o => pps_p_o,
+ pps_led_o => pps_led_o,
+
+ rst_aux_n_o => rst_aux_n_o,
+
+ link_ok_o => link_ok_o,
+
+ aux_diag_i => aux_diag_i,
+ aux_diag_o => aux_diag_o
+ );
+
+ timestamps_o.port_id(5) <= '0';
+
+ slave_o.int <= '0';
+
+ wrf_snk_o.rty <= '0';
+
+end struct;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd
new file mode 100644
index 000000000..cce48c8b1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/modules/wrc_core/xwrc_diags_wb.vhd
@@ -0,0 +1,132 @@
+-------------------------------------------------------------------------------
+-- Title : WR PTP Core Diagnostics
+-- Project : WhiteRabbit
+-------------------------------------------------------------------------------
+-- File : xwrc_diags_wb.vhd
+-- Author : Maciej Lipinski <maciej.lipinski@cern.ch>
+-- Company : CERN
+-- Created : 2017-04-24
+-- Platform : FPGA-generics
+-- Standard : VHDL
+-------------------------------------------------------------------------------
+-- Description:
+-- Wrapper for wrc_diags_wb. Uses types instead of std_logic signals and
+-- can use pipelined or classic wishbone.
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2017 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use work.wishbone_pkg.all;
+use work.wrc_diags_wbgen2_pkg.all;
+
+entity xwr_diags_wb is
+ generic(
+ g_interface_mode : t_wishbone_interface_mode := CLASSIC;
+ g_address_granularity : t_wishbone_address_granularity := WORD
+ );
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+
+ slave_i : in t_wishbone_slave_in;
+ slave_o : out t_wishbone_slave_out;
+
+ regs_i : in t_wrc_diags_in_registers;
+ regs_o : out t_wrc_diags_out_registers
+ );
+end xwr_diags_wb;
+
+architecture syn of xwr_diags_wb is
+
+ component wrc_diags_wb is
+ port (
+ rst_n_i : in std_logic;
+ clk_sys_i : in std_logic;
+ wb_adr_i : in std_logic_vector(4 downto 0);
+ wb_dat_i : in std_logic_vector(31 downto 0);
+ wb_dat_o : out std_logic_vector(31 downto 0);
+ wb_cyc_i : in std_logic;
+ wb_sel_i : in std_logic_vector(3 downto 0);
+ wb_stb_i : in std_logic;
+ wb_we_i : in std_logic;
+ wb_ack_o : out std_logic;
+ wb_stall_o : out std_logic;
+ regs_i : in t_wrc_diags_in_registers;
+ regs_o : out t_wrc_diags_out_registers
+ );
+ end component;
+
+
+ signal wb_out : t_wishbone_slave_out;
+ signal wb_in : t_wishbone_slave_in;
+
+begin
+
+ U_Adapter : wb_slave_adapter
+ generic map(
+ g_master_use_struct => true,
+ g_master_mode => CLASSIC,
+ g_master_granularity => WORD,
+ g_slave_use_struct => false,
+ g_slave_mode => g_interface_mode,
+ g_slave_granularity => g_address_granularity)
+ port map (
+ clk_sys_i => clk_sys_i,
+ rst_n_i => rst_n_i,
+ master_i => wb_out,
+ master_o => wb_in,
+ sl_adr_i => slave_i.adr,
+ sl_dat_i => slave_i.dat,
+ sl_sel_i => slave_i.sel,
+ sl_cyc_i => slave_i.cyc,
+ sl_stb_i => slave_i.stb,
+ sl_we_i => slave_i.we,
+ sl_dat_o => slave_o.dat,
+ sl_ack_o => slave_o.ack,
+ sl_stall_o => slave_o.stall);
+
+ WRAPPED_DIAGS: wrc_diags_wb
+ port map(
+ rst_n_i => rst_n_i,
+ clk_sys_i => clk_sys_i,
+ wb_adr_i => wb_in.adr(4 downto 0),
+ wb_dat_i => wb_in.dat,
+ wb_dat_o => wb_out.dat,
+ wb_cyc_i => wb_in.cyc,
+ wb_sel_i => wb_in.sel,
+ wb_stb_i => wb_in.stb,
+ wb_we_i => wb_in.we,
+ wb_ack_o => wb_out.ack,
+ wb_stall_o => wb_out.stall,
+ regs_i => regs_i,
+ regs_o => regs_o);
+
+ slave_o.err <= '0';
+ slave_o.rty <= '0';
+ slave_o.int <= '0';
+
+end syn;
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd
new file mode 100644
index 000000000..f981871f4
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper.vhd
@@ -0,0 +1,491 @@
+-------------------------------------------------------------------------------
+-- ____ ____
+-- / /\/ /
+-- /___/ \ / Vendor: Xilinx
+-- \ \ \/ Version : 3.6
+-- \ \ Application : 7 Series FPGAs Transceivers Wizard
+-- / / Filename : whiterabbit_gtpe2_channel_wrapper.vhd
+-- /___/ /\
+-- \ \ / \
+-- \___\/\___\
+--
+--
+-- Module whiterabbit_gtpe2_channel_wrapper (a GT Wrapper)
+-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard
+--
+--
+-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.
+--
+-- This file contains confidential and proprietary information
+-- of Xilinx, Inc. and is protected under U.S. and
+-- international copyright and other intellectual property
+-- laws.
+--
+-- DISCLAIMER
+-- This disclaimer is not a license and does not grant any
+-- rights to the materials distributed herewith. Except as
+-- otherwise provided in a valid license issued to you by
+-- Xilinx, and to the maximum extent permitted by applicable
+-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
+-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
+-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
+-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
+-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
+-- (2) Xilinx shall not be liable (whether in contract or tort,
+-- including negligence, or under any other theory of
+-- liability) for any loss or damage of any kind or nature
+-- related to, arising under or in connection with these
+-- materials, including for any direct, or any indirect,
+-- special, incidental, or consequential loss or damage
+-- (including loss of data, profits, goodwill, or any type of
+-- loss or damage suffered as a result of any action brought
+-- by a third party) even if such damage or loss was
+-- reasonably foreseeable or Xilinx had been advised of the
+-- possibility of the same.
+--
+-- CRITICAL APPLICATIONS
+-- Xilinx products are not designed or intended to be fail-
+-- safe, or for use in any application requiring fail-safe
+-- performance, such as life-support or safety devices or
+-- systems, Class III medical devices, nuclear facilities,
+-- applications related to the deployment of airbags, or any
+-- other applications that could lead to death, personal
+-- injury, or severe property or environmental damage
+-- (individually and collectively, "Critical
+-- Applications"). Customer assumes the sole risk and
+-- liability of any use of Xilinx products in Critical
+-- Applications, subject only to applicable laws and
+-- regulations governing limitations on product liability.
+--
+-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
+-- PART OF THIS FILE AT ALL TIMES.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+library UNISIM;
+use UNISIM.VCOMPONENTS.ALL;
+
+
+--***************************** Entity Declaration ****************************
+
+entity whiterabbit_gtpe2_channel_wrapper is
+generic
+(
+ -- Simulation attributes
+ EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation
+ WRAPPER_SIM_GTRESET_SPEEDUP : string := "FALSE" -- Set to "true" to speed up sim reset
+);
+port
+(
+ --_________________________________________________________________________
+ --_________________________________________________________________________
+ --____________________________CHANNEL PORTS________________________________
+ GT0_DRP_BUSY_OUT : out std_logic;
+ ---------------------------- Channel - DRP Ports --------------------------
+ GT0_DRPADDR_IN : in std_logic_vector(8 downto 0);
+ GT0_DRPCLK_IN : in std_logic;
+ GT0_DRPDI_IN : in std_logic_vector(15 downto 0);
+ GT0_DRPDO_OUT : out std_logic_vector(15 downto 0);
+ GT0_DRPEN_IN : in std_logic;
+ GT0_DRPRDY_OUT : out std_logic;
+ GT0_DRPWE_IN : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ GT0_LOOPBACK_IN : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ GT0_RXUSERRDY_IN : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ GT0_EYESCANDATAERROR_OUT : out std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ GT0_RXDATA_OUT : out std_logic_vector(15 downto 0);
+ GT0_RXUSRCLK_IN : in std_logic;
+ GT0_RXUSRCLK2_IN : in std_logic;
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ GT0_RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXCHARISK_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXDISPERR_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0);
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GT0_GTPRXN_IN : in std_logic;
+ GT0_GTPRXP_IN : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ GT0_RXBYTEISALIGNED_OUT : out std_logic;
+ GT0_RXCOMMADET_OUT : out std_logic;
+ GT0_RXSLIDE_IN : in std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ GT0_RXLPMHFHOLD_IN : in std_logic;
+ GT0_RXLPMLFHOLD_IN : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ GT0_RXOUTCLK_OUT : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GT0_GTRXRESET_IN : in std_logic;
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ GT0_RXRESETDONE_OUT : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ GT0_GTTXRESET_IN : in std_logic;
+ GT0_TXUSERRDY_IN : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ GT0_TXDATA_IN : in std_logic_vector(15 downto 0);
+ GT0_TXUSRCLK_IN : in std_logic;
+ GT0_TXUSRCLK2_IN : in std_logic;
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ GT0_TXCHARISK_IN : in std_logic_vector(1 downto 0);
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GT0_GTPTXN_OUT : out std_logic;
+ GT0_GTPTXP_OUT : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ GT0_TXOUTCLK_OUT : out std_logic;
+ GT0_TXOUTCLKFABRIC_OUT : out std_logic;
+ GT0_TXOUTCLKPCS_OUT : out std_logic;
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ GT0_TXRESETDONE_OUT : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ GT0_TXPRBSSEL_IN : in std_logic_vector(2 downto 0);
+
+
+ --____________________________COMMON PORTS________________________________
+ ----------------- Common Block - GTPE2_COMMON Clocking Ports ---------------
+ GT0_GTREFCLK0_IN : in std_logic;
+ -------------------------- Common Block - PLL Ports ------------------------
+ GT0_PLL1LOCK_OUT : out std_logic;
+ GT0_PLL1LOCKDETCLK_IN : in std_logic;
+ GT0_PLL1REFCLKLOST_OUT : out std_logic;
+ GT0_PLL1RESET_IN : in std_logic
+
+
+);
+
+
+end whiterabbit_gtpe2_channel_wrapper;
+
+architecture RTL of whiterabbit_gtpe2_channel_wrapper is
+
+ attribute CORE_GENERATION_INFO : string;
+ attribute CORE_GENERATION_INFO of RTL : architecture is "whiterabbit_gtpe2_channel_wrapper,gtwizard_v3_6_1,{protocol_file=Start_from_scratch}";
+
+
+--***********************************Parameter Declarations********************
+
+ constant DLY : time := 1 ns;
+
+--***************************** Signal Declarations *****************************
+
+ -- ground and tied_to_vcc_i signals
+ signal tied_to_ground_i : std_logic;
+ signal tied_to_ground_vec_i : std_logic_vector(63 downto 0);
+ signal tied_to_vcc_i : std_logic;
+ signal gt0_pll0outclk_i : std_logic;
+ signal gt0_pll0outrefclk_i : std_logic;
+ signal gt0_pll1outclk_i : std_logic;
+ signal gt0_pll1outrefclk_i : std_logic;
+
+
+ signal gt0_mgtrefclktx_i : std_logic_vector(1 downto 0);
+ signal gt0_mgtrefclkrx_i : std_logic_vector(1 downto 0);
+
+
+ signal gt0_pll0clk_i : std_logic;
+ signal gt0_pll0refclk_i : std_logic;
+ signal gt0_pll1clk_i : std_logic;
+ signal gt0_pll1refclk_i : std_logic;
+ signal gt0_rst_i : std_logic;
+
+
+
+
+--*************************** Component Declarations **************************
+component whiterabbit_gtpe2_channel_wrapper_gt
+generic
+(
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP : string := "false";
+ EXAMPLE_SIMULATION : integer := 0;
+ TXSYNC_OVRD_IN : bit := '0';
+ TXSYNC_MULTILANE_IN : bit := '0'
+);
+port
+(
+ RST_IN : in std_logic;
+ DRP_BUSY_OUT : out std_logic;
+
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR_IN : in std_logic_vector(8 downto 0);
+ DRPCLK_IN : in std_logic;
+ DRPDI_IN : in std_logic_vector(15 downto 0);
+ DRPDO_OUT : out std_logic_vector(15 downto 0);
+ DRPEN_IN : in std_logic;
+ DRPRDY_OUT : out std_logic;
+ DRPWE_IN : in std_logic;
+ ------------------------ GTPE2_CHANNEL Clocking Ports ----------------------
+ PLL0CLK_IN : in std_logic;
+ PLL0REFCLK_IN : in std_logic;
+ PLL1CLK_IN : in std_logic;
+ PLL1REFCLK_IN : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK_IN : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ RXUSERRDY_IN : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR_OUT : out std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXDATA_OUT : out std_logic_vector(15 downto 0);
+ RXUSRCLK_IN : in std_logic;
+ RXUSRCLK2_IN : in std_logic;
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0);
+ RXCHARISK_OUT : out std_logic_vector(1 downto 0);
+ RXDISPERR_OUT : out std_logic_vector(1 downto 0);
+ RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0);
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTPRXN_IN : in std_logic;
+ GTPRXP_IN : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED_OUT : out std_logic;
+ RXCOMMADET_OUT : out std_logic;
+ RXSLIDE_IN : in std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD_IN : in std_logic;
+ RXLPMLFHOLD_IN : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK_OUT : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET_IN : in std_logic;
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE_OUT : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ GTTXRESET_IN : in std_logic;
+ TXUSERRDY_IN : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXDATA_IN : in std_logic_vector(15 downto 0);
+ TXUSRCLK_IN : in std_logic;
+ TXUSRCLK2_IN : in std_logic;
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ TXCHARISK_IN : in std_logic_vector(1 downto 0);
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GTPTXN_OUT : out std_logic;
+ GTPTXP_OUT : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK_OUT : out std_logic;
+ TXOUTCLKFABRIC_OUT : out std_logic;
+ TXOUTCLKPCS_OUT : out std_logic;
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXRESETDONE_OUT : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL_IN : in std_logic_vector(2 downto 0)
+
+
+);
+end component;
+
+
+ constant PLL0_FBDIV_IN : integer := 1;
+ constant PLL1_FBDIV_IN : integer := 4;
+ constant PLL0_FBDIV_45_IN : integer := 4;
+ constant PLL1_FBDIV_45_IN : integer := 5;
+ constant PLL0_REFCLK_DIV_IN : integer := 1;
+ constant PLL1_REFCLK_DIV_IN : integer := 1;
+
+--********************************* Main Body of Code**************************
+
+begin
+
+ tied_to_ground_i <= '0';
+ tied_to_ground_vec_i(63 downto 0) <= (others => '0');
+ tied_to_vcc_i <= '1';
+ gt0_pll0clk_i <= gt0_pll0outclk_i;
+ gt0_pll0refclk_i <= gt0_pll0outrefclk_i;
+ gt0_pll1clk_i <= gt0_pll1outclk_i;
+ gt0_pll1refclk_i <= gt0_pll1outrefclk_i;
+
+ gt0_rst_i <= GT0_PLL1RESET_IN;
+
+
+ --------------------------- GT Instances -------------------------------
+ --_________________________________________________________________________
+ --_________________________________________________________________________
+ GT_INST : whiterabbit_gtpe2_channel_wrapper_gt
+ generic map
+ (
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP => WRAPPER_SIM_GTRESET_SPEEDUP,
+ EXAMPLE_SIMULATION => EXAMPLE_SIMULATION,
+ TXSYNC_OVRD_IN => ('0'),
+ TXSYNC_MULTILANE_IN => ('0')
+ )
+ port map
+ (
+ RST_IN => gt0_rst_i,
+ DRP_BUSY_OUT => GT0_DRP_BUSY_OUT,
+
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR_IN => GT0_DRPADDR_IN,
+ DRPCLK_IN => GT0_DRPCLK_IN,
+ DRPDI_IN => GT0_DRPDI_IN,
+ DRPDO_OUT => GT0_DRPDO_OUT,
+ DRPEN_IN => GT0_DRPEN_IN,
+ DRPRDY_OUT => GT0_DRPRDY_OUT,
+ DRPWE_IN => GT0_DRPWE_IN,
+ ------------------------ GTPE2_CHANNEL Clocking Ports ----------------------
+ PLL0CLK_IN => gt0_pll0clk_i,
+ PLL0REFCLK_IN => gt0_pll0refclk_i,
+ PLL1CLK_IN => gt0_pll1clk_i,
+ PLL1REFCLK_IN => gt0_pll1refclk_i,
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK_IN => GT0_LOOPBACK_IN,
+ --------------------- RX Initialization and Reset Ports --------------------
+ RXUSERRDY_IN => GT0_RXUSERRDY_IN,
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR_OUT => GT0_EYESCANDATAERROR_OUT,
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXDATA_OUT => GT0_RXDATA_OUT,
+ RXUSRCLK_IN => GT0_RXUSRCLK_IN,
+ RXUSRCLK2_IN => GT0_RXUSRCLK2_IN,
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXCHARISCOMMA_OUT => GT0_RXCHARISCOMMA_OUT,
+ RXCHARISK_OUT => GT0_RXCHARISK_OUT,
+ RXDISPERR_OUT => GT0_RXDISPERR_OUT,
+ RXNOTINTABLE_OUT => GT0_RXNOTINTABLE_OUT,
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTPRXN_IN => GT0_GTPRXN_IN,
+ GTPRXP_IN => GT0_GTPRXP_IN,
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED_OUT => GT0_RXBYTEISALIGNED_OUT,
+ RXCOMMADET_OUT => GT0_RXCOMMADET_OUT,
+ RXSLIDE_IN => GT0_RXSLIDE_IN,
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD_IN => GT0_RXLPMHFHOLD_IN,
+ RXLPMLFHOLD_IN => GT0_RXLPMLFHOLD_IN,
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK_OUT => GT0_RXOUTCLK_OUT,
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET_IN => GT0_GTRXRESET_IN,
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE_OUT => GT0_RXRESETDONE_OUT,
+ --------------------- TX Initialization and Reset Ports --------------------
+ GTTXRESET_IN => GT0_GTTXRESET_IN,
+ TXUSERRDY_IN => GT0_TXUSERRDY_IN,
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXDATA_IN => GT0_TXDATA_IN,
+ TXUSRCLK_IN => GT0_TXUSRCLK_IN,
+ TXUSRCLK2_IN => GT0_TXUSRCLK2_IN,
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ TXCHARISK_IN => GT0_TXCHARISK_IN,
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GTPTXN_OUT => GT0_GTPTXN_OUT,
+ GTPTXP_OUT => GT0_GTPTXP_OUT,
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK_OUT => GT0_TXOUTCLK_OUT,
+ TXOUTCLKFABRIC_OUT => GT0_TXOUTCLKFABRIC_OUT,
+ TXOUTCLKPCS_OUT => GT0_TXOUTCLKPCS_OUT,
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXRESETDONE_OUT => GT0_TXRESETDONE_OUT,
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL_IN => GT0_TXPRBSSEL_IN
+
+ );
+
+
+ --_________________________________________________________________________
+ --_________________________________________________________________________
+ --_________________________GTPE2_COMMON____________________________________
+
+ gtpe2_common_0_i : GTPE2_COMMON
+ generic map
+ (
+ -- Simulation attributes
+ SIM_RESET_SPEEDUP => WRAPPER_SIM_GTRESET_SPEEDUP,
+ SIM_PLL0REFCLK_SEL => ("001"),
+ SIM_PLL1REFCLK_SEL => ("001"),
+ SIM_VERSION => ("1.0"),
+
+ PLL0_FBDIV => PLL0_FBDIV_IN ,
+ PLL0_FBDIV_45 => PLL0_FBDIV_45_IN ,
+ PLL0_REFCLK_DIV => PLL0_REFCLK_DIV_IN,
+ PLL1_FBDIV => PLL1_FBDIV_IN ,
+ PLL1_FBDIV_45 => PLL1_FBDIV_45_IN ,
+ PLL1_REFCLK_DIV => PLL1_REFCLK_DIV_IN,
+
+
+ ------------------COMMON BLOCK Attributes---------------
+ BIAS_CFG => (x"0000000000050001"),
+ COMMON_CFG => (x"00000000"),
+
+ ----------------------------PLL Attributes----------------------------
+ PLL0_CFG => (x"01F03DC"),
+ PLL0_DMON_CFG => ('0'),
+ PLL0_INIT_CFG => (x"00001E"),
+ PLL0_LOCK_CFG => (x"1E8"),
+ PLL1_CFG => (x"01F03DC"),
+ PLL1_DMON_CFG => ('0'),
+ PLL1_INIT_CFG => (x"00001E"),
+ PLL1_LOCK_CFG => (x"1E8"),
+ PLL_CLKOUT_CFG => (x"00"),
+
+ ----------------------------Reserved Attributes----------------------------
+ RSVD_ATTR0 => (x"0000"),
+ RSVD_ATTR1 => (x"0000")
+
+
+ )
+ port map
+ (
+ DMONITOROUT => open,
+ ------------- Common Block - Dynamic Reconfiguration Port (DRP) -----------
+ DRPADDR => tied_to_ground_vec_i(7 downto 0),
+ DRPCLK => tied_to_ground_i,
+ DRPDI => tied_to_ground_vec_i(15 downto 0),
+ DRPDO => open,
+ DRPEN => tied_to_ground_i,
+ DRPRDY => open,
+ DRPWE => tied_to_ground_i,
+ ----------------- Common Block - GTPE2_COMMON Clocking Ports ---------------
+ GTEASTREFCLK0 => tied_to_ground_i,
+ GTEASTREFCLK1 => tied_to_ground_i,
+ GTGREFCLK1 => tied_to_ground_i,
+ GTREFCLK0 => GT0_GTREFCLK0_IN,
+ GTREFCLK1 => tied_to_ground_i,
+ GTWESTREFCLK0 => tied_to_ground_i,
+ GTWESTREFCLK1 => tied_to_ground_i,
+ PLL0OUTCLK => gt0_pll0outclk_i,
+ PLL0OUTREFCLK => gt0_pll0outrefclk_i,
+ PLL1OUTCLK => gt0_pll1outclk_i,
+ PLL1OUTREFCLK => gt0_pll1outrefclk_i,
+ -------------------------- Common Block - PLL Ports ------------------------
+ PLL0FBCLKLOST => open,
+ PLL0LOCK => open,
+ PLL0LOCKDETCLK => tied_to_ground_i,
+ PLL0LOCKEN => tied_to_vcc_i,
+ PLL0PD => '1',
+ PLL0REFCLKLOST => open,
+ PLL0REFCLKSEL => "001",
+ PLL0RESET => tied_to_ground_i,
+ PLL1FBCLKLOST => open,
+ PLL1LOCK => GT0_PLL1LOCK_OUT,
+ PLL1LOCKDETCLK => GT0_PLL1LOCKDETCLK_IN,
+ PLL1LOCKEN => tied_to_vcc_i,
+ PLL1PD => tied_to_ground_i,
+ PLL1REFCLKLOST => GT0_PLL1REFCLKLOST_OUT,
+ PLL1REFCLKSEL => "001",
+ PLL1RESET => GT0_PLL1RESET_IN,
+ ---------------------------- Common Block - Ports --------------------------
+ BGRCALOVRDENB => tied_to_vcc_i,
+ GTGREFCLK0 => tied_to_ground_i,
+ PLLRSVD1 => "0000000000000000",
+ PLLRSVD2 => "00000",
+ REFCLKOUTMONITOR0 => open,
+ REFCLKOUTMONITOR1 => open,
+ ------------------------ Common Block - RX AFE Ports -----------------------
+ PMARSVDOUT => open,
+ --------------------------------- QPLL Ports -------------------------------
+ BGBYPASSB => tied_to_vcc_i,
+ BGMONITORENB => tied_to_vcc_i,
+ BGPDB => tied_to_vcc_i,
+ BGRCALOVRD => "00000", -- ug482 table 2-8 says "111111"
+ PMARSVD => "00000000",
+ RCALENB => tied_to_vcc_i
+
+ );
+
+
+end RTL;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd
new file mode 100644
index 000000000..90ca8f391
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gt.vhd
@@ -0,0 +1,1013 @@
+-------------------------------------------------------------------------------
+-- ____ ____
+-- / /\/ /
+-- /___/ \ / Vendor: Xilinx
+-- \ \ \/ Version : 3.6
+-- \ \ Application : 7 Series FPGAs Transceivers Wizard
+-- / / Filename : whiterabbit_gtpe2_channel_wrapper_gt.vhd
+-- /___/ /\
+-- \ \ / \
+-- \___\/\___\
+--
+--
+-- Module whiterabbit_gtpe2_channel_wrapper_GT (a GT Wrapper)
+-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard
+--
+--
+-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.
+--
+-- This file contains confidential and proprietary information
+-- of Xilinx, Inc. and is protected under U.S. and
+-- international copyright and other intellectual property
+-- laws.
+--
+-- DISCLAIMER
+-- This disclaimer is not a license and does not grant any
+-- rights to the materials distributed herewith. Except as
+-- otherwise provided in a valid license issued to you by
+-- Xilinx, and to the maximum extent permitted by applicable
+-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
+-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
+-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
+-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
+-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
+-- (2) Xilinx shall not be liable (whether in contract or tort,
+-- including negligence, or under any other theory of
+-- liability) for any loss or damage of any kind or nature
+-- related to, arising under or in connection with these
+-- materials, including for any direct, or any indirect,
+-- special, incidental, or consequential loss or damage
+-- (including loss of data, profits, goodwill, or any type of
+-- loss or damage suffered as a result of any action brought
+-- by a third party) even if such damage or loss was
+-- reasonably foreseeable or Xilinx had been advised of the
+-- possibility of the same.
+--
+-- CRITICAL APPLICATIONS
+-- Xilinx products are not designed or intended to be fail-
+-- safe, or for use in any application requiring fail-safe
+-- performance, such as life-support or safety devices or
+-- systems, Class III medical devices, nuclear facilities,
+-- applications related to the deployment of airbags, or any
+-- other applications that could lead to death, personal
+-- injury, or severe property or environmental damage
+-- (individually and collectively, "Critical
+-- Applications"). Customer assumes the sole risk and
+-- liability of any use of Xilinx products in Critical
+-- Applications, subject only to applicable laws and
+-- regulations governing limitations on product liability.
+--
+-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
+-- PART OF THIS FILE AT ALL TIMES.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+library UNISIM;
+use UNISIM.VCOMPONENTS.ALL;
+
+--***************************** Entity Declaration ****************************
+
+entity whiterabbit_gtpe2_channel_wrapper_gt is
+generic
+(
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP : string := "FALSE"; -- Set to "true" to speed up sim reset
+ EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation
+ TXSYNC_OVRD_IN : bit := '0';
+ TXSYNC_MULTILANE_IN : bit := '0'
+);
+port
+(
+ RST_IN : in std_logic; -- Connect to System Reset
+ DRP_BUSY_OUT : out std_logic; -- Indicates that the DRP bus is not accessible to the User
+ ---------------------------- Channel - DRP Ports --------------------------
+ drpaddr_in : in std_logic_vector(8 downto 0);
+ drpclk_in : in std_logic;
+ drpdi_in : in std_logic_vector(15 downto 0);
+ drpdo_out : out std_logic_vector(15 downto 0);
+ drpen_in : in std_logic;
+ drprdy_out : out std_logic;
+ drpwe_in : in std_logic;
+ ------------------------ GTPE2_CHANNEL Clocking Ports ----------------------
+ pll0clk_in : in std_logic;
+ pll0refclk_in : in std_logic;
+ pll1clk_in : in std_logic;
+ pll1refclk_in : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ loopback_in : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ rxuserrdy_in : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ eyescandataerror_out : out std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ rxdata_out : out std_logic_vector(15 downto 0);
+ rxusrclk_in : in std_logic;
+ rxusrclk2_in : in std_logic;
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ rxchariscomma_out : out std_logic_vector(1 downto 0);
+ rxcharisk_out : out std_logic_vector(1 downto 0);
+ rxdisperr_out : out std_logic_vector(1 downto 0);
+ rxnotintable_out : out std_logic_vector(1 downto 0);
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ gtprxn_in : in std_logic;
+ gtprxp_in : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ rxbyteisaligned_out : out std_logic;
+ rxcommadet_out : out std_logic;
+ rxslide_in : in std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ rxlpmhfhold_in : in std_logic;
+ rxlpmlfhold_in : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ rxoutclk_out : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ gtrxreset_in : in std_logic;
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ rxresetdone_out : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ gttxreset_in : in std_logic;
+ txuserrdy_in : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ txdata_in : in std_logic_vector(15 downto 0);
+ txusrclk_in : in std_logic;
+ txusrclk2_in : in std_logic;
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ txcharisk_in : in std_logic_vector(1 downto 0);
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ gtptxn_out : out std_logic;
+ gtptxp_out : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ txoutclk_out : out std_logic;
+ txoutclkfabric_out : out std_logic;
+ txoutclkpcs_out : out std_logic;
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ txresetdone_out : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ txprbssel_in : in std_logic_vector(2 downto 0)
+
+);
+
+
+end whiterabbit_gtpe2_channel_wrapper_gt;
+
+architecture RTL of whiterabbit_gtpe2_channel_wrapper_gt is
+
+--*************************** Component Declarations **************************
+component whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq
+ port (
+ RST : IN std_logic;
+ GTRXRESET_IN : IN std_logic;
+ RXPMARESETDONE: IN std_logic;
+ GTRXRESET_OUT : OUT std_logic;
+
+ DRPCLK : IN std_logic;
+ DRPADDR : OUT std_logic_vector(8 downto 0);
+ DRPDO : IN std_logic_vector(15 downto 0);
+ DRPDI : OUT std_logic_vector(15 downto 0);
+ DRPRDY : IN std_logic;
+ DRPEN : OUT std_logic;
+ DRPWE : OUT std_logic;
+ DRP_OP_DONE : OUT std_logic
+);
+end component;
+
+--component whiterabbitgtp_wrapper_rxpmarst_seq
+-- port (
+-- RST : IN std_logic;
+-- RXPMARESET_IN : IN std_logic;
+-- RXPMARESETDONE : IN std_logic;
+-- RXPMARESET_OUT : OUT std_logic;
+--
+-- DRPCLK : IN std_logic;
+-- DRPADDR : OUT std_logic_vector(8 downto 0);
+-- DRPDO : IN std_logic_vector(15 downto 0);
+-- DRPDI : OUT std_logic_vector(15 downto 0);
+-- DRPRDY : IN std_logic;
+-- DRPEN : OUT std_logic;
+-- DRPWE : OUT std_logic;
+-- DRP_BUSY_IN : IN std_logic;
+-- DRP_PMA_BUSY_OUT : OUT std_logic
+--);
+--end component;
+--
+--
+--component whiterabbitgtp_wrapper_rxrate_seq
+-- port (
+-- RST : IN std_logic;
+-- RXRATE_IN : IN std_logic_vector(2 downto 0);
+-- RXPMARESETDONE : IN std_logic;
+-- RXRATE_OUT : OUT std_logic_vector(2 downto 0);
+--
+-- DRPCLK : IN std_logic;
+-- DRPADDR : OUT std_logic_vector(8 downto 0);
+-- DRPDO : IN std_logic_vector(15 downto 0);
+-- DRPDI : OUT std_logic_vector(15 downto 0);
+-- DRPRDY : IN std_logic;
+-- DRPEN : OUT std_logic;
+-- DRPWE : OUT std_logic;
+-- DRP_BUSY_IN : IN std_logic;
+-- DRP_RATE_BUSY_OUT : OUT std_logic
+--);
+--end component;
+
+--**************************** Signal Declarations ****************************
+
+ -- ground and tied_to_vcc_i signals
+ signal tied_to_ground_i : std_logic;
+ signal tied_to_ground_vec_i : std_logic_vector(63 downto 0);
+ signal tied_to_vcc_i : std_logic;
+
+
+ signal rxpmaresetdone_t : std_logic;
+ signal gtrxreset_out : std_logic;
+ signal rxpmareset_out : std_logic;
+ signal rxrate_out : std_logic_vector(2 downto 0);
+ signal drp_op_done : std_logic;
+ signal drp_pma_busy : std_logic;
+ signal drp_rate_busy : std_logic;
+ signal drp_busy_i1 : std_logic:= '0';
+ signal drp_busy_i2 : std_logic:= '0';
+ signal drpen_rst_t : std_logic;
+ signal drpaddr_rst_t : std_logic_vector(8 downto 0);
+ signal drpwe_rst_t : std_logic;
+ signal drpdo_rst_t : std_logic_vector(15 downto 0);
+ signal drpdi_rst_t : std_logic_vector(15 downto 0);
+ signal drprdy_rst_t : std_logic;
+ signal drpen_pma_t : std_logic;
+ signal drpaddr_pma_t : std_logic_vector(8 downto 0);
+ signal drpwe_pma_t : std_logic;
+ signal drpdo_pma_t : std_logic_vector(15 downto 0);
+ signal drpdi_pma_t : std_logic_vector(15 downto 0);
+ signal drprdy_pma_t : std_logic;
+ signal drpen_rate_t : std_logic;
+ signal drpaddr_rate_t : std_logic_vector(8 downto 0);
+ signal drpwe_rate_t : std_logic;
+ signal drpdo_rate_t : std_logic_vector(15 downto 0);
+ signal drpdi_rate_t : std_logic_vector(15 downto 0);
+ signal drprdy_rate_t : std_logic;
+ signal drpen_i : std_logic;
+ signal drpaddr_i : std_logic_vector(8 downto 0);
+ signal drpwe_i : std_logic;
+ signal drpdo_i : std_logic_vector(15 downto 0);
+ signal drpdi_i : std_logic_vector(15 downto 0);
+ signal drprdy_i : std_logic;
+
+ -- RX Datapath signals
+ signal rxdata_i : std_logic_vector(31 downto 0);
+ signal rxchariscomma_float_i : std_logic_vector(1 downto 0);
+ signal rxcharisk_float_i : std_logic_vector(1 downto 0);
+ signal rxdisperr_float_i : std_logic_vector(1 downto 0);
+ signal rxnotintable_float_i : std_logic_vector(1 downto 0);
+ signal rxrundisp_float_i : std_logic_vector(1 downto 0);
+
+
+ -- TX Datapath signals
+ signal txdata_i : std_logic_vector(31 downto 0);
+ signal txkerr_float_i : std_logic_vector(1 downto 0);
+ signal txrundisp_float_i : std_logic_vector(1 downto 0);
+ signal rxdatavalid_float_i : std_logic;
+
+--******************************** Main Body of Code***************************
+
+begin
+
+ --------------------------- Static signal Assignments ---------------------
+
+ tied_to_ground_i <= '0';
+ tied_to_ground_vec_i(63 downto 0) <= (others => '0');
+ tied_to_vcc_i <= '1';
+
+ ------------------- GT Datapath byte mapping -----------------
+ RXDATA_OUT <= rxdata_i(15 downto 0);
+
+ txdata_i <= (tied_to_ground_vec_i(15 downto 0) & TXDATA_IN);
+
+
+
+ ----------------------------- GTPE2 Instance --------------------------
+
+ gtpe2_i : GTPE2_CHANNEL
+ generic map
+ (
+
+ --_______________________ Simulation-Only Attributes ___________________
+
+ SIM_RECEIVER_DETECT_PASS => ("TRUE"),
+ SIM_RESET_SPEEDUP => (GT_SIM_GTRESET_SPEEDUP),
+ SIM_TX_EIDLE_DRIVE_LEVEL => ("X"),
+ SIM_VERSION => ("2.0"),
+
+
+ ------------------RX Byte and Word Alignment Attributes---------------
+ ALIGN_COMMA_DOUBLE => ("FALSE"),
+ ALIGN_COMMA_ENABLE => ("0001111111"),
+ ALIGN_COMMA_WORD => (2),
+ ALIGN_MCOMMA_DET => ("TRUE"),
+ ALIGN_MCOMMA_VALUE => ("1010000011"),
+ ALIGN_PCOMMA_DET => ("TRUE"),
+ ALIGN_PCOMMA_VALUE => ("0101111100"),
+ SHOW_REALIGN_COMMA => ("FALSE"),
+ RXSLIDE_AUTO_WAIT => (7),
+ RXSLIDE_MODE => ("PCS"),
+ RX_SIG_VALID_DLY => (10),
+
+ ------------------RX 8B/10B Decoder Attributes---------------
+ RX_DISPERR_SEQ_MATCH => ("TRUE"),
+ DEC_MCOMMA_DETECT => ("TRUE"),
+ DEC_PCOMMA_DETECT => ("TRUE"),
+ DEC_VALID_COMMA_ONLY => ("TRUE"),
+
+ ------------------------RX Clock Correction Attributes----------------------
+ CBCC_DATA_SOURCE_SEL => ("DECODED"),
+ CLK_COR_SEQ_2_USE => ("FALSE"),
+ CLK_COR_KEEP_IDLE => ("FALSE"),
+ CLK_COR_MAX_LAT => (10),
+ CLK_COR_MIN_LAT => (8),
+ CLK_COR_PRECEDENCE => ("TRUE"),
+ CLK_COR_REPEAT_WAIT => (0),
+ CLK_COR_SEQ_LEN => (1),
+ CLK_COR_SEQ_1_ENABLE => ("1111"),
+ CLK_COR_SEQ_1_1 => ("0100000000"),
+ CLK_COR_SEQ_1_2 => ("0000000000"),
+ CLK_COR_SEQ_1_3 => ("0000000000"),
+ CLK_COR_SEQ_1_4 => ("0000000000"),
+ CLK_CORRECT_USE => ("FALSE"),
+ CLK_COR_SEQ_2_ENABLE => ("1111"),
+ CLK_COR_SEQ_2_1 => ("0100000000"),
+ CLK_COR_SEQ_2_2 => ("0000000000"),
+ CLK_COR_SEQ_2_3 => ("0000000000"),
+ CLK_COR_SEQ_2_4 => ("0000000000"),
+
+ ------------------------RX Channel Bonding Attributes----------------------
+ CHAN_BOND_KEEP_ALIGN => ("FALSE"),
+ CHAN_BOND_MAX_SKEW => (1),
+ CHAN_BOND_SEQ_LEN => (1),
+ CHAN_BOND_SEQ_1_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_2 => ("0000000000"),
+ CHAN_BOND_SEQ_1_3 => ("0000000000"),
+ CHAN_BOND_SEQ_1_4 => ("0000000000"),
+ CHAN_BOND_SEQ_1_ENABLE => ("1111"),
+ CHAN_BOND_SEQ_2_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_2 => ("0000000000"),
+ CHAN_BOND_SEQ_2_3 => ("0000000000"),
+ CHAN_BOND_SEQ_2_4 => ("0000000000"),
+ CHAN_BOND_SEQ_2_ENABLE => ("1111"),
+ CHAN_BOND_SEQ_2_USE => ("FALSE"),
+ FTS_DESKEW_SEQ_ENABLE => ("1111"),
+ FTS_LANE_DESKEW_CFG => ("1111"),
+ FTS_LANE_DESKEW_EN => ("FALSE"),
+
+ ---------------------------RX Margin Analysis Attributes----------------------------
+ ES_CONTROL => ("000000"),
+ ES_ERRDET_EN => ("FALSE"),
+ ES_EYE_SCAN_EN => ("FALSE"),
+ ES_HORZ_OFFSET => (x"010"),
+ ES_PMA_CFG => ("0000000000"),
+ ES_PRESCALE => ("00000"),
+ ES_QUALIFIER => (x"00000000000000000000"),
+ ES_QUAL_MASK => (x"00000000000000000000"),
+ ES_SDATA_MASK => (x"00000000000000000000"),
+ ES_VERT_OFFSET => ("000000000"),
+
+ -------------------------FPGA RX Interface Attributes-------------------------
+ RX_DATA_WIDTH => (20),
+
+ ---------------------------PMA Attributes----------------------------
+ OUTREFCLK_SEL_INV => ("11"),
+ PMA_RSV => (x"00000333"),
+ PMA_RSV2 => (x"00002040"),
+ PMA_RSV3 => ("00"),
+ PMA_RSV4 => ("0000"),
+ RX_BIAS_CFG => ("0000111100110011"),
+ DMONITOR_CFG => (x"000A00"),
+ RX_CM_SEL => ("01"),
+ RX_CM_TRIM => ("0000"),
+ RX_DEBUG_CFG => ("00000000000000"),
+ RX_OS_CFG => ("0000010000000"),
+ TERM_RCAL_CFG => ("100001000010000"),
+ TERM_RCAL_OVRD => ("000"),
+ TST_RSV => (x"00000000"),
+ RX_CLK25_DIV => (5),
+ TX_CLK25_DIV => (5),
+ UCODEER_CLR => ('0'),
+
+ ---------------------------PCI Express Attributes----------------------------
+ PCS_PCIE_EN => ("FALSE"),
+
+ ---------------------------PCS Attributes----------------------------
+ PCS_RSVD_ATTR => (x"000000000000"),
+
+ -------------RX Buffer Attributes------------
+ RXBUF_ADDR_MODE => ("FAST"),
+ RXBUF_EIDLE_HI_CNT => ("1000"),
+ RXBUF_EIDLE_LO_CNT => ("0000"),
+ RXBUF_EN => ("TRUE"),
+ RX_BUFFER_CFG => ("000000"),
+ RXBUF_RESET_ON_CB_CHANGE => ("TRUE"),
+ RXBUF_RESET_ON_COMMAALIGN => ("FALSE"),
+ RXBUF_RESET_ON_EIDLE => ("FALSE"),
+ RXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
+ RXBUFRESET_TIME => ("00001"),
+ RXBUF_THRESH_OVFLW => (61),
+ RXBUF_THRESH_OVRD => ("FALSE"),
+ RXBUF_THRESH_UNDFLW => (4),
+ RXDLY_CFG => (x"001F"),
+ RXDLY_LCFG => (x"030"),
+ RXDLY_TAP_CFG => (x"0000"),
+ RXPH_CFG => (x"C00002"),
+ RXPHDLY_CFG => (x"084020"),
+ RXPH_MONITOR_SEL => ("00000"),
+ RX_XCLK_SEL => ("RXREC"),
+ RX_DDI_SEL => ("000000"),
+ RX_DEFER_RESET_BUF_EN => ("TRUE"),
+
+ -----------------------CDR Attributes-------------------------
+
+ --For Display Port, HBR/RBR- set RXCDR_CFG=72'h0380008bff40200008
+
+ --For Display Port, HBR2 - set RXCDR_CFG=72'h038c008bff20200010
+
+ --For SATA Gen1 GTX- set RXCDR_CFG=72'h03_8000_8BFF_4010_0008
+
+ --For SATA Gen2 GTX- set RXCDR_CFG=72'h03_8800_8BFF_4020_0008
+
+ --For SATA Gen3 GTX- set RXCDR_CFG=72'h03_8000_8BFF_1020_0010
+
+ --For SATA Gen3 GTP- set RXCDR_CFG=83'h0_0000_87FE_2060_2444_1010
+
+ --For SATA Gen2 GTP- set RXCDR_CFG=83'h0_0000_47FE_2060_2448_1010
+
+ --For SATA Gen1 GTP- set RXCDR_CFG=83'h0_0000_47FE_1060_2448_1010
+ RXCDR_CFG => (x"0000107FE106001041010"),
+ RXCDR_FR_RESET_ON_EIDLE => ('0'),
+ RXCDR_HOLD_DURING_EIDLE => ('0'),
+ RXCDR_PH_RESET_ON_EIDLE => ('0'),
+ RXCDR_LOCK_CFG => ("001001"),
+
+ -------------------RX Initialization and Reset Attributes-------------------
+ RXCDRFREQRESET_TIME => ("00001"),
+ RXCDRPHRESET_TIME => ("00001"),
+ RXISCANRESET_TIME => ("00001"),
+ RXPCSRESET_TIME => ("00001"),
+ RXPMARESET_TIME => ("00011"),
+
+ -------------------RX OOB Signaling Attributes-------------------
+ RXOOB_CFG => ("0000110"),
+
+ -------------------------RX Gearbox Attributes---------------------------
+ RXGEARBOX_EN => ("FALSE"),
+ GEARBOX_MODE => ("000"),
+
+ -------------------------PRBS Detection Attribute-----------------------
+ RXPRBS_ERR_LOOPBACK => ('0'),
+
+ -------------Power-Down Attributes----------
+ PD_TRANS_TIME_FROM_P2 => (x"03c"),
+ PD_TRANS_TIME_NONE_P2 => (x"3c"),
+ PD_TRANS_TIME_TO_P2 => (x"64"),
+
+ -------------RX OOB Signaling Attributes----------
+ SAS_MAX_COM => (64),
+ SAS_MIN_COM => (36),
+ SATA_BURST_SEQ_LEN => ("0101"),
+ SATA_BURST_VAL => ("100"),
+ SATA_EIDLE_VAL => ("100"),
+ SATA_MAX_BURST => (8),
+ SATA_MAX_INIT => (21),
+ SATA_MAX_WAKE => (7),
+ SATA_MIN_BURST => (4),
+ SATA_MIN_INIT => (12),
+ SATA_MIN_WAKE => (4),
+
+ -------------RX Fabric Clock Output Control Attributes----------
+ TRANS_TIME_RATE => (x"0E"),
+
+ --------------TX Buffer Attributes----------------
+ TXBUF_EN => ("TRUE"),
+ TXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
+ TXDLY_CFG => (x"001F"),
+ TXDLY_LCFG => (x"030"),
+ TXDLY_TAP_CFG => (x"0000"),
+ TXPH_CFG => (x"0780"),
+ TXPHDLY_CFG => (x"084020"),
+ TXPH_MONITOR_SEL => ("00000"),
+ TX_XCLK_SEL => ("TXOUT"),
+
+ -------------------------FPGA TX Interface Attributes-------------------------
+ TX_DATA_WIDTH => (20),
+
+ -------------------------TX Configurable Driver Attributes-------------------------
+ TX_DEEMPH0 => ("000000"),
+ TX_DEEMPH1 => ("000000"),
+ TX_EIDLE_ASSERT_DELAY => ("110"),
+ TX_EIDLE_DEASSERT_DELAY => ("100"),
+ TX_LOOPBACK_DRIVE_HIZ => ("FALSE"),
+ TX_MAINCURSOR_SEL => ('0'),
+ TX_DRIVE_MODE => ("DIRECT"),
+ TX_MARGIN_FULL_0 => ("1001110"),
+ TX_MARGIN_FULL_1 => ("1001001"),
+ TX_MARGIN_FULL_2 => ("1000101"),
+ TX_MARGIN_FULL_3 => ("1000010"),
+ TX_MARGIN_FULL_4 => ("1000000"),
+ TX_MARGIN_LOW_0 => ("1000110"),
+ TX_MARGIN_LOW_1 => ("1000100"),
+ TX_MARGIN_LOW_2 => ("1000010"),
+ TX_MARGIN_LOW_3 => ("1000000"),
+ TX_MARGIN_LOW_4 => ("1000000"),
+
+ -------------------------TX Gearbox Attributes--------------------------
+ TXGEARBOX_EN => ("FALSE"),
+
+ -------------------------TX Initialization and Reset Attributes--------------------------
+ TXPCSRESET_TIME => ("00001"),
+ TXPMARESET_TIME => ("00001"),
+
+ -------------------------TX Receiver Detection Attributes--------------------------
+ TX_RXDETECT_CFG => (x"1832"),
+ TX_RXDETECT_REF => ("100"),
+
+ ------------------ JTAG Attributes ---------------
+ ACJTAG_DEBUG_MODE => ('0'),
+ ACJTAG_MODE => ('0'),
+ ACJTAG_RESET => ('0'),
+
+ ------------------ CDR Attributes ---------------
+ CFOK_CFG => (x"49000040E80"),
+ CFOK_CFG2 => ("0100000"),
+ CFOK_CFG3 => ("0100000"),
+ CFOK_CFG4 => ('0'),
+ CFOK_CFG5 => (x"0"),
+ CFOK_CFG6 => ("0000"),
+ RXOSCALRESET_TIME => ("00011"),
+ RXOSCALRESET_TIMEOUT => ("00000"),
+
+ ------------------ PMA Attributes ---------------
+ CLK_COMMON_SWING => ('0'),
+ RX_CLKMUX_EN => ('1'),
+ TX_CLKMUX_EN => ('1'),
+ ES_CLK_PHASE_SEL => ('0'),
+ USE_PCS_CLK_PHASE_SEL => ('0'),
+ PMA_RSV6 => ('0'),
+ PMA_RSV7 => ('0'),
+
+ ------------------ TX Configuration Driver Attributes ---------------
+ TX_PREDRIVER_MODE => ('0'),
+ PMA_RSV5 => ('0'),
+ SATA_PLL_CFG => ("VCO_3000MHZ"),
+
+ ------------------ RX Fabric Clock Output Control Attributes ---------------
+ RXOUT_DIV => (4),
+
+ ------------------ TX Fabric Clock Output Control Attributes ---------------
+ TXOUT_DIV => (4),
+
+ ------------------ RX Phase Interpolator Attributes---------------
+ RXPI_CFG0 => ("000"),
+ RXPI_CFG1 => ('1'),
+ RXPI_CFG2 => ('1'),
+
+ --------------RX Equalizer Attributes-------------
+ ADAPT_CFG0 => (x"00000"),
+ RXLPMRESET_TIME => ("0001111"),
+ RXLPM_BIAS_STARTUP_DISABLE => ('0'),
+ RXLPM_CFG => ("0110"),
+ RXLPM_CFG1 => ('0'),
+ RXLPM_CM_CFG => ('0'),
+ RXLPM_GC_CFG => ("111100010"),
+ RXLPM_GC_CFG2 => ("001"),
+ RXLPM_HF_CFG => ("00001111110000"),
+ RXLPM_HF_CFG2 => ("01010"),
+ RXLPM_HF_CFG3 => ("0000"),
+ RXLPM_HOLD_DURING_EIDLE => ('0'),
+ RXLPM_INCM_CFG => ('0'),
+ RXLPM_IPCM_CFG => ('1'),
+ RXLPM_LF_CFG => ("000000001111110000"),
+ RXLPM_LF_CFG2 => ("01010"),
+ RXLPM_OSINT_CFG => ("100"),
+
+ ------------------ TX Phase Interpolator PPM Controller Attributes---------------
+ TXPI_CFG0 => ("00"),
+ TXPI_CFG1 => ("00"),
+ TXPI_CFG2 => ("00"),
+ TXPI_CFG3 => ('0'),
+ TXPI_CFG4 => ('0'),
+ TXPI_CFG5 => ("000"),
+ TXPI_GREY_SEL => ('0'),
+ TXPI_INVSTROBE_SEL => ('0'),
+ TXPI_PPMCLK_SEL => ("TXUSRCLK2"),
+ TXPI_PPM_CFG => (x"00"),
+ TXPI_SYNFREQ_PPM => ("001"),
+
+ ------------------ LOOPBACK Attributes---------------
+ LOOPBACK_CFG => ('0'),
+ PMA_LOOPBACK_CFG => ('0'),
+
+ ------------------RX OOB Signalling Attributes---------------
+ RXOOB_CLK_CFG => ("PMA"),
+
+ ------------------TX OOB Signalling Attributes---------------
+ TXOOB_CFG => ('0'),
+
+ ------------------RX Buffer Attributes---------------
+ RXSYNC_MULTILANE => ('0'),
+ RXSYNC_OVRD => ('0'),
+ RXSYNC_SKIP_DA => ('0'),
+
+ ------------------TX Buffer Attributes---------------
+ TXSYNC_MULTILANE => (TXSYNC_MULTILANE_IN),
+ TXSYNC_OVRD => (TXSYNC_OVRD_IN),
+ TXSYNC_SKIP_DA => ('0')
+
+
+ )
+ port map
+ (
+ --------------------------------- CPLL Ports -------------------------------
+ GTRSVD => "0000000000000000",
+ PCSRSVDIN => "0000000000000000",
+ TSTIN => "11111111111111111111",
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR => drpaddr_i,
+ DRPCLK => DRPCLK_IN,
+ DRPDI => drpdi_i,
+ DRPDO => drpdo_i,
+ DRPEN => drpen_i,
+ DRPRDY => drprdy_i,
+ DRPWE => drpwe_i,
+ ------------------------------- Clocking Ports -----------------------------
+ RXSYSCLKSEL => "11",
+ TXSYSCLKSEL => "11",
+ ----------------- FPGA TX Interface Datapath Configuration ----------------
+ TX8B10BEN => tied_to_vcc_i,
+ ------------------------ GTPE2_CHANNEL Clocking Ports ----------------------
+ PLL0CLK => PLL0CLK_IN,
+ PLL0REFCLK => PLL0REFCLK_IN,
+ PLL1CLK => PLL1CLK_IN,
+ PLL1REFCLK => PLL1REFCLK_IN,
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK => LOOPBACK_IN,
+ ----------------------------- PCI Express Ports ----------------------------
+ PHYSTATUS => open,
+ RXRATE => tied_to_ground_vec_i(2 downto 0),
+ RXVALID => open,
+ ----------------------------- PMA Reserved Ports ---------------------------
+ PMARSVDIN3 => '0',
+ PMARSVDIN4 => '0',
+ ------------------------------ Power-Down Ports ----------------------------
+ RXPD => "00",
+ TXPD => "00",
+ -------------------------- RX 8B/10B Decoder Ports -------------------------
+ SETERRSTATUS => tied_to_ground_i,
+ --------------------- RX Initialization and Reset Ports --------------------
+ EYESCANRESET => tied_to_ground_i,
+ RXUSERRDY => RXUSERRDY_IN,
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR => EYESCANDATAERROR_OUT,
+ EYESCANMODE => tied_to_ground_i,
+ EYESCANTRIGGER => tied_to_ground_i,
+ ------------------------------- Receive Ports ------------------------------
+ CLKRSVD0 => tied_to_ground_i,
+ CLKRSVD1 => tied_to_ground_i,
+ DMONFIFORESET => tied_to_ground_i,
+ DMONITORCLK => tied_to_ground_i,
+ RXPMARESETDONE => rxpmaresetdone_t,
+ SIGVALIDCLK => tied_to_ground_i,
+ ------------------------- Receive Ports - CDR Ports ------------------------
+ RXCDRFREQRESET => tied_to_ground_i,
+ RXCDRHOLD => tied_to_ground_i,
+ RXCDRLOCK => open,
+ RXCDROVRDEN => tied_to_ground_i,
+ RXCDRRESET => tied_to_ground_i,
+ RXCDRRESETRSV => tied_to_ground_i,
+ RXOSCALRESET => tied_to_ground_i,
+ RXOSINTCFG => "0010",
+ RXOSINTDONE => open,
+ RXOSINTHOLD => tied_to_ground_i,
+ RXOSINTOVRDEN => tied_to_ground_i,
+ RXOSINTPD => tied_to_ground_i,
+ RXOSINTSTARTED => open,
+ RXOSINTSTROBE => tied_to_ground_i,
+ RXOSINTSTROBESTARTED => open,
+ RXOSINTTESTOVRDEN => tied_to_ground_i,
+ ------------------- Receive Ports - Clock Correction Ports -----------------
+ RXCLKCORCNT => open,
+ ---------- Receive Ports - FPGA RX Interface Datapath Configuration --------
+ RX8B10BEN => tied_to_vcc_i,
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXDATA => rxdata_i,
+ RXUSRCLK => RXUSRCLK_IN,
+ RXUSRCLK2 => RXUSRCLK2_IN,
+ ------------------- Receive Ports - Pattern Checker Ports ------------------
+ RXPRBSERR => open,
+ RXPRBSSEL => tied_to_ground_vec_i(2 downto 0),
+ ------------------- Receive Ports - Pattern Checker ports ------------------
+ RXPRBSCNTRESET => tied_to_ground_i,
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXCHARISCOMMA(3 downto 2) => rxchariscomma_float_i,
+ RXCHARISCOMMA(1 downto 0) => RXCHARISCOMMA_OUT,
+ RXCHARISK(3 downto 2) => rxcharisk_float_i,
+ RXCHARISK(1 downto 0) => RXCHARISK_OUT,
+ RXDISPERR(3 downto 2) => rxdisperr_float_i,
+ RXDISPERR(1 downto 0) => RXDISPERR_OUT,
+ RXNOTINTABLE(3 downto 2) => rxnotintable_float_i,
+ RXNOTINTABLE(1 downto 0) => RXNOTINTABLE_OUT,
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTPRXN => GTPRXN_IN,
+ GTPRXP => GTPRXP_IN,
+ PMARSVDIN2 => '0',
+ PMARSVDOUT0 => open,
+ PMARSVDOUT1 => open,
+ ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
+ RXBUFRESET => tied_to_ground_i,
+ RXBUFSTATUS => open,
+ RXDDIEN => tied_to_ground_i,
+ RXDLYBYPASS => tied_to_vcc_i,
+ RXDLYEN => tied_to_ground_i,
+ RXDLYOVRDEN => tied_to_ground_i,
+ RXDLYSRESET => tied_to_ground_i,
+ RXDLYSRESETDONE => open,
+ RXPHALIGN => tied_to_ground_i,
+ RXPHALIGNDONE => open,
+ RXPHALIGNEN => tied_to_ground_i,
+ RXPHDLYPD => tied_to_ground_i,
+ RXPHDLYRESET => tied_to_ground_i,
+ RXPHMONITOR => open,
+ RXPHOVRDEN => tied_to_ground_i,
+ RXPHSLIPMONITOR => open,
+ RXSTATUS => open,
+ RXSYNCALLIN => tied_to_ground_i,
+ RXSYNCDONE => open,
+ RXSYNCIN => tied_to_ground_i,
+ RXSYNCMODE => tied_to_ground_i,
+ RXSYNCOUT => open,
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED => RXBYTEISALIGNED_OUT,
+ RXBYTEREALIGN => open,
+ RXCOMMADET => RXCOMMADET_OUT,
+ RXCOMMADETEN => tied_to_vcc_i,
+ RXMCOMMAALIGNEN => tied_to_ground_i,
+ RXPCOMMAALIGNEN => tied_to_ground_i,
+ RXSLIDE => RXSLIDE_IN,
+ ------------------ Receive Ports - RX Channel Bonding Ports ----------------
+ RXCHANBONDSEQ => open,
+ RXCHBONDEN => tied_to_ground_i,
+ RXCHBONDI => "0000",
+ RXCHBONDLEVEL => tied_to_ground_vec_i(2 downto 0),
+ RXCHBONDMASTER => tied_to_ground_i,
+ RXCHBONDO => open,
+ RXCHBONDSLAVE => tied_to_ground_i,
+ ----------------- Receive Ports - RX Channel Bonding Ports ----------------
+ RXCHANISALIGNED => open,
+ RXCHANREALIGN => open,
+ ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) -----------
+ DMONITOROUT => open,
+ RXADAPTSELTEST => tied_to_ground_vec_i(13 downto 0),
+ RXDFEXYDEN => tied_to_ground_i,
+ RXOSINTEN => '1',
+ RXOSINTID0 => tied_to_ground_vec_i(3 downto 0),
+ RXOSINTNTRLEN => tied_to_ground_i,
+ RXOSINTSTROBEDONE => open,
+ ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
+ RXLPMLFOVRDEN => tied_to_ground_i,
+ RXLPMOSINTNTRLEN => tied_to_ground_i,
+ -------------------- Receive Ports - RX Equailizer Ports -------------------
+ RXLPMHFHOLD => rxlpmhfhold_in,
+ RXLPMHFOVRDEN => tied_to_ground_i,
+ RXLPMLFHOLD => rxlpmlfhold_in,
+ --------------------- Receive Ports - RX Equalizer Ports -------------------
+ RXOSHOLD => tied_to_ground_i,
+ RXOSOVRDEN => tied_to_ground_i,
+ ------------ Receive Ports - RX Fabric ClocK Output Control Ports ----------
+ RXRATEDONE => open,
+ ----------- Receive Ports - RX Fabric Clock Output Control Ports ----------
+ RXRATEMODE => '0',
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK => RXOUTCLK_OUT,
+ RXOUTCLKFABRIC => open,
+ RXOUTCLKPCS => open,
+ RXOUTCLKSEL => "010",
+ ---------------------- Receive Ports - RX Gearbox Ports --------------------
+ RXDATAVALID => open,
+ RXHEADER => open,
+ RXHEADERVALID => open,
+ RXSTARTOFSEQ => open,
+ --------------------- Receive Ports - RX Gearbox Ports --------------------
+ RXGEARBOXSLIP => tied_to_ground_i,
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET => gtrxreset_out,
+ RXLPMRESET => tied_to_ground_i,
+ RXOOBRESET => tied_to_ground_i,
+ RXPCSRESET => tied_to_ground_i,
+ RXPMARESET => tied_to_ground_i,
+ ------------------- Receive Ports - RX OOB Signaling ports -----------------
+ RXCOMSASDET => open,
+ RXCOMWAKEDET => open,
+ ------------------ Receive Ports - RX OOB Signaling ports -----------------
+ RXCOMINITDET => open,
+ ------------------ Receive Ports - RX OOB signalling Ports -----------------
+ RXELECIDLE => open,
+ RXELECIDLEMODE => "11",
+ ----------------- Receive Ports - RX Polarity Control Ports ----------------
+ RXPOLARITY => tied_to_ground_i,
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE => RXRESETDONE_OUT,
+ --------------------------- TX Buffer Bypass Ports -------------------------
+ TXPHDLYTSTCLK => tied_to_ground_i,
+ ------------------------ TX Configurable Driver Ports ----------------------
+ TXPOSTCURSOR => "00000",
+ TXPOSTCURSORINV => tied_to_ground_i,
+ TXPRECURSOR => tied_to_ground_vec_i(4 downto 0),
+ TXPRECURSORINV => tied_to_ground_i,
+ -------------------- TX Fabric Clock Output Control Ports ------------------
+ TXRATEMODE => tied_to_ground_i,
+ --------------------- TX Initialization and Reset Ports --------------------
+ CFGRESET => tied_to_ground_i,
+ GTTXRESET => GTTXRESET_IN,
+ PCSRSVDOUT => open,
+ TXUSERRDY => TXUSERRDY_IN,
+ ----------------- TX Phase Interpolator PPM Controller Ports ---------------
+ TXPIPPMEN => tied_to_ground_i,
+ TXPIPPMOVRDEN => tied_to_ground_i,
+ TXPIPPMPD => tied_to_ground_i,
+ TXPIPPMSEL => tied_to_vcc_i,
+ TXPIPPMSTEPSIZE => tied_to_ground_vec_i(4 downto 0),
+ ---------------------- Transceiver Reset Mode Operation --------------------
+ GTRESETSEL => tied_to_ground_i,
+ RESETOVRD => tied_to_ground_i,
+ ------------------------------- Transmit Ports -----------------------------
+ TXPMARESETDONE => open,
+ ----------------- Transmit Ports - Configurable Driver Ports ---------------
+ PMARSVDIN0 => '0',
+ PMARSVDIN1 => '0',
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXDATA => txdata_i,
+ TXUSRCLK => TXUSRCLK_IN,
+ TXUSRCLK2 => TXUSRCLK2_IN,
+ --------------------- Transmit Ports - PCI Express Ports -------------------
+ TXELECIDLE => tied_to_ground_i,
+ TXMARGIN => tied_to_ground_vec_i(2 downto 0),
+ TXRATE => tied_to_ground_vec_i(2 downto 0),
+ TXSWING => tied_to_ground_i,
+ ------------------ Transmit Ports - Pattern Generator Ports ----------------
+ TXPRBSFORCEERR => tied_to_ground_i,
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ TX8B10BBYPASS => tied_to_ground_vec_i(3 downto 0),
+ TXCHARDISPMODE => tied_to_ground_vec_i(3 downto 0),
+ TXCHARDISPVAL => tied_to_ground_vec_i(3 downto 0),
+ TXCHARISK(3 downto 2) => tied_to_ground_vec_i(1 downto 0),
+ TXCHARISK(1 downto 0) => TXCHARISK_IN,
+ ------------------ Transmit Ports - TX Buffer Bypass Ports -----------------
+ TXDLYBYPASS => tied_to_vcc_i,
+ TXDLYEN => tied_to_ground_i,
+ TXDLYHOLD => tied_to_ground_i,
+ TXDLYOVRDEN => tied_to_ground_i,
+ TXDLYSRESET => tied_to_ground_i,
+ TXDLYSRESETDONE => open,
+ TXDLYUPDOWN => tied_to_ground_i,
+ TXPHALIGN => tied_to_ground_i,
+ TXPHALIGNDONE => open,
+ TXPHALIGNEN => tied_to_ground_i,
+ TXPHDLYPD => tied_to_ground_i,
+ TXPHDLYRESET => tied_to_ground_i,
+ TXPHINIT => tied_to_ground_i,
+ TXPHINITDONE => open,
+ TXPHOVRDEN => tied_to_ground_i,
+ ---------------------- Transmit Ports - TX Buffer Ports --------------------
+ TXBUFSTATUS => open,
+ ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ----------
+ TXSYNCALLIN => tied_to_ground_i,
+ TXSYNCDONE => open,
+ TXSYNCIN => tied_to_ground_i,
+ TXSYNCMODE => tied_to_ground_i,
+ TXSYNCOUT => open,
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GTPTXN => GTPTXN_OUT,
+ GTPTXP => GTPTXP_OUT,
+ TXBUFDIFFCTRL => "100",
+ TXDEEMPH => tied_to_ground_i,
+ TXDIFFCTRL => "1000",
+ TXDIFFPD => tied_to_ground_i,
+ TXINHIBIT => tied_to_ground_i,
+ TXMAINCURSOR => "0000000",
+ TXPISOPD => tied_to_ground_i,
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK => TXOUTCLK_OUT,
+ TXOUTCLKFABRIC => TXOUTCLKFABRIC_OUT,
+ TXOUTCLKPCS => TXOUTCLKPCS_OUT,
+ TXOUTCLKSEL => "010",
+ TXRATEDONE => open,
+ --------------------- Transmit Ports - TX Gearbox Ports --------------------
+ TXGEARBOXREADY => open,
+ TXHEADER => tied_to_ground_vec_i(2 downto 0),
+ TXSEQUENCE => tied_to_ground_vec_i(6 downto 0),
+ TXSTARTSEQ => tied_to_ground_i,
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXPCSRESET => tied_to_ground_i,
+ TXPMARESET => tied_to_ground_i,
+ TXRESETDONE => TXRESETDONE_OUT,
+ ------------------ Transmit Ports - TX OOB signalling Ports ----------------
+ TXCOMFINISH => open,
+ TXCOMINIT => tied_to_ground_i,
+ TXCOMSAS => tied_to_ground_i,
+ TXCOMWAKE => tied_to_ground_i,
+ TXPDELECIDLEMODE => tied_to_ground_i,
+ ----------------- Transmit Ports - TX Polarity Control Ports ---------------
+ TXPOLARITY => tied_to_ground_i,
+ --------------- Transmit Ports - TX Receiver Detection Ports --------------
+ TXDETECTRX => tied_to_ground_i,
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL => TXPRBSSEL_IN
+
+ );
+
+ ------------------------- Soft Fix for Production Silicon----------------------
+ gtrxreset_seq_i : whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq
+ port map
+ (
+ RST => RST_IN,
+ GTRXRESET_IN => GTRXRESET_IN,
+ RXPMARESETDONE => rxpmaresetdone_t,
+ GTRXRESET_OUT => gtrxreset_out,
+ DRP_OP_DONE => drp_op_done,
+ DRPCLK => DRPCLK_IN,
+ DRPEN => drpen_rst_t,
+ DRPADDR => drpaddr_rst_t,
+ DRPWE => drpwe_rst_t,
+ DRPDO => drpdo_rst_t,
+ DRPDI => drpdi_rst_t,
+ DRPRDY => drprdy_rst_t
+ );
+
+
+ drpen_i <= drpen_rst_t when drp_op_done ='0' else
+ drpen_pma_t when drp_pma_busy = '1' else
+ drpen_rate_t when drp_rate_busy ='1' else DRPEN_IN;
+
+
+ drpaddr_i <= drpaddr_rst_t when drp_op_done ='0' else
+ drpaddr_pma_t when drp_pma_busy = '1' else
+ drpaddr_rate_t when drp_rate_busy ='1' else DRPADDR_IN;
+
+
+ drpwe_i <= drpwe_rst_t when drp_op_done ='0' else
+ drpwe_pma_t when drp_pma_busy = '1' else
+ drpwe_rate_t when drp_rate_busy ='1' else DRPWE_IN;
+
+
+
+ DRPDO_OUT <= drpdo_i when (drp_op_done='1' or drp_pma_busy='0' or drp_rate_busy='0') else x"0000";
+
+ drpdo_rst_t <= drpdo_i;
+
+ drpdo_pma_t <= drpdo_i;
+
+ drpdo_rate_t <= drpdo_i;
+
+
+ drpdi_i <= drpdi_rst_t when drp_op_done ='0' else
+ drpdi_pma_t when drp_pma_busy = '1' else
+ drpdi_rate_t when drp_rate_busy ='1' else DRPDI_IN;
+
+
+ DRPRDY_OUT <= drprdy_i when (drp_op_done='1' or drp_pma_busy='0' or drp_rate_busy='0') else '0';
+
+ drprdy_rst_t <= drprdy_i;
+
+ drprdy_pma_t <= drprdy_i;
+
+ drprdy_rate_t <= drprdy_i;
+
+
+ drp_pma_busy <= '0';
+ drp_rate_busy <= '0';
+
+ process (DRPCLK_IN)
+ begin
+ if(rising_edge(DRPCLK_IN)) then
+ if(drp_op_done = '0' or drp_rate_busy='1') then
+ drp_busy_i1 <= '1';
+ else
+ drp_busy_i1 <= '0';
+ end if;
+ end if;
+ end process;
+
+ process (DRPCLK_IN)
+ begin
+ if(rising_edge(DRPCLK_IN)) then
+ if(drp_op_done = '0' or drp_pma_busy='1') then
+ drp_busy_i2 <= '1';
+ else
+ drp_busy_i2 <= '0';
+ end if;
+ end if;
+ end process;
+
+ DRP_BUSY_OUT <= drp_busy_i1 or drp_busy_i2;
+
+
+
+
+ end RTL;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd
new file mode 100644
index 000000000..5fc534d53
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd
@@ -0,0 +1,342 @@
+------------------------------------------------------------------------------/
+-- ____ ____
+-- / /\/ /
+-- /___/ \ / Vendor: Xilinx
+-- \ \ \/ Version : 3.6
+-- \ \ Application : 7 Series FPGAs Transceivers Wizard
+-- / / Filename : whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq.vhd
+-- /___/ /\
+-- \ \ / \
+-- \___\/\___\
+--
+--
+-- Module whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq
+-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard
+--
+--
+-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.
+--
+-- This file contains confidential and proprietary information
+-- of Xilinx, Inc. and is protected under U.S. and
+-- international copyright and other intellectual property
+-- laws.
+--
+-- DISCLAIMER
+-- This disclaimer is not a license and does not grant any
+-- rights to the materials distributed herewith. Except as
+-- otherwise provided in a valid license issued to you by
+-- Xilinx, and to the maximum extent permitted by applicable
+-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
+-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
+-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
+-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
+-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
+-- (2) Xilinx shall not be liable (whether in contract or tort,
+-- including negligence, or under any other theory of
+-- liability) for any loss or damage of any kind or nature
+-- related to, arising under or in connection with these
+-- materials, including for any direct, or any indirect,
+-- special, incidental, or consequential loss or damage
+-- (including loss of data, profits, goodwill, or any type of
+-- loss or damage suffered as a result of any action brought
+-- by a third party) even if such damage or loss was
+-- reasonably foreseeable or Xilinx had been advised of the
+-- possibility of the same.
+--
+-- CRITICAL APPLICATIONS
+-- Xilinx products are not designed or intended to be fail-
+-- safe, or for use in any application requiring fail-safe
+-- performance, such as life-support or safety devices or
+-- systems, Class III medical devices, nuclear facilities,
+-- applications related to the deployment of airbags, or any
+-- other applications that could lead to death, personal
+-- injury, or severe property or environmental damage
+-- (individually and collectively, "Critical
+-- Applications"). Customer assumes the sole risk and
+-- liability of any use of Xilinx products in Critical
+-- Applications, subject only to applicable laws and
+-- regulations governing limitations on product liability.
+--
+-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
+-- PART OF THIS FILE AT ALL TIMES.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use work.gencores_pkg.all;
+
+ENTITY whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq IS
+ port (
+ RST : IN std_logic; --Please add a synchroniser if it is not generated in DRPCLK domain.
+ GTRXRESET_IN : IN std_logic; --Please add a synchroniser if it is not generated in DRPCLK domain.
+ RXPMARESETDONE: IN std_logic;
+ GTRXRESET_OUT : OUT std_logic;
+
+ DRPCLK : IN std_logic;
+ DRPADDR : OUT std_logic_vector(8 downto 0);
+ DRPDO : IN std_logic_vector(15 downto 0);
+ DRPDI : OUT std_logic_vector(15 downto 0);
+ DRPRDY : IN std_logic;
+ DRPEN : OUT std_logic;
+ DRPWE : OUT std_logic;
+ DRP_OP_DONE : OUT std_logic
+);
+END whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq;
+
+ARCHITECTURE Behavioral of whiterabbit_gtpe2_channel_wrapper_gtrxreset_seq is
+
+
+-- component whiterabbit_gtpe2_channel_wrapper_sync_block
+-- generic (
+-- INITIALISE : bit_vector(5 downto 0) := "000000"
+-- );
+-- port (
+-- clk : in std_logic;
+-- data_in : in std_logic;
+-- data_out : out std_logic
+-- );
+-- end component;
+
+ constant DLY : time := 1 ns;
+ type state_type is (idle,
+ drp_rd,
+ wait_rd_data,
+ wr_16,
+ wait_wr_done1,
+ wait_pmareset,
+ wr_20,
+ wait_wr_done2);
+
+ signal state : state_type := idle;
+ signal next_state : state_type := idle;
+ signal gtrxreset_s : std_logic;
+ signal gtrxreset_ss : std_logic;
+ signal rxpmaresetdone_ss : std_logic;
+ signal rxpmaresetdone_sss : std_logic;
+ signal rd_data : std_logic_vector(15 downto 0);
+ signal next_rd_data : std_logic_vector(15 downto 0);
+ signal original_rd_data : std_logic_vector(15 downto 0);
+ signal pmarstdone_fall_edge:std_logic;
+ signal gtrxreset_i :std_logic;
+ signal flag :std_logic := '0';
+ signal gtrxreset_o :std_logic;
+ signal drpen_o :std_logic;
+ signal drpwe_o :std_logic;
+ signal drpaddr_o :std_logic_vector(8 downto 0);
+ signal drpdi_o :std_logic_vector(15 downto 0);
+ signal drp_op_done_o :std_logic;
+ signal rst_n :std_logic;
+BEGIN
+
+-- sync0_RXPMARESETDONE : whiterabbit_gtpe2_channel_wrapper_sync_block
+-- port map
+-- (
+-- clk => DRPCLK,
+-- data_in => RXPMARESETDONE,
+-- data_out => rxpmaresetdone_ss
+-- );
+
+ rst_n <= not RST;
+
+ sync0_RXPMARESETDONE : gc_sync_ffs
+ port map
+ (
+ clk_i => DRPCLK,
+ rst_n_i => rst_n,
+ data_i => RXPMARESETDONE,
+ synced_o => rxpmaresetdone_ss,
+ npulse_o => open,
+ ppulse_o => open
+ );
+
+--output assignment
+ GTRXRESET_OUT <= gtrxreset_o;
+ DRPEN <= drpen_o;
+ DRPWE <= drpwe_o;
+ DRPADDR <= drpaddr_o;
+ DRPDI <= drpdi_o;
+ DRP_OP_DONE <= drp_op_done_o;
+
+ PROCESS (DRPCLK,RST)
+ BEGIN
+ IF (RST = '1') THEN
+ state <= idle after DLY;
+ gtrxreset_s <= '0' after DLY;
+ gtrxreset_ss <= '0' after DLY;
+ rxpmaresetdone_sss <= '0' after DLY;
+ rd_data <= x"0000" after DLY;
+ gtrxreset_o <= '0' after DLY;
+ ELSIF (DRPCLK'event and DRPCLK='1') THEN
+ state <= next_state after DLY;
+ gtrxreset_s <= GTRXRESET_IN after DLY;
+ gtrxreset_ss <= gtrxreset_s after DLY;
+ rxpmaresetdone_sss <= rxpmaresetdone_ss after DLY;
+ rd_data <= next_rd_data after DLY;
+ gtrxreset_o <= gtrxreset_i after DLY;
+ END IF;
+ END PROCESS;
+
+ PROCESS (DRPCLK,GTRXRESET_IN)
+ BEGIN
+ IF (GTRXRESET_IN = '1') THEN
+ drp_op_done_o <= '0' after DLY;
+
+ ELSIF (DRPCLK'event and DRPCLK='1') THEN
+ IF (state = wait_wr_done2 and DRPRDY = '1') THEN
+ drp_op_done_o <= '1' after DLY;
+ ELSE
+ drp_op_done_o <= drp_op_done_o after DLY;
+ END IF;
+ END IF;
+ END PROCESS;
+
+ pmarstdone_fall_edge <= (not rxpmaresetdone_ss) and (rxpmaresetdone_sss);
+
+ PROCESS (gtrxreset_ss,DRPRDY,state,pmarstdone_fall_edge)
+ BEGIN
+ CASE state IS
+
+ WHEN idle =>
+ IF (gtrxreset_ss='1') THEN
+ next_state <= drp_rd;
+ ELSE
+ next_state <= idle;
+ END IF;
+
+ WHEN drp_rd =>
+ next_state<= wait_rd_data;
+
+ WHEN wait_rd_data =>
+ IF (DRPRDY='1')THEN
+ next_state <= wr_16;
+ ELSE
+ next_state <= wait_rd_data;
+ END IF;
+
+ WHEN wr_16 =>
+ next_state <= wait_wr_done1;
+
+ WHEN wait_wr_done1 =>
+ IF (DRPRDY='1') THEN
+ next_state <= wait_pmareset;
+ ELSE
+ next_state <= wait_wr_done1;
+ END IF;
+
+ WHEN wait_pmareset =>
+ IF (pmarstdone_fall_edge='1') THEN
+ next_state <= wr_20;
+ ELSE
+ next_state <= wait_pmareset;
+ END IF;
+
+ WHEN wr_20 =>
+ next_state <= wait_wr_done2;
+
+ WHEN wait_wr_done2 =>
+ IF (DRPRDY='1') THEN
+ next_state <= idle;
+ ELSE
+ next_state <= wait_wr_done2;
+ END IF;
+
+ WHEN others=>
+ next_state <= idle;
+
+ END CASE;
+ END PROCESS;
+
+-- drives DRP interface and GTRXRESET_OUT
+ PROCESS(DRPRDY,state,rd_data,DRPDO,gtrxreset_ss,flag,original_rd_data)
+ BEGIN
+-- assert gtrxreset_out until wr to 16-bit is complete
+-- RX_DATA_WIDTH is located at addr x"0011", [13 downto 11]
+-- encoding is this : /16 = x "2", /20 = x"3", /32 = x"4", /40 = x"5"
+ gtrxreset_i <= '0';
+ drpaddr_o <= '0'& x"11"; -- 000010001
+ drpen_o <= '0';
+ drpwe_o <= '0';
+ drpdi_o <= x"0000";
+ next_rd_data <= rd_data;
+
+ CASE state IS
+
+ --do nothing to DRP or reset
+ WHEN idle => null;
+
+ --assert reset and issue rd
+ WHEN drp_rd =>
+ gtrxreset_i <= '1';
+ drpen_o <= '1';
+ drpwe_o <= '0';
+
+ --assert reset and wait to load rd data
+ WHEN wait_rd_data =>
+ gtrxreset_i <= '1';
+ IF (DRPRDY='1' and flag = '0') THEN
+ next_rd_data <= DRPDO;
+ ELSIF (DRPRDY='1' and flag = '1') THEN
+ next_rd_data <= original_rd_data;
+ ELSE
+ next_rd_data <= rd_data;
+ END IF;
+
+ --assert reset and write to 16-bit mode
+ WHEN wr_16=>
+ gtrxreset_i<= '1';
+ drpen_o <= '1';
+ drpwe_o <= '1';
+ -- Addr "00001001" [11] = '0' puts width mode in /16 or /32
+ drpdi_o <= rd_data(15 downto 12) & '0' & rd_data(10 downto 0);
+
+ --keep asserting reset until write to 16-bit mode is complete
+ WHEN wait_wr_done1=>
+ gtrxreset_i <= '1';
+
+ --deassert reset and no DRP access until 2nd pmareset
+ WHEN wait_pmareset => null;
+ IF (gtrxreset_ss='1') THEN
+ gtrxreset_i <= '1';
+ ELSE
+ gtrxreset_i <= '0';
+ END IF;
+
+ --write to 20-bit mode
+ WHEN wr_20 =>
+ drpen_o <='1';
+ drpwe_o <= '1';
+ drpdi_o <= rd_data(15 downto 0); --restore user setting per prev read
+
+ --wait to complete write to 20-bit mode
+ WHEN wait_wr_done2 =>
+
+
+ WHEN others => null;
+
+ END CASE;
+ END PROCESS;
+
+ process (DRPCLK)
+ begin
+ if (DRPCLK'event and DRPCLK='1') then
+ if( state = wr_16 or state = wait_pmareset or state = wr_20 or state = wait_wr_done1) then
+ flag <= '1';
+ elsif(state = wait_wr_done2) then
+ flag <= '0';
+ end if;
+ end if;
+ end process;
+
+ process (DRPCLK)
+ begin
+ if (DRPCLK'event and DRPCLK='1') then
+ if( state = wait_rd_data and DRPRDY ='1' and flag = '0') then
+ original_rd_data <= DRPDO;
+ end if;
+ end if;
+ end process;
+
+END Behavioral;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd
new file mode 100644
index 000000000..a075865d9
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtp/wr_gtp_phy_family7.vhd
@@ -0,0 +1,521 @@
+-------------------------------------------------------------------------------
+-- Title : Deterministic Xilinx GTP wrapper - artix-7 top module
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : wr_gtp_phy_family7.vhd
+-- Author : Peter Jansweijer, Rick Lohlefink, Tomasz Wlostowski
+-- Company : Nikhef, CERN BE-CO-HT
+-- Created : 2016-05-19
+-- Last update: 2016-05-19
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Dual channel wrapper for Xilinx Artix-7 GTP adapted for
+-- deterministic delays at 1.25 Gbps.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2009-2011 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2016-05-19 0.1 PeterJ Initial release based on "wr_gtx_phy_kintex7.vhd"
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.gencores_pkg.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
+library work;
+
+use work.disparity_gen_pkg.all;
+
+entity wr_gtp_phy_family7 is
+ generic (
+ -- set to non-zero value to speed up the simulation by reducing some delays
+ g_simulation : integer := 0
+ );
+ port (
+ -- Dedicated reference 125 MHz clock for the GTP transceiver
+ clk_gtp_i : in std_logic;
+
+ -- TX path, synchronous to tx_out_clk_o (62.5 MHz):
+ tx_out_clk_o : out std_logic;
+ tx_locked_o : out std_logic;
+
+ -- data input (8 bits, not 8b10b-encoded)
+ tx_data_i : in std_logic_vector(15 downto 0) := (others => '0');
+
+ -- 1 when tx_data_i contains a control code, 0 when it's a data byte
+ tx_k_i : in std_logic_vector(1 downto 0) := (others => '0');
+
+ -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus).
+ -- Necessary for the PCS to generate proper frame termination sequences.
+ -- Generated for the 2nd byte (LSB) of tx_data_i.
+ tx_disparity_o : out std_logic;
+
+ -- Encoding error indication (1 = error, 0 = no error)
+ tx_enc_err_o : out std_logic;
+
+ -- RX path, synchronous to ch0_rx_rbclk_o.
+
+ -- RX recovered clock
+ rx_rbclk_o : out std_logic;
+
+ -- 8b10b-decoded data output. The data output must be kept invalid before
+ -- the transceiver is locked on the incoming signal to prevent the EP from
+ -- detecting a false carrier.
+ rx_data_o : out std_logic_vector(15 downto 0);
+
+ -- 1 when the byte on rx_data_o is a control code
+ rx_k_o : out std_logic_vector(1 downto 0);
+
+ -- encoding error indication
+ rx_enc_err_o : out std_logic;
+
+ -- RX bitslide indication, indicating the delay of the RX path of the
+ -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid.
+ rx_bitslide_o : out std_logic_vector(4 downto 0);
+
+ -- reset input, active hi
+ rst_i : in std_logic := '0';
+ loopen_i : in std_logic_vector(2 downto 0) := (others => '0');
+ tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0');
+
+ pad_rxn_i : in std_logic := '0';
+ pad_rxp_i : in std_logic := '0';
+
+ pad_txn_o : out std_logic;
+ pad_txp_o : out std_logic;
+
+ rdy_o : out std_logic
+ );
+end entity wr_gtp_phy_family7;
+
+--------------------------------------------------------------------------------
+-- Object : Architecture work.wr_gtp_phy_family7.structure
+-- Last modified : Mon Nov 23 12:54:18 2015.
+--------------------------------------------------------------------------------
+
+architecture structure of wr_gtp_phy_family7 is
+ constant REQ_DELAY : integer := 500; -- unit = ns
+ constant CLK_PER : integer := 8; -- unit = ns
+ constant INITIAL_WAIT_CYCLES : integer := REQ_DELAY / CLK_PER; -- Required 500 ns divided by RefClk period
+ constant TOTAL_DELAY : integer := INITIAL_WAIT_CYCLES + 10; -- Add 10 clock cycles as delay to be sure
+
+ constant c_rxcdrlock_max : integer := 3;
+ constant c_reset_cnt_max : integer := 64; -- Reset pulse width 64 * 8 = 512 ns
+
+ type state_type is (init, count, count_done, wait_reset);
+ signal state : state_type;
+
+ signal rst_synced : std_logic;
+ signal rst_int : std_logic;
+ signal rx_rec_clk : std_logic;
+ signal rx_rec_clk_bufin : std_logic;
+
+ attribute buffer_type : string;
+ attribute buffer_type of rx_rec_clk_bufin : signal is "bufg";
+
+ signal tx_out_clk : std_logic;
+ signal tx_out_clk_bufin : std_logic;
+
+ --attribute buffer_type of tx_out_clk_bufin : signal is "bufg";
+
+ signal rx_lost_lock : std_logic;
+ signal ready_for_reset : std_logic := '0';
+ signal serdes_ready : std_logic := '0';
+ signal rx_slide : std_logic := '0';
+ signal rx_rst_done : std_logic;
+ signal tx_rst_done : std_logic;
+ signal rx_comma_det : std_logic;
+ signal rx_byte_is_aligned : std_logic;
+ signal forced_rx_reset : std_logic;
+ signal rx_synced : std_logic;
+ signal rst_done : std_logic;
+ signal rst_done_n : std_logic;
+ signal pll_locked_i : std_logic;
+ signal pll_locked_n_i : std_logic;
+ signal rx_reset : std_logic;
+ signal rx_k_int : std_logic_vector(1 downto 0);
+ signal rx_data_int : std_logic_vector(15 downto 0);
+ signal rx_disp_err : std_logic_vector(1 downto 0);
+ signal rx_code_err : std_logic_vector(1 downto 0);
+ signal cur_disp : t_8b10b_disparity;
+ signal tx_is_k_swapped : std_logic_vector(1 downto 0);
+ signal tx_data_swapped : std_logic_vector(15 downto 0);
+
+ component whiterabbit_gtpe2_channel_wrapper is
+ generic
+ (
+ -- Simulation attributes
+ EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation
+ WRAPPER_SIM_GTRESET_SPEEDUP : string := "FALSE" -- Set to "true" to speed up sim reset
+ );
+ port
+ (
+ --_________________________________________________________________________
+ --____________________________CHANNEL PORTS________________________________
+ GT0_DRP_BUSY_OUT : out std_logic;
+ ---------------------------- Channel - DRP Ports --------------------------
+ GT0_DRPADDR_IN : in std_logic_vector(8 downto 0);
+ GT0_DRPCLK_IN : in std_logic;
+ GT0_DRPDI_IN : in std_logic_vector(15 downto 0);
+ GT0_DRPDO_OUT : out std_logic_vector(15 downto 0);
+ GT0_DRPEN_IN : in std_logic;
+ GT0_DRPRDY_OUT : out std_logic;
+ GT0_DRPWE_IN : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ GT0_LOOPBACK_IN : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ GT0_RXUSERRDY_IN : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ GT0_EYESCANDATAERROR_OUT : out std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ GT0_RXDATA_OUT : out std_logic_vector(15 downto 0);
+ GT0_RXUSRCLK_IN : in std_logic;
+ GT0_RXUSRCLK2_IN : in std_logic;
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ GT0_RXCHARISCOMMA_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXCHARISK_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXDISPERR_OUT : out std_logic_vector(1 downto 0);
+ GT0_RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0);
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GT0_GTPRXN_IN : in std_logic;
+ GT0_GTPRXP_IN : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ GT0_RXBYTEISALIGNED_OUT : out std_logic;
+ GT0_RXCOMMADET_OUT : out std_logic;
+ GT0_RXSLIDE_IN : in std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ GT0_RXLPMHFHOLD_IN : in std_logic;
+ GT0_RXLPMLFHOLD_IN : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ GT0_RXOUTCLK_OUT : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GT0_GTRXRESET_IN : in std_logic;
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ GT0_RXRESETDONE_OUT : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ GT0_GTTXRESET_IN : in std_logic;
+ GT0_TXUSERRDY_IN : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ GT0_TXDATA_IN : in std_logic_vector(15 downto 0);
+ GT0_TXUSRCLK_IN : in std_logic;
+ GT0_TXUSRCLK2_IN : in std_logic;
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ GT0_TXCHARISK_IN : in std_logic_vector(1 downto 0);
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GT0_GTPTXN_OUT : out std_logic;
+ GT0_GTPTXP_OUT : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ GT0_TXOUTCLK_OUT : out std_logic;
+ GT0_TXOUTCLKFABRIC_OUT : out std_logic;
+ GT0_TXOUTCLKPCS_OUT : out std_logic;
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ GT0_TXRESETDONE_OUT : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ GT0_TXPRBSSEL_IN : in std_logic_vector(2 downto 0);
+
+
+ --____________________________COMMON PORTS________________________________
+ ----------------- Common Block - GTPE2_COMMON Clocking Ports ---------------
+ GT0_GTREFCLK0_IN : in std_logic;
+ -------------------------- Common Block - PLL Ports ------------------------
+ GT0_PLL1LOCK_OUT : out std_logic;
+ GT0_PLL1LOCKDETCLK_IN : in std_logic;
+ GT0_PLL1REFCLKLOST_OUT : out std_logic;
+ GT0_PLL1RESET_IN : in std_logic
+
+
+ );
+ end component whiterabbit_gtpe2_channel_wrapper;
+
+ component gtp_bitslide is
+ generic (
+ g_simulation : integer;
+ g_target : string := "artix7"
+ );
+ port (
+ gtp_rst_i : in std_logic;
+ gtp_rx_clk_i : in std_logic;
+ gtp_rx_comma_det_i : in std_logic;
+ gtp_rx_byte_is_aligned_i : in std_logic;
+ serdes_ready_i : in std_logic;
+ gtp_rx_slide_o : out std_logic;
+ gtp_rx_cdr_rst_o : out std_logic;
+ bitslide_o : out std_logic_vector(4 downto 0);
+ synced_o : out std_logic
+ );
+ end component;
+
+ component BUFG
+ port (
+ I : in std_ulogic;
+ O : out std_ulogic);
+ end component BUFG;
+
+ function f_to_bool(x : integer) return string is
+ begin
+ if(x /= 0) then
+ return "TRUE";
+ else
+ return "FALSE";
+ end if;
+ end f_to_bool;
+
+begin
+
+ U_EdgeDet_rst_i : gc_sync_ffs port map (
+ clk_i => clk_gtp_i,
+ rst_n_i => '1',
+ data_i => rst_i,
+ ppulse_o => rst_synced);
+
+ p_reset_pulse : process(clk_gtp_i, rst_synced)
+ variable reset_cnt : integer range 0 to c_reset_cnt_max;
+ begin
+ if(rst_synced = '1') then
+ reset_cnt := 0;
+ rst_int <= '1';
+ elsif rising_edge(clk_gtp_i) then
+ if reset_cnt /= c_reset_cnt_max then
+ reset_cnt := reset_cnt + 1;
+ rst_int <= '1';
+ else
+ rst_int <= '0';
+ end if;
+ end if;
+ end process;
+
+ -- ug482 "GTP Transceiver TX/RX Reset in Response to Completion of Configuration"
+ -- 1. Wait a minimum of 500 ns after configuration is complete
+ process(clk_gtp_i, rst_int) is
+ variable reset_counter : integer range 0 to TOTAL_DELAY := 0;
+ begin
+ if rst_int = '1' then
+ state <= init;
+ elsif rising_edge(clk_gtp_i) then
+ case state is
+ when init =>
+ reset_counter := 0;
+ state <= count;
+ when count =>
+ if reset_counter = TOTAL_DELAY then
+ reset_counter := 0;
+ state <= count_done;
+ else
+ reset_counter := reset_counter + 1;
+ state <= count;
+ end if;
+ when count_done =>
+ state <= wait_reset;
+ when wait_reset =>
+ state <= wait_reset;
+ end case;
+ end if;
+ end process;
+
+ ready_for_reset <= '1' when state = count_done else '0';
+
+ -- 7-Series GTP RXCDRLOCK is reserved (ug482 Table 4.11) and can not be used for detection of proper RX lock.
+ -- Instead use rx_code_err (i.e. RXNOTINTABLE) to check integrity of the received characters.
+ process(rx_rec_clk, rst_int) is
+ begin
+ if rst_int = '1' then
+ rx_lost_lock <= '1';
+ elsif rising_edge(rx_rec_clk) then
+ if rx_synced = '1' then
+ if rx_code_err > "00" then
+ rx_lost_lock <= '1';
+ else
+ rx_lost_lock <= '0';
+ end if;
+ else
+ rx_lost_lock <= '0';
+ end if;
+ end if;
+ end process;
+
+ tx_enc_err_o <= '0';
+
+ U_BUF_TxOutClk: BUFG
+ port map(
+ I => tx_out_clk_bufin,
+ O => tx_out_clk);
+
+ tx_out_clk_o <= tx_out_clk;
+ tx_locked_o <= pll_locked_i;
+
+ U_BUF_RxRecClk: BUFG
+ port map(
+ I => rx_rec_clk_bufin,
+ O => rx_rec_clk);
+
+ rx_rbclk_o <= rx_rec_clk;
+
+ tx_is_k_swapped <= tx_k_i(0) & tx_k_i(1);
+ tx_data_swapped <= tx_data_i(7 downto 0) & tx_data_i(15 downto 8);
+
+ U_GTP_INST : whiterabbit_gtpe2_channel_wrapper
+ generic map
+ (
+ -- Simulation attributes
+ EXAMPLE_SIMULATION => g_simulation,
+ WRAPPER_SIM_GTRESET_SPEEDUP => f_to_bool(g_simulation)
+ )
+ port map
+ (
+ --_________________________________________________________________________
+ --_________________________________________________________________________
+ --____________________________CHANNEL PORTS________________________________
+ GT0_DRP_BUSY_OUT => open,
+ ---------------------------- Channel - DRP Ports --------------------------
+ GT0_DRPADDR_IN => (others => '0'),
+ GT0_DRPCLK_IN => clk_gtp_i,
+ GT0_DRPDI_IN => (others => '0'),
+ GT0_DRPDO_OUT => open,
+ GT0_DRPEN_IN => '0',
+ GT0_DRPRDY_OUT => open,
+ GT0_DRPWE_IN => '0',
+ ------------------------------- Loopback Ports -----------------------------
+ GT0_LOOPBACK_IN => loopen_i,
+ --------------------- RX Initialization and Reset Ports --------------------
+ GT0_RXUSERRDY_IN => pll_locked_i,
+ -------------------------- RX Margin Analysis Ports ------------------------
+ GT0_EYESCANDATAERROR_OUT => open,
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ GT0_RXDATA_OUT => rx_data_int,
+ GT0_RXUSRCLK_IN => rx_rec_clk,
+ GT0_RXUSRCLK2_IN => rx_rec_clk,
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ GT0_RXCHARISCOMMA_OUT => open,
+ GT0_RXCHARISK_OUT => rx_k_int,
+ GT0_RXDISPERR_OUT => rx_disp_err,
+ GT0_RXNOTINTABLE_OUT => rx_code_err,
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GT0_GTPRXN_IN => pad_rxn_i,
+ GT0_GTPRXP_IN => pad_rxp_i,
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ GT0_RXBYTEISALIGNED_OUT => rx_byte_is_aligned,
+ GT0_RXCOMMADET_OUT => rx_comma_det,
+ GT0_RXSLIDE_IN => rx_slide,
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ GT0_RXLPMHFHOLD_IN => '0',
+ GT0_RXLPMLFHOLD_IN => '0',
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ GT0_RXOUTCLK_OUT => rx_rec_clk_bufin,
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GT0_GTRXRESET_IN => rx_reset,
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ GT0_RXRESETDONE_OUT => rx_rst_done,
+ --------------------- TX Initialization and Reset Ports --------------------
+ GT0_GTTXRESET_IN => pll_locked_n_i,
+ GT0_TXUSERRDY_IN => pll_locked_i,
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ GT0_TXDATA_IN => tx_data_swapped,
+ GT0_TXUSRCLK_IN => tx_out_clk,
+ GT0_TXUSRCLK2_IN => tx_out_clk,
+ ------------------ Transmit Ports - TX 8B/10B Encoder Ports ----------------
+ GT0_TXCHARISK_IN => tx_is_k_swapped,
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ GT0_GTPTXN_OUT => pad_txn_o,
+ GT0_GTPTXP_OUT => pad_txp_o,
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ GT0_TXOUTCLK_OUT => tx_out_clk_bufin,
+ GT0_TXOUTCLKFABRIC_OUT => open,
+ GT0_TXOUTCLKPCS_OUT => open,
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ GT0_TXRESETDONE_OUT => tx_rst_done,
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ GT0_TXPRBSSEL_IN => tx_prbs_sel_i,
+
+ --____________________________COMMON PORTS________________________________
+ ----------------- Common Block - GTPE2_COMMON Clocking Ports ---------------
+ GT0_GTREFCLK0_IN => clk_gtp_i,
+ -------------------------- Common Block - PLL Ports ------------------------
+ GT0_PLL1LOCK_OUT => pll_locked_i,
+ GT0_PLL1LOCKDETCLK_IN => '0',
+ GT0_PLL1REFCLKLOST_OUT => open,
+ GT0_PLL1RESET_IN => ready_for_reset
+ );
+
+ U_Bitslide : gtp_bitslide
+ generic map (
+ g_simulation => g_simulation,
+ g_target => ("artix7")
+ )
+ port map (
+ gtp_rst_i => rst_done_n,
+ gtp_rx_clk_i => rx_rec_clk,
+ gtp_rx_comma_det_i => rx_comma_det,
+ gtp_rx_byte_is_aligned_i => rx_byte_is_aligned,
+ serdes_ready_i => serdes_ready,
+ gtp_rx_slide_o => rx_slide,
+ gtp_rx_cdr_rst_o => forced_rx_reset,
+ bitslide_o => rx_bitslide_o,
+ synced_o => rx_synced
+ );
+
+ pll_locked_n_i <= not pll_locked_i;
+ serdes_ready <= not rx_lost_lock and pll_locked_i and tx_rst_done and rx_rst_done;
+ rst_done <= tx_rst_done and rx_rst_done;
+ rst_done_n <= not rst_done;
+ rx_reset <= pll_locked_n_i or forced_rx_reset;
+ rdy_o <= serdes_ready;
+
+ p_gen_rx_outputs : process(rx_rec_clk, rst_done_n)
+ begin
+ if(rst_done_n = '1') then
+ rx_data_o <= (others => '0');
+ rx_k_o <= (others => '0');
+ rx_enc_err_o <= '0';
+ elsif rising_edge(rx_rec_clk) then
+ if(serdes_ready = '1' and rx_synced = '1') then
+ rx_data_o <= rx_data_int(7 downto 0) & rx_data_int(15 downto 8);
+ rx_k_o <= rx_k_int(0) & rx_k_int(1);
+ rx_enc_err_o <= rx_disp_err(0) or rx_disp_err(1) or rx_code_err(0) or rx_code_err(1);
+ else
+ rx_data_o <= (others => '1');
+ rx_k_o <= (others => '1');
+ rx_enc_err_o <= '1';
+ end if;
+ end if;
+ end process;
+
+ p_gen_tx_disparity : process(tx_out_clk, rst_done_n)
+ begin
+ if rising_edge(tx_out_clk) then
+ if rst_done_n = '1' then
+ cur_disp <= RD_MINUS;
+ else
+ cur_disp <= f_next_8b10b_disparity16(cur_disp, tx_k_i, tx_data_i);
+ end if;
+ end if;
+ end process;
+
+ tx_disparity_o <= to_std_logic(cur_disp);
+end architecture structure ; -- of wr_gtp_phy_family7
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd
new file mode 100644
index 000000000..dcf8eb32d
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/whiterabbit_gtxe2_channel_wrapper_gt.vhd
@@ -0,0 +1,803 @@
+-------------------------------------------------------------------------------
+-- ____ ____
+-- / /\/ /
+-- /___/ \ / Vendor: Xilinx
+-- \ \ \/ Version : 2.5
+-- \ \ Application : 7 Series FPGAs Transceivers Wizard
+-- / / Filename : whiterabbit_gtxe2_channel_wrapper_gt.vhd
+-- /___/ /\
+-- \ \ / \
+-- \___\/\___\
+--
+--
+-- Module whiterabbit_gtxe2_channel_wrapper_GT (a GT Wrapper)
+-- Generated by Xilinx 7 Series FPGAs Transceivers Wizard
+--
+--
+-- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.
+--
+-- This file contains confidential and proprietary information
+-- of Xilinx, Inc. and is protected under U.S. and
+-- international copyright and other intellectual property
+-- laws.
+--
+-- DISCLAIMER
+-- This disclaimer is not a license and does not grant any
+-- rights to the materials distributed herewith. Except as
+-- otherwise provided in a valid license issued to you by
+-- Xilinx, and to the maximum extent permitted by applicable
+-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
+-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
+-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
+-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
+-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
+-- (2) Xilinx shall not be liable (whether in contract or tort,
+-- including negligence, or under any other theory of
+-- liability) for any loss or damage of any kind or nature
+-- related to, arising under or in connection with these
+-- materials, including for any direct, or any indirect,
+-- special, incidental, or consequential loss or damage
+-- (including loss of data, profits, goodwill, or any type of
+-- loss or damage suffered as a result of any action brought
+-- by a third party) even if such damage or loss was
+-- reasonably foreseeable or Xilinx had been advised of the
+-- possibility of the same.
+--
+-- CRITICAL APPLICATIONS
+-- Xilinx products are not designed or intended to be fail-
+-- safe, or for use in any application requiring fail-safe
+-- performance, such as life-support or safety devices or
+-- systems, Class III medical devices, nuclear facilities,
+-- applications related to the deployment of airbags, or any
+-- other applications that could lead to death, personal
+-- injury, or severe property or environmental damage
+-- (individually and collectively, "Critical
+-- Applications"). Customer assumes the sole risk and
+-- liability of any use of Xilinx products in Critical
+-- Applications, subject only to applicable laws and
+-- regulations governing limitations on product liability.
+--
+-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
+-- PART OF THIS FILE AT ALL TIMES.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+library UNISIM;
+use UNISIM.VCOMPONENTS.ALL;
+
+--***************************** Entity Declaration ****************************
+
+entity whiterabbit_gtxe2_channel_wrapper_GT is
+generic
+(
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP : string := "FALSE"; -- Set to "true" to speed up sim reset
+ RX_DFE_KL_CFG2_IN : bit_vector := X"3010D90C";
+ PMA_RSV_IN : bit_vector := x"00018480";
+ PCS_RSVD_ATTR_IN : bit_vector := X"000000000000"
+);
+port
+(
+ --------------------------------- CPLL Ports -------------------------------
+ CPLLFBCLKLOST_OUT : out std_logic;
+ CPLLLOCK_OUT : out std_logic;
+ CPLLLOCKDETCLK_IN : in std_logic;
+ CPLLREFCLKLOST_OUT : out std_logic;
+ CPLLRESET_IN : in std_logic;
+ -------------------------- Channel - Clocking Ports ------------------------
+ GTREFCLK0_IN : in std_logic;
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR_IN : in std_logic_vector(8 downto 0);
+ DRPCLK_IN : in std_logic;
+ DRPDI_IN : in std_logic_vector(15 downto 0);
+ DRPDO_OUT : out std_logic_vector(15 downto 0);
+ DRPEN_IN : in std_logic;
+ DRPRDY_OUT : out std_logic;
+ DRPWE_IN : in std_logic;
+ ------------------------------- Clocking Ports -----------------------------
+ QPLLCLK_IN : in std_logic;
+ QPLLREFCLK_IN : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK_IN : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ RXUSERRDY_IN : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR_OUT : out std_logic;
+ ------------------------- Receive Ports - CDR Ports ------------------------
+ RXCDRLOCK_OUT : out std_logic;
+ RXCDRRESET_IN : in std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXUSRCLK_IN : in std_logic;
+ RXUSRCLK2_IN : in std_logic;
+ ------------------ Receive Ports - FPGA RX interface Ports -----------------
+ RXDATA_OUT : out std_logic_vector(15 downto 0);
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXDISPERR_OUT : out std_logic_vector(1 downto 0);
+ RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0);
+ --------------------------- Receive Ports - RX AFE -------------------------
+ GTXRXP_IN : in std_logic;
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTXRXN_IN : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED_OUT : out std_logic;
+ RXCOMMADET_OUT : out std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD_IN : in std_logic;
+ RXLPMLFHOLD_IN : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK_OUT : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET_IN : in std_logic;
+ RXPMARESET_IN : in std_logic;
+ ---------------------- Receive Ports - RX gearbox ports --------------------
+ RXSLIDE_IN : in std_logic;
+ ------------------- Receive Ports - RX8B/10B Decoder Ports -----------------
+ RXCHARISK_OUT : out std_logic_vector(1 downto 0);
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE_OUT : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ GTTXRESET_IN : in std_logic;
+ TXUSERRDY_IN : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXUSRCLK_IN : in std_logic;
+ TXUSRCLK2_IN : in std_logic;
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA_IN : in std_logic_vector(15 downto 0);
+ ---------------- Transmit Ports - TX Driver and OOB signaling --------------
+ GTXTXN_OUT : out std_logic;
+ GTXTXP_OUT : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK_OUT : out std_logic;
+ TXOUTCLKFABRIC_OUT : out std_logic;
+ TXOUTCLKPCS_OUT : out std_logic;
+ --------------------- Transmit Ports - TX Gearbox Ports --------------------
+ TXCHARISK_IN : in std_logic_vector(1 downto 0);
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXRESETDONE_OUT : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL_IN : in std_logic_vector(2 downto 0)
+
+);
+
+
+end whiterabbit_gtxe2_channel_wrapper_GT;
+
+architecture RTL of whiterabbit_gtxe2_channel_wrapper_GT is
+
+--**************************** Signal Declarations ****************************
+
+ -- ground and tied_to_vcc_i signals
+ signal tied_to_ground_i : std_logic;
+ signal tied_to_ground_vec_i : std_logic_vector(63 downto 0);
+ signal tied_to_vcc_i : std_logic;
+
+
+
+ -- RX Datapath signals
+ signal rxdata_i : std_logic_vector(63 downto 0);
+ signal rxchariscomma_float_i : std_logic_vector(5 downto 0);
+ signal rxcharisk_float_i : std_logic_vector(5 downto 0);
+ signal rxdisperr_float_i : std_logic_vector(5 downto 0);
+ signal rxnotintable_float_i : std_logic_vector(5 downto 0);
+ signal rxrundisp_float_i : std_logic_vector(5 downto 0);
+
+
+
+ -- TX Datapath signals
+ signal txdata_i : std_logic_vector(63 downto 0);
+ signal txkerr_float_i : std_logic_vector(5 downto 0);
+ signal txrundisp_float_i : std_logic_vector(5 downto 0);
+
+
+--******************************** Main Body of Code***************************
+
+begin
+
+ --------------------------- Static signal Assignments ---------------------
+
+ tied_to_ground_i <= '0';
+ tied_to_ground_vec_i(63 downto 0) <= (others => '0');
+ tied_to_vcc_i <= '1';
+
+ ------------------- GT Datapath byte mapping -----------------
+
+ RXDATA_OUT <= rxdata_i(15 downto 0);
+
+ txdata_i <= (tied_to_ground_vec_i(47 downto 0) & TXDATA_IN);
+
+
+
+ ----------------------------- GTXE2 Instance --------------------------
+
+ gtxe2_i :GTXE2_CHANNEL
+ generic map
+ (
+
+ --_______________________ Simulation-Only Attributes ___________________
+
+ SIM_RECEIVER_DETECT_PASS => ("TRUE"),
+ SIM_RESET_SPEEDUP => (GT_SIM_GTRESET_SPEEDUP),
+ SIM_TX_EIDLE_DRIVE_LEVEL => ("X"),
+ SIM_CPLLREFCLK_SEL => ("001"),
+ SIM_VERSION => ("4.0"),
+
+
+ ------------------RX Byte and Word Alignment Attributes---------------
+ ALIGN_COMMA_DOUBLE => ("FALSE"),
+ ALIGN_COMMA_ENABLE => ("0001111111"),
+ ALIGN_COMMA_WORD => (2),
+ ALIGN_MCOMMA_DET => ("TRUE"),
+ ALIGN_MCOMMA_VALUE => ("1010000011"),
+ ALIGN_PCOMMA_DET => ("TRUE"),
+ ALIGN_PCOMMA_VALUE => ("0101111100"),
+ SHOW_REALIGN_COMMA => ("FALSE"),
+ RXSLIDE_AUTO_WAIT => (7),
+ RXSLIDE_MODE => ("PCS"),
+ RX_SIG_VALID_DLY => (10),
+
+ ------------------RX 8B/10B Decoder Attributes---------------
+ RX_DISPERR_SEQ_MATCH => ("TRUE"),
+ DEC_MCOMMA_DETECT => ("TRUE"),
+ DEC_PCOMMA_DETECT => ("TRUE"),
+ DEC_VALID_COMMA_ONLY => ("TRUE"),
+
+ ------------------------RX Clock Correction Attributes----------------------
+ CBCC_DATA_SOURCE_SEL => ("DECODED"),
+ CLK_COR_SEQ_2_USE => ("FALSE"),
+ CLK_COR_KEEP_IDLE => ("FALSE"),
+ CLK_COR_MAX_LAT => (10),
+ CLK_COR_MIN_LAT => (8),
+ CLK_COR_PRECEDENCE => ("TRUE"),
+ CLK_COR_REPEAT_WAIT => (0),
+ CLK_COR_SEQ_LEN => (1),
+ CLK_COR_SEQ_1_ENABLE => ("1111"),
+ CLK_COR_SEQ_1_1 => ("0000000000"),
+ CLK_COR_SEQ_1_2 => ("0000000000"),
+ CLK_COR_SEQ_1_3 => ("0000000000"),
+ CLK_COR_SEQ_1_4 => ("0000000000"),
+ CLK_CORRECT_USE => ("FALSE"),
+ CLK_COR_SEQ_2_ENABLE => ("1111"),
+ CLK_COR_SEQ_2_1 => ("0000000000"),
+ CLK_COR_SEQ_2_2 => ("0000000000"),
+ CLK_COR_SEQ_2_3 => ("0000000000"),
+ CLK_COR_SEQ_2_4 => ("0000000000"),
+
+ ------------------------RX Channel Bonding Attributes----------------------
+ CHAN_BOND_KEEP_ALIGN => ("FALSE"),
+ CHAN_BOND_MAX_SKEW => (1),
+ CHAN_BOND_SEQ_LEN => (1),
+ CHAN_BOND_SEQ_1_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_2 => ("0000000000"),
+ CHAN_BOND_SEQ_1_3 => ("0000000000"),
+ CHAN_BOND_SEQ_1_4 => ("0000000000"),
+ CHAN_BOND_SEQ_1_ENABLE => ("1111"),
+ CHAN_BOND_SEQ_2_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_2 => ("0000000000"),
+ CHAN_BOND_SEQ_2_3 => ("0000000000"),
+ CHAN_BOND_SEQ_2_4 => ("0000000000"),
+ CHAN_BOND_SEQ_2_ENABLE => ("1111"),
+ CHAN_BOND_SEQ_2_USE => ("FALSE"),
+ FTS_DESKEW_SEQ_ENABLE => ("1111"),
+ FTS_LANE_DESKEW_CFG => ("1111"),
+ FTS_LANE_DESKEW_EN => ("FALSE"),
+
+ ---------------------------RX Margin Analysis Attributes----------------------------
+ ES_CONTROL => ("000000"),
+ ES_ERRDET_EN => ("FALSE"),
+ ES_EYE_SCAN_EN => ("TRUE"),
+ ES_HORZ_OFFSET => (x"000"),
+ ES_PMA_CFG => ("0000000000"),
+ ES_PRESCALE => ("00000"),
+ ES_QUALIFIER => (x"00000000000000000000"),
+ ES_QUAL_MASK => (x"00000000000000000000"),
+ ES_SDATA_MASK => (x"00000000000000000000"),
+ ES_VERT_OFFSET => ("000000000"),
+
+ -------------------------FPGA RX Interface Attributes-------------------------
+ RX_DATA_WIDTH => (20),
+
+ ---------------------------PMA Attributes----------------------------
+ OUTREFCLK_SEL_INV => ("11"),
+ PMA_RSV => (PMA_RSV_IN),
+ PMA_RSV2 => (x"2040"),
+ PMA_RSV3 => ("00"),
+ PMA_RSV4 => (x"00000000"),
+ RX_BIAS_CFG => ("000000000100"),
+ DMONITOR_CFG => (x"000A00"),
+ RX_CM_SEL => ("00"),
+ RX_CM_TRIM => ("000"),
+ RX_DEBUG_CFG => ("000000000000"),
+ RX_OS_CFG => ("0000010000000"),
+ TERM_RCAL_CFG => ("10000"),
+ TERM_RCAL_OVRD => ('0'),
+ TST_RSV => (x"00000000"),
+ RX_CLK25_DIV => (5),
+ TX_CLK25_DIV => (5),
+ UCODEER_CLR => ('0'),
+
+ ---------------------------PCI Express Attributes----------------------------
+ PCS_PCIE_EN => ("FALSE"),
+
+ ---------------------------PCS Attributes----------------------------
+ PCS_RSVD_ATTR => (PCS_RSVD_ATTR_IN),
+
+ -------------RX Buffer Attributes------------
+ RXBUF_ADDR_MODE => ("FAST"),
+ RXBUF_EIDLE_HI_CNT => ("1000"),
+ RXBUF_EIDLE_LO_CNT => ("0000"),
+ RXBUF_EN => ("TRUE"),
+ RX_BUFFER_CFG => ("000000"),
+ RXBUF_RESET_ON_CB_CHANGE => ("TRUE"),
+ RXBUF_RESET_ON_COMMAALIGN => ("FALSE"),
+ RXBUF_RESET_ON_EIDLE => ("FALSE"),
+ RXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
+ RXBUFRESET_TIME => ("00001"),
+ RXBUF_THRESH_OVFLW => (61),
+ RXBUF_THRESH_OVRD => ("FALSE"),
+ RXBUF_THRESH_UNDFLW => (4),
+ RXDLY_CFG => (x"001F"),
+ RXDLY_LCFG => (x"030"),
+ RXDLY_TAP_CFG => (x"0000"),
+ RXPH_CFG => (x"000000"),
+ RXPHDLY_CFG => (x"084020"),
+ RXPH_MONITOR_SEL => ("00000"),
+ RX_XCLK_SEL => ("RXREC"),
+ RX_DDI_SEL => ("000000"),
+ RX_DEFER_RESET_BUF_EN => ("TRUE"),
+
+ -----------------------CDR Attributes-------------------------
+
+ --For GTX only: Display Port, HBR/RBR- set RXCDR_CFG=72'h0380008bff40200002
+
+ --For GTX only: Display Port, HBR2 - set RXCDR_CFG=72'h03000023ff10200020
+ RXCDR_CFG => (x"03000023ff10100020"),
+ RXCDR_FR_RESET_ON_EIDLE => ('0'),
+ RXCDR_HOLD_DURING_EIDLE => ('0'),
+ RXCDR_PH_RESET_ON_EIDLE => ('0'),
+ RXCDR_LOCK_CFG => ("010101"),
+
+ -------------------RX Initialization and Reset Attributes-------------------
+ RXCDRFREQRESET_TIME => ("00001"),
+ RXCDRPHRESET_TIME => ("00001"),
+ RXISCANRESET_TIME => ("00001"),
+ RXPCSRESET_TIME => ("00001"),
+ RXPMARESET_TIME => ("00011"),
+
+ -------------------RX OOB Signaling Attributes-------------------
+ RXOOB_CFG => ("0000110"),
+
+ -------------------------RX Gearbox Attributes---------------------------
+ RXGEARBOX_EN => ("FALSE"),
+ GEARBOX_MODE => ("000"),
+
+ -------------------------PRBS Detection Attribute-----------------------
+ RXPRBS_ERR_LOOPBACK => ('0'),
+
+ -------------Power-Down Attributes----------
+ PD_TRANS_TIME_FROM_P2 => (x"03c"),
+ PD_TRANS_TIME_NONE_P2 => (x"3c"),
+ PD_TRANS_TIME_TO_P2 => (x"64"),
+
+ -------------RX OOB Signaling Attributes----------
+ SAS_MAX_COM => (64),
+ SAS_MIN_COM => (36),
+ SATA_BURST_SEQ_LEN => ("1111"),
+ SATA_BURST_VAL => ("100"),
+ SATA_EIDLE_VAL => ("100"),
+ SATA_MAX_BURST => (8),
+ SATA_MAX_INIT => (21),
+ SATA_MAX_WAKE => (7),
+ SATA_MIN_BURST => (4),
+ SATA_MIN_INIT => (12),
+ SATA_MIN_WAKE => (4),
+
+ -------------RX Fabric Clock Output Control Attributes----------
+ TRANS_TIME_RATE => (x"0E"),
+
+ --------------TX Buffer Attributes----------------
+ TXBUF_EN => ("TRUE"),
+ TXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
+ TXDLY_CFG => (x"001F"),
+ TXDLY_LCFG => (x"030"),
+ TXDLY_TAP_CFG => (x"0000"),
+ TXPH_CFG => (x"0780"),
+ TXPHDLY_CFG => (x"084020"),
+ TXPH_MONITOR_SEL => ("00000"),
+ TX_XCLK_SEL => ("TXOUT"),
+
+ -------------------------FPGA TX Interface Attributes-------------------------
+ TX_DATA_WIDTH => (20),
+
+ -------------------------TX Configurable Driver Attributes-------------------------
+ TX_DEEMPH0 => ("00000"),
+ TX_DEEMPH1 => ("00000"),
+ TX_EIDLE_ASSERT_DELAY => ("110"),
+ TX_EIDLE_DEASSERT_DELAY => ("100"),
+ TX_LOOPBACK_DRIVE_HIZ => ("FALSE"),
+ TX_MAINCURSOR_SEL => ('0'),
+ TX_DRIVE_MODE => ("DIRECT"),
+ TX_MARGIN_FULL_0 => ("1001110"),
+ TX_MARGIN_FULL_1 => ("1001001"),
+ TX_MARGIN_FULL_2 => ("1000101"),
+ TX_MARGIN_FULL_3 => ("1000010"),
+ TX_MARGIN_FULL_4 => ("1000000"),
+ TX_MARGIN_LOW_0 => ("1000110"),
+ TX_MARGIN_LOW_1 => ("1000100"),
+ TX_MARGIN_LOW_2 => ("1000010"),
+ TX_MARGIN_LOW_3 => ("1000000"),
+ TX_MARGIN_LOW_4 => ("1000000"),
+
+ -------------------------TX Gearbox Attributes--------------------------
+ TXGEARBOX_EN => ("FALSE"),
+
+ -------------------------TX Initialization and Reset Attributes--------------------------
+ TXPCSRESET_TIME => ("00001"),
+ TXPMARESET_TIME => ("00001"),
+
+ -------------------------TX Receiver Detection Attributes--------------------------
+ TX_RXDETECT_CFG => (x"1832"),
+ TX_RXDETECT_REF => ("100"),
+
+ ----------------------------CPLL Attributes----------------------------
+ CPLL_CFG => (x"BC07DC"),
+ CPLL_FBDIV => (4),
+ CPLL_FBDIV_45 => (5),
+ CPLL_INIT_CFG => (x"00001E"),
+ CPLL_LOCK_CFG => (x"01E8"),
+ CPLL_REFCLK_DIV => (1),
+ RXOUT_DIV => (4),
+ TXOUT_DIV => (4),
+ SATA_CPLL_CFG => ("VCO_3000MHZ"),
+
+ --------------RX Initialization and Reset Attributes-------------
+ RXDFELPMRESET_TIME => ("0001111"),
+
+ --------------RX Equalizer Attributes-------------
+ RXLPM_HF_CFG => ("00000011110000"),
+ RXLPM_LF_CFG => ("00000011110000"),
+ RX_DFE_GAIN_CFG => (x"020FEA"),
+ RX_DFE_H2_CFG => ("000000000000"),
+ RX_DFE_H3_CFG => ("000001000000"),
+ RX_DFE_H4_CFG => ("00011110000"),
+ RX_DFE_H5_CFG => ("00011100000"),
+ RX_DFE_KL_CFG => ("0000011111110"),
+ RX_DFE_LPM_CFG => (x"0904"),
+ RX_DFE_LPM_HOLD_DURING_EIDLE => ('0'),
+ RX_DFE_UT_CFG => ("10001111000000000"),
+ RX_DFE_VP_CFG => ("00011111100000011"),
+
+ -------------------------Power-Down Attributes-------------------------
+ RX_CLKMUX_PD => ('1'),
+ TX_CLKMUX_PD => ('1'),
+
+ -------------------------FPGA RX Interface Attribute-------------------------
+ RX_INT_DATAWIDTH => (0),
+
+ -------------------------FPGA TX Interface Attribute-------------------------
+ TX_INT_DATAWIDTH => (0),
+
+ ------------------TX Configurable Driver Attributes---------------
+ TX_QPI_STATUS_EN => ('0'),
+
+ -------------------------RX Equalizer Attributes--------------------------
+ RX_DFE_KL_CFG2 => (RX_DFE_KL_CFG2_IN),
+ RX_DFE_XYD_CFG => ("0000000000000"),
+
+ -------------------------TX Configurable Driver Attributes--------------------------
+ TX_PREDRIVER_MODE => ('0')
+
+
+ )
+ port map
+ (
+ --------------------------------- CPLL Ports -------------------------------
+ CPLLFBCLKLOST => CPLLFBCLKLOST_OUT,
+ CPLLLOCK => CPLLLOCK_OUT,
+ CPLLLOCKDETCLK => CPLLLOCKDETCLK_IN,
+ CPLLLOCKEN => tied_to_vcc_i,
+ CPLLPD => tied_to_ground_i,
+ CPLLREFCLKLOST => CPLLREFCLKLOST_OUT,
+ CPLLREFCLKSEL => "001",
+ CPLLRESET => CPLLRESET_IN,
+ GTRSVD => "0000000000000000",
+ PCSRSVDIN => "0000000000000000",
+ PCSRSVDIN2 => "00000",
+ PMARSVDIN => "00000",
+ PMARSVDIN2 => "00000",
+ TSTIN => "11111111111111111111",
+ TSTOUT => open,
+ ---------------------------------- Channel ---------------------------------
+ CLKRSVD => "0000",
+ -------------------------- Channel - Clocking Ports ------------------------
+ GTGREFCLK => tied_to_ground_i,
+ GTNORTHREFCLK0 => tied_to_ground_i,
+ GTNORTHREFCLK1 => tied_to_ground_i,
+ GTREFCLK0 => GTREFCLK0_IN,
+ GTREFCLK1 => tied_to_ground_i,
+ GTSOUTHREFCLK0 => tied_to_ground_i,
+ GTSOUTHREFCLK1 => tied_to_ground_i,
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR => DRPADDR_IN,
+ DRPCLK => DRPCLK_IN,
+ DRPDI => DRPDI_IN,
+ DRPDO => DRPDO_OUT,
+ DRPEN => DRPEN_IN,
+ DRPRDY => DRPRDY_OUT,
+ DRPWE => DRPWE_IN,
+ ------------------------------- Clocking Ports -----------------------------
+ GTREFCLKMONITOR => open,
+ QPLLCLK => QPLLCLK_IN,
+ QPLLREFCLK => QPLLREFCLK_IN,
+ RXSYSCLKSEL => "00",
+ TXSYSCLKSEL => "00",
+ --------------------------- Digital Monitor Ports --------------------------
+ DMONITOROUT => open,
+ ----------------- FPGA TX Interface Datapath Configuration ----------------
+ TX8B10BEN => tied_to_vcc_i,
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK => LOOPBACK_IN,
+ ----------------------------- PCI Express Ports ----------------------------
+ PHYSTATUS => open,
+ RXRATE => tied_to_ground_vec_i(2 downto 0),
+ RXVALID => open,
+ ------------------------------ Power-Down Ports ----------------------------
+ RXPD => "00",
+ TXPD => "00",
+ -------------------------- RX 8B/10B Decoder Ports -------------------------
+ SETERRSTATUS => tied_to_ground_i,
+ --------------------- RX Initialization and Reset Ports --------------------
+ EYESCANRESET => tied_to_ground_i,
+ RXUSERRDY => RXUSERRDY_IN,
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR => EYESCANDATAERROR_OUT,
+ EYESCANMODE => tied_to_ground_i,
+ EYESCANTRIGGER => tied_to_ground_i,
+ ------------------------- Receive Ports - CDR Ports ------------------------
+ RXCDRFREQRESET => tied_to_ground_i,
+ RXCDRHOLD => tied_to_ground_i,
+ RXCDRLOCK => RXCDRLOCK_OUT,
+ RXCDROVRDEN => tied_to_ground_i,
+-- RXCDRRESET => tied_to_ground_i,
+ RXCDRRESET => RXCDRRESET_IN,
+ RXCDRRESETRSV => tied_to_ground_i,
+ ------------------- Receive Ports - Clock Correction Ports -----------------
+ RXCLKCORCNT => open,
+ ---------- Receive Ports - FPGA RX Interface Datapath Configuration --------
+ RX8B10BEN => tied_to_vcc_i,
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXUSRCLK => RXUSRCLK_IN,
+ RXUSRCLK2 => RXUSRCLK2_IN,
+ ------------------ Receive Ports - FPGA RX interface Ports -----------------
+ RXDATA => rxdata_i,
+ ------------------- Receive Ports - Pattern Checker Ports ------------------
+ RXPRBSERR => open,
+ RXPRBSSEL => tied_to_ground_vec_i(2 downto 0),
+ ------------------- Receive Ports - Pattern Checker ports ------------------
+ RXPRBSCNTRESET => tied_to_ground_i,
+ -------------------- Receive Ports - RX Equalizer Ports -------------------
+ RXDFEXYDEN => tied_to_ground_i,
+ RXDFEXYDHOLD => tied_to_ground_i,
+ RXDFEXYDOVRDEN => tied_to_ground_i,
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXDISPERR(7 downto 2) => rxdisperr_float_i,
+ RXDISPERR(1 downto 0) => RXDISPERR_OUT,
+ RXNOTINTABLE(7 downto 2) => rxnotintable_float_i,
+ RXNOTINTABLE(1 downto 0) => RXNOTINTABLE_OUT,
+ --------------------------- Receive Ports - RX AFE -------------------------
+ GTXRXP => GTXRXP_IN,
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTXRXN => GTXRXN_IN,
+ ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
+ RXBUFRESET => tied_to_ground_i,
+ RXBUFSTATUS => open,
+ RXDDIEN => tied_to_ground_i,
+ RXDLYBYPASS => tied_to_vcc_i,
+ RXDLYEN => tied_to_ground_i,
+ RXDLYOVRDEN => tied_to_ground_i,
+ RXDLYSRESET => tied_to_ground_i,
+ RXDLYSRESETDONE => open,
+ RXPHALIGN => tied_to_ground_i,
+ RXPHALIGNDONE => open,
+ RXPHALIGNEN => tied_to_ground_i,
+ RXPHDLYPD => tied_to_ground_i,
+ RXPHDLYRESET => tied_to_ground_i,
+ RXPHMONITOR => open,
+ RXPHOVRDEN => tied_to_ground_i,
+ RXPHSLIPMONITOR => open,
+ RXSTATUS => open,
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED => RXBYTEISALIGNED_OUT,
+ RXBYTEREALIGN => open,
+ RXCOMMADET => RXCOMMADET_OUT,
+ RXCOMMADETEN => tied_to_vcc_i,
+ RXMCOMMAALIGNEN => tied_to_ground_i,
+ RXPCOMMAALIGNEN => tied_to_ground_i,
+ ------------------ Receive Ports - RX Channel Bonding Ports ----------------
+ RXCHANBONDSEQ => open,
+ RXCHBONDEN => tied_to_ground_i,
+ RXCHBONDLEVEL => tied_to_ground_vec_i(2 downto 0),
+ RXCHBONDMASTER => tied_to_ground_i,
+ RXCHBONDO => open,
+ RXCHBONDSLAVE => tied_to_ground_i,
+ ----------------- Receive Ports - RX Channel Bonding Ports ----------------
+ RXCHANISALIGNED => open,
+ RXCHANREALIGN => open,
+ --------------------- Receive Ports - RX Equalizer Ports -------------------
+ RXDFEAGCHOLD => tied_to_ground_i,
+ RXDFEAGCOVRDEN => tied_to_ground_i,
+ RXDFECM1EN => tied_to_ground_i,
+ RXDFELFHOLD => tied_to_ground_i,
+ RXDFELFOVRDEN => tied_to_ground_i,
+ RXDFELPMRESET => tied_to_ground_i,
+ RXDFETAP2HOLD => tied_to_ground_i,
+ RXDFETAP2OVRDEN => tied_to_ground_i,
+ RXDFETAP3HOLD => tied_to_ground_i,
+ RXDFETAP3OVRDEN => tied_to_ground_i,
+ RXDFETAP4HOLD => tied_to_ground_i,
+ RXDFETAP4OVRDEN => tied_to_ground_i,
+ RXDFETAP5HOLD => tied_to_ground_i,
+ RXDFETAP5OVRDEN => tied_to_ground_i,
+ RXDFEUTHOLD => tied_to_ground_i,
+ RXDFEUTOVRDEN => tied_to_ground_i,
+ RXDFEVPHOLD => tied_to_ground_i,
+ RXDFEVPOVRDEN => tied_to_ground_i,
+ RXDFEVSEN => tied_to_ground_i,
+ RXLPMLFKLOVRDEN => tied_to_ground_i,
+ RXMONITOROUT => open,
+ RXMONITORSEL => "00",
+ RXOSHOLD => tied_to_ground_i,
+ RXOSOVRDEN => tied_to_ground_i,
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD => RXLPMHFHOLD_IN,
+ RXLPMHFOVRDEN => tied_to_ground_i,
+ RXLPMLFHOLD => RXLPMLFHOLD_IN,
+ ------------ Receive Ports - RX Fabric ClocK Output Control Ports ----------
+ RXRATEDONE => open,
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK => RXOUTCLK_OUT,
+ RXOUTCLKFABRIC => open,
+ RXOUTCLKPCS => open,
+ RXOUTCLKSEL => "010",
+ ---------------------- Receive Ports - RX Gearbox Ports --------------------
+ RXDATAVALID => open,
+ RXHEADER => open,
+ RXHEADERVALID => open,
+ RXSTARTOFSEQ => open,
+ --------------------- Receive Ports - RX Gearbox Ports --------------------
+ RXGEARBOXSLIP => tied_to_ground_i,
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET => GTRXRESET_IN,
+ RXOOBRESET => tied_to_ground_i,
+ RXPCSRESET => tied_to_ground_i,
+ RXPMARESET => RXPMARESET_IN,
+ ------------------ Receive Ports - RX Margin Analysis ports ----------------
+ RXLPMEN => tied_to_vcc_i,
+ ------------------- Receive Ports - RX OOB Signaling ports -----------------
+ RXCOMSASDET => open,
+ RXCOMWAKEDET => open,
+ ------------------ Receive Ports - RX OOB Signaling ports -----------------
+ RXCOMINITDET => open,
+ ------------------ Receive Ports - RX OOB signalling Ports -----------------
+ RXELECIDLE => open,
+ RXELECIDLEMODE => "11",
+ ----------------- Receive Ports - RX Polarity Control Ports ----------------
+ RXPOLARITY => tied_to_ground_i,
+ ---------------------- Receive Ports - RX gearbox ports --------------------
+ RXSLIDE => RXSLIDE_IN,
+ ------------------- Receive Ports - RX8B/10B Decoder Ports -----------------
+ RXCHARISCOMMA => open,
+ RXCHARISK(7 downto 2) => rxcharisk_float_i,
+ RXCHARISK(1 downto 0) => RXCHARISK_OUT,
+ ------------------ Receive Ports - Rx Channel Bonding Ports ----------------
+ RXCHBONDI => "00000",
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE => RXRESETDONE_OUT,
+ -------------------------------- Rx AFE Ports ------------------------------
+ RXQPIEN => tied_to_ground_i,
+ RXQPISENN => open,
+ RXQPISENP => open,
+ --------------------------- TX Buffer Bypass Ports -------------------------
+ TXPHDLYTSTCLK => tied_to_ground_i,
+ ------------------------ TX Configurable Driver Ports ----------------------
+ TXPOSTCURSOR => "00000",
+ TXPOSTCURSORINV => tied_to_ground_i,
+ TXPRECURSOR => tied_to_ground_vec_i(4 downto 0),
+ TXPRECURSORINV => tied_to_ground_i,
+ TXQPIBIASEN => tied_to_ground_i,
+ TXQPISTRONGPDOWN => tied_to_ground_i,
+ TXQPIWEAKPUP => tied_to_ground_i,
+ --------------------- TX Initialization and Reset Ports --------------------
+ CFGRESET => tied_to_ground_i,
+ GTTXRESET => GTTXRESET_IN,
+ PCSRSVDOUT => open,
+ TXUSERRDY => TXUSERRDY_IN,
+ ---------------------- Transceiver Reset Mode Operation --------------------
+ GTRESETSEL => tied_to_ground_i,
+ RESETOVRD => tied_to_ground_i,
+ ---------------- Transmit Ports - 8b10b Encoder Control Ports --------------
+ TXCHARDISPMODE => tied_to_ground_vec_i(7 downto 0),
+ TXCHARDISPVAL => tied_to_ground_vec_i(7 downto 0),
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXUSRCLK => TXUSRCLK_IN,
+ TXUSRCLK2 => TXUSRCLK2_IN,
+ --------------------- Transmit Ports - PCI Express Ports -------------------
+ TXELECIDLE => tied_to_ground_i,
+ TXMARGIN => tied_to_ground_vec_i(2 downto 0),
+ TXRATE => tied_to_ground_vec_i(2 downto 0),
+ TXSWING => tied_to_ground_i,
+ ------------------ Transmit Ports - Pattern Generator Ports ----------------
+ TXPRBSFORCEERR => tied_to_ground_i,
+ ------------------ Transmit Ports - TX Buffer Bypass Ports -----------------
+ TXDLYBYPASS => tied_to_vcc_i,
+ TXDLYEN => tied_to_ground_i,
+ TXDLYHOLD => tied_to_ground_i,
+ TXDLYOVRDEN => tied_to_ground_i,
+ TXDLYSRESET => tied_to_ground_i,
+ TXDLYSRESETDONE => open,
+ TXDLYUPDOWN => tied_to_ground_i,
+ TXPHALIGN => tied_to_ground_i,
+ TXPHALIGNDONE => open,
+ TXPHALIGNEN => tied_to_ground_i,
+ TXPHDLYPD => tied_to_ground_i,
+ TXPHDLYRESET => tied_to_ground_i,
+ TXPHINIT => tied_to_ground_i,
+ TXPHINITDONE => open,
+ TXPHOVRDEN => tied_to_ground_i,
+ ---------------------- Transmit Ports - TX Buffer Ports --------------------
+ TXBUFSTATUS => open,
+ --------------- Transmit Ports - TX Configurable Driver Ports --------------
+ TXBUFDIFFCTRL => "100",
+ TXDEEMPH => tied_to_ground_i,
+ TXDIFFCTRL => "1000",
+ TXDIFFPD => tied_to_ground_i,
+ TXINHIBIT => tied_to_ground_i,
+ TXMAINCURSOR => "0000000",
+ TXPISOPD => tied_to_ground_i,
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA => txdata_i,
+ ---------------- Transmit Ports - TX Driver and OOB signaling --------------
+ GTXTXN => GTXTXN_OUT,
+ GTXTXP => GTXTXP_OUT,
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK => TXOUTCLK_OUT,
+ TXOUTCLKFABRIC => TXOUTCLKFABRIC_OUT,
+ TXOUTCLKPCS => TXOUTCLKPCS_OUT,
+ TXOUTCLKSEL => "010",
+ TXRATEDONE => open,
+ --------------------- Transmit Ports - TX Gearbox Ports --------------------
+ TXCHARISK(7 downto 2) => tied_to_ground_vec_i(5 downto 0),
+ TXCHARISK(1 downto 0) => TXCHARISK_IN,
+ TXGEARBOXREADY => open,
+ TXHEADER => tied_to_ground_vec_i(2 downto 0),
+ TXSEQUENCE => tied_to_ground_vec_i(6 downto 0),
+ TXSTARTSEQ => tied_to_ground_i,
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXPCSRESET => tied_to_ground_i,
+ TXPMARESET => tied_to_ground_i,
+ TXRESETDONE => TXRESETDONE_OUT,
+ ------------------ Transmit Ports - TX OOB signalling Ports ----------------
+ TXCOMFINISH => open,
+ TXCOMINIT => tied_to_ground_i,
+ TXCOMSAS => tied_to_ground_i,
+ TXCOMWAKE => tied_to_ground_i,
+ TXPDELECIDLEMODE => tied_to_ground_i,
+ ----------------- Transmit Ports - TX Polarity Control Ports ---------------
+ TXPOLARITY => tied_to_ground_i,
+ --------------- Transmit Ports - TX Receiver Detection Ports --------------
+ TXDETECTRX => tied_to_ground_i,
+ ------------------ Transmit Ports - TX8b/10b Encoder Ports -----------------
+ TX8B10BBYPASS => tied_to_ground_vec_i(7 downto 0),
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL => TXPRBSSEL_IN,
+ ----------------------- Tx Configurable Driver Ports ----------------------
+ TXQPISENN => open,
+ TXQPISENP => open
+
+ );
+
+ end RTL;
+
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd
new file mode 100644
index 000000000..bc1249fa1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/family7-gtx/wr_gtx_phy_family7.vhd
@@ -0,0 +1,505 @@
+-------------------------------------------------------------------------------
+-- Title : Deterministic Xilinx GTX wrapper - kintex-7 top module
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : wr_gtx_phy_family7.vhd
+-- Author : Peter Jansweijer, Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2013-04-08
+-- Last update: 2013-04-08
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Dual channel wrapper for Xilinx Kintex-7 GTX adapted for
+-- deterministic delays at 1.25 Gbps.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2013-04-08 0.1 PeterJ Initial release based on "wr_gtx_phy_virtex6.vhd"
+-- 2013-08-19 0.2 PeterJ Implemented a small delay before a rx_cdr_lock is propgated
+-- 2014-02_19 0.3 Peterj Added tx_locked_o to indicate that the cpll reached the lock status
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use work.gencores_pkg.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
+library work;
+--use work.gencores_pkg.all;
+use work.disparity_gen_pkg.all;
+
+entity wr_gtx_phy_family7 is
+
+ generic (
+ -- set to non-zero value to speed up the simulation by reducing some delays
+ g_simulation : integer := 0
+ );
+
+ port (
+ -- Dedicated reference 125 MHz clock for the GTX transceiver
+ clk_gtx_i : in std_logic;
+
+ -- TX path, synchronous to tx_out_clk_o (62.5 MHz):
+ tx_out_clk_o : out std_logic;
+ tx_locked_o : out std_logic;
+
+ -- data input (8 bits, not 8b10b-encoded)
+ tx_data_i : in std_logic_vector(15 downto 0);
+
+ -- 1 when tx_data_i contains a control code, 0 when it's a data byte
+ tx_k_i : in std_logic_vector(1 downto 0);
+
+ -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus).
+ -- Necessary for the PCS to generate proper frame termination sequences.
+ -- Generated for the 2nd byte (LSB) of tx_data_i.
+ tx_disparity_o : out std_logic;
+
+ -- Encoding error indication (1 = error, 0 = no error)
+ tx_enc_err_o : out std_logic;
+
+ -- RX path, synchronous to ch0_rx_rbclk_o.
+
+ -- RX recovered clock
+ rx_rbclk_o : out std_logic;
+
+ -- 8b10b-decoded data output. The data output must be kept invalid before
+ -- the transceiver is locked on the incoming signal to prevent the EP from
+ -- detecting a false carrier.
+ rx_data_o : out std_logic_vector(15 downto 0);
+
+ -- 1 when the byte on rx_data_o is a control code
+ rx_k_o : out std_logic_vector(1 downto 0);
+
+ -- encoding error indication
+ rx_enc_err_o : out std_logic;
+
+ -- RX bitslide indication, indicating the delay of the RX path of the
+ -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid.
+ rx_bitslide_o : out std_logic_vector(4 downto 0);
+
+ -- reset input, active hi
+ rst_i : in std_logic;
+ loopen_i : in std_logic_vector(2 downto 0);
+ tx_prbs_sel_i : in std_logic_vector(2 downto 0);
+ pad_txn_o : out std_logic;
+ pad_txp_o : out std_logic;
+
+ pad_rxn_i : in std_logic := '0';
+ pad_rxp_i : in std_logic := '0';
+
+ rdy_o : out std_logic);
+end wr_gtx_phy_family7;
+
+architecture rtl of wr_gtx_phy_family7 is
+
+ component WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT is
+ generic
+ (
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP : string := "TRUE"; -- Set to "TRUE" to speed up sim reset (Need Capital Letters!)
+ RX_DFE_KL_CFG2_IN : bit_vector := X"3010D90C";
+ PMA_RSV_IN : bit_vector := X"00018480";
+ PCS_RSVD_ATTR_IN : bit_vector := X"000000000000"
+ );
+ port
+ (
+ --------------------------------- CPLL Ports -------------------------------
+ CPLLFBCLKLOST_OUT : out std_logic;
+ CPLLLOCK_OUT : out std_logic;
+ CPLLLOCKDETCLK_IN : in std_logic;
+ CPLLREFCLKLOST_OUT : out std_logic;
+ CPLLRESET_IN : in std_logic;
+ -------------------------- Channel - Clocking Ports ------------------------
+ GTREFCLK0_IN : in std_logic;
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR_IN : in std_logic_vector(8 downto 0);
+ DRPCLK_IN : in std_logic;
+ DRPDI_IN : in std_logic_vector(15 downto 0);
+ DRPDO_OUT : out std_logic_vector(15 downto 0);
+ DRPEN_IN : in std_logic;
+ DRPRDY_OUT : out std_logic;
+ DRPWE_IN : in std_logic;
+ ------------------------------- Clocking Ports -----------------------------
+ QPLLCLK_IN : in std_logic;
+ QPLLREFCLK_IN : in std_logic;
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK_IN : in std_logic_vector(2 downto 0);
+ --------------------- RX Initialization and Reset Ports --------------------
+ RXUSERRDY_IN : in std_logic;
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR_OUT : out std_logic;
+ ------------------------- Receive Ports - CDR Ports ------------------------
+ RXCDRLOCK_OUT : out std_logic;
+ RXCDRRESET_IN : in std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXUSRCLK_IN : in std_logic;
+ RXUSRCLK2_IN : in std_logic;
+ ------------------ Receive Ports - FPGA RX interface Ports -----------------
+ RXDATA_OUT : out std_logic_vector(15 downto 0);
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXDISPERR_OUT : out std_logic_vector(1 downto 0);
+ RXNOTINTABLE_OUT : out std_logic_vector(1 downto 0);
+ --------------------------- Receive Ports - RX AFE -------------------------
+ GTXRXP_IN : in std_logic;
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTXRXN_IN : in std_logic;
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED_OUT : out std_logic;
+ RXCOMMADET_OUT : out std_logic;
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD_IN : in std_logic;
+ RXLPMLFHOLD_IN : in std_logic;
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK_OUT : out std_logic;
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET_IN : in std_logic;
+ RXPMARESET_IN : in std_logic;
+ ---------------------- Receive Ports - RX gearbox ports --------------------
+ RXSLIDE_IN : in std_logic;
+ ------------------- Receive Ports - RX8B/10B Decoder Ports -----------------
+ RXCHARISK_OUT : out std_logic_vector(1 downto 0);
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE_OUT : out std_logic;
+ --------------------- TX Initialization and Reset Ports --------------------
+ GTTXRESET_IN : in std_logic;
+ TXUSERRDY_IN : in std_logic;
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXUSRCLK_IN : in std_logic;
+ TXUSRCLK2_IN : in std_logic;
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA_IN : in std_logic_vector(15 downto 0);
+ ---------------- Transmit Ports - TX Driver and OOB signaling --------------
+ GTXTXN_OUT : out std_logic;
+ GTXTXP_OUT : out std_logic;
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK_OUT : out std_logic;
+ TXOUTCLKFABRIC_OUT : out std_logic;
+ TXOUTCLKPCS_OUT : out std_logic;
+ --------------------- Transmit Ports - TX Gearbox Ports --------------------
+ TXCHARISK_IN : in std_logic_vector(1 downto 0);
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXRESETDONE_OUT : out std_logic;
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL_IN : in std_logic_vector(2 downto 0)
+ );
+ end component WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT;
+
+ component BUFG
+ port (
+ O : out std_ulogic;
+ I : in std_ulogic);
+ end component;
+
+ component gtp_bitslide
+ generic (
+ g_simulation : integer;
+ g_target : string := "virtex6");
+ port (
+ gtp_rst_i : in std_logic;
+ gtp_rx_clk_i : in std_logic;
+ gtp_rx_comma_det_i : in std_logic;
+ gtp_rx_byte_is_aligned_i : in std_logic;
+ serdes_ready_i : in std_logic;
+ gtp_rx_slide_o : out std_logic;
+ gtp_rx_cdr_rst_o : out std_logic;
+ bitslide_o : out std_logic_vector(4 downto 0);
+ synced_o : out std_logic);
+ end component;
+
+ constant c_rxcdrlock_max : integer := 3;
+ constant c_reset_cnt_max : integer := 64; -- Reset pulse width 64 * 8 = 512 ns
+
+ signal rst_synced : std_logic;
+ signal rst_int : std_logic;
+-- signal trig0, trig1, trig2, trig3 : std_logic_vector(31 downto 0);
+
+ signal rx_rec_clk_bufin : std_logic;
+ signal rx_rec_clk : std_logic;
+ signal tx_out_clk_bufin : std_logic;
+ signal tx_out_clk : std_logic;
+ signal rx_cdr_lock : std_logic;
+ signal rx_cdr_lock_filtered : std_logic;
+
+ signal tx_rst_done, rx_rst_done : std_logic;
+ signal txpll_lockdet, rxpll_lockdet : std_logic;
+ signal pll_lockdet : std_logic;
+ signal cpll_lockdet : std_logic;
+ signal gtreset : std_logic;
+
+ signal rx_comma_det : std_logic;
+ signal rx_byte_is_aligned : std_logic;
+
+ signal everything_ready : std_logic;
+ signal rx_slide : std_logic;
+ signal rx_cdr_rst : std_logic;
+ signal rx_synced : std_logic;
+ signal rst_done : std_logic;
+ signal rst_done_n : std_logic;
+
+ signal rx_k_int : std_logic_vector(1 downto 0);
+ signal rx_data_int : std_logic_vector(15 downto 0);
+
+ signal rx_disp_err, rx_code_err : std_logic_vector(1 downto 0);
+
+ signal tx_is_k_swapped : std_logic_vector(1 downto 0);
+ signal tx_data_swapped : std_logic_vector(15 downto 0);
+
+ signal cur_disp : t_8b10b_disparity;
+
+begin -- rtl
+
+ -- There is a hen and egg problem with the reset in wr_core. Some reset signals are
+ -- synchronized by rx_rbclk_o but this signal is de-asserted by the same reset.
+ -- Therefore the rst_i is made edge sensitive and an internal reset pulse is generated for the PHY.
+ -- After this reset pulse signal rx_rbclk_o starts clocking again and the (still asserted) system
+ -- wide reset signal can by synchronized with this clock.
+
+ -- Note that the rst_i originates from the clk_sys domain. Synchronisation is not needed
+ -- when the clk_sys is phase locked with clk_gtx_i (which is usually the case) but is a safety
+ -- measure. Add a false path for U_EdgeDet_rst_i_reg_sync0 to the timing constraints.
+ U_EdgeDet_rst_i : gc_sync_ffs port map (
+ clk_i => clk_gtx_i,
+ rst_n_i => '1',
+ data_i => rst_i,
+ ppulse_o => rst_synced);
+
+ p_reset_pulse : process(clk_gtx_i, rst_synced)
+ variable reset_cnt : integer range 0 to c_reset_cnt_max;
+ begin
+ if(rst_synced = '1') then
+ reset_cnt := 0;
+ rst_int <= '1';
+ elsif rising_edge(clk_gtx_i) then
+ if reset_cnt /= c_reset_cnt_max then
+ reset_cnt := reset_cnt + 1;
+ rst_int <= '1';
+ else
+ rst_int <= '0';
+ end if;
+ end if;
+ end process;
+
+ tx_enc_err_o <= '0';
+
+ U_BUF_TxOutClk : BUFG
+ port map (
+ I => tx_out_clk_bufin,
+ O => tx_out_clk);
+
+ tx_out_clk_o <= tx_out_clk;
+ tx_locked_o <= cpll_lockdet;
+
+ U_BUF_RxRecClk : BUFG
+ port map (
+ I => rx_rec_clk_bufin,
+ O => rx_rec_clk);
+
+ rx_rbclk_o <= rx_rec_clk;
+
+ tx_is_k_swapped <= tx_k_i(0) & tx_k_i(1);
+ tx_data_swapped <= tx_data_i(7 downto 0) & tx_data_i(15 downto 8);
+
+U_GTX_INST : WHITERABBIT_GTXE2_CHANNEL_WRAPPER_GT
+ generic map
+ (
+ -- Simulation attributes
+ GT_SIM_GTRESET_SPEEDUP => "TRUE" -- Set to "true" to speed up sim reset
+ )
+ port map
+ (
+ --------------------------------- CPLL Ports -------------------------------
+ CPLLFBCLKLOST_OUT => open,
+ CPLLLOCK_OUT => cpll_lockdet,
+ CPLLLOCKDETCLK_IN => '0',
+ CPLLREFCLKLOST_OUT => open,
+ CPLLRESET_IN => rst_int,
+ -------------------------- Channel - Clocking Ports ------------------------
+ GTREFCLK0_IN => clk_gtx_i,
+ ---------------------------- Channel - DRP Ports --------------------------
+ DRPADDR_IN => (Others => '0'),
+ DRPCLK_IN => '0',
+ DRPDI_IN => (Others => '0'),
+ DRPDO_OUT => open,
+ DRPEN_IN => '0',
+ DRPRDY_OUT => open,
+ DRPWE_IN => '0',
+ ------------------------------- Clocking Ports -----------------------------
+ QPLLCLK_IN => '0',
+ QPLLREFCLK_IN => '0',
+ ------------------------------- Loopback Ports -----------------------------
+ LOOPBACK_IN => loopen_i,
+ --------------------- RX Initialization and Reset Ports --------------------
+-- RXUSERRDY_IN => rx_cdr_lock,
+ RXUSERRDY_IN => rx_cdr_lock_filtered,
+ -------------------------- RX Margin Analysis Ports ------------------------
+ EYESCANDATAERROR_OUT => open,
+ ------------------------- Receive Ports - CDR Ports ------------------------
+ RXCDRLOCK_OUT => rx_cdr_lock,
+ RXCDRRESET_IN => rx_cdr_rst, -- this port cannot be generated by the CoreGen GUI, it cannot be turnes "on" : in std_logic;
+ ------------------ Receive Ports - FPGA RX Interface Ports -----------------
+ RXUSRCLK_IN => rx_rec_clk,
+ RXUSRCLK2_IN => rx_rec_clk,
+ ------------------ Receive Ports - FPGA RX interface Ports -----------------
+ RXDATA_OUT => rx_data_int,
+ ------------------ Receive Ports - RX 8B/10B Decoder Ports -----------------
+ RXDISPERR_OUT => rx_disp_err,
+ RXNOTINTABLE_OUT => rx_code_err,
+ --------------------------- Receive Ports - RX AFE -------------------------
+ GTXRXP_IN => pad_rxp_i,
+ ------------------------ Receive Ports - RX AFE Ports ----------------------
+ GTXRXN_IN => pad_rxn_i,
+ -------------- Receive Ports - RX Byte and Word Alignment Ports ------------
+ RXBYTEISALIGNED_OUT => rx_byte_is_aligned,
+ RXCOMMADET_OUT => rx_comma_det,
+ --------------------- Receive Ports - RX Equilizer Ports -------------------
+ RXLPMHFHOLD_IN => '0', -- this port is always generated by the CoreGen GUI and cannot be turned "off"
+ RXLPMLFHOLD_IN => '0', -- this port is always generated by the CoreGen GUI and cannot be turned "off"
+ --------------- Receive Ports - RX Fabric Output Control Ports -------------
+ RXOUTCLK_OUT => rx_rec_clk_bufin,
+ ------------- Receive Ports - RX Initialization and Reset Ports ------------
+ GTRXRESET_IN => gtreset,
+ RXPMARESET_IN => '0',
+ ---------------------- Receive Ports - RX gearbox ports --------------------
+ RXSLIDE_IN => rx_slide,
+ ------------------- Receive Ports - RX8B/10B Decoder Ports -----------------
+ RXCHARISK_OUT => rx_k_int,
+ -------------- Receive Ports -RX Initialization and Reset Ports ------------
+ RXRESETDONE_OUT => rx_rst_done,
+ --------------------- TX Initialization and Reset Ports --------------------
+ GTTXRESET_IN => gtreset,
+ TXUSERRDY_IN => cpll_lockdet,
+ ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
+ TXUSRCLK_IN => tx_out_clk,
+ TXUSRCLK2_IN => tx_out_clk,
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA_IN => tx_data_swapped,
+-- TXDATA_IN => tx_data_i,
+ ---------------- Transmit Ports - TX Driver and OOB signaling --------------
+ GTXTXN_OUT => pad_txn_o,
+ GTXTXP_OUT => pad_txp_o,
+ ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
+ TXOUTCLK_OUT => tx_out_clk_bufin,
+ TXOUTCLKFABRIC_OUT => open,
+ TXOUTCLKPCS_OUT => open,
+ --------------------- Transmit Ports - TX Gearbox Ports --------------------
+ TXCHARISK_IN => tx_is_k_swapped,
+-- TXCHARISK_IN => tx_k_i,
+ ------------- Transmit Ports - TX Initialization and Reset Ports -----------
+ TXRESETDONE_OUT => tx_rst_done,
+ ------------------ Transmit Ports - pattern Generator Ports ----------------
+ TXPRBSSEL_IN => tx_prbs_sel_i
+ );
+
+ U_Bitslide : gtp_bitslide
+ generic map (
+ g_simulation => g_simulation,
+ g_target => "kintex7")
+ port map (
+ gtp_rst_i => rst_done_n,
+ gtp_rx_clk_i => rx_rec_clk,
+ gtp_rx_comma_det_i => rx_comma_det,
+ gtp_rx_byte_is_aligned_i => rx_byte_is_aligned,
+ serdes_ready_i => everything_ready,
+ gtp_rx_slide_o => rx_slide,
+ gtp_rx_cdr_rst_o => rx_cdr_rst,
+ bitslide_o => rx_bitslide_o,
+ synced_o => rx_synced);
+
+ txpll_lockdet <= cpll_lockdet;
+-- rxpll_lockdet <= rx_cdr_lock;
+ rxpll_lockdet <= rx_cdr_lock_filtered;
+ gtreset <= not cpll_lockdet;
+ rst_done <= rx_rst_done and tx_rst_done;
+ rst_done_n <= not rst_done;
+ pll_lockdet <= txpll_lockdet and rxpll_lockdet;
+ everything_ready <= rst_done and pll_lockdet;
+ rdy_o <= everything_ready;
+
+-- trig2(3) <= rx_rst_done;
+-- trig2(4) <= tx_rst_done;
+-- trig2(5) <= txpll_lockdet;
+-- trig2(6) <= rxpll_lockdet;
+-- trig2(7) <= '1';
+
+ -- 2013 August 19: Peterj
+ -- The family 7 GTX seem to have an artifact in rx_cdr_lock. For no reason lock may be lost for a clock cycle
+ -- There is not much information on the web but examples of "Series-7 Integrated Block for PCI Express" (pipe_user.v)
+ -- show that Xilinx itself implements a small delay before an rx_cdr_lock is propagated.
+ p_rx_cdr_lock_filter : process(rx_rec_clk, rst_int)
+ variable rxcdrlock_cnt : integer range 0 to c_rxcdrlock_max;
+ begin
+ if(rst_int = '1') then
+ rxcdrlock_cnt := 0;
+ rx_cdr_lock_filtered <= '0';
+ elsif rising_edge(rx_rec_clk) then
+ if rx_cdr_lock = '0' then
+ if rxcdrlock_cnt /= c_rxcdrlock_max then
+ rxcdrlock_cnt := rxcdrlock_cnt + 1;
+ else
+ rx_cdr_lock_filtered <= '0';
+ end if;
+ else
+ rxcdrlock_cnt := 0;
+ rx_cdr_lock_filtered <= '1';
+ end if;
+ end if;
+ end process;
+
+ p_gen_rx_outputs : process(rx_rec_clk, rst_done_n)
+ begin
+ if(rst_done_n = '1') then
+ rx_data_o <= (others => '0');
+ rx_k_o <= (others => '0');
+ rx_enc_err_o <= '0';
+ elsif rising_edge(rx_rec_clk) then
+ if(everything_ready = '1' and rx_synced = '1') then
+ rx_data_o <= rx_data_int(7 downto 0) & rx_data_int(15 downto 8);
+ rx_k_o <= rx_k_int(0) & rx_k_int(1);
+ rx_enc_err_o <= rx_disp_err(0) or rx_disp_err(1) or rx_code_err(0) or rx_code_err(1);
+ else
+ rx_data_o <= (others => '1');
+ rx_k_o <= (others => '1');
+ rx_enc_err_o <= '1';
+ end if;
+ end if;
+ end process;
+
+ p_gen_tx_disparity : process(tx_out_clk, rst_done_n)
+ begin
+ if rising_edge(tx_out_clk) then
+ if rst_done_n = '1' then
+ cur_disp <= RD_MINUS;
+ else
+ cur_disp <= f_next_8b10b_disparity16(cur_disp, tx_k_i, tx_data_i);
+ end if;
+ end if;
+ end process;
+
+ tx_disparity_o <= to_std_logic(cur_disp);
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd
new file mode 100644
index 000000000..07ca69aa5
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/gtp_bitslide.vhd
@@ -0,0 +1,230 @@
+-------------------------------------------------------------------------------
+-- Title : Deterministic Xilinx GTP wrapper - bitslide state machine
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : gtp_bitslide.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2013-12-20
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Module implements a manual bitslide alignment state machine and
+-- provides the obtained bitslide value to the MAC.
+-------------------------------------------------------------------------------
+--
+-- Original EASE design (c) 2010 NIKHEF / Peter Jansweijer and Henk Peek
+-- VHDL port (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version
+--
+-- This source 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 Lesser General Public License for more
+-- details
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-11-18 0.4 twlostow Ported EASE design to VHDL
+-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP
+-- 2011-09-12 0.6 twlostow Virtex6 port
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity gtp_bitslide is
+
+ generic (
+-- set to non-zero value to enable some simulation speedups (reduce delays)
+ g_simulation : integer;
+ g_target : string := "spartan6");
+
+ port (
+ gtp_rst_i : in std_logic;
+
+-- GTP
+ gtp_rx_clk_i : in std_logic;
+
+-- '1' indicates that the GTP has detected a comma in the incoming serial stream
+ gtp_rx_comma_det_i : in std_logic;
+
+
+ gtp_rx_byte_is_aligned_i : in std_logic;
+
+-- GTP ready flag (PLL locked and RX signal present)
+ serdes_ready_i : in std_logic;
+
+-- GTP manual bitslip control line
+ gtp_rx_slide_o : out std_logic;
+
+-- GTP CDR reset, asserted when the link is lost to set the bitslide to a known
+-- value
+ gtp_rx_cdr_rst_o : out std_logic;
+
+-- Current bitslide, in UIs
+ bitslide_o : out std_logic_vector(4 downto 0);
+
+-- '1' when the bitsliding has been completed and the link is up
+ synced_o : out std_logic
+ );
+
+end gtp_bitslide;
+
+
+architecture behavioral of gtp_bitslide is
+
+
+
+ function f_eval_sync_detect_threshold
+ return integer is
+ begin
+ if(g_simulation /= 0) then
+ return 256;
+ else
+ return 4000000;
+ end if;
+ end f_eval_sync_detect_threshold;
+
+ function f_eval_pause_tics return integer is
+ begin
+ if(g_target = "spartan6") then
+ return 31;
+ else
+ return 63;
+ end if;
+ end f_eval_pause_tics;
+
+ function f_max_bts return integer is
+ begin
+ if(g_target = "spartan6") then
+ return 10;
+ else
+ return 20;
+ end if;
+ end f_max_bts;
+
+ constant c_pause_tics : integer := f_eval_pause_tics;
+ constant c_sync_detect_threshold : integer := f_eval_sync_detect_threshold;
+ constant c_max_bts : integer := f_max_bts;
+
+
+ type t_bitslide_fsm_state is (S_SYNC_LOST, S_STABILIZE, S_SLIDE, S_PAUSE, S_GOT_SYNC, S_RESET_CDR);
+ signal cur_slide : unsigned(4 downto 0);
+ signal state : t_bitslide_fsm_state;
+ signal counter : unsigned(23 downto 0);
+
+ signal commas_missed : unsigned(4 downto 0);
+
+begin -- behavioral
+
+ p_do_slide : process(gtp_rx_clk_i, gtp_rst_i)
+ begin
+ if gtp_rst_i = '1' then
+ state <= S_SYNC_LOST;
+ gtp_rx_slide_o <= '0';
+ counter <= (others => '0');
+ synced_o <= '0';
+ gtp_rx_cdr_rst_o <= '0';
+ elsif rising_edge(gtp_rx_clk_i) then
+
+ if(serdes_ready_i = '0') then
+ state <= S_SYNC_LOST;
+ end if;
+
+ case state is
+
+-- State: synchronization lost. Waits until a comma pattern is detected
+ when S_SYNC_LOST =>
+ cur_slide <= (others => '0');
+ counter <= (others => '0');
+ gtp_rx_slide_o <= '0';
+ synced_o <= '0';
+ gtp_rx_cdr_rst_o <= '0';
+ commas_missed <= (others => '0');
+
+ if(gtp_rx_comma_det_i = '1') then
+ state <= S_STABILIZE;
+ end if;
+
+-- State: stabilize:
+
+ when S_STABILIZE =>
+
+
+ if(gtp_rx_comma_det_i = '1') then
+ counter <= counter + 1;
+ commas_missed <= (others => '0');
+ else
+
+ commas_missed <= commas_missed + 1;
+ if(commas_missed(3) = '1') then
+ state <= S_SYNC_LOST;
+ end if;
+ end if;
+
+ if(counter = to_unsigned(c_sync_detect_threshold, counter'length)) then
+ counter <= (others => '0');
+ state <= S_PAUSE;
+ end if;
+
+ if(serdes_ready_i = '0') then
+ state <= S_SYNC_LOST;
+ end if;
+
+ when S_SLIDE =>
+ if (cur_slide < c_max_bts-1) then
+ cur_slide <= cur_slide + 1;
+ else
+ cur_slide <= (others=>'0');
+ end if;
+ gtp_rx_slide_o <= '1';
+ counter <= (others => '0');
+
+ state <= S_PAUSE;
+
+ if(serdes_ready_i = '0') then
+ state <= S_SYNC_LOST;
+ end if;
+
+ when S_PAUSE =>
+ counter <= counter + 1;
+ gtp_rx_slide_o <= '0';
+
+ if(counter = to_unsigned(c_pause_tics, counter'length)) then
+
+ if(gtp_rx_byte_is_aligned_i = '0') then
+ state <= S_SLIDE;
+ else
+ state <= S_GOT_SYNC;
+ end if;
+ end if;
+
+ when S_GOT_SYNC =>
+ gtp_rx_slide_o <= '0';
+ bitslide_o <= std_logic_vector(cur_slide(4 downto 0));
+ synced_o <= '1';
+ if(gtp_rx_byte_is_aligned_i = '0' or serdes_ready_i = '0') then
+ gtp_rx_cdr_rst_o <= '1';
+ state <= S_SYNC_LOST;
+ end if;
+ when others => null;
+ end case;
+ end if;
+ end process;
+
+
+
+end behavioral;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd
new file mode 100644
index 000000000..a95ecdd22
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/gtp_phase_align.vhd
@@ -0,0 +1,137 @@
+------------------------------------------------------------------------------
+-- Title : Deterministic Xilinx GTP wrapper - TX phase alignment
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : gtp_phase_align.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2011-09-12
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: TX phase alignment state machine, as recommended by Xilinx.
+-------------------------------------------------------------------------------
+--
+-- Original EASE design (c) 2010 NIKHEF / Peter Jansweijer and Henk Peek
+-- VHDL port (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version
+--
+-- This source 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 Lesser General Public License for more
+-- details
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-11-18 0.4 twlostow Ported EASE design to VHDL
+-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity gtp_phase_align is
+ generic
+ (g_simulation : integer);
+
+ port (
+ gtp_rst_i : in std_logic;
+ gtp_tx_clk_i : in std_logic;
+
+ gtp_tx_en_pma_phase_align_o : out std_logic;
+ gtp_tx_pma_set_phase_o : out std_logic;
+
+ align_en_i : in std_logic;
+ align_done_o : out std_logic
+ );
+
+end gtp_phase_align;
+
+architecture behavioral of gtp_phase_align is
+
+ constant c_wait_en_phase_align : integer := 32;
+ constant c_wait_set_phase_align : integer := 512;
+ constant c_phase_align_duration : integer := 8192;
+
+
+ type t_align_state is (S_ALIGN_IDLE, S_ALIGN_PAUSE, S_ALIGN_WAIT, S_ALIGN_SET_PHASE, S_ALIGN_DONE);
+
+ signal counter : unsigned(13 downto 0);
+ signal state : t_align_state;
+
+
+begin -- behavioral
+
+ p_align : process(gtp_tx_clk_i, gtp_rst_i)
+ begin
+ if rising_edge(gtp_tx_clk_i) then
+ if gtp_rst_i = '1' then
+ gtp_tx_en_pma_phase_align_o <= '0';
+ gtp_tx_pma_set_phase_o <= '0';
+ counter <= (others => '0');
+ align_done_o <= '0';
+ state <= S_ALIGN_IDLE;
+ else
+ if(align_en_i = '0') then
+ state <= S_ALIGN_IDLE;
+ else
+
+ case (state) is
+ when S_ALIGN_IDLE =>
+ gtp_tx_en_pma_phase_align_o <= '0';
+ gtp_tx_pma_set_phase_o <= '0';
+ counter <= (others => '0');
+ align_done_o <= '0';
+
+ if(align_en_i = '1') then
+ state <= S_ALIGN_PAUSE;
+ end if;
+
+ when S_ALIGN_PAUSE =>
+ counter <= counter + 1;
+ if(counter = to_unsigned(c_wait_en_phase_align, counter'length)) then
+ state <= S_ALIGN_WAIT;
+ end if;
+
+ when S_ALIGN_WAIT =>
+ gtp_tx_en_pma_phase_align_o <= '1';
+ counter <= counter + 1;
+ if(counter = to_unsigned(c_wait_en_phase_align + c_wait_set_phase_align, counter'length)) then
+ state <= S_ALIGN_SET_PHASE;
+ end if;
+
+ when S_ALIGN_SET_PHASE =>
+ counter <= counter +1;
+ gtp_tx_pma_set_phase_o <= '1';
+
+ if(counter = to_unsigned(c_wait_en_phase_align + c_wait_set_phase_align + c_phase_align_duration, counter'length)) then
+ state <= S_ALIGN_DONE;
+ end if;
+
+ when S_ALIGN_DONE =>
+ gtp_tx_pma_set_phase_o <= '0';
+ counter <= (others => '0');
+ align_done_o <= '1';
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+end behavioral;
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd
new file mode 100644
index 000000000..9a97d3d91
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/whiterabbitgtp_wrapper_tile_spartan6.vhd
@@ -0,0 +1,712 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+library UNISIM;
+use UNISIM.VCOMPONENTS.all;
+
+--***************************** Entity Declaration ****************************
+
+entity WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 is
+ generic
+ (
+ TILE_SIM_GTPRESET_SPEEDUP : integer := 0; -- Set to 1 to speed up sim reset
+ TILE_CLK25_DIVIDER_0 : integer := 4;
+ TILE_CLK25_DIVIDER_1 : integer := 4;
+ TILE_PLL_DIVSEL_FB_0 : integer := 5;
+ TILE_PLL_DIVSEL_FB_1 : integer := 5;
+ TILE_PLL_DIVSEL_REF_0 : integer := 2;
+ TILE_PLL_DIVSEL_REF_1 : integer := 2;
+ TILE_PLL_SOURCE_0 : string := "PLL0";
+ TILE_PLL_SOURCE_1 : string := "PLL1"
+ );
+ port
+ (
+ ------------------------ Loopback and Powerdown Ports ----------------------
+ LOOPBACK0_IN : in std_logic_vector(2 downto 0);
+ LOOPBACK1_IN : in std_logic_vector(2 downto 0);
+ REFCLKOUT0_OUT : out std_logic;
+ REFCLKOUT1_OUT : out std_logic;
+ --------------------------------- PLL Ports --------------------------------
+ CLK00_IN : in std_logic;
+ CLK01_IN : in std_logic;
+ CLK10_IN : in std_logic;
+ CLK11_IN : in std_logic;
+ GTPRESET0_IN : in std_logic;
+ GTPRESET1_IN : in std_logic;
+ PLLLKDET0_OUT : out std_logic;
+ PLLLKDET1_OUT : out std_logic;
+ RESETDONE0_OUT : out std_logic;
+ RESETDONE1_OUT : out std_logic;
+ ----------------------- Receive Ports - 8b10b Decoder ----------------------
+ RXCHARISK0_OUT : out std_logic;
+ RXCHARISK1_OUT : out std_logic;
+ RXDISPERR0_OUT : out std_logic;
+ RXDISPERR1_OUT : out std_logic;
+ RXNOTINTABLE0_OUT : out std_logic;
+ RXNOTINTABLE1_OUT : out std_logic;
+ --------------- Receive Ports - Comma Detection and Alignment --------------
+ RXBYTEISALIGNED0_OUT : out std_logic;
+ RXBYTEISALIGNED1_OUT : out std_logic;
+ RXCOMMADET0_OUT : out std_logic;
+ RXCOMMADET1_OUT : out std_logic;
+ RXSLIDE0_IN : in std_logic;
+ RXSLIDE1_IN : in std_logic;
+ ------------------- Receive Ports - RX Data Path interface -----------------
+ RXDATA0_OUT : out std_logic_vector(7 downto 0);
+ RXDATA1_OUT : out std_logic_vector(7 downto 0);
+ RXUSRCLK0_IN : in std_logic;
+ RXUSRCLK1_IN : in std_logic;
+ RXUSRCLK20_IN : in std_logic;
+ RXUSRCLK21_IN : in std_logic;
+ ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
+ RXCDRRESET0_IN : in std_logic;
+ RXCDRRESET1_IN : in std_logic;
+ RXN0_IN : in std_logic;
+ RXN1_IN : in std_logic;
+ RXP0_IN : in std_logic;
+ RXP1_IN : in std_logic;
+ ---------------------------- TX/RX Datapath Ports --------------------------
+ GTPCLKFBEAST_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKFBWEST_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKOUT0_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKOUT1_OUT : out std_logic_vector(1 downto 0);
+ ------------------- Transmit Ports - 8b10b Encoder Control -----------------
+ TXCHARISK0_IN : in std_logic;
+ TXCHARISK1_IN : in std_logic;
+
+ TXCHARDISPMODE0_IN: in std_logic;
+ TXCHARDISPMODE1_IN: in std_logic;
+
+ TXCHARDISPVAL0_IN: in std_logic;
+ TXCHARDISPVAL1_IN: in std_logic;
+
+ TXRUNDISP0_OUT : out std_logic_vector(3 downto 0);
+ TXRUNDISP1_OUT : out std_logic_vector(3 downto 0);
+
+ --------------- Transmit Ports - TX Buffer and Phase Alignment -------------
+ TXENPMAPHASEALIGN0_IN : in std_logic;
+ TXENPMAPHASEALIGN1_IN : in std_logic;
+ TXPMASETPHASE0_IN : in std_logic;
+ TXPMASETPHASE1_IN : in std_logic;
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA0_IN : in std_logic_vector(7 downto 0);
+ TXDATA1_IN : in std_logic_vector(7 downto 0);
+ TXUSRCLK0_IN : in std_logic;
+ TXUSRCLK1_IN : in std_logic;
+ TXUSRCLK20_IN : in std_logic;
+ TXUSRCLK21_IN : in std_logic;
+ --------------- Transmit Ports - TX Driver and OOB signalling --------------
+ TXN0_OUT : out std_logic;
+ TXN1_OUT : out std_logic;
+ TXP0_OUT : out std_logic;
+ TXP1_OUT : out std_logic;
+ --------------- Transmit Ports - PRBS Generator ----------------------------
+ TXENPRBSTST0_IN : in std_logic_vector(2 downto 0);
+ TXENPRBSTST1_IN : in std_logic_vector(2 downto 0)
+
+ );
+
+
+end WHITERABBITGTP_WRAPPER_TILE_SPARTAN6;
+
+architecture RTL of WHITERABBITGTP_WRAPPER_TILE_SPARTAN6 is
+
+--**************************** Signal Declarations ****************************
+
+ -- ground and tied_to_vcc_i signals
+ signal tied_to_ground_i : std_logic;
+ signal tied_to_ground_vec_i : std_logic_vector(63 downto 0);
+ signal tied_to_vcc_i : std_logic;
+ signal tied_to_vcc_vec_i : std_logic_vector(63 downto 0);
+
+
+
+ -- RX Datapath signals
+ signal rxdata0_i : std_logic_vector(31 downto 0);
+ signal rxchariscomma0_float_i : std_logic_vector(2 downto 0);
+ signal rxcharisk0_float_i : std_logic_vector(2 downto 0);
+ signal rxdisperr0_float_i : std_logic_vector(2 downto 0);
+ signal rxnotintable0_float_i : std_logic_vector(2 downto 0);
+ signal rxrundisp0_float_i : std_logic_vector(2 downto 0);
+
+
+ -- TX Datapath signals
+ signal txdata0_i : std_logic_vector(31 downto 0);
+ signal txkerr0_float_i : std_logic_vector(2 downto 0);
+ signal txrundisp0_float_i : std_logic_vector(2 downto 0);
+
+
+ -- RX Datapath signals
+ signal rxdata1_i : std_logic_vector(31 downto 0);
+ signal rxchariscomma1_float_i : std_logic_vector(2 downto 0);
+ signal rxcharisk1_float_i : std_logic_vector(2 downto 0);
+ signal rxdisperr1_float_i : std_logic_vector(2 downto 0);
+ signal rxnotintable1_float_i : std_logic_vector(2 downto 0);
+ signal rxrundisp1_float_i : std_logic_vector(2 downto 0);
+
+
+ -- TX Datapath signals
+ signal txdata1_i : std_logic_vector(31 downto 0);
+ signal txkerr1_float_i : std_logic_vector(2 downto 0);
+ signal txrundisp1_float_i : std_logic_vector(2 downto 0);
+
+--******************************** Main Body of Code***************************
+
+begin
+
+ --------------------------- Static signal Assignments ---------------------
+
+ tied_to_ground_i <= '0';
+ tied_to_ground_vec_i(63 downto 0) <= (others => '0');
+ tied_to_vcc_i <= '1';
+ tied_to_vcc_vec_i(63 downto 0) <= (others => '1');
+
+ ------------------- GTP Datapath byte mapping -----------------
+
+ RXDATA0_OUT <= rxdata0_i(7 downto 0);
+
+ txdata0_i <= (tied_to_ground_vec_i(23 downto 0) & TXDATA0_IN);
+
+ RXDATA1_OUT <= rxdata1_i(7 downto 0);
+
+ txdata1_i <= (tied_to_ground_vec_i(23 downto 0) & TXDATA1_IN);
+
+
+
+ ----------------------------- GTPA1_DUAL Instance --------------------------
+
+ gtpa1_dual_i : GTPA1_DUAL
+ generic map
+ (
+
+ --_______________________ Simulation-Only Attributes ___________________
+
+ SIM_RECEIVER_DETECT_PASS => (true),
+ SIM_TX_ELEC_IDLE_LEVEL => ("X"),
+ SIM_VERSION => ("2.0"),
+ SIM_REFCLK0_SOURCE => ("000"),
+ SIM_REFCLK1_SOURCE => ("000"),
+ SIM_GTPRESET_SPEEDUP => (TILE_SIM_GTPRESET_SPEEDUP),
+ CLK25_DIVIDER_0 => (TILE_CLK25_DIVIDER_0),
+ CLK25_DIVIDER_1 => (TILE_CLK25_DIVIDER_1),
+ PLL_DIVSEL_FB_0 => (TILE_PLL_DIVSEL_FB_0),
+ PLL_DIVSEL_FB_1 => (TILE_PLL_DIVSEL_FB_1),
+ PLL_DIVSEL_REF_0 => (TILE_PLL_DIVSEL_REF_0),
+ PLL_DIVSEL_REF_1 => (TILE_PLL_DIVSEL_REF_1),
+
+
+ --PLL Attributes
+ CLKINDC_B_0 => (true),
+ CLKRCV_TRST_0 => (true),
+ OOB_CLK_DIVIDER_0 => (4),
+ PLL_COM_CFG_0 => (x"21680a"),
+ PLL_CP_CFG_0 => (x"00"),
+ PLL_RXDIVSEL_OUT_0 => (2),
+ PLL_SATA_0 => (false),
+ PLL_SOURCE_0 => (TILE_PLL_SOURCE_0),
+ PLL_TXDIVSEL_OUT_0 => (2),
+ PLLLKDET_CFG_0 => ("111"),
+
+ --
+ CLKINDC_B_1 => (true),
+ CLKRCV_TRST_1 => (true),
+ OOB_CLK_DIVIDER_1 => (4),
+ PLL_COM_CFG_1 => (x"21680a"),
+ PLL_CP_CFG_1 => (x"00"),
+ PLL_RXDIVSEL_OUT_1 => (2),
+ PLL_SATA_1 => (false),
+ PLL_SOURCE_1 => (TILE_PLL_SOURCE_1),
+ PLL_TXDIVSEL_OUT_1 => (2),
+ PLLLKDET_CFG_1 => ("111"),
+ PMA_COM_CFG_EAST => (x"000008000"),
+ PMA_COM_CFG_WEST => (x"000008000"),
+ TST_ATTR_0 => (x"00000000"),
+ TST_ATTR_1 => (x"00000000"),
+
+ --TX Interface Attributes
+ CLK_OUT_GTP_SEL_0 => ("REFCLKPLL0"),
+ TX_TDCC_CFG_0 => ("00"),
+ CLK_OUT_GTP_SEL_1 => ("REFCLKPLL1"),
+ TX_TDCC_CFG_1 => ("00"),
+
+ --TX Buffer and Phase Alignment Attributes
+ PMA_TX_CFG_0 => (x"80082"),
+ TX_BUFFER_USE_0 => (false),
+ TX_XCLK_SEL_0 => ("TXUSR"),
+ TXRX_INVERT_0 => ("111"),
+ PMA_TX_CFG_1 => (x"80082"),
+ TX_BUFFER_USE_1 => (false),
+ TX_XCLK_SEL_1 => ("TXUSR"),
+ TXRX_INVERT_1 => ("111"),
+
+ --TX Driver and OOB signalling Attributes
+ CM_TRIM_0 => ("00"),
+ TX_IDLE_DELAY_0 => ("011"),
+ CM_TRIM_1 => ("00"),
+ TX_IDLE_DELAY_1 => ("011"),
+
+ --TX PIPE/SATA Attributes
+ COM_BURST_VAL_0 => ("1111"),
+ COM_BURST_VAL_1 => ("1111"),
+
+ --RX Driver,OOB signalling,Coupling and Eq,CDR Attributes
+ AC_CAP_DIS_0 => (true),
+ OOBDETECT_THRESHOLD_0 => ("110"),
+ PMA_CDR_SCAN_0 => (x"6404040"),
+ PMA_RX_CFG_0 => (x"05ce048"),
+ PMA_RXSYNC_CFG_0 => (x"00"),
+ RCV_TERM_GND_0 => (false),
+ RCV_TERM_VTTRX_0 => (false),
+ RXEQ_CFG_0 => ("01111011"),
+ TERMINATION_CTRL_0 => ("10100"),
+ TERMINATION_OVRD_0 => (false),
+ TX_DETECT_RX_CFG_0 => (x"1832"),
+ AC_CAP_DIS_1 => (true),
+ OOBDETECT_THRESHOLD_1 => ("110"),
+ PMA_CDR_SCAN_1 => (x"6404040"),
+ PMA_RX_CFG_1 => (x"05ce048"),
+ PMA_RXSYNC_CFG_1 => (x"00"),
+ RCV_TERM_GND_1 => (false),
+ RCV_TERM_VTTRX_1 => (false),
+ RXEQ_CFG_1 => ("01111011"),
+ TERMINATION_CTRL_1 => ("10100"),
+ TERMINATION_OVRD_1 => (false),
+ TX_DETECT_RX_CFG_1 => (x"1832"),
+
+ --PRBS Detection Attributes
+ RXPRBSERR_LOOPBACK_0 => ('0'),
+ RXPRBSERR_LOOPBACK_1 => ('0'),
+
+ --Comma Detection and Alignment Attributes
+ ALIGN_COMMA_WORD_0 => (1),
+ COMMA_10B_ENABLE_0 => ("1111111111"),
+ DEC_MCOMMA_DETECT_0 => (false),
+ DEC_PCOMMA_DETECT_0 => (false),
+ DEC_VALID_COMMA_ONLY_0 => (true),
+ MCOMMA_10B_VALUE_0 => ("1010000011"),
+ MCOMMA_DETECT_0 => (true),
+ PCOMMA_10B_VALUE_0 => ("0101111100"),
+ PCOMMA_DETECT_0 => (true),
+ RX_SLIDE_MODE_0 => ("PCS"),
+ ALIGN_COMMA_WORD_1 => (1),
+ COMMA_10B_ENABLE_1 => ("1111111111"),
+ DEC_MCOMMA_DETECT_1 => (false),
+ DEC_PCOMMA_DETECT_1 => (false),
+ DEC_VALID_COMMA_ONLY_1 => (true),
+ MCOMMA_10B_VALUE_1 => ("1010000011"),
+ MCOMMA_DETECT_1 => (true),
+ PCOMMA_10B_VALUE_1 => ("0101111100"),
+ PCOMMA_DETECT_1 => (true),
+ RX_SLIDE_MODE_1 => ("PCS"),
+
+ --RX Loss-of-sync State Machine Attributes
+ RX_LOS_INVALID_INCR_0 => (8),
+ RX_LOS_THRESHOLD_0 => (128),
+ RX_LOSS_OF_SYNC_FSM_0 => (false),
+ RX_LOS_INVALID_INCR_1 => (8),
+ RX_LOS_THRESHOLD_1 => (128),
+ RX_LOSS_OF_SYNC_FSM_1 => (false),
+
+ --RX Elastic Buffer and Phase alignment Attributes
+ RX_BUFFER_USE_0 => (true),
+ RX_EN_IDLE_RESET_BUF_0 => (true),
+ RX_IDLE_HI_CNT_0 => ("1000"),
+ RX_IDLE_LO_CNT_0 => ("0000"),
+ RX_XCLK_SEL_0 => ("RXREC"),
+ RX_BUFFER_USE_1 => (true),
+ RX_EN_IDLE_RESET_BUF_1 => (true),
+ RX_IDLE_HI_CNT_1 => ("1000"),
+ RX_IDLE_LO_CNT_1 => ("0000"),
+ RX_XCLK_SEL_1 => ("RXREC"),
+
+ --Clock Correction Attributes
+ CLK_COR_ADJ_LEN_0 => (1),
+ CLK_COR_DET_LEN_0 => (1),
+ CLK_COR_INSERT_IDLE_FLAG_0 => (false),
+ CLK_COR_KEEP_IDLE_0 => (false),
+ CLK_COR_MAX_LAT_0 => (18),
+ CLK_COR_MIN_LAT_0 => (16),
+ CLK_COR_PRECEDENCE_0 => (true),
+ CLK_COR_REPEAT_WAIT_0 => (0),
+ CLK_COR_SEQ_1_1_0 => ("0100000000"),
+ CLK_COR_SEQ_1_2_0 => ("0000000000"),
+ CLK_COR_SEQ_1_3_0 => ("0000000000"),
+ CLK_COR_SEQ_1_4_0 => ("0000000000"),
+ CLK_COR_SEQ_1_ENABLE_0 => ("0000"),
+ CLK_COR_SEQ_2_1_0 => ("0100000000"),
+ CLK_COR_SEQ_2_2_0 => ("0000000000"),
+ CLK_COR_SEQ_2_3_0 => ("0000000000"),
+ CLK_COR_SEQ_2_4_0 => ("0000000000"),
+ CLK_COR_SEQ_2_ENABLE_0 => ("0000"),
+ CLK_COR_SEQ_2_USE_0 => (false),
+ CLK_CORRECT_USE_0 => (false),
+ RX_DECODE_SEQ_MATCH_0 => (true),
+ CLK_COR_ADJ_LEN_1 => (1),
+ CLK_COR_DET_LEN_1 => (1),
+ CLK_COR_INSERT_IDLE_FLAG_1 => (false),
+ CLK_COR_KEEP_IDLE_1 => (false),
+ CLK_COR_MAX_LAT_1 => (18),
+ CLK_COR_MIN_LAT_1 => (16),
+ CLK_COR_PRECEDENCE_1 => (true),
+ CLK_COR_REPEAT_WAIT_1 => (0),
+ CLK_COR_SEQ_1_1_1 => ("0100000000"),
+ CLK_COR_SEQ_1_2_1 => ("0000000000"),
+ CLK_COR_SEQ_1_3_1 => ("0000000000"),
+ CLK_COR_SEQ_1_4_1 => ("0000000000"),
+ CLK_COR_SEQ_1_ENABLE_1 => ("0000"),
+ CLK_COR_SEQ_2_1_1 => ("0100000000"),
+ CLK_COR_SEQ_2_2_1 => ("0000000000"),
+ CLK_COR_SEQ_2_3_1 => ("0000000000"),
+ CLK_COR_SEQ_2_4_1 => ("0000000000"),
+ CLK_COR_SEQ_2_ENABLE_1 => ("0000"),
+ CLK_COR_SEQ_2_USE_1 => (false),
+ CLK_CORRECT_USE_1 => (false),
+ RX_DECODE_SEQ_MATCH_1 => (true),
+
+ --Channel Bonding Attributes
+ CHAN_BOND_1_MAX_SKEW_0 => (1),
+ CHAN_BOND_2_MAX_SKEW_0 => (1),
+ CHAN_BOND_KEEP_ALIGN_0 => (false),
+ CHAN_BOND_SEQ_1_1_0 => ("0000000000"),
+ CHAN_BOND_SEQ_1_2_0 => ("0000000000"),
+ CHAN_BOND_SEQ_1_3_0 => ("0000000000"),
+ CHAN_BOND_SEQ_1_4_0 => ("0000000000"),
+ CHAN_BOND_SEQ_1_ENABLE_0 => ("0000"),
+ CHAN_BOND_SEQ_2_1_0 => ("0000000000"),
+ CHAN_BOND_SEQ_2_2_0 => ("0000000000"),
+ CHAN_BOND_SEQ_2_3_0 => ("0000000000"),
+ CHAN_BOND_SEQ_2_4_0 => ("0000000000"),
+ CHAN_BOND_SEQ_2_ENABLE_0 => ("0000"),
+ CHAN_BOND_SEQ_2_USE_0 => (false),
+ CHAN_BOND_SEQ_LEN_0 => (1),
+ RX_EN_MODE_RESET_BUF_0 => (true),
+ CHAN_BOND_1_MAX_SKEW_1 => (1),
+ CHAN_BOND_2_MAX_SKEW_1 => (1),
+ CHAN_BOND_KEEP_ALIGN_1 => (false),
+ CHAN_BOND_SEQ_1_1_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_2_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_3_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_4_1 => ("0000000000"),
+ CHAN_BOND_SEQ_1_ENABLE_1 => ("0000"),
+ CHAN_BOND_SEQ_2_1_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_2_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_3_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_4_1 => ("0000000000"),
+ CHAN_BOND_SEQ_2_ENABLE_1 => ("0000"),
+ CHAN_BOND_SEQ_2_USE_1 => (false),
+ CHAN_BOND_SEQ_LEN_1 => (1),
+ RX_EN_MODE_RESET_BUF_1 => (true),
+
+ --RX PCI Express Attributes
+ CB2_INH_CC_PERIOD_0 => (8),
+ CDR_PH_ADJ_TIME_0 => ("01010"),
+ PCI_EXPRESS_MODE_0 => (false),
+ RX_EN_IDLE_HOLD_CDR_0 => (false),
+ RX_EN_IDLE_RESET_FR_0 => (true),
+ RX_EN_IDLE_RESET_PH_0 => (true),
+ RX_STATUS_FMT_0 => ("PCIE"),
+ TRANS_TIME_FROM_P2_0 => (x"03c"),
+ TRANS_TIME_NON_P2_0 => (x"19"),
+ TRANS_TIME_TO_P2_0 => (x"064"),
+ CB2_INH_CC_PERIOD_1 => (8),
+ CDR_PH_ADJ_TIME_1 => ("01010"),
+ PCI_EXPRESS_MODE_1 => (false),
+ RX_EN_IDLE_HOLD_CDR_1 => (false),
+ RX_EN_IDLE_RESET_FR_1 => (true),
+ RX_EN_IDLE_RESET_PH_1 => (true),
+ RX_STATUS_FMT_1 => ("PCIE"),
+ TRANS_TIME_FROM_P2_1 => (x"03c"),
+ TRANS_TIME_NON_P2_1 => (x"19"),
+ TRANS_TIME_TO_P2_1 => (x"064"),
+
+ --RX SATA Attributes
+ SATA_BURST_VAL_0 => ("100"),
+ SATA_IDLE_VAL_0 => ("100"),
+ SATA_MAX_BURST_0 => (9),
+ SATA_MAX_INIT_0 => (27),
+ SATA_MAX_WAKE_0 => (9),
+ SATA_MIN_BURST_0 => (5),
+ SATA_MIN_INIT_0 => (15),
+ SATA_MIN_WAKE_0 => (5),
+ SATA_BURST_VAL_1 => ("100"),
+ SATA_IDLE_VAL_1 => ("100"),
+ SATA_MAX_BURST_1 => (9),
+ SATA_MAX_INIT_1 => (27),
+ SATA_MAX_WAKE_1 => (9),
+ SATA_MIN_BURST_1 => (5),
+ SATA_MIN_INIT_1 => (15),
+ SATA_MIN_WAKE_1 => (5)
+
+
+ )
+ port map
+ (
+ ------------------------ Loopback and Powerdown Ports ----------------------
+ LOOPBACK0 => LOOPBACK0_IN,
+ LOOPBACK1 => LOOPBACK1_IN,
+ RXPOWERDOWN0 => tied_to_ground_vec_i(1 downto 0),
+ RXPOWERDOWN1 => tied_to_ground_vec_i(1 downto 0),
+ TXPOWERDOWN0 => tied_to_ground_vec_i(1 downto 0),
+ TXPOWERDOWN1 => tied_to_ground_vec_i(1 downto 0),
+ --------------------------------- PLL Ports --------------------------------
+ CLK00 => CLK00_IN,
+ CLK01 => CLK01_IN,
+ CLK10 => CLK10_IN,
+ CLK11 => CLK11_IN,
+ CLKINEAST0 => tied_to_ground_i,
+ CLKINEAST1 => tied_to_ground_i,
+ CLKINWEST0 => tied_to_ground_i,
+ CLKINWEST1 => tied_to_ground_i,
+ GCLK00 => tied_to_ground_i,
+ GCLK01 => tied_to_ground_i,
+ GCLK10 => tied_to_ground_i,
+ GCLK11 => tied_to_ground_i,
+ GTPRESET0 => GTPRESET0_IN,
+ GTPRESET1 => GTPRESET1_IN,
+ GTPTEST0 => "00010000",
+ GTPTEST1 => "00010000",
+ INTDATAWIDTH0 => tied_to_vcc_i,
+ INTDATAWIDTH1 => tied_to_vcc_i,
+ PLLCLK00 => tied_to_ground_i,
+ PLLCLK01 => tied_to_ground_i,
+ PLLCLK10 => tied_to_ground_i,
+ PLLCLK11 => tied_to_ground_i,
+ PLLLKDET0 => PLLLKDET0_OUT,
+ PLLLKDET1 => PLLLKDET1_OUT,
+ PLLLKDETEN0 => tied_to_vcc_i,
+ PLLLKDETEN1 => tied_to_vcc_i,
+ PLLPOWERDOWN0 => tied_to_ground_i,
+ PLLPOWERDOWN1 => tied_to_ground_i,
+ REFCLKOUT0 => REFCLKOUT0_OUT,
+ REFCLKOUT1 => REFCLKOUT1_OUT,
+ REFCLKPLL0 => open,
+ REFCLKPLL1 => open,
+ REFCLKPWRDNB0 => tied_to_vcc_i,
+ REFCLKPWRDNB1 => tied_to_vcc_i,
+ REFSELDYPLL0 => tied_to_ground_vec_i(2 downto 0),
+ REFSELDYPLL1 => tied_to_ground_vec_i(2 downto 0),
+ RESETDONE0 => RESETDONE0_OUT,
+ RESETDONE1 => RESETDONE1_OUT,
+ TSTCLK0 => tied_to_ground_i,
+ TSTCLK1 => tied_to_ground_i,
+ TSTIN0 => tied_to_ground_vec_i(11 downto 0),
+ TSTIN1 => tied_to_ground_vec_i(11 downto 0),
+ TSTOUT0 => open,
+ TSTOUT1 => open,
+ ----------------------- Receive Ports - 8b10b Decoder ----------------------
+ RXCHARISCOMMA0 => open,
+ RXCHARISCOMMA1 => open,
+ RXCHARISK0(3 downto 1) => rxcharisk0_float_i,
+ RXCHARISK0(0) => RXCHARISK0_OUT,
+ RXCHARISK1(3 downto 1) => rxcharisk1_float_i,
+ RXCHARISK1(0) => RXCHARISK1_OUT,
+ RXDEC8B10BUSE0 => tied_to_vcc_i,
+ RXDEC8B10BUSE1 => tied_to_vcc_i,
+ RXDISPERR0(3 downto 1) => rxdisperr0_float_i,
+ RXDISPERR0(0) => RXDISPERR0_OUT,
+ RXDISPERR1(3 downto 1) => rxdisperr1_float_i,
+ RXDISPERR1(0) => RXDISPERR1_OUT,
+ RXNOTINTABLE0(3 downto 1) => rxnotintable0_float_i,
+ RXNOTINTABLE0(0) => RXNOTINTABLE0_OUT,
+ RXNOTINTABLE1(3 downto 1) => rxnotintable1_float_i,
+ RXNOTINTABLE1(0) => RXNOTINTABLE1_OUT,
+ RXRUNDISP0 => open,
+ RXRUNDISP1 => open,
+ USRCODEERR0 => tied_to_ground_i,
+ USRCODEERR1 => tied_to_ground_i,
+ ---------------------- Receive Ports - Channel Bonding ---------------------
+ RXCHANBONDSEQ0 => open,
+ RXCHANBONDSEQ1 => open,
+ RXCHANISALIGNED0 => open,
+ RXCHANISALIGNED1 => open,
+ RXCHANREALIGN0 => open,
+ RXCHANREALIGN1 => open,
+ RXCHBONDI => tied_to_ground_vec_i(2 downto 0),
+ RXCHBONDMASTER0 => tied_to_ground_i,
+ RXCHBONDMASTER1 => tied_to_ground_i,
+ RXCHBONDO => open,
+ RXCHBONDSLAVE0 => tied_to_ground_i,
+ RXCHBONDSLAVE1 => tied_to_ground_i,
+ RXENCHANSYNC0 => tied_to_ground_i,
+ RXENCHANSYNC1 => tied_to_ground_i,
+ ---------------------- Receive Ports - Clock Correction --------------------
+ RXCLKCORCNT0 => open,
+ RXCLKCORCNT1 => open,
+ --------------- Receive Ports - Comma Detection and Alignment --------------
+ RXBYTEISALIGNED0 => RXBYTEISALIGNED0_OUT,
+ RXBYTEISALIGNED1 => RXBYTEISALIGNED1_OUT,
+ RXBYTEREALIGN0 => open,
+ RXBYTEREALIGN1 => open,
+ RXCOMMADET0 => RXCOMMADET0_OUT,
+ RXCOMMADET1 => RXCOMMADET1_OUT,
+ RXCOMMADETUSE0 => tied_to_vcc_i,
+ RXCOMMADETUSE1 => tied_to_vcc_i,
+ RXENMCOMMAALIGN0 => tied_to_ground_i,
+ RXENMCOMMAALIGN1 => tied_to_ground_i,
+ RXENPCOMMAALIGN0 => tied_to_ground_i,
+ RXENPCOMMAALIGN1 => tied_to_ground_i,
+ RXSLIDE0 => RXSLIDE0_IN,
+ RXSLIDE1 => RXSLIDE1_IN,
+ ----------------------- Receive Ports - PRBS Detection ---------------------
+ PRBSCNTRESET0 => tied_to_ground_i,
+ PRBSCNTRESET1 => tied_to_ground_i,
+ RXENPRBSTST0 => tied_to_ground_vec_i(2 downto 0),
+ RXENPRBSTST1 => tied_to_ground_vec_i(2 downto 0),
+ RXPRBSERR0 => open,
+ RXPRBSERR1 => open,
+ ------------------- Receive Ports - RX Data Path interface -----------------
+ RXDATA0 => rxdata0_i,
+ RXDATA1 => rxdata1_i,
+ RXDATAWIDTH0 => "00",
+ RXDATAWIDTH1 => "00",
+ RXRECCLK0 => open,
+ RXRECCLK1 => open,
+ RXRESET0 => tied_to_ground_i,
+ RXRESET1 => tied_to_ground_i,
+ RXUSRCLK0 => RXUSRCLK0_IN,
+ RXUSRCLK1 => RXUSRCLK1_IN,
+ RXUSRCLK20 => RXUSRCLK20_IN,
+ RXUSRCLK21 => RXUSRCLK21_IN,
+ ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
+ GATERXELECIDLE0 => tied_to_ground_i,
+ GATERXELECIDLE1 => tied_to_ground_i,
+ IGNORESIGDET0 => tied_to_ground_i,
+ IGNORESIGDET1 => tied_to_ground_i,
+ RCALINEAST => tied_to_ground_vec_i(4 downto 0),
+ RCALINWEST => tied_to_ground_vec_i(4 downto 0),
+ RCALOUTEAST => open,
+ RCALOUTWEST => open,
+ RXCDRRESET0 => RXCDRRESET0_IN,
+ RXCDRRESET1 => RXCDRRESET1_IN,
+ RXELECIDLE0 => open,
+ RXELECIDLE1 => open,
+ RXEQMIX0 => "00",
+ RXEQMIX1 => "00",
+ RXN0 => RXN0_IN,
+ RXN1 => RXN1_IN,
+ RXP0 => RXP0_IN,
+ RXP1 => RXP1_IN,
+ ----------- Receive Ports - RX Elastic Buffer and Phase Alignment ----------
+ RXBUFRESET0 => tied_to_ground_i,
+ RXBUFRESET1 => tied_to_ground_i,
+ RXBUFSTATUS0 => open,
+ RXBUFSTATUS1 => open,
+ RXENPMAPHASEALIGN0 => tied_to_ground_i,
+ RXENPMAPHASEALIGN1 => tied_to_ground_i,
+ RXPMASETPHASE0 => tied_to_ground_i,
+ RXPMASETPHASE1 => tied_to_ground_i,
+ RXSTATUS0 => open,
+ RXSTATUS1 => open,
+ --------------- Receive Ports - RX Loss-of-sync State Machine --------------
+ RXLOSSOFSYNC0 => open,
+ RXLOSSOFSYNC1 => open,
+ -------------- Receive Ports - RX Pipe Control for PCI Express -------------
+ PHYSTATUS0 => open,
+ PHYSTATUS1 => open,
+ RXVALID0 => open,
+ RXVALID1 => open,
+ -------------------- Receive Ports - RX Polarity Control -------------------
+ RXPOLARITY0 => tied_to_ground_i,
+ RXPOLARITY1 => tied_to_ground_i,
+ ------------- Shared Ports - Dynamic Reconfiguration Port (DRP) ------------
+ DADDR => tied_to_ground_vec_i(7 downto 0),
+ DCLK => tied_to_ground_i,
+ DEN => tied_to_ground_i,
+ DI => tied_to_ground_vec_i(15 downto 0),
+ DRDY => open,
+ DRPDO => open,
+ DWE => tied_to_ground_i,
+ ---------------------------- TX/RX Datapath Ports --------------------------
+ GTPCLKFBEAST => GTPCLKFBEAST_OUT,
+ GTPCLKFBSEL0EAST => "10",
+ GTPCLKFBSEL0WEST => "00",
+ GTPCLKFBSEL1EAST => "11",
+ GTPCLKFBSEL1WEST => "01",
+ GTPCLKFBWEST => GTPCLKFBWEST_OUT,
+ GTPCLKOUT0 => GTPCLKOUT0_OUT,
+ GTPCLKOUT1 => GTPCLKOUT1_OUT,
+ ------------------- Transmit Ports - 8b10b Encoder Control -----------------
+ TXBYPASS8B10B0 => tied_to_ground_vec_i(3 downto 0),
+ TXBYPASS8B10B1 => tied_to_ground_vec_i(3 downto 0),
+
+ TXCHARDISPMODE0(0) => TXCHARDISPMODE0_IN,
+ TXCHARDISPMODE0(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+
+ TXCHARDISPMODE1(0) => TXCHARDISPMODE1_IN,
+ TXCHARDISPMODE1(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+
+ TXCHARDISPVAL0(0) => TXCHARDISPVAL0_IN,
+ TXCHARDISPVAL0(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+
+ TXCHARDISPVAL1(0) => TXCHARDISPVAL1_IN,
+ TXCHARDISPVAL1(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+
+ TXCHARISK0(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+ TXCHARISK0(0) => TXCHARISK0_IN,
+ TXCHARISK1(3 downto 1) => tied_to_ground_vec_i(2 downto 0),
+ TXCHARISK1(0) => TXCHARISK1_IN,
+ TXENC8B10BUSE0 => tied_to_vcc_i,
+ TXENC8B10BUSE1 => tied_to_vcc_i,
+ TXKERR0 => open,
+ TXKERR1 => open,
+ TXRUNDISP0 => TXRUNDISP0_OUT,
+ TXRUNDISP1 => TXRUNDISP1_OUT,
+ --------------- Transmit Ports - TX Buffer and Phase Alignment -------------
+ TXBUFSTATUS0 => open,
+ TXBUFSTATUS1 => open,
+ TXENPMAPHASEALIGN0 => TXENPMAPHASEALIGN0_IN,
+ TXENPMAPHASEALIGN1 => TXENPMAPHASEALIGN1_IN,
+ TXPMASETPHASE0 => TXPMASETPHASE0_IN,
+ TXPMASETPHASE1 => TXPMASETPHASE1_IN,
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA0 => txdata0_i,
+ TXDATA1 => txdata1_i,
+ TXDATAWIDTH0 => "00",
+ TXDATAWIDTH1 => "00",
+ TXOUTCLK0 => open,
+ TXOUTCLK1 => open,
+ TXRESET0 => tied_to_ground_i,
+ TXRESET1 => tied_to_ground_i,
+ TXUSRCLK0 => TXUSRCLK0_IN,
+ TXUSRCLK1 => TXUSRCLK1_IN,
+ TXUSRCLK20 => TXUSRCLK20_IN,
+ TXUSRCLK21 => TXUSRCLK21_IN,
+ --------------- Transmit Ports - TX Driver and OOB signalling --------------
+ TXBUFDIFFCTRL0 => "101",
+ TXBUFDIFFCTRL1 => "101",
+ TXDIFFCTRL0 => "0110",
+ TXDIFFCTRL1 => "0110",
+ TXINHIBIT0 => tied_to_ground_i,
+ TXINHIBIT1 => tied_to_ground_i,
+ TXN0 => TXN0_OUT,
+ TXN1 => TXN1_OUT,
+ TXP0 => TXP0_OUT,
+ TXP1 => TXP1_OUT,
+ TXPREEMPHASIS0 => "000",
+ TXPREEMPHASIS1 => "000",
+ --------------------- Transmit Ports - TX PRBS Generator -------------------
+ TXENPRBSTST0 => TXENPRBSTST0_IN,
+ TXENPRBSTST1 => TXENPRBSTST1_IN,
+ TXPRBSFORCEERR0 => tied_to_ground_i,
+ TXPRBSFORCEERR1 => tied_to_ground_i,
+ -------------------- Transmit Ports - TX Polarity Control ------------------
+ TXPOLARITY0 => tied_to_ground_i,
+ TXPOLARITY1 => tied_to_ground_i,
+ ----------------- Transmit Ports - TX Ports for PCI Express ----------------
+ TXDETECTRX0 => tied_to_ground_i,
+ TXDETECTRX1 => tied_to_ground_i,
+ TXELECIDLE0 => tied_to_ground_i,
+ TXELECIDLE1 => tied_to_ground_i,
+ TXPDOWNASYNCH0 => tied_to_ground_i,
+ TXPDOWNASYNCH1 => tied_to_ground_i,
+ --------------------- Transmit Ports - TX Ports for SATA -------------------
+ TXCOMSTART0 => tied_to_ground_i,
+ TXCOMSTART1 => tied_to_ground_i,
+ TXCOMTYPE0 => tied_to_ground_i,
+ TXCOMTYPE1 => tied_to_ground_i
+
+ );
+
+end RTL;
+
+
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd
new file mode 100644
index 000000000..ca7480834
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_gtp_phy/spartan6/wr_gtp_phy_spartan6.vhd
@@ -0,0 +1,816 @@
+-------------------------------------------------------------------------------
+-- Title : Deterministic Xilinx GTP wrapper - Spartan-6 top module
+-- Project : White Rabbit Switch
+-------------------------------------------------------------------------------
+-- File : wr_gtp_phy_spartan6.vhd
+-- Author : Tomasz Wlostowski
+-- Company : CERN BE-CO-HT
+-- Created : 2010-11-18
+-- Last update: 2017-05-24
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description: Dual channel wrapper for Xilinx Spartan-6 GTP adapted for
+-- deterministic delays at 1.25 Gbps.
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2010 CERN
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version.
+--
+-- This source 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 Lesser General Public License for more
+-- details.
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+--
+-------------------------------------------------------------------------------
+-- Revisions :
+-- Date Version Author Description
+-- 2010-11-18 0.4 twlostow Initial release
+-- 2011-02-07 0.5 twlostow Verified on Spartan6 GTP (single channel only)
+-- 2011-05-15 0.6 twlostow Added reference clock output
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
+library work;
+use work.gencores_pkg.all;
+use work.disparity_gen_pkg.all;
+
+entity wr_gtp_phy_spartan6 is
+
+ generic (
+ -- set to non-zero value to speed up the simulation by reducing some delays
+ g_simulation : integer := 1;
+ g_force_disparity : integer := 0;
+ g_enable_ch0 : integer := 1;
+ g_enable_ch1 : integer := 1
+ );
+
+ port (
+ -- Port 0
+
+ -- dedicated GTP clock input
+ gtp_clk_i : in std_logic;
+
+ -- TX path, synchronous to ch0_ref_clk_i
+ ch0_ref_clk_i : in std_logic;
+
+ -- data input (8 bits, not 8b10b-encoded)
+ ch0_tx_data_i : in std_logic_vector(7 downto 0);
+
+ -- 1 when tx_data_i contains a control code, 0 when it's a data byte
+ ch0_tx_k_i : in std_logic;
+
+ -- disparity of the currently transmitted 8b10b code (1 = plus, 0 = minus).
+ -- Necessary for the PCS to generate proper frame termination sequences.
+ ch0_tx_disparity_o : out std_logic;
+
+ -- Encoding error indication (1 = error, 0 = no error)
+ ch0_tx_enc_err_o : out std_logic;
+
+ -- RX path, synchronous to ch0_rx_rbclk_o.
+
+ -- RX recovered clock
+ ch0_rx_rbclk_o : out std_logic;
+
+ -- 8b10b-decoded data output. The data output must be kept invalid before
+ -- the transceiver is locked on the incoming signal to prevent the EP from
+ -- detecting a false carrier.
+ ch0_rx_data_o : out std_logic_vector(7 downto 0);
+
+ -- 1 when the byte on rx_data_o is a control code
+ ch0_rx_k_o : out std_logic;
+
+ -- encoding error indication
+ ch0_rx_enc_err_o : out std_logic;
+
+ -- RX bitslide indication, indicating the delay of the RX path of the
+ -- transceiver (in UIs). Must be valid when ch0_rx_data_o is valid.
+ ch0_rx_bitslide_o : out std_logic_vector(3 downto 0);
+
+ -- reset input, active hi
+ ch0_rst_i : in std_logic;
+
+ -- local loopback enable (Tx->Rx), active hi
+ ch0_loopen_i : in std_logic;
+ ch0_loopen_vec_i : in std_logic_vector(2 downto 0) := (others=>'0');
+
+ -- PRBS select (see Xilinx UG386 Table 3-15; "000" = Standard operation, pattern generator off)
+ ch0_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others=>'0');
+
+ -- gtp0 ready: locked & aligned
+ ch0_rdy_o : out std_logic;
+
+-- Port 1
+ ch1_ref_clk_i : in std_logic;
+
+ ch1_tx_data_i : in std_logic_vector(7 downto 0) := "00000000";
+ ch1_tx_k_i : in std_logic := '0';
+ ch1_tx_disparity_o : out std_logic;
+ ch1_tx_enc_err_o : out std_logic;
+
+ ch1_rx_data_o : out std_logic_vector(7 downto 0);
+ ch1_rx_rbclk_o : out std_logic;
+ ch1_rx_k_o : out std_logic;
+ ch1_rx_enc_err_o : out std_logic;
+ ch1_rx_bitslide_o : out std_logic_vector(3 downto 0);
+
+ ch1_rst_i : in std_logic := '0';
+ ch1_loopen_i : in std_logic := '0';
+ ch1_loopen_vec_i : in std_logic_vector(2 downto 0) := (others=>'0');
+ ch1_tx_prbs_sel_i: in std_logic_vector(2 downto 0) := (others=>'0');
+ ch1_rdy_o : out std_logic;
+
+-- Serial I/O
+
+ pad_txn0_o : out std_logic;
+ pad_txp0_o : out std_logic;
+
+ pad_rxn0_i : in std_logic := '0';
+ pad_rxp0_i : in std_logic := '0';
+
+ pad_txn1_o : out std_logic;
+ pad_txp1_o : out std_logic;
+
+ pad_rxn1_i : in std_logic := '0';
+ pad_rxp1_i : in std_logic := '0'
+ );
+
+
+end wr_gtp_phy_spartan6;
+
+architecture rtl of wr_gtp_phy_spartan6 is
+
+ component WHITERABBITGTP_WRAPPER_TILE_SPARTAN6
+ generic (
+ TILE_SIM_GTPRESET_SPEEDUP : integer;
+ TILE_CLK25_DIVIDER_0 : integer;
+ TILE_CLK25_DIVIDER_1 : integer;
+ TILE_PLL_DIVSEL_FB_0 : integer;
+ TILE_PLL_DIVSEL_FB_1 : integer;
+ TILE_PLL_DIVSEL_REF_0 : integer;
+ TILE_PLL_DIVSEL_REF_1 : integer;
+ TILE_PLL_SOURCE_0 : string;
+ TILE_PLL_SOURCE_1 : string);
+ port (
+ LOOPBACK0_IN : in std_logic_vector(2 downto 0);
+ LOOPBACK1_IN : in std_logic_vector(2 downto 0);
+ REFCLKOUT0_OUT : out std_logic;
+ REFCLKOUT1_OUT : out std_logic;
+ CLK00_IN : in std_logic;
+ CLK01_IN : in std_logic;
+ CLK10_IN : in std_logic;
+ CLK11_IN : in std_logic;
+ GTPRESET0_IN : in std_logic;
+ GTPRESET1_IN : in std_logic;
+ PLLLKDET0_OUT : out std_logic;
+ PLLLKDET1_OUT : out std_logic;
+ RESETDONE0_OUT : out std_logic;
+ RESETDONE1_OUT : out std_logic;
+ RXCHARISK0_OUT : out std_logic;
+ RXCHARISK1_OUT : out std_logic;
+ RXDISPERR0_OUT : out std_logic;
+ RXDISPERR1_OUT : out std_logic;
+ RXNOTINTABLE0_OUT : out std_logic;
+ RXNOTINTABLE1_OUT : out std_logic;
+ RXBYTEISALIGNED0_OUT : out std_logic;
+ RXBYTEISALIGNED1_OUT : out std_logic;
+ RXCOMMADET0_OUT : out std_logic;
+ RXCOMMADET1_OUT : out std_logic;
+ RXSLIDE0_IN : in std_logic;
+ RXSLIDE1_IN : in std_logic;
+ RXDATA0_OUT : out std_logic_vector(7 downto 0);
+ RXDATA1_OUT : out std_logic_vector(7 downto 0);
+ RXUSRCLK0_IN : in std_logic;
+ RXUSRCLK1_IN : in std_logic;
+ RXUSRCLK20_IN : in std_logic;
+ RXUSRCLK21_IN : in std_logic;
+ RXCDRRESET0_IN : in std_logic;
+ RXCDRRESET1_IN : in std_logic;
+ RXN0_IN : in std_logic;
+ RXN1_IN : in std_logic;
+ RXP0_IN : in std_logic;
+ RXP1_IN : in std_logic;
+ GTPCLKFBEAST_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKFBWEST_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKOUT0_OUT : out std_logic_vector(1 downto 0);
+ GTPCLKOUT1_OUT : out std_logic_vector(1 downto 0);
+ TXCHARISK0_IN : in std_logic;
+ TXCHARISK1_IN : in std_logic;
+ TXCHARDISPMODE0_IN : in std_logic;
+ TXCHARDISPMODE1_IN : in std_logic;
+ TXCHARDISPVAL0_IN : in std_logic;
+ TXCHARDISPVAL1_IN : in std_logic;
+ TXRUNDISP0_OUT : out std_logic_vector(3 downto 0);
+ TXRUNDISP1_OUT : out std_logic_vector(3 downto 0);
+ TXENPMAPHASEALIGN0_IN : in std_logic;
+ TXENPMAPHASEALIGN1_IN : in std_logic;
+ TXPMASETPHASE0_IN : in std_logic;
+ TXPMASETPHASE1_IN : in std_logic;
+ TXDATA0_IN : in std_logic_vector(7 downto 0);
+ TXDATA1_IN : in std_logic_vector(7 downto 0);
+ TXUSRCLK0_IN : in std_logic;
+ TXUSRCLK1_IN : in std_logic;
+ TXUSRCLK20_IN : in std_logic;
+ TXUSRCLK21_IN : in std_logic;
+ TXN0_OUT : out std_logic;
+ TXN1_OUT : out std_logic;
+ TXP0_OUT : out std_logic;
+ TXP1_OUT : out std_logic;
+ TXENPRBSTST0_IN : in std_logic_vector(2 downto 0);
+ TXENPRBSTST1_IN : in std_logic_vector(2 downto 0));
+ end component;
+
+ component gtp_phase_align
+ generic(
+ g_simulation : integer);
+ port (
+ gtp_rst_i : in std_logic;
+ gtp_tx_clk_i : in std_logic;
+ gtp_tx_en_pma_phase_align_o : out std_logic;
+ gtp_tx_pma_set_phase_o : out std_logic;
+ align_en_i : in std_logic;
+ align_done_o : out std_logic);
+ end component;
+
+ component gtp_bitslide
+ generic(
+ g_simulation : integer;
+ g_target : string := "spartan6");
+ port (
+ gtp_rst_i : in std_logic;
+ gtp_rx_clk_i : in std_logic;
+ gtp_rx_comma_det_i : in std_logic;
+ gtp_rx_byte_is_aligned_i : in std_logic;
+ serdes_ready_i : in std_logic;
+ gtp_rx_slide_o : out std_logic;
+ gtp_rx_cdr_rst_o : out std_logic;
+ bitslide_o : out std_logic_vector(4 downto 0);
+ synced_o : out std_logic);
+ end component;
+
+ signal ch0_gtp_reset : std_logic;
+ signal ch0_gtp_loopback : std_logic_vector(2 downto 0) := "000";
+ signal ch0_gtp_reset_done : std_logic;
+ signal ch0_gtp_pll_lockdet : std_logic;
+ signal ch0_tx_pma_set_phase : std_logic := '0';
+
+ signal ch0_tx_rundisp_vec : std_logic_vector(3 downto 0);
+
+ signal ch0_tx_en_pma_phase_align : std_logic := '0';
+
+ signal ch0_rx_data_int : std_logic_vector(7 downto 0);
+ signal ch0_rx_k_int : std_logic;
+ signal ch0_rx_disperr, ch0_rx_invcode : std_logic;
+
+ signal ch0_rx_byte_is_aligned : std_logic;
+ signal ch0_rx_comma_det : std_logic;
+ signal ch0_rx_cdr_rst : std_logic := '0';
+ signal ch0_rx_rec_clk_pad : std_logic;
+ signal ch0_rx_rec_clk : std_logic;
+ signal ch0_rx_data : std_logic_vector(7 downto 0);
+ signal ch0_rx_k : std_logic;
+ signal ch0_rx_enc_err : std_logic;
+ signal ch0_rx_divclk : std_logic;
+ signal ch0_rx_slide : std_logic := '0';
+
+ signal ch0_gtp_locked : std_logic;
+ signal ch0_align_done : std_logic;
+ signal ch0_rx_synced : std_logic;
+
+ signal ch0_gtp_clkout_int : std_logic_vector(1 downto 0);
+ signal ch0_rx_enable_output, ch0_rx_enable_output_synced : std_logic;
+
+
+ signal ch1_gtp_reset : std_logic;
+ signal ch1_gtp_loopback : std_logic_vector(2 downto 0) := "000";
+ signal ch1_gtp_reset_done : std_logic;
+ signal ch1_gtp_pll_lockdet : std_logic;
+ signal ch1_tx_pma_set_phase : std_logic := '0';
+
+ signal ch1_tx_rundisp_vec : std_logic_vector(3 downto 0);
+
+ signal ch1_tx_en_pma_phase_align : std_logic := '0';
+
+ signal ch1_rx_data_int : std_logic_vector(7 downto 0);
+ signal ch1_rx_k_int : std_logic;
+ signal ch1_rx_disperr, ch1_rx_invcode : std_logic;
+
+ signal ch1_rx_byte_is_aligned : std_logic;
+ signal ch1_rx_comma_det : std_logic;
+ signal ch1_rx_cdr_rst : std_logic := '0';
+ signal ch1_rx_rec_clk_pad : std_logic;
+ signal ch1_rx_rec_clk : std_logic;
+ signal ch1_rx_data : std_logic_vector(7 downto 0);
+ signal ch1_rx_k : std_logic;
+ signal ch1_rx_enc_err : std_logic;
+
+ signal ch1_rx_divclk : std_logic;
+ signal ch1_rx_slide : std_logic := '0';
+
+ signal ch1_gtp_locked : std_logic;
+ signal ch1_align_done : std_logic;
+ signal ch1_rx_synced : std_logic;
+
+ signal ch1_gtp_clkout_int : std_logic_vector(1 downto 0);
+ signal ch1_rx_enable_output, ch1_rx_enable_output_synced : std_logic;
+
+ signal ch0_rst_synced : std_logic;
+ signal ch0_rst_d0 : std_logic;
+ signal ch0_reset_counter : unsigned(9 downto 0);
+
+ signal ch1_rst_synced : std_logic;
+ signal ch1_rst_d0 : std_logic;
+ signal ch1_reset_counter : unsigned(9 downto 0);
+
+ signal ch0_rx_bitslide_int : std_logic_vector(4 downto 0);
+ signal ch1_rx_bitslide_int : std_logic_vector(4 downto 0);
+
+ signal ch0_ref_clk_in : std_logic_vector(1 downto 0);
+ signal ch1_ref_clk_in : std_logic_vector(1 downto 0);
+
+
+ signal ch0_disparity_set : std_logic;
+ signal ch1_disparity_set : std_logic;
+
+ signal ch0_tx_chardispmode : std_logic;
+ signal ch1_tx_chardispmode : std_logic;
+
+ signal ch0_tx_chardispval : std_logic;
+ signal ch1_tx_chardispval : std_logic;
+
+
+
+ component enc_8b10b
+ port (
+ clk_i : in std_logic;
+ rst_n_i : in std_logic;
+ ctrl_i : in std_logic;
+ in_8b_i : in std_logic_vector(7 downto 0);
+ err_o : out std_logic;
+ dispar_o : out std_logic;
+ out_10b_o : out std_logic_vector(9 downto 0));
+ end component;
+
+ signal ch0_rst_n : std_logic;
+ signal ch1_rst_n : std_logic;
+
+ signal ch0_cur_disp : t_8b10b_disparity;
+ signal ch0_disp_pipe : std_logic_vector(1 downto 0);
+ signal ch1_cur_disp : t_8b10b_disparity;
+ signal ch1_disp_pipe : std_logic_vector(1 downto 0);
+
+begin -- rtl
+ -------------------------------------------------------------------------------
+ -- Channel 0 logic
+ -------------------------------------------------------------------------------
+
+ gen_with_channel0 : if(g_enable_ch0 /= 0) generate
+ ch0_rst_n <= not ch0_gtp_reset;
+ ch0_tx_disparity_o <= ch0_disp_pipe(0);
+
+ ch0_gtp_reset <= ch0_rst_synced or std_logic(not ch0_reset_counter(ch0_reset_counter'left));
+ ch0_rx_rec_clk_pad <= ch0_gtp_clkout_int(1);
+ ch0_ref_clk_in(0) <= gtp_clk_i;
+ ch0_ref_clk_in(1) <= '0';
+ -- Near-end PMA loopback or loopback selected with ch1_loopen_vec_i
+ ch0_gtp_loopback <= "010" when(ch0_loopen_i = '1') else
+ ch0_loopen_vec_i;
+
+ gen_disp_ch0 : process(ch0_ref_clk_i)
+ begin
+ if rising_edge(ch0_ref_clk_i) then
+ if(ch0_tx_chardispmode = '1' or ch0_rst_n = '0') then
+ if(g_force_disparity = 0) then
+ ch0_cur_disp <= RD_MINUS;
+ else
+ ch0_cur_disp <= RD_PLUS;
+ end if;
+ ch0_disp_pipe <= (others => '0');
+ else
+ ch0_cur_disp <= f_next_8b10b_disparity8(ch0_cur_disp, ch0_tx_k_i, ch0_tx_data_i);
+ ch0_disp_pipe(0) <= to_std_logic(ch0_cur_disp);
+ ch0_disp_pipe(1) <= ch0_disp_pipe(0);
+ end if;
+ end if;
+ end process;
+
+
+ p_gen_reset_ch0 : process(ch0_ref_clk_i)
+ begin
+ if rising_edge(ch0_ref_clk_i) then
+
+ ch0_rst_d0 <= ch0_rst_i;
+ ch0_rst_synced <= ch0_rst_d0;
+
+ if(ch0_rst_synced = '1') then
+ ch0_reset_counter <= (others => '0');
+ else
+ if(ch0_reset_counter(ch0_reset_counter'left) = '0') then
+ ch0_reset_counter <= ch0_reset_counter + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ U_Rbclk_buf_ch0 : BUFIO2
+ port map (
+ DIVCLK => ch0_rx_divclk,
+ IOCLK => open,
+ SERDESSTROBE => open,
+ I => ch0_rx_rec_clk_pad);
+
+ U_Rbclk_bufg_ch0 : BUFG
+ port map (
+ I => ch0_rx_divclk,
+ O => ch0_rx_rec_clk
+ );
+
+ ch0_gtp_locked <= ch0_gtp_pll_lockdet and ch0_gtp_reset_done;
+ ch0_tx_enc_err_o <= '0';
+
+ U_align_ch0 : gtp_phase_align
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ gtp_rst_i => ch0_gtp_reset,
+ gtp_tx_clk_i => ch0_ref_clk_i,
+ gtp_tx_en_pma_phase_align_o => ch0_tx_en_pma_phase_align,
+ gtp_tx_pma_set_phase_o => ch0_tx_pma_set_phase,
+ align_en_i => ch0_gtp_locked,
+ align_done_o => ch0_align_done);
+
+ U_bitslide_ch0 : gtp_bitslide
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ gtp_rst_i => ch0_gtp_reset,
+ gtp_rx_clk_i => ch0_rx_rec_clk,
+ gtp_rx_comma_det_i => ch0_rx_comma_det,
+ gtp_rx_byte_is_aligned_i => ch0_rx_byte_is_aligned,
+ serdes_ready_i => ch0_gtp_locked,
+ gtp_rx_slide_o => ch0_rx_slide,
+ gtp_rx_cdr_rst_o => ch0_rx_cdr_rst,
+ bitslide_o => ch0_rx_bitslide_int,
+ synced_o => ch0_rx_synced);
+
+ ch0_rx_bitslide_o <= ch0_rx_bitslide_int(3 downto 0);
+ ch0_rx_enable_output <= ch0_rx_synced and ch0_align_done;
+
+ U_sync_oen_ch0 : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => ch0_rx_rec_clk,
+ rst_n_i => '1',
+ data_i => ch0_rx_enable_output,
+ synced_o => ch0_rx_enable_output_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ p_force_proper_disparity_ch0 : process(ch0_ref_clk_i, ch0_gtp_reset)
+ begin
+ if (ch0_gtp_reset = '1') then
+ ch0_disparity_set <= '0';
+ ch0_tx_chardispval <= '0';
+ ch0_tx_chardispmode <= '0';
+ elsif rising_edge(ch0_ref_clk_i) then
+ if(ch0_disparity_set = '0' and ch0_tx_k_i = '1' and ch0_tx_data_i = x"bc" and ch0_align_done = '1') then
+ ch0_disparity_set <= '1';
+ if(g_force_disparity = 0) then
+ ch0_tx_chardispval <= '0';
+ else
+ ch0_tx_chardispval <= '1';
+ end if;
+ ch0_tx_chardispmode <= '1';
+ else
+ ch0_tx_chardispmode <= '0';
+ ch0_tx_chardispval <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_gen_output_ch0 : process(ch0_rx_rec_clk, ch0_gtp_reset)
+ begin
+ if(ch0_gtp_reset = '1') then
+ ch0_rx_data <= (others => '0');
+ ch0_rx_k <= '0';
+ ch0_rx_enc_err <= '0';
+
+ elsif rising_edge(ch0_rx_rec_clk) then
+ if(ch0_rx_enable_output_synced = '0') then
+-- make sure the output data is invalid when the link is down and that it will
+-- trigger the sync loss detection
+ ch0_rx_data <= (others => '0');
+ ch0_rx_k <= '1';
+ ch0_rx_enc_err <= '1';
+ else
+ ch0_rx_data <= ch0_rx_data_int;
+ ch0_rx_k <= ch0_rx_k_int;
+ ch0_rx_enc_err <= ch0_rx_disperr or ch0_rx_invcode;
+ end if;
+ end if;
+ end process;
+
+
+-- drive the recovered clock output
+ ch0_rx_rbclk_o <= ch0_rx_rec_clk;
+ -- drive ch0 ready indicator as well
+ ch0_rdy_o <= ch0_rx_enable_output_synced;
+ -- Note that the above clock assignment takes one delta delay in a simulator.
+ -- In order to keep clock and data signals aligned, re-assign rx_data, rx_k
+ -- and rx_enc_err (also adding one delta delay). This is purely necessary for
+ -- proper simulation only.
+ ch0_rx_data_o <= ch0_rx_data;
+ ch0_rx_k_o <= ch0_rx_k;
+ ch0_rx_enc_err_o <= ch0_rx_enc_err;
+ end generate gen_with_channel0;
+
+ -------------------------------------------------------------------------------
+ -- Channel 1 logic
+ -------------------------------------------------------------------------------
+
+ gen_with_channel1 : if(g_enable_ch1 /= 0) generate
+
+ ch1_rst_n <= not ch1_gtp_reset;
+ ch1_tx_disparity_o <= ch1_disp_pipe(1);
+
+ ch1_gtp_reset <= ch1_rst_synced or std_logic(not ch1_reset_counter(ch1_reset_counter'left));
+ ch1_rx_rec_clk_pad <= ch1_gtp_clkout_int(1);
+ ch1_ref_clk_in(0) <= gtp_clk_i;
+ ch1_ref_clk_in(1) <= '0';
+ -- Near-end PMA loopback or loopback selected with ch1_loopen_vec_i
+ ch1_gtp_loopback <= "010" when(ch1_loopen_i = '1') else
+ ch1_loopen_vec_i;
+
+ gen_disp_ch1 : process(ch1_ref_clk_i)
+ begin
+ if rising_edge(ch1_ref_clk_i) then
+ if(ch1_tx_chardispmode = '1' or ch1_rst_n = '0') then
+ if(g_force_disparity = 0) then
+ ch1_cur_disp <= RD_MINUS;
+ else
+ ch1_cur_disp <= RD_PLUS;
+ end if;
+ ch1_disp_pipe <= (others => '0');
+ else
+ ch1_cur_disp <= f_next_8b10b_disparity8(ch1_cur_disp, ch1_tx_k_i, ch1_tx_data_i);
+ ch1_disp_pipe(0) <= to_std_logic(ch1_cur_disp);
+ ch1_disp_pipe(1) <= ch1_disp_pipe(0);
+ end if;
+ end if;
+ end process;
+
+ p_gen_reset_ch1 : process(ch1_ref_clk_i)
+ begin
+ if rising_edge(ch1_ref_clk_i) then
+
+ ch1_rst_d0 <= ch1_rst_i;
+ ch1_rst_synced <= ch1_rst_d0;
+
+ if(ch1_rst_synced = '1') then
+ ch1_reset_counter <= (others => '0');
+ else
+ if(ch1_reset_counter(ch1_reset_counter'left) = '0') then
+ ch1_reset_counter <= ch1_reset_counter + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ U_Rbclk_buf_ch1 : BUFIO2
+ port map (
+ DIVCLK => ch1_rx_divclk,
+ IOCLK => open,
+ SERDESSTROBE => open,
+ I => ch1_rx_rec_clk_pad);
+
+ U_Rbclk_bufg_ch1 : BUFG
+ port map (
+ I => ch1_rx_divclk,
+ O => ch1_rx_rec_clk
+ );
+
+ ch1_gtp_locked <= ch1_gtp_pll_lockdet and ch1_gtp_reset_done;
+ ch1_tx_enc_err_o <= '0';
+
+ U_align_ch1 : gtp_phase_align
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ gtp_rst_i => ch1_gtp_reset,
+ gtp_tx_clk_i => ch1_ref_clk_i,
+ gtp_tx_en_pma_phase_align_o => ch1_tx_en_pma_phase_align,
+ gtp_tx_pma_set_phase_o => ch1_tx_pma_set_phase,
+ align_en_i => ch1_gtp_locked,
+ align_done_o => ch1_align_done);
+
+ U_bitslide_ch1 : gtp_bitslide
+ generic map (
+ g_simulation => g_simulation)
+ port map (
+ gtp_rst_i => ch1_gtp_reset,
+ gtp_rx_clk_i => ch1_rx_rec_clk,
+ gtp_rx_comma_det_i => ch1_rx_comma_det,
+ gtp_rx_byte_is_aligned_i => ch1_rx_byte_is_aligned,
+ serdes_ready_i => ch1_gtp_locked,
+ gtp_rx_slide_o => ch1_rx_slide,
+ gtp_rx_cdr_rst_o => ch1_rx_cdr_rst,
+ bitslide_o => ch1_rx_bitslide_int,
+ synced_o => ch1_rx_synced);
+
+ ch1_rx_bitslide_o <= ch1_rx_bitslide_int(3 downto 0);
+ ch1_rx_enable_output <= ch1_rx_synced and ch1_align_done;
+
+ U_sync_oen_ch1 : gc_sync_ffs
+ generic map (
+ g_sync_edge => "positive")
+ port map (
+ clk_i => ch1_rx_rec_clk,
+ rst_n_i => '1',
+ data_i => ch1_rx_enable_output,
+ synced_o => ch1_rx_enable_output_synced,
+ npulse_o => open,
+ ppulse_o => open);
+
+ p_force_proper_disparity_ch1 : process(ch1_ref_clk_i, ch1_gtp_reset)
+ begin
+ if (ch1_gtp_reset = '1') then
+ ch1_disparity_set <= '0';
+ ch1_tx_chardispval <= '0';
+ ch1_tx_chardispmode <= '0';
+
+ elsif rising_edge(ch1_ref_clk_i) then
+ if(ch1_disparity_set = '0' and ch1_tx_k_i = '1' and ch1_tx_data_i = x"bc" and ch1_align_done = '1') then
+ ch1_disparity_set <= '1';
+ if(g_force_disparity = 0) then
+ ch1_tx_chardispval <= '0';
+ else
+ ch1_tx_chardispval <= '1';
+ end if;
+ ch1_tx_chardispmode <= '1';
+ else
+ ch1_tx_chardispmode <= '0';
+ ch1_tx_chardispval <= '0';
+ end if;
+ end if;
+ end process;
+
+ p_gen_output_ch1 : process(ch1_rx_rec_clk, ch1_rst_i)
+ begin
+ if(ch1_rst_i = '1') then
+ ch1_rx_data <= (others => '0');
+ ch1_rx_k <= '0';
+ ch1_rx_enc_err <= '0';
+
+ elsif rising_edge(ch1_rx_rec_clk) then
+ if(ch1_rx_enable_output_synced = '0') then
+-- make sure the output data is invalid when the link is down and that it will
+-- trigger the sync loss detection
+ ch1_rx_data <= (others => '0');
+ ch1_rx_k <= '1';
+ ch1_rx_enc_err <= '1';
+ else
+ ch1_rx_data <= ch1_rx_data_int;
+ ch1_rx_k <= ch1_rx_k_int;
+ ch1_rx_enc_err <= ch1_rx_disperr or ch1_rx_invcode;
+ end if;
+ end if;
+ end process;
+
+ ch1_rx_rbclk_o <= ch1_rx_rec_clk;
+ ch1_rdy_o <= ch1_rx_enable_output_synced;
+ -- Note that the above clock assignment takes one delta delay in a simulator.
+ -- In order to keep clock and data signals aligned, re-assign rx_data, rx_k
+ -- and rx_enc_err (also adding one delta delay). This is purely necessary for
+ -- proper simulation only.
+ ch1_rx_data_o <= ch1_rx_data;
+ ch1_rx_k_o <= ch1_rx_k;
+ ch1_rx_enc_err_o <= ch1_rx_enc_err;
+ end generate gen_with_channel1;
+
+ U_GTP_TILE_INST : WHITERABBITGTP_WRAPPER_TILE_SPARTAN6
+ generic map
+ (
+ TILE_SIM_GTPRESET_SPEEDUP => g_simulation, -- Set to 1 to speed up sim reset
+ TILE_CLK25_DIVIDER_0 => 5,
+ TILE_CLK25_DIVIDER_1 => 5,
+ TILE_PLL_DIVSEL_FB_0 => 2,
+ TILE_PLL_DIVSEL_FB_1 => 2,
+ TILE_PLL_DIVSEL_REF_0 => 1,
+ TILE_PLL_DIVSEL_REF_1 => 1,
+
+ --
+ TILE_PLL_SOURCE_0 => "PLL0",
+ TILE_PLL_SOURCE_1 => "PLL1"
+ )
+ port map
+ (
+ ------------------------ Loopback and Powerdown Ports ----------------------
+ LOOPBACK0_IN => ch0_gtp_loopback,
+ LOOPBACK1_IN => ch1_gtp_loopback,
+ --------------------------------- PLL Ports --------------------------------
+
+ REFCLKOUT0_OUT => open,
+ REFCLKOUT1_OUT => open,
+ CLK00_IN => ch0_ref_clk_in(0),
+ CLK01_IN => ch1_ref_clk_in(0),
+ CLK10_IN => ch0_ref_clk_in(1),
+ CLK11_IN => ch1_ref_clk_in(1),
+ GTPRESET0_IN => ch0_gtp_reset,
+ GTPRESET1_IN => ch1_gtp_reset,
+ PLLLKDET0_OUT => ch0_gtp_pll_lockdet,
+ PLLLKDET1_OUT => ch1_gtp_pll_lockdet,
+ RESETDONE0_OUT => ch0_gtp_reset_done,
+ RESETDONE1_OUT => ch1_gtp_reset_done,
+
+ ----------------------- Receive Ports - 8b10b Decoder ----------------------
+ RXCHARISK0_OUT => ch0_rx_k_int,
+ RXCHARISK1_OUT => ch1_rx_k_int,
+ RXDISPERR0_OUT => ch0_rx_disperr,
+ RXDISPERR1_OUT => ch1_rx_disperr,
+ RXNOTINTABLE0_OUT => ch0_rx_invcode,
+ RXNOTINTABLE1_OUT => ch1_rx_invcode,
+
+ --------------- Receive Ports - Comma Detection and Alignment --------------
+ RXBYTEISALIGNED0_OUT => ch0_rx_byte_is_aligned,
+ RXBYTEISALIGNED1_OUT => ch1_rx_byte_is_aligned,
+ RXCOMMADET0_OUT => ch0_rx_comma_det,
+ RXCOMMADET1_OUT => ch1_rx_comma_det,
+ RXSLIDE0_IN => ch0_rx_slide,
+ RXSLIDE1_IN => ch1_rx_slide,
+
+ ------------------- Receive Ports - RX Data Path interface -----------------
+ RXDATA0_OUT => ch0_rx_data_int,
+ RXDATA1_OUT => ch1_rx_data_int,
+ RXUSRCLK0_IN => ch0_rx_rec_clk,
+ RXUSRCLK1_IN => ch1_rx_rec_clk,
+ RXUSRCLK20_IN => ch0_rx_rec_clk,
+ RXUSRCLK21_IN => ch1_rx_rec_clk,
+
+ ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
+ RXCDRRESET0_IN => ch0_rx_cdr_rst,
+ RXCDRRESET1_IN => ch1_rx_cdr_rst,
+ RXN0_IN => pad_rxn0_i,
+ RXN1_IN => pad_rxn1_i,
+ RXP0_IN => pad_rxp0_i,
+ RXP1_IN => pad_rxp1_i,
+
+ ---------------------------- TX/RX Datapath Ports --------------------------
+ GTPCLKFBEAST_OUT => open,
+ GTPCLKFBWEST_OUT => open,
+ GTPCLKOUT0_OUT => ch0_gtp_clkout_int,
+ GTPCLKOUT1_OUT => ch1_gtp_clkout_int,
+ ------------------- Transmit Ports - 8b10b Encoder Control -----------------
+ TXCHARISK0_IN => ch0_tx_k_i,
+ TXCHARISK1_IN => ch1_tx_k_i,
+ TXRUNDISP0_OUT => ch0_tx_rundisp_vec,
+ TXRUNDISP1_OUT => ch1_tx_rundisp_vec,
+
+ TXCHARDISPMODE0_IN => ch0_tx_chardispmode,
+ TXCHARDISPMODE1_IN => ch1_tx_chardispmode,
+ TXCHARDISPVAL0_IN => ch0_tx_chardispval,
+ TXCHARDISPVAL1_IN => ch1_tx_chardispval,
+
+ --------------- Transmit Ports - TX Buffer and Phase Alignment -------------
+ TXENPMAPHASEALIGN0_IN => ch0_tx_en_pma_phase_align,
+ TXENPMAPHASEALIGN1_IN => ch1_tx_en_pma_phase_align,
+ TXPMASETPHASE0_IN => ch0_tx_pma_set_phase,
+ TXPMASETPHASE1_IN => ch1_tx_pma_set_phase,
+ ------------------ Transmit Ports - TX Data Path interface -----------------
+ TXDATA0_IN => ch0_tx_data_i,
+ TXDATA1_IN => ch1_tx_data_i,
+ TXUSRCLK0_IN => ch0_ref_clk_i,
+ TXUSRCLK1_IN => ch1_ref_clk_i,
+ TXUSRCLK20_IN => ch0_ref_clk_i,
+ TXUSRCLK21_IN => ch1_ref_clk_i,
+ --------------- Transmit Ports - TX Driver and OOB signalling --------------
+ TXN0_OUT => pad_txn0_o,
+ TXN1_OUT => pad_txn1_o,
+ TXP0_OUT => pad_txp0_o,
+ TXP1_OUT => pad_txp1_o,
+ --------------- Transmit Ports - TX PRBS Generator -------------------------
+ TXENPRBSTST0_IN => ch0_tx_prbs_sel_i,
+ TXENPRBSTST1_IN => ch1_tx_prbs_sel_i
+
+ );
+
+
+end rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd
new file mode 100644
index 000000000..5f9f76415
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/wr_xilinx_pkg.vhd
@@ -0,0 +1,192 @@
+-------------------------------------------------------------------------------
+-- Title : Platform-dependent components needed for WR PTP Core on Xilinx
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : wr_xilinx_pkg.vhd
+-- Author : Maciej Lipinski, Grzegorz Daniluk, Dimitrios Lampridis
+-- Company : CERN
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2016-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version
+--
+-- This source 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 Lesser General Public License for more
+-- details
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.endpoint_pkg.all;
+
+package wr_xilinx_pkg is
+
+ component xwrc_platform_xilinx is
+ generic (
+ g_fpga_family : string := "spartan6";
+ g_with_external_clock_input : boolean := FALSE;
+ g_use_default_plls : boolean := TRUE;
+ g_gtp_enable_ch0 : integer := 0;
+ g_gtp_enable_ch1 : integer := 1;
+ g_simulation : integer := 0;
+ g_use_ibufgds : boolean := false);
+ port (
+ areset_n_i : in std_logic := '1';
+ clk_10m_ext_i : in std_logic := '0';
+ clk_125m_gtp_p_i : in std_logic;
+ clk_125m_gtp_n_i : in std_logic;
+ clk_20m_vcxo_i : in std_logic := '0';
+ clk_125m_pllref_i : in std_logic := '0';
+ clk_125m_dmtd_i : in std_logic := '0';
+ clk_62m5_dmtd_i : in std_logic := '0';
+ clk_dmtd_locked_i : in std_logic := '1';
+ clk_62m5_sys_i : in std_logic := '0';
+ clk_sys_locked_i : in std_logic := '1';
+ clk_125m_ref_i : in std_logic := '0';
+ clk_ref_locked_i : in std_logic := '1';
+ clk_125m_ext_i : in std_logic := '0';
+ clk_ext_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+ sfp_txn_o : out std_logic;
+ sfp_txp_o : out std_logic;
+ sfp_rxn_i : in std_logic;
+ sfp_rxp_i : in std_logic;
+ sfp_tx_fault_i : in std_logic := '0';
+ sfp_los_i : in std_logic := '0';
+ sfp_tx_disable_o : out std_logic;
+ clk_62m5_sys_o : out std_logic;
+ clk_125m_ref_o : out std_logic;
+ clk_ref_locked_o : out std_logic;
+ clk_62m5_dmtd_o : out std_logic;
+ pll_locked_o : out std_logic;
+ clk_10m_ext_o : out std_logic;
+ phy8_o : out t_phy_8bits_to_wrc;
+ phy8_i : in t_phy_8bits_from_wrc := c_dummy_phy8_from_wrc;
+ phy16_o : out t_phy_16bits_to_wrc;
+ phy16_i : in t_phy_16bits_from_wrc := c_dummy_phy16_from_wrc;
+ ext_ref_mul_o : out std_logic;
+ ext_ref_mul_locked_o : out std_logic;
+ ext_ref_mul_stopped_o : out std_logic;
+ ext_ref_rst_i : in std_logic := '0');
+ end component xwrc_platform_xilinx;
+
+ component wr_gtp_phy_spartan6
+ generic (
+ g_enable_ch0 : integer := 1;
+ g_enable_ch1 : integer := 1;
+ g_simulation : integer := 0);
+ port (
+ gtp_clk_i : in std_logic;
+ ch0_ref_clk_i : in std_logic := '0';
+ ch0_tx_data_i : in std_logic_vector(7 downto 0) := "00000000";
+ ch0_tx_k_i : in std_logic := '0';
+ ch0_tx_disparity_o : out std_logic;
+ ch0_tx_enc_err_o : out std_logic;
+ ch0_rx_rbclk_o : out std_logic;
+ ch0_rx_data_o : out std_logic_vector(7 downto 0);
+ ch0_rx_k_o : out std_logic;
+ ch0_rx_enc_err_o : out std_logic;
+ ch0_rx_bitslide_o : out std_logic_vector(3 downto 0);
+ ch0_rst_i : in std_logic := '0';
+ ch0_loopen_i : in std_logic := '0';
+ ch0_loopen_vec_i : in std_logic_vector(2 downto 0) := (others => '0');
+ ch0_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0');
+ ch0_rdy_o : out std_logic;
+ ch1_ref_clk_i : in std_logic;
+ ch1_tx_data_i : in std_logic_vector(7 downto 0) := "00000000";
+ ch1_tx_k_i : in std_logic := '0';
+ ch1_tx_disparity_o : out std_logic;
+ ch1_tx_enc_err_o : out std_logic;
+ ch1_rx_data_o : out std_logic_vector(7 downto 0);
+ ch1_rx_rbclk_o : out std_logic;
+ ch1_rx_k_o : out std_logic;
+ ch1_rx_enc_err_o : out std_logic;
+ ch1_rx_bitslide_o : out std_logic_vector(3 downto 0);
+ ch1_rst_i : in std_logic := '0';
+ ch1_loopen_i : in std_logic := '0';
+ ch1_loopen_vec_i : in std_logic_vector(2 downto 0) := (others => '0');
+ ch1_tx_prbs_sel_i : in std_logic_vector(2 downto 0) := (others => '0');
+ ch1_rdy_o : out std_logic;
+ pad_txn0_o : out std_logic;
+ pad_txp0_o : out std_logic;
+ pad_rxn0_i : in std_logic := '0';
+ pad_rxp0_i : in std_logic := '0';
+ pad_txn1_o : out std_logic;
+ pad_txp1_o : out std_logic;
+ pad_rxn1_i : in std_logic := '0';
+ pad_rxp1_i : in std_logic := '0');
+ end component;
+
+ component wr_gtx_phy_family7 is
+ generic (
+ -- set to non-zero value to speed up the simulation by reducing some delays
+ g_simulation : integer := 0);
+ port (
+ clk_gtx_i : in std_logic;
+ tx_out_clk_o : out std_logic;
+ tx_locked_o : out std_logic;
+ tx_data_i : in std_logic_vector(15 downto 0);
+ tx_k_i : in std_logic_vector(1 downto 0);
+ tx_disparity_o : out std_logic;
+ tx_enc_err_o : out std_logic;
+ rx_rbclk_o : out std_logic;
+ rx_data_o : out std_logic_vector(15 downto 0);
+ rx_k_o : out std_logic_vector(1 downto 0);
+ rx_enc_err_o : out std_logic;
+ rx_bitslide_o : out std_logic_vector(4 downto 0);
+ rst_i : in std_logic;
+ loopen_i : in std_logic_vector(2 downto 0);
+ tx_prbs_sel_i : in std_logic_vector(2 downto 0);
+ pad_txn_o : out std_logic;
+ pad_txp_o : out std_logic;
+ pad_rxn_i : in std_logic := '0';
+ pad_rxp_i : in std_logic := '0';
+ rdy_o : out std_logic);
+ end component;
+
+ component wr_gtp_phy_family7 is
+ generic (
+ -- set to non-zero value to speed up the simulation by reducing some delays
+ g_simulation : integer := 0);
+ port (
+ clk_gtp_i : in std_logic;
+ tx_out_clk_o : out std_logic;
+ tx_locked_o : out std_logic;
+ tx_data_i : in std_logic_vector(15 downto 0);
+ tx_k_i : in std_logic_vector(1 downto 0);
+ tx_disparity_o : out std_logic;
+ tx_enc_err_o : out std_logic;
+ rx_rbclk_o : out std_logic;
+ rx_data_o : out std_logic_vector(15 downto 0);
+ rx_k_o : out std_logic_vector(1 downto 0);
+ rx_enc_err_o : out std_logic;
+ rx_bitslide_o : out std_logic_vector(4 downto 0);
+ rst_i : in std_logic;
+ loopen_i : in std_logic_vector(2 downto 0);
+ tx_prbs_sel_i : in std_logic_vector(2 downto 0);
+ pad_txn_o : out std_logic;
+ pad_txp_o : out std_logic;
+ pad_rxn_i : in std_logic := '0';
+ pad_rxp_i : in std_logic := '0';
+ rdy_o : out std_logic);
+ end component;
+
+end wr_xilinx_pkg;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd
new file mode 100644
index 000000000..c36d7c3c1
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/platform/xilinx/xwrc_platform_xilinx.vhd
@@ -0,0 +1,1095 @@
+-------------------------------------------------------------------------------
+-- Title : Platform-dependent components needed for WR PTP Core on Xilinx
+-- Project : WR PTP Core
+-- URL : http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_core
+-------------------------------------------------------------------------------
+-- File : wrc_platform_xilinx.vhd
+-- Author : Maciej Lipinski, Grzegorz Daniluk, Dimitrios Lampridis
+-- Company : CERN
+-- Platform : FPGA-generic
+-- Standard : VHDL'93
+-------------------------------------------------------------------------------
+-- Description:
+-- This module instantiates platform-specific modules that are needed by the
+-- WR PTP Core (WRPC) to interface hardware on Xilinx FPGA. In particular it
+-- contains:
+-- * PHY
+-- * PLLs
+-- * buffers
+--
+-------------------------------------------------------------------------------
+--
+-- Copyright (c) 2016-2017 CERN / BE-CO-HT
+--
+-- This source file is free software; you can redistribute it
+-- and/or modify it under the terms of the GNU Lesser General
+-- Public License as published by the Free Software Foundation;
+-- either version 2.1 of the License, or (at your option) any
+-- later version
+--
+-- This source 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 Lesser General Public License for more
+-- details
+--
+-- You should have received a copy of the GNU Lesser General
+-- Public License along with this source; if not, download it
+-- from http://www.gnu.org/licenses/lgpl-2.1.html
+--
+-------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.endpoint_pkg.all;
+use work.gencores_pkg.all;
+use work.wr_xilinx_pkg.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
+entity xwrc_platform_xilinx is
+ generic
+ (
+ -- Define the family/model of Xilinx FPGA
+ -- (supported: for now only spartan6)
+ g_fpga_family : string := "spartan6";
+ -- Select whether to include external ref clock input
+ g_with_external_clock_input : boolean := FALSE;
+ -- Set to FALSE if you want to instantiate your own PLLs
+ g_use_default_plls : boolean := TRUE;
+ -- Select GTP channel to use (only one can be active)
+ g_gtp_enable_ch0 : integer := 0;
+ g_gtp_enable_ch1 : integer := 1;
+ -- Set to TRUE will speed up some initialization processes
+ g_simulation : integer := 0;
+ g_use_ibufgds : boolean := false
+ );
+ port (
+ ---------------------------------------------------------------------------
+ -- Asynchronous reset (active low)
+ ---------------------------------------------------------------------------
+ areset_n_i : in std_logic;
+ ---------------------------------------------------------------------------
+ -- 10MHz ext ref clock input (g_with_external_clock_input = TRUE)
+ ---------------------------------------------------------------------------
+ clk_10m_ext_i : in std_logic := '0';
+ ---------------------------------------------------------------------------
+ -- 125 MHz GTP/GTX reference
+ -- If g_use_ibufgds=false then connect buffered clock to clk_125m_gtp_p_i
+ ---------------------------------------------------------------------------
+ clk_125m_gtp_p_i : in std_logic;
+ clk_125m_gtp_n_i : in std_logic;
+ ---------------------------------------------------------------------------
+ -- Clock inputs for default PLLs (g_use_default_plls = TRUE)
+ ---------------------------------------------------------------------------
+ -- 20MHz VCXO clock
+ clk_20m_vcxo_i : in std_logic := '0';
+ -- 125.000 MHz PLL reference
+ clk_125m_pllref_i : in std_logic := '0';
+ -- 124.992 MHz DMTD reference (CLBv3 reference design)
+ clk_125m_dmtd_i : in std_logic := '0';
+ ---------------------------------------------------------------------------
+ -- Clock inputs from custom PLLs (g_use_default_plls = FALSE)
+ ---------------------------------------------------------------------------
+ -- 62.5MHz DMTD offset clock and lock status
+ clk_62m5_dmtd_i : in std_logic := '0';
+ clk_dmtd_locked_i : in std_logic := '1';
+ -- 62.5MHz Main system clock and lock status
+ clk_62m5_sys_i : in std_logic := '0';
+ clk_sys_locked_i : in std_logic := '1';
+ -- 125MHz Reference clock
+ clk_125m_ref_i : in std_logic := '0';
+ clk_ref_locked_i : in std_logic := '1';
+ -- 125MHz derived from 10MHz external reference and lock status
+ -- (when g_with_external_clock_input = TRUE)
+ clk_125m_ext_i : in std_logic := '0';
+ clk_ext_locked_i : in std_logic := '1';
+ clk_ext_stopped_i : in std_logic := '0';
+ clk_ext_rst_o : out std_logic;
+ ---------------------------------------------------------------------------
+ -- SFP
+ ---------------------------------------------------------------------------
+ sfp_txn_o : out std_logic;
+ sfp_txp_o : out std_logic;
+ sfp_rxn_i : in std_logic;
+ sfp_rxp_i : in std_logic;
+ sfp_tx_fault_i : in std_logic := '0';
+ sfp_los_i : in std_logic := '0';
+ sfp_tx_disable_o : out std_logic;
+ ---------------------------------------------------------------------------
+ --Interface to WR PTP Core (WRPC)
+ ---------------------------------------------------------------------------
+ -- PLL outputs
+ clk_62m5_sys_o : out std_logic;
+ clk_125m_ref_o : out std_logic;
+ clk_ref_locked_o : out std_logic;
+ clk_62m5_dmtd_o : out std_logic;
+ pll_locked_o : out std_logic;
+ clk_10m_ext_o : out std_logic;
+ -- PHY
+ phy8_o : out t_phy_8bits_to_wrc;
+ phy8_i : in t_phy_8bits_from_wrc := c_dummy_phy8_from_wrc;
+ phy16_o : out t_phy_16bits_to_wrc;
+ phy16_i : in t_phy_16bits_from_wrc := c_dummy_phy16_from_wrc;
+ -- External reference
+ ext_ref_mul_o : out std_logic;
+ ext_ref_mul_locked_o : out std_logic;
+ ext_ref_mul_stopped_o : out std_logic;
+ ext_ref_rst_i : in std_logic := '0'
+ );
+
+end entity xwrc_platform_xilinx;
+
+architecture rtl of xwrc_platform_xilinx is
+
+ -----------------------------------------------------------------------------
+ -- Signals declaration
+ -----------------------------------------------------------------------------
+
+ signal pll_arst : std_logic := '0';
+ signal clk_125m_pllref_buf : std_logic;
+
+begin -- architecture rtl
+
+ -----------------------------------------------------------------------------
+ -- Check for unsupported features and/or misconfiguration
+ -----------------------------------------------------------------------------
+ gen_unknown_fpga : if (g_fpga_family /= "spartan6" and g_fpga_family /= "kintex7" and g_fpga_family /= "artix7") generate
+ assert FALSE
+ report "Xilinx FPGA family [" & g_fpga_family & "] is not supported"
+ severity ERROR;
+ end generate gen_unknown_fpga;
+
+ gen_single_gtp_channel : if (g_gtp_enable_ch0 /= 0 and g_gtp_enable_ch1 /= 0)
+ generate
+ assert FALSE
+ report "Cannot enable both GTP channels simultaneously"
+ severity ERROR;
+ end generate gen_single_gtp_channel;
+
+ -----------------------------------------------------------------------------
+ -- Clock PLLs
+ -----------------------------------------------------------------------------
+
+ -- active high async reset for PLLs
+ pll_arst <= not areset_n_i;
+
+ gen_default_plls : if (g_use_default_plls = TRUE) generate
+
+ -- Default PLL setup consists of two PLLs.
+ -- One takes a 125MHz clock signal as input and produces the
+ -- 62.5MHz WR PTP core main system clock.
+ -- The other PLL takes a 20MHz clock signal as input and produces the
+ -- 62.5MHz DMTD clock.
+ --
+ -- A third PLL is instantiated if also g_with_external_clock_input = TRUE.
+ -- In that case, a 10MHz external reference is multiplied to generate a
+ -- 125MHz reference clock
+ gen_spartan6_default_plls : if (g_fpga_family = "spartan6") generate
+
+ signal clk_sys : std_logic;
+ signal clk_sys_out : std_logic;
+ signal clk_sys_fb : std_logic;
+ signal pll_sys_locked : std_logic;
+ signal clk_dmtd : std_logic;
+ signal clk_dmtd_fb : std_logic;
+ signal pll_dmtd_locked : std_logic;
+ signal clk_20m_vcxo_buf : std_logic;
+
+ begin --gen_spartan6_default_plls
+
+ -- System PLL
+ cmp_sys_clk_pll : PLL_BASE
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLK_FEEDBACK => "CLKFBOUT",
+ COMPENSATION => "INTERNAL",
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT => 8,
+ CLKFBOUT_PHASE => 0.000,
+ CLKOUT0_DIVIDE => 16,
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKIN_PERIOD => 8.0,
+ REF_JITTER => 0.016)
+ port map (
+ CLKFBOUT => clk_sys_fb,
+ CLKOUT0 => clk_sys,
+ LOCKED => pll_sys_locked,
+ RST => pll_arst,
+ CLKFBIN => clk_sys_fb,
+ CLKIN => clk_125m_pllref_buf);
+
+ -- System PLL input clock buffer
+ cmp_clk_sys_buf_i : BUFG
+ port map (
+ O => clk_125m_pllref_buf,
+ I => clk_125m_pllref_i);
+
+ -- System PLL output clock buffer
+ cmp_clk_sys_buf_o : BUFG
+ port map (
+ O => clk_sys_out,
+ I => clk_sys);
+
+ clk_62m5_sys_o <= clk_sys_out;
+ clk_125m_ref_o <= clk_125m_pllref_buf;
+ pll_locked_o <= pll_sys_locked and pll_dmtd_locked;
+ clk_ref_locked_o <= '1';
+
+ -- DMTD PLL
+ cmp_dmtd_clk_pll : PLL_BASE
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLK_FEEDBACK => "CLKFBOUT",
+ COMPENSATION => "INTERNAL",
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT => 50,
+ CLKFBOUT_PHASE => 0.000,
+ CLKOUT0_DIVIDE => 16,
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKIN_PERIOD => 50.0,
+ REF_JITTER => 0.016)
+ port map (
+ CLKFBOUT => clk_dmtd_fb,
+ CLKOUT0 => clk_dmtd,
+ LOCKED => pll_dmtd_locked,
+ RST => pll_arst,
+ CLKFBIN => clk_dmtd_fb,
+ CLKIN => clk_20m_vcxo_buf);
+
+ -- DMTD PLL input clock buffer
+ cmp_clk_dmtd_buf_i : BUFG
+ port map (
+ O => clk_20m_vcxo_buf,
+ I => clk_20m_vcxo_i);
+
+ -- DMTD PLL output clock buffer
+ cmp_clk_dmtd_buf_o : BUFG
+ port map (
+ O => clk_62m5_dmtd_o,
+ I => clk_dmtd);
+
+
+ gen_spartan6_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate
+
+ signal clk_ext_fbi : std_logic;
+ signal clk_ext_fbo : std_logic;
+ signal clk_ext_buf : std_logic;
+ signal clk_ext : std_logic;
+ signal clk_ext_stat : std_logic_vector(7 downto 0);
+ signal pll_ext_rst : std_logic;
+
+ begin --gen_spartan6_ext_ref_pll
+
+ -- External reference DCM
+ cmp_ext_ref_pll : DCM_SP
+ generic map
+ (CLKDV_DIVIDE => 2.000,
+ CLKFX_DIVIDE => 2,
+ CLKFX_MULTIPLY => 25,
+ CLKIN_DIVIDE_BY_2 => FALSE,
+ CLKIN_PERIOD => 100.0,
+ CLKOUT_PHASE_SHIFT => "NONE",
+ CLK_FEEDBACK => "1X",
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
+ PHASE_SHIFT => 0,
+ STARTUP_WAIT => FALSE)
+ port map
+ -- Input clock
+ (CLKIN => clk_ext_buf,
+ CLKFB => clk_ext_fbi,
+ -- Output clocks
+ CLK0 => clk_ext_fbo,
+ CLKFX => clk_ext,
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open,
+ -- Other control and status signals
+ LOCKED => ext_ref_mul_locked_o,
+ STATUS => clk_ext_stat,
+ RST => pll_ext_rst,
+ -- Unused pin, tie low
+ DSSEN => '0');
+
+ ext_ref_mul_stopped_o <= clk_ext_stat(1);
+
+ -- External reference input buffer
+ cmp_clk_ext_buf_i : BUFG
+ port map
+ (O => clk_ext_buf,
+ I => clk_10m_ext_i);
+
+ clk_10m_ext_o <= clk_ext_buf;
+
+ -- External reference feedback buffer
+ cmp_clk_ext_buf_fb : BUFG
+ port map
+ (O => clk_ext_fbi,
+ I => clk_ext_fbo);
+
+ -- External reference output buffer
+ cmp_clk_ext_buf_o : BUFG
+ port map
+ (O => ext_ref_mul_o,
+ I => clk_ext);
+
+ cmp_extend_ext_reset : gc_extend_pulse
+ generic map (
+ g_width => 1000)
+ port map (
+ clk_i => clk_sys_out,
+ rst_n_i => pll_sys_locked,
+ pulse_i => ext_ref_rst_i,
+ extended_o => pll_ext_rst);
+
+ end generate gen_spartan6_ext_ref_pll;
+
+ end generate gen_spartan6_default_plls;
+
+ ---------------------------------------------------------------------------
+ -- Kintex7 PLLs
+ ---------------------------------------------------------------------------
+ gen_kintex7_default_plls : if (g_fpga_family = "kintex7") generate
+
+ signal clk_sys : std_logic;
+ signal clk_sys_out : std_logic;
+ signal clk_sys_fb : std_logic;
+ signal pll_sys_locked : std_logic;
+ signal clk_dmtd : std_logic;
+ signal clk_dmtd_fb : std_logic;
+ signal pll_dmtd_locked : std_logic;
+ signal clk_20m_vcxo_buf : std_logic;
+
+ begin
+ -- System PLL (125 MHz -> 62.5 MHz)
+ cmp_sys_clk_pll : MMCME2_ADV
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLKOUT4_CASCADE => false,
+ COMPENSATION => "ZHOLD",
+ STARTUP_WAIT => false,
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT_F => 8.000, -- 125 MHz x 8.
+ CLKFBOUT_PHASE => 0.000,
+ CLKFBOUT_USE_FINE_PS => false,
+
+ CLKOUT0_DIVIDE_F => 16.000, -- 62.5 MHz sys clock
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKOUT0_USE_FINE_PS => false,
+
+ CLKIN1_PERIOD => 8.000, -- 8 ns means 125 MHz
+ REF_JITTER1 => 0.010)
+ port map (
+ -- Output clocks
+ CLKFBOUT => clk_sys_fb,
+ CLKOUT0 => clk_sys,
+ -- Input clock control
+ CLKFBIN => clk_sys_fb,
+ CLKIN1 => clk_125m_pllref_buf,
+ CLKIN2 => '0',
+ -- Tied to always select the primary input clock
+ CLKINSEL => '1',
+ -- Ports for dynamic reconfiguration
+ DADDR => (others => '0'),
+ DCLK => '0',
+ DEN => '0',
+ DI => (others => '0'),
+ DO => open,
+ DRDY => open,
+ DWE => '0',
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open,
+ -- Other control and status signals
+ LOCKED => pll_sys_locked,
+ CLKINSTOPPED => open,
+ CLKFBSTOPPED => open,
+ PWRDWN => '0',
+ RST => pll_arst);
+
+ -- System PLL output clock buffer
+ cmp_clk_sys_buf_o : BUFG
+ port map (
+ I => clk_sys,
+ O => clk_sys_out);
+
+ clk_62m5_sys_o <= clk_sys_out;
+ pll_locked_o <= pll_dmtd_locked and pll_sys_locked;
+
+ -- DMTD PLL (20 MHz -> ~62,5 MHz)
+ cmp_dmtd_clk_pll : MMCME2_ADV
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLKOUT4_CASCADE => false,
+ COMPENSATION => "ZHOLD",
+ STARTUP_WAIT => false,
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT_F => 50.000, -- 20 MHz -> 1 GHz
+ CLKFBOUT_PHASE => 0.000,
+ CLKFBOUT_USE_FINE_PS => false,
+ CLKOUT0_DIVIDE_F => 16.000, -- 1GHz/16 -> 62.5 MHz
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKOUT0_USE_FINE_PS => false,
+ CLKOUT1_DIVIDE => 16, -- 1GHz/16 -> 62.5 MHz
+ CLKOUT1_PHASE => 0.000,
+ CLKOUT1_DUTY_CYCLE => 0.500,
+ CLKOUT1_USE_FINE_PS => false,
+ CLKIN1_PERIOD => 50.000, -- 50ns for 20 MHz
+ REF_JITTER1 => 0.010)
+ port map (
+ -- Output clocks
+ CLKFBOUT => clk_dmtd_fb,
+ CLKOUT0 => clk_dmtd,
+ -- Input clock control
+ CLKFBIN => clk_dmtd_fb,
+ CLKIN1 => clk_20m_vcxo_buf,
+ CLKIN2 => '0',
+ -- Tied to always select the primary input clock
+ CLKINSEL => '1',
+ -- Ports for dynamic reconfiguration
+ DADDR => (others => '0'),
+ DCLK => '0',
+ DEN => '0',
+ DI => (others => '0'),
+ DO => open,
+ DRDY => open,
+ DWE => '0',
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open,
+ -- Other control and status signals
+ LOCKED => pll_dmtd_locked,
+ CLKINSTOPPED => open,
+ CLKFBSTOPPED => open,
+ PWRDWN => '0',
+ RST => pll_arst);
+
+ -- DMTD PLL input clock buffer
+ cmp_clk_dmtd_buf_i : BUFG
+ port map (
+ O => clk_20m_vcxo_buf,
+ I => clk_20m_vcxo_i);
+
+ -- DMTD PLL output clock buffer
+ cmp_clk_dmtd_buf_o : BUFG
+ port map (
+ O => clk_62m5_dmtd_o,
+ I => clk_dmtd);
+
+ -- External 10MHz reference PLL for Kintex7
+ gen_kintex7_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate
+
+ signal clk_ext_fbi : std_logic;
+ signal clk_ext_fbo : std_logic;
+ signal clk_ext_buf : std_logic;
+ signal clk_ext_mul : std_logic;
+ signal pll_ext_rst : std_logic;
+
+ begin
+ mmcm_adv_inst : MMCME2_ADV
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLKOUT4_CASCADE => FALSE,
+ COMPENSATION => "ZHOLD",
+ STARTUP_WAIT => FALSE,
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT_F => 62.500,
+ CLKFBOUT_PHASE => 0.000,
+ CLKFBOUT_USE_FINE_PS => FALSE,
+ CLKOUT0_DIVIDE_F => 10.000,
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKOUT0_USE_FINE_PS => FALSE,
+ CLKIN1_PERIOD => 100.000,
+ REF_JITTER1 => 0.005)
+ port map (
+ -- Output clocks
+ CLKFBOUT => clk_ext_fbo,
+ CLKOUT0 => clk_ext_mul,
+ -- Input clock control
+ CLKFBIN => clk_ext_fbi,
+ CLKIN1 => clk_ext_buf,
+ CLKIN2 => '0',
+ -- Tied to always select the primary input clock
+ CLKINSEL => '1',
+ -- Ports for dynamic reconfiguration
+ DADDR => (others => '0'),
+ DCLK => '0',
+ DEN => '0',
+ DI => (others => '0'),
+ DO => open,
+ DRDY => open,
+ DWE => '0',
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open, -- Other control and status signals
+ LOCKED => ext_ref_mul_locked_o,
+ CLKINSTOPPED => ext_ref_mul_stopped_o,
+ CLKFBSTOPPED => open,
+ PWRDWN => '0',
+ RST => pll_ext_rst);
+
+ -- External reference input buffer
+ cmp_clk_ext_buf_i : BUFG
+ port map (
+ O => clk_ext_buf,
+ I => clk_10m_ext_i);
+
+ clk_10m_ext_o <= clk_ext_buf;
+
+ -- External reference feedback buffer
+ cmp_clk_ext_buf_fb : BUFG
+ port map (
+ O => clk_ext_fbi,
+ I => clk_ext_fbo);
+
+ -- External reference output buffer
+ cmp_clk_ext_buf_o : BUFG
+ port map (
+ O => ext_ref_mul_o,
+ I => clk_ext_mul);
+
+ cmp_extend_ext_reset : gc_extend_pulse
+ generic map (
+ g_width => 1000)
+ port map (
+ clk_i => clk_sys_out,
+ rst_n_i => pll_sys_locked,
+ pulse_i => ext_ref_rst_i,
+ extended_o => pll_ext_rst);
+
+ end generate gen_kintex7_ext_ref_pll;
+
+ end generate gen_kintex7_default_plls;
+
+ ---------------------------------------------------------------------------
+ -- Artix7 PLLs
+ ---------------------------------------------------------------------------
+ gen_artix7_default_plls : if (g_fpga_family = "artix7") generate
+
+ signal clk_sys : std_logic;
+ signal clk_sys_out : std_logic;
+ signal clk_sys_fb : std_logic;
+ signal pll_sys_locked : std_logic;
+ signal clk_dmtd : std_logic := '0'; -- initialize for simulation
+-- signal clk_dmtd_fb : std_logic;
+-- signal pll_dmtd_locked : std_logic;
+-- signal clk_20m_vcxo_buf : std_logic;
+
+ begin
+ -- System PLL (125 MHz -> 62.5 MHz)
+ cmp_sys_clk_pll : MMCME2_ADV
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLKOUT4_CASCADE => false,
+ COMPENSATION => "ZHOLD",
+ STARTUP_WAIT => false,
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT_F => 8.000, -- 125 MHz x 8.
+ CLKFBOUT_PHASE => 0.000,
+ CLKFBOUT_USE_FINE_PS => false,
+
+ CLKOUT0_DIVIDE_F => 16.000, -- 62.5 MHz sys clock
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKOUT0_USE_FINE_PS => false,
+
+ CLKIN1_PERIOD => 8.000, -- 8 ns means 125 MHz
+ REF_JITTER1 => 0.010)
+ port map (
+ -- Output clocks
+ CLKFBOUT => clk_sys_fb,
+ CLKOUT0 => clk_sys,
+ -- Input clock control
+ CLKFBIN => clk_sys_fb,
+ CLKIN1 => clk_125m_pllref_buf,
+ CLKIN2 => '0',
+ -- Tied to always select the primary input clock
+ CLKINSEL => '1',
+ -- Ports for dynamic reconfiguration
+ DADDR => (others => '0'),
+ DCLK => '0',
+ DEN => '0',
+ DI => (others => '0'),
+ DO => open,
+ DRDY => open,
+ DWE => '0',
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open,
+ -- Other control and status signals
+ LOCKED => pll_sys_locked,
+ CLKINSTOPPED => open,
+ CLKFBSTOPPED => open,
+ PWRDWN => '0',
+ RST => pll_arst);
+
+ -- System PLL output clock buffer
+ cmp_clk_sys_buf_o : BUFG
+ port map (
+ I => clk_sys,
+ O => clk_sys_out);
+
+ clk_62m5_sys_o <= clk_sys_out;
+-- pll_locked_o <= pll_dmtd_locked and pll_sys_locked;
+ pll_locked_o <= pll_sys_locked;
+
+-- -- DMTD PLL (20 MHz -> ~62,5 MHz)
+-- cmp_dmtd_clk_pll : MMCME2_ADV
+-- generic map (
+-- BANDWIDTH => "OPTIMIZED",
+-- CLKOUT4_CASCADE => false,
+-- COMPENSATION => "ZHOLD",
+-- STARTUP_WAIT => false,
+-- DIVCLK_DIVIDE => 1,
+-- CLKFBOUT_MULT_F => 50.000, -- 20 MHz -> 1 GHz
+-- CLKFBOUT_PHASE => 0.000,
+-- CLKFBOUT_USE_FINE_PS => false,
+-- CLKOUT0_DIVIDE_F => 16.000, -- 1GHz/16 -> 62.5 MHz
+-- CLKOUT0_PHASE => 0.000,
+-- CLKOUT0_DUTY_CYCLE => 0.500,
+-- CLKOUT0_USE_FINE_PS => false,
+-- CLKOUT1_DIVIDE => 16, -- 1GHz/16 -> 62.5 MHz
+-- CLKOUT1_PHASE => 0.000,
+-- CLKOUT1_DUTY_CYCLE => 0.500,
+-- CLKOUT1_USE_FINE_PS => false,
+-- CLKIN1_PERIOD => 50.000, -- 50ns for 20 MHz
+-- REF_JITTER1 => 0.010)
+-- port map (
+-- -- Output clocks
+-- CLKFBOUT => clk_dmtd_fb,
+-- CLKOUT0 => clk_dmtd,
+-- -- Input clock control
+-- CLKFBIN => clk_dmtd_fb,
+-- CLKIN1 => clk_20m_vcxo_buf,
+-- CLKIN2 => '0',
+-- -- Tied to always select the primary input clock
+-- CLKINSEL => '1',
+-- -- Ports for dynamic reconfiguration
+-- DADDR => (others => '0'),
+-- DCLK => '0',
+-- DEN => '0',
+-- DI => (others => '0'),
+-- DO => open,
+-- DRDY => open,
+-- DWE => '0',
+-- -- Ports for dynamic phase shift
+-- PSCLK => '0',
+-- PSEN => '0',
+-- PSINCDEC => '0',
+-- PSDONE => open,
+-- -- Other control and status signals
+-- LOCKED => pll_dmtd_locked,
+-- CLKINSTOPPED => open,
+-- CLKFBSTOPPED => open,
+-- PWRDWN => '0',
+-- RST => pll_arst);
+--
+-- -- DMTD PLL input clock buffer
+-- cmp_clk_dmtd_buf_i : BUFG
+-- port map (
+-- O => clk_20m_vcxo_buf,
+-- I => clk_20m_vcxo_i);
+--
+
+ -- DMTD Div2 (124.9920 MHz -> 62,496 MHz)
+ process(clk_125m_dmtd_i)
+ begin
+ if rising_edge(clk_125m_dmtd_i) then
+ clk_dmtd <= not clk_dmtd;
+ end if;
+ end process;
+
+ -- DMTD PLL output clock buffer
+ cmp_clk_dmtd_buf_o : BUFG
+ port map (
+ O => clk_62m5_dmtd_o,
+ I => clk_dmtd);
+
+ -- External 10MHz reference PLL for Artix7
+ gen_artix7_ext_ref_pll : if (g_with_external_clock_input = TRUE) generate
+
+ signal clk_ext_fbi : std_logic;
+ signal clk_ext_fbo : std_logic;
+ signal clk_ext_buf : std_logic;
+ signal clk_ext_mul : std_logic;
+ signal pll_ext_rst : std_logic;
+
+ begin
+ mmcm_adv_inst : MMCME2_ADV
+ generic map (
+ BANDWIDTH => "OPTIMIZED",
+ CLKOUT4_CASCADE => FALSE,
+ COMPENSATION => "ZHOLD",
+ STARTUP_WAIT => FALSE,
+ DIVCLK_DIVIDE => 1,
+ CLKFBOUT_MULT_F => 62.500,
+ CLKFBOUT_PHASE => 0.000,
+ CLKFBOUT_USE_FINE_PS => FALSE,
+ CLKOUT0_DIVIDE_F => 10.000,
+ CLKOUT0_PHASE => 0.000,
+ CLKOUT0_DUTY_CYCLE => 0.500,
+ CLKOUT0_USE_FINE_PS => FALSE,
+ CLKIN1_PERIOD => 100.000,
+ REF_JITTER1 => 0.005)
+ port map (
+ -- Output clocks
+ CLKFBOUT => clk_ext_fbo,
+ CLKOUT0 => clk_ext_mul,
+ -- Input clock control
+ CLKFBIN => clk_ext_fbi,
+ CLKIN1 => clk_ext_buf,
+ CLKIN2 => '0',
+ -- Tied to always select the primary input clock
+ CLKINSEL => '1',
+ -- Ports for dynamic reconfiguration
+ DADDR => (others => '0'),
+ DCLK => '0',
+ DEN => '0',
+ DI => (others => '0'),
+ DO => open,
+ DRDY => open,
+ DWE => '0',
+ -- Ports for dynamic phase shift
+ PSCLK => '0',
+ PSEN => '0',
+ PSINCDEC => '0',
+ PSDONE => open, -- Other control and status signals
+ LOCKED => ext_ref_mul_locked_o,
+ CLKINSTOPPED => ext_ref_mul_stopped_o,
+ CLKFBSTOPPED => open,
+ PWRDWN => '0',
+ RST => pll_ext_rst);
+
+ -- External reference input buffer
+ cmp_clk_ext_buf_i : BUFG
+ port map (
+ O => clk_ext_buf,
+ I => clk_10m_ext_i);
+
+ clk_10m_ext_o <= clk_ext_buf;
+
+ -- External reference feedback buffer
+ cmp_clk_ext_buf_fb : BUFG
+ port map (
+ O => clk_ext_fbi,
+ I => clk_ext_fbo);
+
+ -- External reference output buffer
+ cmp_clk_ext_buf_o : BUFG
+ port map (
+ O => ext_ref_mul_o,
+ I => clk_ext_mul);
+
+ cmp_extend_ext_reset : gc_extend_pulse
+ generic map (
+ g_width => 1000)
+ port map (
+ clk_i => clk_sys_out,
+ rst_n_i => pll_sys_locked,
+ pulse_i => ext_ref_rst_i,
+ extended_o => pll_ext_rst);
+
+ end generate gen_artix7_ext_ref_pll;
+
+ end generate gen_artix7_default_plls;
+ ---------------------------------------------------------------------------
+
+ gen_no_ext_ref_pll : if (g_with_external_clock_input = FALSE) generate
+ clk_10m_ext_o <= '0';
+ ext_ref_mul_o <= '0';
+ ext_ref_mul_locked_o <= '1';
+ ext_ref_mul_stopped_o <= '1';
+ end generate gen_no_ext_ref_pll;
+
+ end generate gen_default_plls;
+
+ -- If external PLLs are used, just copy clock inputs to outputs
+ gen_custom_plls : if (g_use_default_plls = FALSE) generate
+
+ clk_62m5_sys_o <= clk_62m5_sys_i;
+ clk_62m5_dmtd_o <= clk_62m5_dmtd_i;
+ clk_125m_ref_o <= clk_125m_ref_i;
+
+ pll_locked_o <= clk_sys_locked_i and clk_dmtd_locked_i;
+ clk_ref_locked_o <= clk_ref_locked_i;
+
+ ext_ref_mul_o <= clk_125m_ext_i;
+ ext_ref_mul_locked_o <= clk_ext_locked_i;
+ ext_ref_mul_stopped_o <= clk_ext_stopped_i;
+
+ end generate gen_custom_plls;
+
+ -- always pass ext reference reset input to output, even when not used
+ clk_ext_rst_o <= ext_ref_rst_i;
+
+ -----------------------------------------------------------------------------
+ -- Transceiver PHY
+ -----------------------------------------------------------------------------
+
+ gen_phy_spartan6 : if(g_fpga_family = "spartan6") generate
+
+ signal clk_125m_gtp_buf : std_logic;
+
+ signal ch0_phy8_out, ch1_phy8_out : t_phy_8bits_to_wrc;
+
+ signal ch0_sfp_txn, ch0_sfp_txp : std_logic;
+ signal ch1_sfp_txn, ch1_sfp_txp : std_logic;
+ signal ch0_sfp_rxn, ch0_sfp_rxp : std_logic;
+ signal ch1_sfp_rxn, ch1_sfp_rxp : std_logic;
+
+ begin
+
+ cmp_ibufgds_gtp : IBUFGDS
+ generic map (
+ DIFF_TERM => TRUE,
+ IBUF_LOW_PWR => TRUE,
+ IOSTANDARD => "DEFAULT")
+ port map (
+ O => clk_125m_gtp_buf,
+ I => clk_125m_gtp_p_i,
+ IB => clk_125m_gtp_n_i);
+
+
+ cmp_gtp : wr_gtp_phy_spartan6
+ generic map (
+ g_simulation => g_simulation,
+ g_enable_ch0 => g_gtp_enable_ch0,
+ g_enable_ch1 => g_gtp_enable_ch1)
+ port map (
+ gtp_clk_i => clk_125m_gtp_buf,
+ ch0_ref_clk_i => clk_125m_pllref_buf,
+ ch0_tx_data_i => phy8_i.tx_data,
+ ch0_tx_k_i => phy8_i.tx_k(0),
+ ch0_tx_disparity_o => ch0_phy8_out.tx_disparity,
+ ch0_tx_enc_err_o => ch0_phy8_out.tx_enc_err,
+ ch0_rx_data_o => ch0_phy8_out.rx_data,
+ ch0_rx_rbclk_o => ch0_phy8_out.rx_clk,
+ ch0_rx_k_o => ch0_phy8_out.rx_k(0),
+ ch0_rx_enc_err_o => ch0_phy8_out.rx_enc_err,
+ ch0_rx_bitslide_o => ch0_phy8_out.rx_bitslide,
+ ch0_rst_i => phy8_i.rst,
+ ch0_loopen_i => phy8_i.loopen,
+ ch0_loopen_vec_i => phy8_i.loopen_vec,
+ ch0_tx_prbs_sel_i => phy8_i.tx_prbs_sel,
+ ch0_rdy_o => ch0_phy8_out.rdy,
+ ch1_ref_clk_i => clk_125m_pllref_buf,
+ ch1_tx_data_i => phy8_i.tx_data,
+ ch1_tx_k_i => phy8_i.tx_k(0),
+ ch1_tx_disparity_o => ch1_phy8_out.tx_disparity,
+ ch1_tx_enc_err_o => ch1_phy8_out.tx_enc_err,
+ ch1_rx_data_o => ch1_phy8_out.rx_data,
+ ch1_rx_rbclk_o => ch1_phy8_out.rx_clk,
+ ch1_rx_k_o => ch1_phy8_out.rx_k(0),
+ ch1_rx_enc_err_o => ch1_phy8_out.rx_enc_err,
+ ch1_rx_bitslide_o => ch1_phy8_out.rx_bitslide,
+ ch1_rst_i => phy8_i.rst,
+ ch1_loopen_i => phy8_i.loopen,
+ ch1_loopen_vec_i => phy8_i.loopen_vec,
+ ch1_tx_prbs_sel_i => phy8_i.tx_prbs_sel,
+ ch1_rdy_o => ch1_phy8_out.rdy,
+ pad_txn0_o => ch0_sfp_txn,
+ pad_txp0_o => ch0_sfp_txp,
+ pad_rxn0_i => ch0_sfp_rxn,
+ pad_rxp0_i => ch0_sfp_rxp,
+ pad_txn1_o => ch1_sfp_txn,
+ pad_txp1_o => ch1_sfp_txp,
+ pad_rxn1_i => ch1_sfp_rxn,
+ pad_rxp1_i => ch1_sfp_rxp
+ );
+
+ gen_gtp_ch0 : if (g_gtp_enable_ch0 = 1) generate
+ ch0_phy8_out.ref_clk <= clk_125m_pllref_buf;
+ ch0_phy8_out.sfp_tx_fault <= sfp_tx_fault_i;
+ ch0_phy8_out.sfp_los <= sfp_los_i;
+ phy8_o <= ch0_phy8_out;
+ sfp_txp_o <= ch0_sfp_txp;
+ sfp_txn_o <= ch0_sfp_txn;
+ ch0_sfp_rxp <= sfp_rxp_i;
+ ch0_sfp_rxn <= sfp_rxn_i;
+ end generate gen_gtp_ch0;
+
+ gen_gtp_ch1 : if (g_gtp_enable_ch1 = 1) generate
+ ch1_phy8_out.ref_clk <= clk_125m_pllref_buf;
+ ch1_phy8_out.sfp_tx_fault <= sfp_tx_fault_i;
+ ch1_phy8_out.sfp_los <= sfp_los_i;
+ phy8_o <= ch1_phy8_out;
+ sfp_txp_o <= ch1_sfp_txp;
+ sfp_txn_o <= ch1_sfp_txn;
+ ch1_sfp_rxp <= sfp_rxp_i;
+ ch1_sfp_rxn <= sfp_rxn_i;
+ end generate gen_gtp_ch1;
+
+ sfp_tx_disable_o <= phy8_i.sfp_tx_disable;
+
+ phy16_o <= c_dummy_phy16_to_wrc;
+
+ end generate gen_phy_spartan6;
+
+ ---------------------------------------------------------------------------
+ -- Kintex7 PHY
+ ---------------------------------------------------------------------------
+
+ gen_phy_kintex7 : if (g_fpga_family = "kintex7") generate
+
+ signal clk_ref : std_logic;
+ signal clk_125m_gtx_buf : std_logic;
+ signal clk_ref_locked : std_logic;
+
+ begin
+
+ gen_ibufgds: if (g_use_ibufgds=true) generate
+ begin
+ -- Dedicated GTX clock.
+ cmp_gtp_dedicated_clk : IBUFDS_GTE2
+ generic map(
+ CLKCM_CFG => true,
+ CLKRCV_TRST => true,
+ CLKSWING_CFG => "11")
+ port map (
+ O => clk_125m_gtx_buf,
+ ODIV2 => open,
+ CEB => '0',
+ I => clk_125m_gtp_p_i,
+ IB => clk_125m_gtp_n_i);
+ end generate gen_ibufgds;
+
+ gen_no_ibufgds: if (g_use_ibufgds=false) generate
+ begin
+ clk_125m_gtx_buf <= clk_125m_gtp_p_i;
+ end generate gen_no_ibufgds;
+
+
+ -- System PLL input clock buffer
+ cmp_clk_sys_buf_i : BUFG
+ port map (
+ I => clk_125m_gtx_buf,
+ O => clk_125m_pllref_buf);
+
+ cmp_gtx: wr_gtx_phy_family7
+ generic map(
+ g_simulation => g_simulation)
+ port map(
+ clk_gtx_i => clk_125m_gtx_buf,
+ tx_out_clk_o => clk_ref,
+ tx_data_i => phy16_i.tx_data,
+ tx_k_i => phy16_i.tx_k,
+ tx_disparity_o => phy16_o.tx_disparity,
+ tx_enc_err_o => phy16_o.tx_enc_err,
+ rx_rbclk_o => phy16_o.rx_clk,
+ rx_data_o => phy16_o.rx_data,
+ rx_k_o => phy16_o.rx_k,
+ rx_enc_err_o => phy16_o.rx_enc_err,
+ rx_bitslide_o => phy16_o.rx_bitslide,
+ rst_i => phy16_i.rst,
+ loopen_i => phy16_i.loopen_vec,
+ tx_prbs_sel_i => phy16_i.tx_prbs_sel,
+ rdy_o => phy16_o.rdy,
+
+ pad_txn_o => sfp_txn_o,
+ pad_txp_o => sfp_txp_o,
+ pad_rxn_i => sfp_rxn_i,
+ pad_rxp_i => sfp_rxp_i,
+
+ tx_locked_o => clk_ref_locked);
+
+ clk_125m_ref_o <= clk_ref;
+ clk_ref_locked_o <= clk_ref_locked;
+ phy16_o.ref_clk <= clk_ref;
+ phy16_o.sfp_tx_fault <= sfp_tx_fault_i;
+ phy16_o.sfp_los <= sfp_los_i;
+ sfp_tx_disable_o <= phy16_i.sfp_tx_disable;
+
+ phy8_o <= c_dummy_phy8_to_wrc;
+
+ end generate gen_phy_kintex7;
+
+ ---------------------------------------------------------------------------
+ -- Artix7 PHY
+ ---------------------------------------------------------------------------
+
+ gen_phy_artix7 : if (g_fpga_family = "artix7") generate
+
+ signal clk_ref : std_logic;
+ signal clk_125m_gtp_buf : std_logic;
+ signal clk_ref_locked : std_logic;
+
+ begin
+
+ -- Dedicated GTP clock.
+ cmp_gtp_dedicated_clk : IBUFDS_GTE2
+ generic map(
+ CLKCM_CFG => true,
+ CLKRCV_TRST => true,
+ CLKSWING_CFG => "11")
+ port map (
+ O => clk_125m_gtp_buf,
+ ODIV2 => open,
+ CEB => '0',
+ I => clk_125m_gtp_p_i,
+ IB => clk_125m_gtp_n_i);
+
+ -- System PLL input clock buffer
+ cmp_clk_sys_buf_i : BUFG
+ port map (
+ I => clk_125m_gtp_buf,
+ O => clk_125m_pllref_buf);
+
+ cmp_gtp: wr_gtp_phy_family7
+ generic map(
+ g_simulation => g_simulation)
+ port map(
+ clk_gtp_i => clk_125m_gtp_buf,
+ tx_out_clk_o => clk_ref,
+ tx_data_i => phy16_i.tx_data,
+ tx_k_i => phy16_i.tx_k,
+ tx_disparity_o => phy16_o.tx_disparity,
+ tx_enc_err_o => phy16_o.tx_enc_err,
+ rx_rbclk_o => phy16_o.rx_clk,
+ rx_data_o => phy16_o.rx_data,
+ rx_k_o => phy16_o.rx_k,
+ rx_enc_err_o => phy16_o.rx_enc_err,
+ rx_bitslide_o => phy16_o.rx_bitslide,
+ rst_i => phy16_i.rst,
+ loopen_i => phy16_i.loopen_vec,
+ tx_prbs_sel_i => phy16_i.tx_prbs_sel,
+ rdy_o => phy16_o.rdy,
+
+ pad_txn_o => sfp_txn_o,
+ pad_txp_o => sfp_txp_o,
+ pad_rxn_i => sfp_rxn_i,
+ pad_rxp_i => sfp_rxp_i,
+
+ tx_locked_o => clk_ref_locked);
+
+ clk_125m_ref_o <= clk_ref;
+ clk_ref_locked_o <= clk_ref_locked;
+ phy16_o.ref_clk <= clk_ref;
+ phy16_o.sfp_tx_fault <= sfp_tx_fault_i;
+ phy16_o.sfp_los <= sfp_los_i;
+ sfp_tx_disable_o <= phy16_i.sfp_tx_disable;
+
+ phy8_o <= c_dummy_phy8_to_wrc;
+
+ end generate gen_phy_artix7;
+
+ ---------------------------------------------------------------------------
+
+end architecture rtl;
diff --git a/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt
new file mode 100644
index 000000000..52c657abc
--- /dev/null
+++ b/fpga/usrp3/lib/white_rabbit/wr_cores_v4_2/source.txt
@@ -0,0 +1,2 @@
+This directory is a subset of the following tag:
+https://www.ohwr.org/projects/wr-cores/repository?utf8=%E2%9C%93&rev=wrpc-v4.2&branch=master&tag=wrpc-v4.2